709 lines
32 KiB
PHP
709 lines
32 KiB
PHP
<?php
|
|
|
|
namespace App\Services\TransportePaciente;
|
|
|
|
use App\Enums\TransportePaciente\Status as EnumAgendaStatus;
|
|
use App\Enums\TransportePaciente\Status as EnumTransporteStatus;
|
|
use App\Enums\TransportePaciente\ViagemStatus as EnumStatus;
|
|
use App\Models\Intranet\Cliente;
|
|
use App\Models\TransportePaciente\Agendar\Agendar;
|
|
use App\Models\TransportePaciente\Jornada\Jornada;
|
|
use App\Models\TransportePaciente\Parametrizacao\Parametrizacao;
|
|
use App\Models\TransportePaciente\Viagem;
|
|
use App\Models\TransportePaciente\ViagemStatus;
|
|
use App\Services\Service;
|
|
use App\Services\TransportePaciente\Agendar\HistoricoService;
|
|
use App\Utils\MaskUtil;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class ViagemService extends Service
|
|
{
|
|
public static function index()
|
|
{
|
|
|
|
return [
|
|
'form' => self::getFormData(),
|
|
'model' => self::getModelData(),
|
|
'parametrizacao' => Parametrizacao::first()->agendar_transporte_jornada ?? null,
|
|
];
|
|
}
|
|
|
|
public static function store($request)
|
|
{
|
|
self::validate();
|
|
|
|
$data = $request->all();
|
|
|
|
if (!is_null(request()->diaria)) {
|
|
$data['diaria'] = str_replace('.', '', $data['diaria']);
|
|
$data['diaria'] = str_replace(',', '.', $data['diaria']);
|
|
}
|
|
|
|
$viagem = Viagem::where('veiculo_id', $data['veiculo_id'])
|
|
->when($data['jornada_id'] ?? null, function($query, $data) {
|
|
$query->where('jornada_id', $data);
|
|
})
|
|
->when($data['destino_id'] ?? null, function($query, $data) {
|
|
$query->where('destino_id', $data);
|
|
})
|
|
->where('data', request()->data)
|
|
->first();
|
|
|
|
if ($viagem) {
|
|
if(is_null($viagem->protocolo)) {
|
|
$data['protocolo'] = Viagem::max('protocolo') + 1;
|
|
}
|
|
|
|
$currentLotacao = self::getCurrentLotacao();
|
|
|
|
$viagem->update($data);
|
|
|
|
$agendamentos = self::getPacientes();
|
|
|
|
$agendamentos->each(function ($agendamento) use ($viagem, $currentLotacao) {
|
|
|
|
$agendamento->lotacao_id = $currentLotacao->infraestrutura->unidade->id;
|
|
$agendamento->ocupacao_id = $currentLotacao->ocupacao_id;
|
|
$agendamento->usuario_id = $currentLotacao->usuario_id;
|
|
|
|
$agendar = Agendar::where('id', $agendamento->id);
|
|
|
|
$agendar->update([
|
|
'viagem_id' => $viagem->id,
|
|
'lotacao_id' => $currentLotacao->infraestrutura->unidade->id,
|
|
'ocupacao_id' => $currentLotacao->ocupacao_id,
|
|
'usuario_id' => $currentLotacao->usuario_id,
|
|
'procedimento_id' => $agendamento->procedimento_id,
|
|
]);
|
|
|
|
$transporte = $agendar->first();
|
|
HistoricoService::create($transporte, EnumTransporteStatus::MODIFICADO, $transporte->updated_lotacao_id);
|
|
});
|
|
|
|
return $viagem;
|
|
} else {
|
|
|
|
$data = $request->all();
|
|
|
|
$data['protocolo'] = Viagem::max('protocolo') + 1;
|
|
|
|
if (!is_null(request()->diaria)) {
|
|
$data['diaria'] = str_replace('.', '', $data['diaria']);
|
|
$data['diaria'] = str_replace(',', '.', $data['diaria']);
|
|
}
|
|
|
|
$currentLotacao = self::getCurrentLotacao();
|
|
$viagem = Viagem::create($data)->fresh();
|
|
$agendamentos = self::getPacientes();
|
|
|
|
$agendamentos->each(function ($agendamento) use ($viagem, $currentLotacao) {
|
|
|
|
$agendamento->lotacao_id = $currentLotacao->infraestrutura->unidade->id;
|
|
$agendamento->ocupacao_id = $currentLotacao->ocupacao_id;
|
|
$agendamento->usuario_id = $currentLotacao->usuario_id;
|
|
|
|
$agendar = Agendar::where('id', $agendamento->id);
|
|
$agendar->update([
|
|
'viagem_id' => $viagem->id,
|
|
'lotacao_id' => $currentLotacao->infraestrutura->unidade->id,
|
|
'ocupacao_id' => $currentLotacao->ocupacao_id,
|
|
'usuario_id' => $currentLotacao->usuario_id,
|
|
'procedimento_id' => $agendamento->procedimento_id
|
|
]);
|
|
|
|
$transporte = $agendar->first();
|
|
HistoricoService::create($transporte, EnumTransporteStatus::MODIFICADO, $transporte->updated_lotacao_id);
|
|
});
|
|
|
|
return $viagem;
|
|
}
|
|
}
|
|
|
|
private static function validate()
|
|
{
|
|
$rules = [
|
|
'data' => [
|
|
'date',
|
|
],
|
|
'condutor_id' => [
|
|
'exists:transporte_paciente_condutor,id',
|
|
],
|
|
'veiculo_id' => [
|
|
'exists:transporte_paciente_veiculo,id',
|
|
],
|
|
'status_id' => [
|
|
'required',
|
|
]
|
|
];
|
|
|
|
return request()->validate($rules);
|
|
}
|
|
|
|
private static function getFormData()
|
|
{
|
|
|
|
$parametrizacao = Parametrizacao::first();
|
|
|
|
return [
|
|
"status" => ViagemStatus::find([
|
|
EnumStatus::ABERTO,
|
|
EnumStatus::FINALIZADO,
|
|
]),
|
|
"municipios" => [],
|
|
"bairros" => [],
|
|
"veiculos" => [],
|
|
"jornadas" => [],
|
|
"motoristas" => self::getMotoristas(),
|
|
"agrupar" => [
|
|
[
|
|
"id" => 1,
|
|
"descricao" => "Destino"
|
|
],
|
|
[
|
|
"id" => 2,
|
|
"descricao" => "Município de destino"
|
|
],
|
|
[
|
|
"id" => 3,
|
|
"descricao" => "Ponto"
|
|
]
|
|
],
|
|
"ordenar" => [
|
|
[
|
|
"id" => 1,
|
|
"descricao" => "Destino"
|
|
],
|
|
[
|
|
"id" => 2,
|
|
"descricao" => "Endereço do paciente"
|
|
],
|
|
[
|
|
"id" => 3,
|
|
"descricao" => "Horário da consulta"
|
|
],
|
|
[
|
|
"id" => 4,
|
|
"descricao" => "Horário de saída"
|
|
],
|
|
[
|
|
"id" => 5,
|
|
"descricao" => "Município de Destino"
|
|
],
|
|
[
|
|
"id" => 6,
|
|
"descricao" => "Nome do paciente"
|
|
],
|
|
[
|
|
"id" => 7,
|
|
"descricao" => "Ponto"
|
|
]
|
|
],
|
|
'exibir_observacao_transporte' => $parametrizacao->exibir_observacao_transporte ?? null,
|
|
];
|
|
}
|
|
|
|
private static function getModelData()
|
|
{
|
|
return [
|
|
"status_id" => 1,
|
|
"data" => null,
|
|
"veiculo_id" => null,
|
|
"municipio_id" => null,
|
|
"nome_bairro" => null,
|
|
"jornada_id" => null,
|
|
"horario_saida" => null,
|
|
"diaria" => null,
|
|
"motorista_id" => null,
|
|
"agrupar" => 1,
|
|
"ordenar" => 7,
|
|
];
|
|
}
|
|
|
|
public static function getVeiculos()
|
|
{
|
|
|
|
if(request()->status_id == EnumStatus::FINALIZADO) {
|
|
return DB::table('transporte_paciente_viagem as viagem')
|
|
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'viagem.veiculo_id')
|
|
->select(
|
|
'veiculo.id',
|
|
DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) AS descricao')
|
|
)
|
|
->orderBy('veiculo.numero_placa')
|
|
->groupBy('veiculo.id')
|
|
->where('veiculo.bloqueado', false)
|
|
->where('viagem.data', request()->data)
|
|
->where('viagem.status_id', request()->status_id)
|
|
->get();
|
|
}
|
|
else {
|
|
return DB::table('transporte_paciente_veiculo as veiculo')
|
|
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.veiculo_id', 'veiculo.id')
|
|
->where(DB::raw("DATE_FORMAT(agendar.data_saida, '%Y-%m-%d')"), request()->data)
|
|
->where('veiculo.bloqueado', false)
|
|
->whereIn('agendar.status_id', [EnumStatus::ABERTO, EnumStatus::REAGENDADO, EnumStatus::MODIFICADO ])
|
|
->select(
|
|
'veiculo.id',
|
|
DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) AS descricao')
|
|
)
|
|
->orderBy('veiculo.numero_placa')
|
|
->groupBy('veiculo.id')
|
|
->get();
|
|
}
|
|
}
|
|
|
|
public static function getMunicipios()
|
|
{
|
|
if(request()->status_id == EnumStatus::FINALIZADO) {
|
|
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
|
->select('municipio.id', 'municipio.nome')
|
|
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
|
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.municipio_id')
|
|
->where('agendar.veiculo_id', request()->veiculo_id)
|
|
->where('agendar.data_saida', request()->data)
|
|
->whereIn('agendar.status_id', [EnumAgendaStatus::TRANSPORTADO, EnumAgendaStatus::FALTOU])
|
|
->orderBy('nome')
|
|
->groupBy('municipio.id')
|
|
->get();
|
|
}
|
|
else {
|
|
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
|
->select('municipio.id', 'municipio.nome')
|
|
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
|
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.municipio_id')
|
|
->where('agendar.veiculo_id', request()->veiculo_id)
|
|
->where('agendar.data_saida', request()->data)
|
|
->where('agendar.status_id', EnumAgendaStatus::AGENDADO)
|
|
->orderBy('nome')
|
|
->groupBy('municipio.id')
|
|
->get();
|
|
}
|
|
}
|
|
|
|
public static function getBairros()
|
|
{
|
|
if(request()->status_id == EnumStatus::FINALIZADO) {
|
|
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
|
->select('destino.id', 'destino.nome_bairro as nome', 'destino.municipio_id')
|
|
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
|
->where('agendar.veiculo_id', request()->veiculo_id)
|
|
->where('agendar.data_saida', request()->data)
|
|
->whereIn('agendar.status_id', [EnumAgendaStatus::TRANSPORTADO, EnumAgendaStatus::FALTOU])
|
|
->whereNotNull('destino.nome_bairro')
|
|
->when(request()->municipio_id, function($query) {
|
|
$query->where('destino.municipio_id', request()->municipio_id);
|
|
})
|
|
->orderBy('nome')
|
|
->groupBy('nome')
|
|
->get();
|
|
}
|
|
else {
|
|
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
|
->select('destino.id', 'destino.nome_bairro as nome', 'destino.municipio_id')
|
|
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
|
->where('agendar.veiculo_id', request()->veiculo_id)
|
|
->where('agendar.data_saida', request()->data)
|
|
->where('agendar.status_id', EnumAgendaStatus::AGENDADO)
|
|
->whereNotNull('destino.nome_bairro')
|
|
->when(request()->municipio_id, function($query) {
|
|
$query->where('destino.municipio_id', request()->municipio_id);
|
|
})
|
|
->orderBy('nome')
|
|
->groupBy('nome')
|
|
->get();
|
|
}
|
|
}
|
|
|
|
public static function getJornadas()
|
|
{
|
|
if(request()->status_id == EnumStatus::FINALIZADO) {
|
|
return DB::table('transporte_paciente_viagem as viagem')
|
|
->join('transporte_paciente_jornada as jornada', 'viagem.jornada_id', 'jornada.id')
|
|
->join('transporte_paciente_veiculo as veiculo', 'jornada.veiculo_id', 'veiculo.id')
|
|
->where('viagem.status_id', EnumStatus::FINALIZADO)
|
|
->where('veiculo.id', request()->veiculo_id)
|
|
->where(DB::raw("DATE_FORMAT(jornada.data_inicial, '%Y-%m-%d')"), request()->data)
|
|
->select(
|
|
'jornada.id',
|
|
DB::raw("CONCAT(
|
|
DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'),
|
|
' - ',
|
|
DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i'),
|
|
' - ',
|
|
jornada.id
|
|
) AS descricao"),
|
|
)
|
|
->orderBy('jornada.data_inicial')
|
|
->groupBy('jornada.id')
|
|
->get();
|
|
|
|
} else {
|
|
return DB::table('transporte_paciente_jornada as jornada')
|
|
->join('transporte_paciente_veiculo as veiculo', 'jornada.veiculo_id', 'veiculo.id')
|
|
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.jornada_id', 'jornada.id')
|
|
->whereIn('agendar.status_id', [EnumAgendaStatus::AGENDADO, EnumAgendaStatus::MODIFICADO, EnumAgendaStatus::REAGENDADO])
|
|
->where('agendar.veiculo_id', request()->veiculo_id)
|
|
->where(DB::raw("DATE_FORMAT(agendar.data_saida, '%Y-%m-%d')"), request()->data)
|
|
->select(
|
|
'jornada.id',
|
|
DB::raw("CONCAT(
|
|
DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'),
|
|
' - ',
|
|
DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i'),
|
|
' - ',
|
|
jornada.id
|
|
) AS descricao"),
|
|
)
|
|
->orderBy('jornada.data_inicial')
|
|
->groupBy('jornada.id')
|
|
->get();
|
|
}
|
|
}
|
|
|
|
public static function getMotoristas()
|
|
{
|
|
return DB::table('transporte_paciente_condutor as condutor')
|
|
->select('condutor.id', 'cidadao.nome')
|
|
->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
|
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
|
->orderBy('cidadao.nome')
|
|
->get();
|
|
}
|
|
|
|
public static function search()
|
|
{
|
|
return [
|
|
'pacientes' => self::getPacientes(),
|
|
'viagem' => self::getViagem(),
|
|
'ordenacao' => request()->ordenar,
|
|
'total' => array_reduce(self::getPacientes()->toArray(), function($carry, $item) {
|
|
if($item->acompanhante != null) {
|
|
$carry += $item->acompanhante;
|
|
}
|
|
return $carry + 1;
|
|
}, 0)
|
|
];
|
|
}
|
|
|
|
private static function getPacientes()
|
|
{
|
|
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
|
->leftJoin('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
|
->leftJoin('transporte_paciente_ponto as ponto', 'agendar.ponto_id', 'ponto.id')
|
|
->leftJoin('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id')
|
|
->leftJoin('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id')
|
|
->leftJoin('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
|
->leftJoin('cadastro_cidadao_telefone as telefone', 'cidadao.id', 'telefone.cidadao_id')
|
|
->leftJoin('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
|
->leftJoin('cadastro_domicilio as domicilio', 'cidadao.domicilio_id', 'domicilio.id')
|
|
->leftJoin('cadastro_endereco as endereco', 'domicilio.endereco_id', 'endereco.id')
|
|
->leftJoin('cadastro_logradouro as logradouro', 'endereco.logradouro_id', 'logradouro.id')
|
|
->leftJoin('cadastro_logradouro_tipo as tipo_logradouro', 'logradouro.tipo_id', 'tipo_logradouro.id')
|
|
->leftJoin('cadastro_bairro as bairro', 'logradouro.bairro_id', 'bairro.id')
|
|
->leftJoin('cadastro_logradouro as logradouro_referencia', 'ponto.logradouro_id', 'logradouro_referencia.id')
|
|
->leftJoin('cadastro_logradouro_tipo as tipo_logradouro_referencia', 'logradouro_referencia.tipo_id', 'tipo_logradouro_referencia.id')
|
|
->leftJoin('cadastro_bairro as bairro_referencia', 'logradouro_referencia.bairro_id', 'bairro_referencia.id')
|
|
->leftJoin('transporte_paciente_acompanhante', 'transporte_paciente_acompanhante.id', 'agendar.acompanhante_1_id')
|
|
->leftJoin('cadastro_paciente as paciente_acompanhante_1', 'transporte_paciente_acompanhante.usuario_id', 'paciente_acompanhante_1.id')
|
|
->leftJoin('cadastro_cidadao as cidadao_acompanhante_1', 'paciente_acompanhante_1.cidadao_id', 'cidadao_acompanhante_1.id')
|
|
->leftJoin('cadastro_cidadao_telefone as telefone_acompanhante_1', 'cidadao_acompanhante_1.id', 'telefone_acompanhante_1.cidadao_id')
|
|
->leftJoin('transporte_paciente_acompanhante AS acompanhante_dois', 'acompanhante_dois.id', 'agendar.acompanhante_2_id')
|
|
->leftJoin('cadastro_paciente as paciente_acompanhante_2', 'acompanhante_dois.usuario_id', 'paciente_acompanhante_2.id')
|
|
->leftJoin('cadastro_cidadao as cidadao_acompanhante_2', 'paciente_acompanhante_2.cidadao_id', 'cidadao_acompanhante_2.id')
|
|
->leftJoin('cadastro_cidadao_telefone as telefone_acompanhante_2', 'cidadao_acompanhante_2.id', 'telefone_acompanhante_2.cidadao_id')
|
|
->leftJoin('sigtap.procedimento', function ($join) {
|
|
|
|
$join->on('sigtap.procedimento.codigo', 'motivo.codigo_procedimento')
|
|
->where('sigtap.procedimento.competencia_id', '=', function ($query) {
|
|
|
|
$query->select('sigtap.competencia.id')
|
|
->from('sigtap.competencia')
|
|
->orderByDesc('sigtap.competencia.valor')
|
|
->limit(1);
|
|
});
|
|
})
|
|
->leftJoin('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id')
|
|
->leftJoin('transporte_paciente_status as status', 'agendar.status_id', 'status.id')
|
|
->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id')
|
|
->leftJoin('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
|
->leftJoin('cadastro_cidadao as motorista', 'motorista.id', 'usuario.cidadao_id')
|
|
->select(
|
|
'agendar.id',
|
|
'agendar.viagem_id',
|
|
DB::raw("CONCAT_WS(
|
|
', ',
|
|
NULLIF(destino.descricao_destino, ''),
|
|
IF(destino.nome_logradouro != '', CONCAT('Logradouro: ', destino.nome_logradouro), NULL),
|
|
IF(destino.numero_logradouro != '', CONCAT('Nº: ', destino.numero_logradouro), NULL),
|
|
IF(destino.nome_complemento != '', CONCAT('Complemento: ', destino.nome_complemento), NULL),
|
|
IF(destino.nome_bairro != '', CONCAT('Bairro: ', destino.nome_bairro), NULL),
|
|
IF(destino.numero_cep != '', CONCAT('CEP: ', destino.numero_cep), NULL),
|
|
IF(destino.observacao != '', CONCAT('Observação: ', destino.observacao), NULL)
|
|
) as destino"),
|
|
'municipio.nome as municipio',
|
|
'cidadao.nome as nome',
|
|
'cidadao.data_nascimento as cidadao_data_nascimento',
|
|
DB::raw('TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) AS idade'),
|
|
DB::raw("CONCAT(logradouro.nome,' - ',IF(endereco.numero, endereco.numero, 'Sem número')) as endereco"),
|
|
'bairro.nome as bairro',
|
|
'bairro_referencia.nome as bairro_referencia',
|
|
DB::raw('GROUP_CONCAT(DISTINCT telefone.numero) as telefones'),
|
|
'motivo.descricao as motivo',
|
|
'motivo.codigo_procedimento as codigo_procedimento',
|
|
'agendar.horario_saida',
|
|
'agendar.horario as horario_consulta',
|
|
'agendar.acompanhante',
|
|
'agendar.observacao',
|
|
'agendar.consulta_observacao',
|
|
DB::raw("
|
|
CASE
|
|
WHEN ponto.descricao IS NULL THEN CONCAT('CASA DO PACIENTE - ', tipo_logradouro.descricao, ' ', logradouro.nome, ' ', IF(endereco.numero, endereco.numero, 'S/N'))
|
|
ELSE ponto.descricao
|
|
END as ponto
|
|
"),
|
|
'endereco.complemento',
|
|
'agendar.lotacao_id',
|
|
'agendar.ocupacao_id',
|
|
'agendar.usuario_id',
|
|
'sigtap.procedimento.nome as procedimento_nome',
|
|
'sigtap.procedimento.id as procedimento_id',
|
|
'motorista.nome as motorista',
|
|
'status.descricao as status',
|
|
'transporte_paciente_acompanhante.id as acompanhante_1',
|
|
'cidadao_acompanhante_1.nome as acompanhante_nome_1',
|
|
'transporte_paciente_acompanhante.nome as nome_1',
|
|
'cidadao_acompanhante_1.cns as acompanhante_cns_1',
|
|
DB::raw('GROUP_CONCAT(DISTINCT telefone_acompanhante_1.numero) as telefones_acompanhante_1'),
|
|
'acompanhante_dois.id as acompanhante_2',
|
|
'cidadao_acompanhante_2.nome as acompanhante_nome_2',
|
|
'acompanhante_dois.nome as nome_2',
|
|
'cidadao_acompanhante_2.cns as acompanhante_cns_2',
|
|
DB::raw('GROUP_CONCAT(DISTINCT telefone_acompanhante_2.numero) as telefones_acompanhante_2'),
|
|
'destino.distancia',
|
|
'agendar.consulta_observacao',
|
|
)
|
|
->where('agendar.data_saida', request()->data)
|
|
->where('agendar.veiculo_id', request()->veiculo_id)
|
|
->when(request()->status_id == EnumStatus::ABERTO, function ($query) {
|
|
$query->whereIn('agendar.status_id', [
|
|
EnumAgendaStatus::AGENDADO,
|
|
EnumAgendaStatus::MODIFICADO,
|
|
EnumAgendaStatus::REAGENDADO
|
|
]);
|
|
})
|
|
->when(request()->status_id == EnumStatus::FINALIZADO, function ($query) {
|
|
$query->whereIn('agendar.status_id', [
|
|
EnumAgendaStatus::TRANSPORTADO,
|
|
EnumAgendaStatus::FALTOU,
|
|
EnumAgendaStatus::MODIFICADO
|
|
]);
|
|
})
|
|
->when(request()->municipio_id, function ($query) {
|
|
$query->where('agendar.municipio_id', request()->municipio_id);
|
|
})
|
|
->when(request()->jornada_id, function ($query) {
|
|
$query->where('agendar.jornada_id', request()->jornada_id);
|
|
})
|
|
->when(request()->nome_bairro, function($query) {
|
|
$query->where('destino.nome_bairro', '=', request()->nome_bairro);
|
|
})
|
|
->when(request()->veiculo_id, function ($query) {
|
|
$query->where('agendar.veiculo_id', request()->veiculo_id);
|
|
})
|
|
->whereNull('telefone.deleted_at')
|
|
->groupBy('agendar.id')
|
|
->orderBy('agendar.horario_saida', 'asc')
|
|
->orderBy('horario_consulta','asc')
|
|
->get();
|
|
}
|
|
|
|
private static function getViagem()
|
|
{
|
|
return DB::table('transporte_paciente_viagem as viagem')
|
|
->select(
|
|
'viagem.protocolo',
|
|
'viagem.diaria',
|
|
'viagem.condutor_id',
|
|
'cidadao.nome',
|
|
'viagem.horario_saida_temp as horarioSaida'
|
|
)
|
|
->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id')
|
|
->leftJoin('cadastro_usuario as usuario', 'usuario.id', 'condutor.id')
|
|
->leftJoin('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
|
->leftJoin('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
|
->leftJoin('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
|
->where('viagem.veiculo_id', request()->veiculo_id)
|
|
->where('viagem.data', request()->data)
|
|
->when(request()->jornada_id, function ($query) {
|
|
$query->where('viagem.jornada_id', request()->jornada_id);
|
|
})
|
|
->when(request()->nome_bairro, function($query) {
|
|
$query->where('destino.nome_bairro', request()->nome_bairro);
|
|
})
|
|
->where('viagem.status_id', request()->status_id)
|
|
->first();
|
|
}
|
|
|
|
public static function print()
|
|
{
|
|
$pacientes = self::getPacientes();
|
|
|
|
$pacientes->each(function ($paciente) {
|
|
$telefones = explode(',', $paciente->telefones);
|
|
$telefonesComMascara = [];
|
|
foreach($telefones as $telefone) {
|
|
array_push($telefonesComMascara, MaskUtil::getPhoneMasked($telefone));
|
|
}
|
|
$paciente->telefones = implode(', ', $telefonesComMascara);
|
|
|
|
$telefonesAcompanhante = explode(',', $paciente->telefones_acompanhante_1);
|
|
$telefonesAcompanhanteComMascara = [];
|
|
foreach($telefonesAcompanhante as $telefone) {
|
|
array_push($telefonesAcompanhanteComMascara, MaskUtil::getPhoneMasked($telefone));
|
|
}
|
|
$paciente->telefones_acompanhante_1 = implode(', ', $telefonesAcompanhanteComMascara);
|
|
|
|
$telefonesAcompanhante = explode(',', $paciente->telefones_acompanhante_2);
|
|
$telefonesAcompanhanteComMascara = [];
|
|
foreach($telefonesAcompanhante as $telefone) {
|
|
array_push($telefonesAcompanhanteComMascara, MaskUtil::getPhoneMasked($telefone));
|
|
}
|
|
$paciente->telefones_acompanhante_2 = implode(', ', $telefonesAcompanhanteComMascara);
|
|
|
|
$paciente->cidadao_idade_anos = $paciente->cidadao_data_nascimento
|
|
? (int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%y')
|
|
: 0;
|
|
|
|
$paciente->cidadao_idade_meses = $paciente->cidadao_data_nascimento ?
|
|
(int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%m')
|
|
: 0;
|
|
|
|
$paciente->cidadao_idade_dias = $paciente->cidadao_data_nascimento
|
|
? (int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%d')
|
|
: 0;
|
|
|
|
$paciente->cidadao_idade_meses = $paciente->cidadao_data_nascimento
|
|
? str_pad($paciente->cidadao_idade_meses, 2, '0', STR_PAD_LEFT)
|
|
: null;
|
|
|
|
$paciente->cidadao_idade_dias = $paciente->cidadao_data_nascimento
|
|
? str_pad($paciente->cidadao_idade_dias, 2, '0', STR_PAD_LEFT)
|
|
: null;
|
|
|
|
$paciente->acompanhante_cns_1 = $paciente->acompanhante_cns_1 ? MaskUtil::getCnsMasked($paciente->acompanhante_cns_1 ) : '';
|
|
$paciente->acompanhante_cns_2 = $paciente->acompanhante_cns_2 ? MaskUtil::getCnsMasked($paciente->acompanhante_cns_2 ) : '';
|
|
|
|
});
|
|
$total = array_reduce($pacientes->toArray(), function($carry, $item) {
|
|
if($item->acompanhante != null) {
|
|
$carry += $item->acompanhante;
|
|
}
|
|
return $carry + 1;
|
|
}, 0);
|
|
|
|
$viagem = DB::table('transporte_paciente_viagem as viagem')
|
|
->select(
|
|
'viagem.protocolo',
|
|
'viagem.status_id as status',
|
|
DB::raw("DATE_FORMAT(viagem.data, '%d/%m/%Y') as data"),
|
|
'viagem.horario_saida_temp as horario_saida',
|
|
DB::raw('CONCAT(veiculo.descricao_modelo, " - ", veiculo.numero_placa) AS veiculo'),
|
|
'motorista.nome as motorista',
|
|
'condutor.matricula as matricula',
|
|
'viagem.diaria',
|
|
'viagem.horario_saida_temp',
|
|
'viagem.horario_chegada',
|
|
'viagem.horario_chegada_destino',
|
|
'viagem.horario_saida_destino',
|
|
'viagem.km_saida',
|
|
'viagem.km_chegada',
|
|
DB::raw("CONCAT(
|
|
DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'),
|
|
' - ',
|
|
DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i')) AS jornada"),
|
|
'viagem.refeicao',
|
|
'viagem.pernoite',
|
|
'viagem.combustivel',
|
|
'viagem.pedagio',
|
|
'viagem.outras_despesas',
|
|
'viagem.total_despesa',
|
|
DB::raw("
|
|
CASE WHEN (
|
|
SELECT agendar_transporte_jornada
|
|
FROM transporte_paciente_parametrizacao) = 1
|
|
THEN DATE_FORMAT(jornada.data_inicial, '%H:%i')
|
|
END as jornada_horario_inicial
|
|
")
|
|
)
|
|
->leftJoin('transporte_paciente_veiculo as veiculo', 'viagem.veiculo_id', 'veiculo.id')
|
|
->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id')
|
|
->leftJoin('transporte_paciente_jornada as jornada', 'viagem.jornada_id', 'jornada.id')
|
|
->leftJoin('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
|
->leftJoin('cadastro_cidadao as motorista', 'motorista.id', 'usuario.cidadao_id')
|
|
->where('viagem.veiculo_id', request()->veiculo_id)
|
|
->where('viagem.data', request()->data)
|
|
->when(request()->jornada_id, function($query) {
|
|
$query->where('viagem.jornada_id', request()->jornada_id);
|
|
})
|
|
->when(request()->destino_id, function($query) {
|
|
$query->where('viagem.destino_id', request()->destino_id);
|
|
})
|
|
->where('viagem.status_id', request()->status_id)
|
|
->first();
|
|
$currentLotacao = self::getCurrentLotacao();
|
|
$cliente = Cliente::where('link', app('config')->get('database.default'))->firstOrFail();
|
|
|
|
$exibir = Parametrizacao::first();
|
|
$exibirObservacaoPaciente = $exibir ? $exibir->exibir_observacao_paciente : false;
|
|
|
|
return [
|
|
'unidade_nome' => request()->unidade_nome ?? 'TODAS',
|
|
'infraestrutura_nome' => request()->infraestrutura_nome ?? 'TODOS',
|
|
'unidade' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
|
|
'unidade_id' => $currentLotacao->infraestrutura->unidade->id,
|
|
'infraestrutura_id' => $currentLotacao->infraestrutura->id,
|
|
'infraestrutura' => $currentLotacao->infraestrutura->nome,
|
|
'sistema' => [
|
|
'ramo_atividade' => [
|
|
'nome' => $cliente->sistema->ramoAtividade->nome ?? null,
|
|
],
|
|
'nome' => $cliente->sistema->nome ?? null,
|
|
'versao' => $cliente->sistema->versao ?? null,
|
|
],
|
|
'pacientes' => $pacientes,
|
|
'viagem' => $viagem,
|
|
'exibir_observacao_paciente' => $exibirObservacaoPaciente,
|
|
'agrupar' => request()->agrupar,
|
|
'ordenar' => request()->ordenar,
|
|
'total' => $total,
|
|
];
|
|
}
|
|
|
|
public static function checkMotorista()
|
|
{
|
|
$viagens = Viagem::where('data', request()->data)
|
|
->where('condutor_id', request()->condutor_id)
|
|
->get();
|
|
|
|
if($viagens) {
|
|
$jornada = Jornada::find(request()->jornada_id);
|
|
foreach($viagens as $viagem) {
|
|
$viagemStart = Carbon::createFromFormat('Y-m-d H:i:s', $viagem->jornada->data_inicial);
|
|
$viagemEnd = Carbon::createFromFormat('Y-m-d H:i:s', $viagem->jornada->data_final);
|
|
$jornadaStart = Carbon::createFromFormat('Y-m-d H:i:s', $jornada->data_inicial);
|
|
$jornadaEnd = Carbon::createFromFormat('Y-m-d H:i:s', $jornada->data_final);
|
|
if($jornadaStart->lt($viagemEnd) && $jornadaEnd->gt($viagemStart)) {
|
|
return [
|
|
'isValid' => false
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
return [
|
|
'isValid' => true
|
|
];
|
|
}
|
|
}
|