157 lines
8.2 KiB
PHP
157 lines
8.2 KiB
PHP
<?php
|
|
|
|
namespace App\Services\TransportePaciente\Relatorios;
|
|
|
|
use App\Services\Service;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Carbon;
|
|
use App\Enums\TransportePaciente\ViagemStatus;
|
|
|
|
class ViagemService extends Service
|
|
{
|
|
public static function index()
|
|
{
|
|
return [
|
|
'model' => [
|
|
'data_inicial' => null,
|
|
'data_final' => null,
|
|
'municipio' => null,
|
|
],
|
|
'form' => [
|
|
'municipios' => []
|
|
]
|
|
];
|
|
}
|
|
|
|
public static function list()
|
|
{
|
|
$viagens = DB::table('transporte_paciente_viagem as viagem')
|
|
->leftJoin('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
|
->leftJoin('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
|
->leftJoin('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
|
->leftJoin('transporte_paciente_veiculo as veiculo','viagem.veiculo_id', 'veiculo.id')
|
|
->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id')
|
|
->leftJoin('cadastro_usuario as usuario', 'condutor.usuario_id', 'usuario.id')
|
|
->leftJoin('cadastro_cidadao as cidadao', 'usuario.cidadao_id', 'cidadao.id')
|
|
->leftJoin('transporte_paciente_jornada as jornada', 'jornada.id', 'viagem.jornada_id')
|
|
->leftJoin('transporte_paciente_viagem_status as viagem_status', 'viagem_status.id', 'viagem.status_id')
|
|
->select(
|
|
'viagem.id',
|
|
DB::raw('DATE_FORMAT(viagem.data, "%d/%m/%Y") as data'),
|
|
DB::raw("viagem.horario_saida_temp IS NOT NULL, DATE_FORMAT(viagem.horario_saida_temp, '%H:%i') AS horario"),
|
|
'municipio.nome as municipio',
|
|
DB::raw('CONCAT(veiculo.numero_placa," - ",veiculo.descricao_modelo) AS veiculo'),
|
|
'veiculo.id as veiculo_id',
|
|
'cidadao.nome as motorista',
|
|
'viagem.status_id as status_da_viagem',
|
|
'viagem_status.descricao as nome_status',
|
|
DB::raw('IF(viagem.protocolo IS NOT NULL, viagem.protocolo, "-") AS protocolo')
|
|
)
|
|
->where('viagem.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
|
->where('viagem.data', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
|
->when(request()->municipio_id, function($query) {
|
|
$query->where('destino.municipio_id', request()->municipio);
|
|
})
|
|
->when(request()->protocolo, function($query) {
|
|
$query->where('viagem.protocolo', request()->protocolo);
|
|
})
|
|
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('transporte_paciente_agendar_transporte')
|
|
->whereRaw('transporte_paciente_agendar_transporte.viagem_id = viagem.id');
|
|
})
|
|
->groupBy('horario', 'motorista', 'veiculo_id')
|
|
->orderBy('viagem.data')
|
|
->get();
|
|
|
|
$viagens->each(function($viagem) {
|
|
|
|
$agendados = DB::table('transporte_paciente_agendar_transporte')
|
|
->where('viagem_id', $viagem->id)
|
|
->get();
|
|
$viagem->pacientes = $agendados->count();
|
|
$viagem->acompanhantes = $agendados->sum('acompanhante');
|
|
$viagem->quantidade = $viagem->pacientes + $viagem->acompanhantes;
|
|
});
|
|
|
|
return $viagens;
|
|
}
|
|
|
|
public static function getMunicipios()
|
|
{
|
|
return DB::table('transporte_paciente_viagem as viagem')
|
|
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
|
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'agendar.municipio_id')
|
|
->select('municipio.id', 'municipio.nome')
|
|
->where('viagem.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
|
->where('viagem.data', '<=', Carbon::parse(request()->data_final)->format('Y-m-d'))
|
|
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
|
->orderBy('municipio.nome')
|
|
->groupBy('municipio.id')
|
|
->get();
|
|
}
|
|
|
|
public static function getViagem()
|
|
{
|
|
return DB::table('transporte_paciente_viagem as viagem')
|
|
->leftJoin('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
|
->leftJoin('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
|
->leftJoin('cadastro_paciente as paciente', 'paciente.id', 'agendar.paciente_id')
|
|
->leftJoin('cadastro_cidadao as cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
|
->leftJoin('cadastro_domicilio as domicilio', 'cidadao.domicilio_id', 'domicilio.id')
|
|
->leftJoin('cadastro_endereco as endereco', 'endereco.id', 'domicilio.endereco_id')
|
|
->leftJoin('cadastro_logradouro as logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
|
->leftJoin('intranet.cadastro_municipio as municipio', 'municipio.id', 'logradouro.municipio_id')
|
|
->leftJoin('cadastro_bairro as bairro', 'bairro.id', 'logradouro.bairro_id')
|
|
->leftJoin('intranet.cadastro_estado as estado', 'estado.id', 'municipio.estado_id')
|
|
->leftJoin('transporte_paciente_ponto as ponto', 'ponto.id', 'agendar.ponto_id')
|
|
->leftJoin('transporte_paciente_acompanhante as acompanhante1', 'acompanhante1.id', 'agendar.acompanhante_1_id')
|
|
->leftJoin('cadastro_paciente as paciente_acompanhante_1', 'paciente_acompanhante_1.id', 'acompanhante1.usuario_id')
|
|
->leftJoin('cadastro_cidadao as cidadao_acompanhante_1', 'paciente_acompanhante_1.cidadao_id', 'cidadao_acompanhante_1.id')
|
|
->leftJoin('transporte_paciente_acompanhante_relacao as relacao1', 'relacao1.id', 'acompanhante1.relacao_id')
|
|
->leftJoin('transporte_paciente_acompanhante as acompanhante2', 'acompanhante2.id', 'agendar.acompanhante_2_id')
|
|
->leftJoin('cadastro_paciente as paciente_acompanhante_2', 'paciente_acompanhante_2.cidadao_id', 'acompanhante2.usuario_id')
|
|
->leftJoin('cadastro_cidadao as cidadao_acompanhante_2', 'paciente_acompanhante_2.id', 'paciente_acompanhante_2.id')
|
|
->leftJoin('transporte_paciente_acompanhante_relacao as relacao2', 'relacao2.id', 'acompanhante2.relacao_id')
|
|
->select(
|
|
DB::raw('DATE_FORMAT(agendar.horario, "%H:%i") as horario'),
|
|
'estado.uf as estado',
|
|
'municipio.nome as municipio',
|
|
'cidadao.nome',
|
|
'destino.descricao_destino as destino',
|
|
'cidadao.cns',
|
|
'logradouro.nome as logradouro',
|
|
'endereco.numero',
|
|
'bairro.nome as bairro',
|
|
'agendar.consulta_observacao as observacao',
|
|
'cidadao_acompanhante_1.nome as acompanhante_1',
|
|
'acompanhante1.nome as nome_1',
|
|
'cidadao_acompanhante_1.cns as cns_acompanhante_1',
|
|
'relacao1.descricao as relacao_1',
|
|
'cidadao_acompanhante_2.nome as acompanhante_2',
|
|
'acompanhante2.nome as nome_2',
|
|
'cidadao_acompanhante_2.cns as cns_acompanhante_2',
|
|
'relacao2.descricao as relacao_2',
|
|
DB::raw('COALESCE(ponto.descricao, "CASA DO PACIENTE") AS ponto'),
|
|
)
|
|
->where('viagem.id', request()->viagem_id)
|
|
->get();
|
|
}
|
|
|
|
public static function getPrintExportData()
|
|
{
|
|
$items = self::list();
|
|
$total_pacientes = $items->sum('pacientes');
|
|
$total_acompanhantes = $items->sum('acompanhantes');
|
|
return [
|
|
'data_inicial' => Carbon::parse(request()->data_inicial)->format('d/m/Y'),
|
|
'data_final' => Carbon::parse(request()->data_final)->format('d/m/Y'),
|
|
'items' => $items,
|
|
'colunas' => collect(request()->selectedCols),
|
|
'total_pacientes_acompanhantes' => $total_pacientes + $total_acompanhantes
|
|
];
|
|
}
|
|
}
|
|
|