[ '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 ]; } }