This commit is contained in:
708
api/app/Services/TransportePaciente/ViagemService.php
Normal file
708
api/app/Services/TransportePaciente/ViagemService.php
Normal file
@@ -0,0 +1,708 @@
|
||||
<?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
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user