self::getFormData(), 'model' => self::getModelData(), 'parametrizacao' => Parametrizacao::first()->agendar_transporte_jornada ?? null, ]; } public static function store($request) { self::validate(); $data = $request->all(); if (!is_null(request()->diaria)) { $data['diaria'] = str_replace('.', '', $data['diaria']); $data['diaria'] = str_replace(',', '.', $data['diaria']); } $viagem = Viagem::where('veiculo_id', $data['veiculo_id']) ->when($data['jornada_id'] ?? null, function($query, $data) { $query->where('jornada_id', $data); }) ->when($data['destino_id'] ?? null, function($query, $data) { $query->where('destino_id', $data); }) ->where('data', request()->data) ->first(); if ($viagem) { if(is_null($viagem->protocolo)) { $data['protocolo'] = Viagem::max('protocolo') + 1; } $currentLotacao = self::getCurrentLotacao(); $viagem->update($data); $agendamentos = self::getPacientes(); $agendamentos->each(function ($agendamento) use ($viagem, $currentLotacao) { $agendamento->lotacao_id = $currentLotacao->infraestrutura->unidade->id; $agendamento->ocupacao_id = $currentLotacao->ocupacao_id; $agendamento->usuario_id = $currentLotacao->usuario_id; $agendar = Agendar::where('id', $agendamento->id); $agendar->update([ 'viagem_id' => $viagem->id, 'lotacao_id' => $currentLotacao->infraestrutura->unidade->id, 'ocupacao_id' => $currentLotacao->ocupacao_id, 'usuario_id' => $currentLotacao->usuario_id, 'procedimento_id' => $agendamento->procedimento_id, ]); $transporte = $agendar->first(); HistoricoService::create($transporte, EnumTransporteStatus::MODIFICADO, $transporte->updated_lotacao_id); }); return $viagem; } else { $data = $request->all(); $data['protocolo'] = Viagem::max('protocolo') + 1; if (!is_null(request()->diaria)) { $data['diaria'] = str_replace('.', '', $data['diaria']); $data['diaria'] = str_replace(',', '.', $data['diaria']); } $currentLotacao = self::getCurrentLotacao(); $viagem = Viagem::create($data)->fresh(); $agendamentos = self::getPacientes(); $agendamentos->each(function ($agendamento) use ($viagem, $currentLotacao) { $agendamento->lotacao_id = $currentLotacao->infraestrutura->unidade->id; $agendamento->ocupacao_id = $currentLotacao->ocupacao_id; $agendamento->usuario_id = $currentLotacao->usuario_id; $agendar = Agendar::where('id', $agendamento->id); $agendar->update([ 'viagem_id' => $viagem->id, 'lotacao_id' => $currentLotacao->infraestrutura->unidade->id, 'ocupacao_id' => $currentLotacao->ocupacao_id, 'usuario_id' => $currentLotacao->usuario_id, 'procedimento_id' => $agendamento->procedimento_id ]); $transporte = $agendar->first(); HistoricoService::create($transporte, EnumTransporteStatus::MODIFICADO, $transporte->updated_lotacao_id); }); return $viagem; } } private static function validate() { $rules = [ 'data' => [ 'date', ], 'condutor_id' => [ 'exists:transporte_paciente_condutor,id', ], 'veiculo_id' => [ 'exists:transporte_paciente_veiculo,id', ], 'status_id' => [ 'required', ] ]; return request()->validate($rules); } private static function getFormData() { $parametrizacao = Parametrizacao::first(); return [ "status" => ViagemStatus::find([ EnumStatus::ABERTO, EnumStatus::FINALIZADO, ]), "municipios" => [], "bairros" => [], "veiculos" => [], "jornadas" => [], "motoristas" => self::getMotoristas(), "agrupar" => [ [ "id" => 1, "descricao" => "Destino" ], [ "id" => 2, "descricao" => "Município de destino" ], [ "id" => 3, "descricao" => "Ponto" ] ], "ordenar" => [ [ "id" => 1, "descricao" => "Destino" ], [ "id" => 2, "descricao" => "Endereço do paciente" ], [ "id" => 3, "descricao" => "Horário da consulta" ], [ "id" => 4, "descricao" => "Horário de saída" ], [ "id" => 5, "descricao" => "Município de Destino" ], [ "id" => 6, "descricao" => "Nome do paciente" ], [ "id" => 7, "descricao" => "Ponto" ] ], 'exibir_observacao_transporte' => $parametrizacao->exibir_observacao_transporte ?? null, ]; } private static function getModelData() { return [ "status_id" => 1, "data" => null, "veiculo_id" => null, "municipio_id" => null, "nome_bairro" => null, "jornada_id" => null, "horario_saida" => null, "diaria" => null, "motorista_id" => null, "agrupar" => 1, "ordenar" => 7, ]; } public static function getVeiculos() { if(request()->status_id == EnumStatus::FINALIZADO) { return DB::table('transporte_paciente_viagem as viagem') ->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'viagem.veiculo_id') ->select( 'veiculo.id', DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) AS descricao') ) ->orderBy('veiculo.numero_placa') ->groupBy('veiculo.id') ->where('veiculo.bloqueado', false) ->where('viagem.data', request()->data) ->where('viagem.status_id', request()->status_id) ->get(); } else { return DB::table('transporte_paciente_veiculo as veiculo') ->join('transporte_paciente_agendar_transporte as agendar', 'agendar.veiculo_id', 'veiculo.id') ->where(DB::raw("DATE_FORMAT(agendar.data_saida, '%Y-%m-%d')"), request()->data) ->where('veiculo.bloqueado', false) ->whereIn('agendar.status_id', [EnumStatus::ABERTO, EnumStatus::REAGENDADO, EnumStatus::MODIFICADO ]) ->select( 'veiculo.id', DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) AS descricao') ) ->orderBy('veiculo.numero_placa') ->groupBy('veiculo.id') ->get(); } } public static function getMunicipios() { if(request()->status_id == EnumStatus::FINALIZADO) { return DB::table('transporte_paciente_agendar_transporte as agendar') ->select('municipio.id', 'municipio.nome') ->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id') ->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.municipio_id') ->where('agendar.veiculo_id', request()->veiculo_id) ->where('agendar.data_saida', request()->data) ->whereIn('agendar.status_id', [EnumAgendaStatus::TRANSPORTADO, EnumAgendaStatus::FALTOU]) ->orderBy('nome') ->groupBy('municipio.id') ->get(); } else { return DB::table('transporte_paciente_agendar_transporte as agendar') ->select('municipio.id', 'municipio.nome') ->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id') ->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.municipio_id') ->where('agendar.veiculo_id', request()->veiculo_id) ->where('agendar.data_saida', request()->data) ->where('agendar.status_id', EnumAgendaStatus::AGENDADO) ->orderBy('nome') ->groupBy('municipio.id') ->get(); } } public static function getBairros() { if(request()->status_id == EnumStatus::FINALIZADO) { return DB::table('transporte_paciente_agendar_transporte as agendar') ->select('destino.id', 'destino.nome_bairro as nome', 'destino.municipio_id') ->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id') ->where('agendar.veiculo_id', request()->veiculo_id) ->where('agendar.data_saida', request()->data) ->whereIn('agendar.status_id', [EnumAgendaStatus::TRANSPORTADO, EnumAgendaStatus::FALTOU]) ->whereNotNull('destino.nome_bairro') ->when(request()->municipio_id, function($query) { $query->where('destino.municipio_id', request()->municipio_id); }) ->orderBy('nome') ->groupBy('nome') ->get(); } else { return DB::table('transporte_paciente_agendar_transporte as agendar') ->select('destino.id', 'destino.nome_bairro as nome', 'destino.municipio_id') ->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id') ->where('agendar.veiculo_id', request()->veiculo_id) ->where('agendar.data_saida', request()->data) ->where('agendar.status_id', EnumAgendaStatus::AGENDADO) ->whereNotNull('destino.nome_bairro') ->when(request()->municipio_id, function($query) { $query->where('destino.municipio_id', request()->municipio_id); }) ->orderBy('nome') ->groupBy('nome') ->get(); } } public static function getJornadas() { if(request()->status_id == EnumStatus::FINALIZADO) { return DB::table('transporte_paciente_viagem as viagem') ->join('transporte_paciente_jornada as jornada', 'viagem.jornada_id', 'jornada.id') ->join('transporte_paciente_veiculo as veiculo', 'jornada.veiculo_id', 'veiculo.id') ->where('viagem.status_id', EnumStatus::FINALIZADO) ->where('veiculo.id', request()->veiculo_id) ->where(DB::raw("DATE_FORMAT(jornada.data_inicial, '%Y-%m-%d')"), request()->data) ->select( 'jornada.id', DB::raw("CONCAT( DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'), ' - ', DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i'), ' - ', jornada.id ) AS descricao"), ) ->orderBy('jornada.data_inicial') ->groupBy('jornada.id') ->get(); } else { return DB::table('transporte_paciente_jornada as jornada') ->join('transporte_paciente_veiculo as veiculo', 'jornada.veiculo_id', 'veiculo.id') ->join('transporte_paciente_agendar_transporte as agendar', 'agendar.jornada_id', 'jornada.id') ->whereIn('agendar.status_id', [EnumAgendaStatus::AGENDADO, EnumAgendaStatus::MODIFICADO, EnumAgendaStatus::REAGENDADO]) ->where('agendar.veiculo_id', request()->veiculo_id) ->where(DB::raw("DATE_FORMAT(agendar.data_saida, '%Y-%m-%d')"), request()->data) ->select( 'jornada.id', DB::raw("CONCAT( DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'), ' - ', DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i'), ' - ', jornada.id ) AS descricao"), ) ->orderBy('jornada.data_inicial') ->groupBy('jornada.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') ->orderBy('cidadao.nome') ->get(); } public static function search() { return [ 'pacientes' => self::getPacientes(), 'viagem' => self::getViagem(), 'ordenacao' => request()->ordenar, 'total' => array_reduce(self::getPacientes()->toArray(), function($carry, $item) { if($item->acompanhante != null) { $carry += $item->acompanhante; } return $carry + 1; }, 0) ]; } private static function getPacientes() { return DB::table('transporte_paciente_agendar_transporte as agendar') ->leftJoin('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id') ->leftJoin('transporte_paciente_ponto as ponto', 'agendar.ponto_id', 'ponto.id') ->leftJoin('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id') ->leftJoin('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id') ->leftJoin('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id') ->leftJoin('cadastro_cidadao_telefone as telefone', 'cidadao.id', 'telefone.cidadao_id') ->leftJoin('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id') ->leftJoin('cadastro_domicilio as domicilio', 'cidadao.domicilio_id', 'domicilio.id') ->leftJoin('cadastro_endereco as endereco', 'domicilio.endereco_id', 'endereco.id') ->leftJoin('cadastro_logradouro as logradouro', 'endereco.logradouro_id', 'logradouro.id') ->leftJoin('cadastro_logradouro_tipo as tipo_logradouro', 'logradouro.tipo_id', 'tipo_logradouro.id') ->leftJoin('cadastro_bairro as bairro', 'logradouro.bairro_id', 'bairro.id') ->leftJoin('cadastro_logradouro as logradouro_referencia', 'ponto.logradouro_id', 'logradouro_referencia.id') ->leftJoin('cadastro_logradouro_tipo as tipo_logradouro_referencia', 'logradouro_referencia.tipo_id', 'tipo_logradouro_referencia.id') ->leftJoin('cadastro_bairro as bairro_referencia', 'logradouro_referencia.bairro_id', 'bairro_referencia.id') ->leftJoin('transporte_paciente_acompanhante', 'transporte_paciente_acompanhante.id', 'agendar.acompanhante_1_id') ->leftJoin('cadastro_paciente as paciente_acompanhante_1', 'transporte_paciente_acompanhante.usuario_id', 'paciente_acompanhante_1.id') ->leftJoin('cadastro_cidadao as cidadao_acompanhante_1', 'paciente_acompanhante_1.cidadao_id', 'cidadao_acompanhante_1.id') ->leftJoin('cadastro_cidadao_telefone as telefone_acompanhante_1', 'cidadao_acompanhante_1.id', 'telefone_acompanhante_1.cidadao_id') ->leftJoin('transporte_paciente_acompanhante AS acompanhante_dois', 'acompanhante_dois.id', 'agendar.acompanhante_2_id') ->leftJoin('cadastro_paciente as paciente_acompanhante_2', 'acompanhante_dois.usuario_id', 'paciente_acompanhante_2.id') ->leftJoin('cadastro_cidadao as cidadao_acompanhante_2', 'paciente_acompanhante_2.cidadao_id', 'cidadao_acompanhante_2.id') ->leftJoin('cadastro_cidadao_telefone as telefone_acompanhante_2', 'cidadao_acompanhante_2.id', 'telefone_acompanhante_2.cidadao_id') ->leftJoin('sigtap.procedimento', function ($join) { $join->on('sigtap.procedimento.codigo', 'motivo.codigo_procedimento') ->where('sigtap.procedimento.competencia_id', '=', function ($query) { $query->select('sigtap.competencia.id') ->from('sigtap.competencia') ->orderByDesc('sigtap.competencia.valor') ->limit(1); }); }) ->leftJoin('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id') ->leftJoin('transporte_paciente_status as status', 'agendar.status_id', 'status.id') ->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id') ->leftJoin('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id') ->leftJoin('cadastro_cidadao as motorista', 'motorista.id', 'usuario.cidadao_id') ->select( 'agendar.id', 'agendar.viagem_id', DB::raw("CONCAT_WS( ', ', NULLIF(destino.descricao_destino, ''), IF(destino.nome_logradouro != '', CONCAT('Logradouro: ', destino.nome_logradouro), NULL), IF(destino.numero_logradouro != '', CONCAT('Nº: ', destino.numero_logradouro), NULL), IF(destino.nome_complemento != '', CONCAT('Complemento: ', destino.nome_complemento), NULL), IF(destino.nome_bairro != '', CONCAT('Bairro: ', destino.nome_bairro), NULL), IF(destino.numero_cep != '', CONCAT('CEP: ', destino.numero_cep), NULL), IF(destino.observacao != '', CONCAT('Observação: ', destino.observacao), NULL) ) as destino"), 'municipio.nome as municipio', 'cidadao.nome as nome', 'cidadao.data_nascimento as cidadao_data_nascimento', DB::raw('TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) AS idade'), DB::raw("CONCAT(logradouro.nome,' - ',IF(endereco.numero, endereco.numero, 'Sem número')) as endereco"), 'bairro.nome as bairro', 'bairro_referencia.nome as bairro_referencia', DB::raw('GROUP_CONCAT(DISTINCT telefone.numero) as telefones'), 'motivo.descricao as motivo', 'motivo.codigo_procedimento as codigo_procedimento', 'agendar.horario_saida', 'agendar.horario as horario_consulta', 'agendar.acompanhante', 'agendar.observacao', 'agendar.consulta_observacao', DB::raw(" CASE WHEN ponto.descricao IS NULL THEN CONCAT('CASA DO PACIENTE - ', tipo_logradouro.descricao, ' ', logradouro.nome, ' ', IF(endereco.numero, endereco.numero, 'S/N')) ELSE ponto.descricao END as ponto "), 'endereco.complemento', 'agendar.lotacao_id', 'agendar.ocupacao_id', 'agendar.usuario_id', 'sigtap.procedimento.nome as procedimento_nome', 'sigtap.procedimento.id as procedimento_id', 'motorista.nome as motorista', 'status.descricao as status', 'transporte_paciente_acompanhante.id as acompanhante_1', 'cidadao_acompanhante_1.nome as acompanhante_nome_1', 'transporte_paciente_acompanhante.nome as nome_1', 'cidadao_acompanhante_1.cns as acompanhante_cns_1', DB::raw('GROUP_CONCAT(DISTINCT telefone_acompanhante_1.numero) as telefones_acompanhante_1'), 'acompanhante_dois.id as acompanhante_2', 'cidadao_acompanhante_2.nome as acompanhante_nome_2', 'acompanhante_dois.nome as nome_2', 'cidadao_acompanhante_2.cns as acompanhante_cns_2', DB::raw('GROUP_CONCAT(DISTINCT telefone_acompanhante_2.numero) as telefones_acompanhante_2'), 'destino.distancia', 'agendar.consulta_observacao', ) ->where('agendar.data_saida', request()->data) ->where('agendar.veiculo_id', request()->veiculo_id) ->when(request()->status_id == EnumStatus::ABERTO, function ($query) { $query->whereIn('agendar.status_id', [ EnumAgendaStatus::AGENDADO, EnumAgendaStatus::MODIFICADO, EnumAgendaStatus::REAGENDADO ]); }) ->when(request()->status_id == EnumStatus::FINALIZADO, function ($query) { $query->whereIn('agendar.status_id', [ EnumAgendaStatus::TRANSPORTADO, EnumAgendaStatus::FALTOU, EnumAgendaStatus::MODIFICADO ]); }) ->when(request()->municipio_id, function ($query) { $query->where('agendar.municipio_id', request()->municipio_id); }) ->when(request()->jornada_id, function ($query) { $query->where('agendar.jornada_id', request()->jornada_id); }) ->when(request()->nome_bairro, function($query) { $query->where('destino.nome_bairro', '=', request()->nome_bairro); }) ->when(request()->veiculo_id, function ($query) { $query->where('agendar.veiculo_id', request()->veiculo_id); }) ->whereNull('telefone.deleted_at') ->groupBy('agendar.id') ->orderBy('agendar.horario_saida', 'asc') ->orderBy('horario_consulta','asc') ->get(); } private static function getViagem() { return DB::table('transporte_paciente_viagem as viagem') ->select( 'viagem.protocolo', 'viagem.diaria', 'viagem.condutor_id', 'cidadao.nome', 'viagem.horario_saida_temp as horarioSaida' ) ->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id') ->leftJoin('cadastro_usuario as usuario', 'usuario.id', 'condutor.id') ->leftJoin('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id') ->leftJoin('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id') ->leftJoin('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id') ->where('viagem.veiculo_id', request()->veiculo_id) ->where('viagem.data', request()->data) ->when(request()->jornada_id, function ($query) { $query->where('viagem.jornada_id', request()->jornada_id); }) ->when(request()->nome_bairro, function($query) { $query->where('destino.nome_bairro', request()->nome_bairro); }) ->where('viagem.status_id', request()->status_id) ->first(); } public static function print() { $pacientes = self::getPacientes(); $pacientes->each(function ($paciente) { $telefones = explode(',', $paciente->telefones); $telefonesComMascara = []; foreach($telefones as $telefone) { array_push($telefonesComMascara, MaskUtil::getPhoneMasked($telefone)); } $paciente->telefones = implode(', ', $telefonesComMascara); $telefonesAcompanhante = explode(',', $paciente->telefones_acompanhante_1); $telefonesAcompanhanteComMascara = []; foreach($telefonesAcompanhante as $telefone) { array_push($telefonesAcompanhanteComMascara, MaskUtil::getPhoneMasked($telefone)); } $paciente->telefones_acompanhante_1 = implode(', ', $telefonesAcompanhanteComMascara); $telefonesAcompanhante = explode(',', $paciente->telefones_acompanhante_2); $telefonesAcompanhanteComMascara = []; foreach($telefonesAcompanhante as $telefone) { array_push($telefonesAcompanhanteComMascara, MaskUtil::getPhoneMasked($telefone)); } $paciente->telefones_acompanhante_2 = implode(', ', $telefonesAcompanhanteComMascara); $paciente->cidadao_idade_anos = $paciente->cidadao_data_nascimento ? (int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%y') : 0; $paciente->cidadao_idade_meses = $paciente->cidadao_data_nascimento ? (int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%m') : 0; $paciente->cidadao_idade_dias = $paciente->cidadao_data_nascimento ? (int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%d') : 0; $paciente->cidadao_idade_meses = $paciente->cidadao_data_nascimento ? str_pad($paciente->cidadao_idade_meses, 2, '0', STR_PAD_LEFT) : null; $paciente->cidadao_idade_dias = $paciente->cidadao_data_nascimento ? str_pad($paciente->cidadao_idade_dias, 2, '0', STR_PAD_LEFT) : null; $paciente->acompanhante_cns_1 = $paciente->acompanhante_cns_1 ? MaskUtil::getCnsMasked($paciente->acompanhante_cns_1 ) : ''; $paciente->acompanhante_cns_2 = $paciente->acompanhante_cns_2 ? MaskUtil::getCnsMasked($paciente->acompanhante_cns_2 ) : ''; }); $total = array_reduce($pacientes->toArray(), function($carry, $item) { if($item->acompanhante != null) { $carry += $item->acompanhante; } return $carry + 1; }, 0); $viagem = DB::table('transporte_paciente_viagem as viagem') ->select( 'viagem.protocolo', 'viagem.status_id as status', DB::raw("DATE_FORMAT(viagem.data, '%d/%m/%Y') as data"), 'viagem.horario_saida_temp as horario_saida', DB::raw('CONCAT(veiculo.descricao_modelo, " - ", veiculo.numero_placa) AS veiculo'), 'motorista.nome as motorista', 'condutor.matricula as matricula', 'viagem.diaria', 'viagem.horario_saida_temp', 'viagem.horario_chegada', 'viagem.horario_chegada_destino', 'viagem.horario_saida_destino', 'viagem.km_saida', 'viagem.km_chegada', DB::raw("CONCAT( DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'), ' - ', DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i')) AS jornada"), 'viagem.refeicao', 'viagem.pernoite', 'viagem.combustivel', 'viagem.pedagio', 'viagem.outras_despesas', 'viagem.total_despesa', DB::raw(" CASE WHEN ( SELECT agendar_transporte_jornada FROM transporte_paciente_parametrizacao) = 1 THEN DATE_FORMAT(jornada.data_inicial, '%H:%i') END as jornada_horario_inicial ") ) ->leftJoin('transporte_paciente_veiculo as veiculo', 'viagem.veiculo_id', 'veiculo.id') ->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id') ->leftJoin('transporte_paciente_jornada as jornada', 'viagem.jornada_id', 'jornada.id') ->leftJoin('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id') ->leftJoin('cadastro_cidadao as motorista', 'motorista.id', 'usuario.cidadao_id') ->where('viagem.veiculo_id', request()->veiculo_id) ->where('viagem.data', request()->data) ->when(request()->jornada_id, function($query) { $query->where('viagem.jornada_id', request()->jornada_id); }) ->when(request()->destino_id, function($query) { $query->where('viagem.destino_id', request()->destino_id); }) ->where('viagem.status_id', request()->status_id) ->first(); $currentLotacao = self::getCurrentLotacao(); $cliente = Cliente::where('link', app('config')->get('database.default'))->firstOrFail(); $exibir = Parametrizacao::first(); $exibirObservacaoPaciente = $exibir ? $exibir->exibir_observacao_paciente : false; return [ 'unidade_nome' => request()->unidade_nome ?? 'TODAS', 'infraestrutura_nome' => request()->infraestrutura_nome ?? 'TODOS', 'unidade' => $currentLotacao->infraestrutura->unidade->nome_fantasia, 'unidade_id' => $currentLotacao->infraestrutura->unidade->id, 'infraestrutura_id' => $currentLotacao->infraestrutura->id, 'infraestrutura' => $currentLotacao->infraestrutura->nome, 'sistema' => [ 'ramo_atividade' => [ 'nome' => $cliente->sistema->ramoAtividade->nome ?? null, ], 'nome' => $cliente->sistema->nome ?? null, 'versao' => $cliente->sistema->versao ?? null, ], 'pacientes' => $pacientes, 'viagem' => $viagem, 'exibir_observacao_paciente' => $exibirObservacaoPaciente, 'agrupar' => request()->agrupar, 'ordenar' => request()->ordenar, 'total' => $total, ]; } public static function checkMotorista() { $viagens = Viagem::where('data', request()->data) ->where('condutor_id', request()->condutor_id) ->get(); if($viagens) { $jornada = Jornada::find(request()->jornada_id); foreach($viagens as $viagem) { $viagemStart = Carbon::createFromFormat('Y-m-d H:i:s', $viagem->jornada->data_inicial); $viagemEnd = Carbon::createFromFormat('Y-m-d H:i:s', $viagem->jornada->data_final); $jornadaStart = Carbon::createFromFormat('Y-m-d H:i:s', $jornada->data_inicial); $jornadaEnd = Carbon::createFromFormat('Y-m-d H:i:s', $jornada->data_final); if($jornadaStart->lt($viagemEnd) && $jornadaEnd->gt($viagemStart)) { return [ 'isValid' => false ]; } } } return [ 'isValid' => true ]; } }