[ 'periodo' => [ 'start' => null, 'end' => null, ], 'municipio' => null, 'motorista' => null, 'destino' => null, 'status' => null, ], 'form' => [ 'municipios' => null, 'motoristas' => null, 'destinos' => null, 'status' => null, ] ]; } public static function getMunicipios() { return DB::table('transporte_paciente_agendar_transporte as agendar') ->select('agendar.municipio_id as id', 'municipio.nome') ->join('intranet.cadastro_municipio as municipio', 'municipio.id', '=', 'agendar.municipio_id') ->where('agendar.data', '>=', Carbon::parse(request()->start)->format('Y-m-d')) ->where('agendar.data', '<', Carbon::parse(request()->end)->addDay()->format('Y-m-d')) ->orderBy('municipio.nome') ->groupBy('id') ->get(); } public static function getMotoristas() { return DB::table('transporte_paciente_condutor as condutor') ->select('condutor.id', 'cidadao.nome') ->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id') ->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id') ->join('transporte_paciente_viagem as viagem', 'condutor.id', 'viagem.condutor_id') ->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id') ->where('agendar.data', '>=', Carbon::parse(request()->start)->format('Y-m-d')) ->where('agendar.data', '<', Carbon::parse(request()->end)->addDay()->format('Y-m-d')) ->when(request()->municipio, function ($query) { $query->where('agendar.municipio_id', request()->municipio); }) ->orderBy('cidadao.nome') ->groupBy('condutor.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') ->join('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id') ->select('destino.id', 'destino.descricao_destino as descricao') ->where('agendar.data', '>=', Carbon::parse(request()->start)->format('Y-m-d')) ->where('agendar.data', '<', Carbon::parse(request()->end)->addDay()->format('Y-m-d')) ->when(request()->municipio, function ($query) { $query->where('agendar.municipio_id', request()->municipio); }) ->when(request()->motorista, function ($query) { $query->where('viagem.condutor_id', request()->motorista); }) ->orderBy('destino.descricao_destino') ->groupBy('destino.id') ->get(); } public static function getStatus() { return DB::table('transporte_paciente_status as status') ->select('status.id', 'status.descricao') ->orderBy('status.descricao') ->get(); } public static function list() { $consulta = DB::table('transporte_paciente_agendar_transporte as agendar') ->select( 'agendar.id', 'municipio.nome as municipio', 'cidadao.nome as motorista', 'destino.descricao_destino as descricao_destino', 'status.id as status_id', 'status.descricao as descricao_status', DB::raw('DATE_FORMAT(agendar.data, "%d/%m/%Y") as data'), DB::raw('IF(viagem.protocolo IS NOT NULL, viagem.protocolo, "-") AS protocolo') ) ->join('intranet.cadastro_municipio as municipio', 'municipio.id', '=', 'agendar.municipio_id') ->join('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id') ->join('transporte_paciente_condutor as condutor', 'condutor.id', 'viagem.condutor_id') ->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id') ->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id') ->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id') ->join('transporte_paciente_status as status', 'status.id', 'agendar.status_id') ->where('agendar.data', '>=', Carbon::parse(request()->start)->format('Y-m-d')) ->where('agendar.data', '<', Carbon::parse(request()->end)->addDay()->format('Y-m-d')) ->when(request()->municipio, function ($query) { $query->where('agendar.municipio_id', request()->municipio); }) ->when(request()->motorista, function ($query) { $query->where('viagem.condutor_id', request()->motorista); }) ->when(request()->destino, function ($query) { $query->where('destino.id', request()->destino); }) ->when(request()->status, function ($query) { $query->where('status.id', request()->status); }) ->orderBy('agendar.data') ->get(); return [ 'consulta' => $consulta, 'totalizadores' => [ 'agendado' => $consulta->where('status_id', Status::AGENDADO)->count(), 'cancelado' => $consulta->where('status_id', Status::CANCELADO)->count(), 'faltou' => $consulta->where('status_id', Status::FALTOU)->count(), 'transportado' => $consulta->where('status_id', Status::TRANSPORTADO)->count(), 'geral' => $consulta->count(), ] ]; } }