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(); } }