This commit is contained in:
191
api/app/Services/TransportePaciente/AgendadorService.php
Normal file
191
api/app/Services/TransportePaciente/AgendadorService.php
Normal file
@@ -0,0 +1,191 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente;
|
||||
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class AgendadorService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
$hoje = Carbon::now()->format('Y-m-d');
|
||||
return [
|
||||
'model' => [
|
||||
'periodo' => [
|
||||
'start' => $hoje,
|
||||
'end' => $hoje,
|
||||
],
|
||||
'municipio' => null,
|
||||
'destino' => null,
|
||||
'horario' => null,
|
||||
'paciente' => null,
|
||||
],
|
||||
'form' => self::getFormData($hoje)
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData($hoje)
|
||||
{
|
||||
return [
|
||||
'municipios' => DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'agendar.municipio_id')
|
||||
->select('municipio.id', 'municipio.nome')
|
||||
->whereBetween('agendar.data_saida', [$hoje, $hoje])
|
||||
->orderBy('municipio.nome')
|
||||
->groupBy('municipio.id')
|
||||
->get(),
|
||||
'destinos' => DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->select('destino.id', 'destino.descricao_destino as descricao')
|
||||
->whereBetween('agendar.data_saida', [$hoje, $hoje])
|
||||
->orderBy('descricao')
|
||||
->groupBy('destino.id')
|
||||
->get(),
|
||||
'horarios' => DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select('id', DB::raw("DATE_FORMAT(agendar.horario_saida, '%H:%i') as horario"))
|
||||
->whereBetween('agendar.data_saida', [$hoje, $hoje])
|
||||
->groupBy('horario')
|
||||
->orderBy('horario')
|
||||
->get(),
|
||||
'pacientes' => DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'agendar.paciente_id as id',
|
||||
'cidadao.nome as nome'
|
||||
)
|
||||
->whereBetween('agendar.data_saida', [$hoje, $hoje])
|
||||
->join('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->join('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->get(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function getMunicipios()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.municipio_id')
|
||||
->select('municipio.id', 'municipio.nome')
|
||||
->whereBetween('agendar.data_saida', [request()->periodo['start'], request()->periodo['end']])
|
||||
->orderBy('municipio.nome')
|
||||
->groupBy('municipio.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getDestinos()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->select('destino.id', 'destino.descricao_destino as descricao')
|
||||
->whereBetween('agendar.data_saida', [request()->periodo['start'], request()->periodo['end']])
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->orderBy('descricao')
|
||||
->groupBy('destino.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getHorarios()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(DB::raw("DATE_FORMAT(agendar.horario_saida, '%H:%i') as horario"))
|
||||
->whereBetween('agendar.data_saida', [request()->periodo['start'], request()->periodo['end']])
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->distinct()
|
||||
->groupBy('horario')
|
||||
->orderBy('horario')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getPacientes()
|
||||
{
|
||||
$horario = request()->horario;
|
||||
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'agendar.paciente_id as id',
|
||||
'cidadao.nome as nome'
|
||||
)
|
||||
->distinct()
|
||||
->whereBetween('agendar.data_saida', [request()->periodo['start'], request()->periodo['end']])
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->when($horario, function($query) use ($horario) {
|
||||
$query->whereRaw("DATE_FORMAT(agendar.horario_saida, '%H:%i') = ?", [$horario]);
|
||||
})
|
||||
->join('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->join('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->orderBy('nome')
|
||||
->get();
|
||||
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
request()->validate([
|
||||
'periodo' => 'required'
|
||||
], [
|
||||
'periodo.start.required' => 'O período inicial é obrigatório',
|
||||
'periodo.end.required' => 'O período final é obrigatório',
|
||||
]);
|
||||
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'agendar.id',
|
||||
'cidadao.nome as paciente',
|
||||
'paciente.prontuario',
|
||||
DB::raw("TRIM('0' FROM DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),cidadao.data_nascimento) + 0), '%Y')) as idade"),
|
||||
'destino.descricao_destino as destino',
|
||||
'municipio.nome as municipio',
|
||||
DB::raw('CONCAT(DATE_FORMAT(agendar.data_saida, "%d/%m/%Y"), " ", DATE_FORMAT(agendar.horario_saida, "%H:%i")) as dataHoraSaida'),
|
||||
DB::raw("
|
||||
CASE
|
||||
WHEN ponto.descricao IS NULL THEN CONCAT('CASA DO PACIENTE')
|
||||
ELSE ponto.descricao
|
||||
END as ponto
|
||||
"),
|
||||
'agendar.acompanhante',
|
||||
'cidadao_usuario.nome as usuario',
|
||||
DB::raw("DATE_FORMAT(agendar.created_at, '%d/%m/%Y %H:%i') as hora_agendamento"),
|
||||
DB::raw("DATE_FORMAT(agendar.updated_at, '%d/%m/%Y %H:%i') as hora_atualizacao"),
|
||||
'status.descricao as status'
|
||||
)
|
||||
->join('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->join('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->join('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id')
|
||||
->join('transporte_paciente_ponto as ponto','agendar.ponto_id', 'ponto.id')
|
||||
->leftJoin('transporte_paciente_veiculo as veiculo', 'agendar.veiculo_id', 'veiculo.id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
||||
->join('cadastro_lotacao as lotacao', 'lotacao.id', 'agendar.created_lotacao_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'lotacao.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao_usuario', 'cidadao_usuario.id', 'usuario.cidadao_id')
|
||||
->join('transporte_paciente_status as status', 'status.id', 'agendar.status_id')
|
||||
->whereBetween('agendar.data_saida', [request()->periodo['start'], request()->periodo['end']])
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->when(request()->horario, function($query) {
|
||||
$query->where('agendar.horario_saida', request()->horario);
|
||||
})
|
||||
->when(request()->paciente, function($query) {
|
||||
$query->where('agendar.paciente_id', request()->paciente);
|
||||
})
|
||||
->latest('agendar.updated_at')
|
||||
->get();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user