init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,156 @@
<?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
];
}
}