format('Y-m-d'); $agendamentos = DB::table('transporte_paciente_agendar_transporte') ->select([ 'transporte_paciente_viagem.protocolo', 'transporte_paciente_agendar_transporte.supervisor_id', 'transporte_paciente_viagem.jornada_id', 'cadastro_cidadao.nome AS motorista_nome', 'intranet.cadastro_municipio.nome AS municipio_nome', 'transporte_paciente_condutor.id AS motorista_id', DB::raw('IF(transporte_paciente_viagem.diaria IS NOT NULL, FORMAT(transporte_paciente_viagem.diaria, 2, "pt_BR"), NULL) AS diaria'), DB::raw('DATE_FORMAT(transporte_paciente_agendar_transporte.data, "%d/%m/%Y") AS data_consulta'), DB::raw('DATE_FORMAT(transporte_paciente_agendar_transporte.data_saida, "%d/%m/%Y") AS data_saida'), DB::raw('TIME_FORMAT(transporte_paciente_agendar_transporte.horario, "%H:%i") AS horario_consulta'), DB::raw('COALESCE(SUM(transporte_paciente_agendar_transporte.acompanhante), 0) AS quantidade_acompanhantes'), DB::raw('COUNT(transporte_paciente_agendar_transporte.id) AS quantidade_pacientes'), DB::raw('transporte_paciente_veiculo.id AS veiculo_id'), DB::raw('transporte_paciente_veiculo.numero_capacidade AS capacidade'), DB::raw('CONCAT( transporte_paciente_veiculo.numero_placa, " - ", transporte_paciente_veiculo.descricao_modelo ) AS veiculo_nome'), DB::raw('IFNULL( IF( transporte_paciente_veiculo.numero_capacidade - ( COALESCE(SUM(transporte_paciente_agendar_transporte.acompanhante), 0) + COUNT(transporte_paciente_agendar_transporte.id) ) < 0, 0, transporte_paciente_veiculo.numero_capacidade - ( COALESCE(SUM(transporte_paciente_agendar_transporte.acompanhante), 0) + COUNT(transporte_paciente_agendar_transporte.id) ) ), transporte_paciente_veiculo.numero_capacidade ) AS vagas_disponiveis'), DB::raw("CASE WHEN transporte_paciente_viagem.jornada_id IS NULL THEN 'SEM JORNADA' ELSE CONCAT( DATE_FORMAT(transporte_paciente_jornada.data_inicial, '%d/%m/%Y %H:%i'), ' - ', DATE_FORMAT(transporte_paciente_jornada.data_final, '%d/%m/%Y %H:%i'), ' - ', transporte_paciente_jornada.id ) END AS jornada" ), DB::raw(' CASE WHEN transporte_paciente_viagem.horario_saida_real IS NOT NULL THEN TIME_FORMAT(transporte_paciente_viagem.horario_saida_real, "%H:%i") WHEN transporte_paciente_viagem.horario_saida_temp IS NOT NULL THEN TIME_FORMAT(transporte_paciente_viagem.horario_saida_temp, "%H:%i") ELSE "-" END AS horario_saida ') ]) ->join( 'transporte_paciente_veiculo', 'transporte_paciente_veiculo.id', 'transporte_paciente_agendar_transporte.veiculo_id' ) ->join( 'transporte_paciente_viagem', 'transporte_paciente_viagem.veiculo_id', 'transporte_paciente_veiculo.id' ) ->join( 'transporte_paciente_condutor', 'transporte_paciente_condutor.id', 'transporte_paciente_viagem.condutor_id' ) ->join( 'cadastro_usuario', 'cadastro_usuario.id', 'transporte_paciente_condutor.usuario_id' ) ->join( 'cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id' ) ->leftJoin( 'transporte_paciente_destino as destino', 'transporte_paciente_agendar_transporte.destino_id', 'destino.id' ) ->join( 'intranet.cadastro_municipio', 'intranet.cadastro_municipio.id', 'transporte_paciente_agendar_transporte.municipio_id' ) ->leftJoin( 'transporte_paciente_jornada', 'transporte_paciente_jornada.id', 'transporte_paciente_viagem.jornada_id' ) ->whereColumn('transporte_paciente_viagem.id', '=', 'transporte_paciente_agendar_transporte.viagem_id') ->when(request()->municipio_id, function ($query) { $query->where('destino.municipio_id', request()->municipio_id); }) ->when(request()->destino_id, function ($query) { $query->where('destino.id', request()->destino_id); }); $agendamentos = $agendamentos->whereIn('transporte_paciente_agendar_transporte.status_id', [Status::AGENDADO, Status::MODIFICADO, Status::REAGENDADO]); if (request()->data_saida) { $agendamentos = $agendamentos->where('transporte_paciente_agendar_transporte.data_saida', request()->data_saida); $agendamentos = $agendamentos->where('transporte_paciente_viagem.data', request()->data_saida); } else { $agendamentos = $agendamentos->where('transporte_paciente_agendar_transporte.data_saida', $currentDate); $agendamentos = $agendamentos->where('transporte_paciente_viagem.data', $currentDate); } $agendamentos = $agendamentos->groupBy( 'transporte_paciente_veiculo.id', 'transporte_paciente_condutor.id', 'transporte_paciente_viagem.jornada_id' ); $agendamentos = $agendamentos->get(); return [ 'veiculos' => self::getVeiculos(), 'agendamentos' => $agendamentos, 'agendamentos_jornada' => self::getAgendadosPaciente() ]; } public static function index() { $now = Carbon::now(); $currentDate = $now->format('Y-m-d'); $parametrizacao = Parametrizacao::first(); $agendamentos = DB::table('transporte_paciente_agendar_transporte') ->select([ 'transporte_paciente_viagem.protocolo', 'transporte_paciente_agendar_transporte.id', 'transporte_paciente_agendar_transporte.supervisor_id', 'transporte_paciente_agendar_transporte.jornada_id', 'transporte_paciente_agendar_transporte.consulta_observacao as observacao', 'transporte_paciente_condutor.id AS motorista_id', 'cidadao_condutor.nome AS motorista_nome', DB::raw('IF(transporte_paciente_viagem.diaria IS NOT NULL, FORMAT(transporte_paciente_viagem.diaria, 2, "pt_BR"), NULL) AS diaria'), DB::raw('DATE_FORMAT(transporte_paciente_agendar_transporte.data, "%d/%m/%Y") AS data_consulta'), DB::raw('DATE_FORMAT(transporte_paciente_agendar_transporte.data_saida, "%d/%m/%Y") AS data_saida'), DB::raw('TIME_FORMAT(transporte_paciente_agendar_transporte.horario, "%H:%i") AS horario_consulta'), 'transporte_paciente_agendar_transporte.consulta_observacao', 'transporte_paciente_agendar_transporte.horario_saida', DB::raw('COALESCE(transporte_paciente_agendar_transporte.acompanhante, "NÃO") AS acompanhante'), DB::raw('COALESCE(transporte_paciente_ponto.descricao, "CASA DO PACIENTE") AS ponto'), DB::raw('COALESCE(transporte_paciente_destino.descricao_destino, "-") AS destino'), 'intranet.cadastro_municipio.nome AS municipio', 'cadastro_paciente.id AS paciente_id', 'cadastro_cidadao.nome AS paciente_nome', 'cadastro_cidadao.preferencia_nome_id AS paciente_preferencia_nome_id', 'cadastro_cidadao.nome_social AS paciente_nome_social', 'transporte_paciente_veiculo.id AS viagem_id', DB::raw('false AS selecionado'), DB::raw('false AS atribuido'), DB::raw('transporte_paciente_veiculo.id AS veiculo_id'), DB::raw('CONCAT( transporte_paciente_veiculo.numero_placa, " - ", transporte_paciente_veiculo.descricao_modelo ) AS veiculo_nome'), DB::raw("CASE WHEN transporte_paciente_viagem.jornada_id IS NULL THEN 'SEM JORNADA' ELSE CONCAT( DATE_FORMAT(transporte_paciente_jornada.data_inicial, '%d/%m/%Y %H:%i'), ' - ', DATE_FORMAT(transporte_paciente_jornada.data_final, '%d/%m/%Y %H:%i'), ' - ', transporte_paciente_jornada.id ) END AS jornada" ), DB::raw('LPAD(cadastro_paciente.prontuario,7,0) AS prontuario'), DB::raw('IF (cadastro_cidadao.data_nascimento IS NULL, "Não informada", DATE_FORMAT(cadastro_cidadao.data_nascimento, "%d/%m/%Y")) as data_nascimento'), DB::raw( '( CASE WHEN cadastro_cidadao.nome_mae IS NULL THEN "Não informado" ELSE cadastro_cidadao.nome_mae END ) as nome_mae' ), ]) ->join('transporte_paciente_ponto', 'transporte_paciente_ponto.id', 'transporte_paciente_agendar_transporte.ponto_id') ->join('transporte_paciente_destino', 'transporte_paciente_destino.id', 'transporte_paciente_agendar_transporte.destino_id') ->join('intranet.cadastro_municipio', 'intranet.cadastro_municipio.id', 'transporte_paciente_agendar_transporte.municipio_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'transporte_paciente_agendar_transporte.paciente_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->join( 'transporte_paciente_veiculo', 'transporte_paciente_veiculo.id', 'transporte_paciente_agendar_transporte.veiculo_id' ) ->join( 'transporte_paciente_viagem', 'transporte_paciente_viagem.veiculo_id', 'transporte_paciente_veiculo.id' ) ->join( 'transporte_paciente_condutor', 'transporte_paciente_condutor.id', 'transporte_paciente_viagem.condutor_id' ) ->join( 'cadastro_usuario', 'cadastro_usuario.id', 'transporte_paciente_condutor.usuario_id' ) ->join( 'cadastro_cidadao as cidadao_condutor', 'cidadao_condutor.id', 'cadastro_usuario.cidadao_id' ) ->leftJoin( 'transporte_paciente_jornada', 'transporte_paciente_jornada.id', 'transporte_paciente_viagem.jornada_id' ) ->whereColumn('transporte_paciente_viagem.id', '=', 'transporte_paciente_agendar_transporte.viagem_id'); $agendamentos = $agendamentos->whereIn('transporte_paciente_agendar_transporte.status_id', [Status::AGENDADO, Status::MODIFICADO, Status::REAGENDADO]); if (request()->data_saida) { $agendamentos->where('transporte_paciente_agendar_transporte.data_saida', request()->data_saida); } else { $agendamentos->where('transporte_paciente_agendar_transporte.data_saida', $currentDate); } if (request()->motorista_id) { $agendamentos->where('transporte_paciente_condutor.id', request()->motorista_id); } if (request()->veiculo_id) { $agendamentos->where('transporte_paciente_agendar_transporte.veiculo_id', request()->veiculo_id); } $agendamentos = $agendamentos->get(); $parametrizacao = Parametrizacao::first(); return [ 'veiculos' => self::getVeiculos(), 'agendamentos' => $agendamentos, 'agendamentos_jornada' => self::getAgendadosPaciente(), 'motoristas' => self::getMotoristas(), 'tipos_veiculo' => Tipo::orderBy('descricao')->get(), 'agendar_transporte_jornada' => $parametrizacao->agendar_transporte_jornada ?? null, ]; } 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') ->groupBy('condutor.id') ->orderBy('cidadao.nome') ->get(); } public static function getAgendadosPaciente() { return Agendar::where('data_saida', request()->data_saida) ->when(request()->municipio_id, function ($query) { $query->where('municipio_id', request()->municipio_id); }) ->when(request()->destino_id, function ($query) { $query->where('destino_id', request()->destino_id); }) ->when(request()->horario_saida, function ($query) { $query->where('horario_saida', request()->horario_saida); }) ->whereNotNull('veiculo_id') ->get() ->map(fn($query) => [ 'id' => $query->id ?? null, 'jornada_id' => $query->jornada_id ?? null, 'paciente_id' => $query->paciente_id ?? null, 'paciente_nome' => $query->paciente->cidadao->nome ?? null, 'numero_placa' => $query->veiculo->numero_placa ?? null, 'descricao_modelo' => $query->veiculo->descricao_modelo ?? null, 'data_inicial' => $query->jornada->data_inicial ?? $query->data, 'data_final' => $query->jornada->data_final ?? $query->data, 'data' => (new Carbon($query->data))->format('d/m/Y') ?? null, 'horario' => (new Carbon($query->horario))->format('H:i') ?? null, 'destino' => $query->destino->descricao_destino ?? null, 'municipio' => $query->municipio->nome ?? null, 'uf' => $query->municipio->estado->uf ?? null, ]); } public static function loadFields() { return [ 'form' => self::getFormData() ]; } private static function getFormData() { $now = Carbon::now(); $currentDate = $now->format('Y-m-d'); $parametrizacao = Parametrizacao::first(); return [ 'data_atual' => $now->format('d/m/Y'), 'periodo' => [ 'start' => $currentDate, 'end' => $currentDate, ], 'municipios' => self::getMunicipios(), 'destinos' => self::getDestinos(), 'horariosSaida' => self::getHorariosSaida(), 'tipos_passageiro' => TipoPassageiro::orderBy('descricao')->get(), 'tipos_veiculo' => Tipo::orderBy('descricao')->get(), 'horario_saida' => $parametrizacao->horario_saida ?? null, 'mensagem_protocolo' => $parametrizacao->mensagem_protocolo ?? null, 'agendar_transporte_jornada' => $parametrizacao->agendar_transporte_jornada ?? null, 'veiculos' => self::getVeiculos(), ]; } public static function getVeiculos() { $parametrizacao = Parametrizacao::first(); if($parametrizacao && $parametrizacao->agendar_transporte_jornada) { $veiculos = Veiculo::where('bloqueado', false) ->where(function ($query) { $query->where('transporte_paciente_viagem.status_id', ViagemStatus::ABERTO) ->orWhereNull('transporte_paciente_viagem.status_id') ->orWhereNull('transporte_paciente_viagem.id'); }) ->leftJoin( 'transporte_paciente_jornada', 'transporte_paciente_jornada.veiculo_id', 'transporte_paciente_veiculo.id' ) ->leftJoin( 'transporte_paciente_viagem', 'transporte_paciente_viagem.jornada_id', 'transporte_paciente_jornada.id' ) ->select( 'transporte_paciente_veiculo.id as veiculo_id', 'transporte_paciente_veiculo.numero_placa as numero_placa', 'transporte_paciente_veiculo.descricao_modelo as descricao_modelo', 'transporte_paciente_veiculo.numero_capacidade as numero_capacidade', 'transporte_paciente_veiculo.tipo_id as tipo_id', 'transporte_paciente_viagem.diaria as diaria', 'transporte_paciente_viagem.id as viagem_id', ) ->when(request()->data_saida, function ($query) { $query->where(DB::raw("DATE_FORMAT(transporte_paciente_jornada.data_inicial, '%Y-%m-%d')"), '<=', request()->data_saida); }) ->when(request()->data_saida, function ($query) { $query->where(DB::raw("DATE_FORMAT(transporte_paciente_jornada.data_final, '%Y-%m-%d')"), '>=', request()->data_saida); }) ->groupBy('veiculo_id') ->orderBy('numero_placa') ->get() ->map(fn($query) => [ 'id' => $query->veiculo_id ?? null, 'descricao' => $query->numero_placa . ' - ' . $query->descricao_modelo, 'capacidade' => $query->numero_capacidade ?? null, 'tipo_id' => $query->tipo_id ?? null, 'viagem_id' => $query->viagem_id ?? null, 'protocolo' => $query->viagem_id ? Viagem::find($query->viagem_id)->protocolo ?? '-' : '-', 'diaria' => $query->diaria ? number_format($query->diaria, 2, ',', '.') : null, 'agendados' => Agendar::where('veiculo_id', $query->veiculo_id) ->when(request()->data_saida, function ($query) { $query->where(DB::raw("DATE_FORMAT(data_saida, '%Y-%m-%d')"), request()->data_saida); }) ->select( DB::raw('SUM(IFNULL(acompanhante, 0) + 1) AS quantidade'), ) ->groupBy('veiculo_id') ->first() ]); } else { $veiculos = Veiculo::where('bloqueado', false) ->leftJoin( 'transporte_paciente_viagem', 'transporte_paciente_viagem.veiculo_id', 'transporte_paciente_veiculo.id' ) ->select( 'transporte_paciente_veiculo.id as veiculo_id', 'transporte_paciente_veiculo.numero_placa as numero_placa', 'transporte_paciente_veiculo.descricao_modelo as descricao_modelo', 'transporte_paciente_veiculo.numero_capacidade as numero_capacidade', 'transporte_paciente_veiculo.tipo_id as tipo_id', 'transporte_paciente_viagem.diaria as diaria', 'transporte_paciente_viagem.id as viagem_id', ) ->groupBy('veiculo_id') ->orderBy('numero_placa') ->get() ->map(function ($query) { $veiculo_id = $query->veiculo_id; $veiculo = Veiculo::where('bloqueado', false) ->where('transporte_paciente_viagem.status_id', ViagemStatus::ABERTO) ->leftJoin( 'transporte_paciente_viagem', 'transporte_paciente_viagem.veiculo_id', 'transporte_paciente_veiculo.id' ) ->select( 'transporte_paciente_viagem.id as viagem_id', ) ->when(request()->data_saida, function($query) { $query->where('transporte_paciente_viagem.data', request()->data_saida); }) ->when($query->veiculo_id, function($query) use ($veiculo_id) { $query->where('transporte_paciente_viagem.veiculo_id', $veiculo_id); }) ->first(); return [ 'id' => $query->veiculo_id ?? null, 'descricao' => $query->numero_placa . ' - ' . $query->descricao_modelo, 'capacidade' => $query->numero_capacidade ?? null, 'tipo_id' => $query->tipo_id ?? null, 'viagem_id' => $veiculo ? $veiculo->viagem_id : null, 'protocolo' => $veiculo ? Viagem::find($veiculo->viagem_id)->protocolo ?? '-' : '-', 'diaria' => $query->diaria ? number_format($query->diaria, 2, ',', '.') : null, 'agendados' => Agendar::where('veiculo_id', $query->veiculo_id) ->when(request()->data_saida, function ($query) { $query->where(DB::raw("DATE_FORMAT(data_saida, '%Y-%m-%d')"), request()->data_saida); }) ->select( DB::raw('SUM(IFNULL(acompanhante, 0) + 1) AS quantidade'), ) ->groupBy('veiculo_id') ->first() ]; }); } return $veiculos; } public static function getJornadas() { $jornadas = DB::table('transporte_paciente_jornada as jornada') ->join('transporte_paciente_veiculo as veiculo', 'jornada.veiculo_id', 'veiculo.id') ->join('geral_dia_semana as dia_semana', 'jornada.geral_dia_semana_id', 'dia_semana.id') ->leftJoin( 'transporte_paciente_viagem', 'transporte_paciente_viagem.jornada_id', 'jornada.id' ) ->leftJoin(DB::raw( '( SELECT jornada_id, SUM(IFNULL(acompanhante, 0) + 1) AS total_agendados FROM transporte_paciente_agendar_transporte GROUP BY jornada_id ) AS agendamentos '), 'jornada.id', 'agendamentos.jornada_id' ) ->where('jornada.veiculo_id', request()->veiculo_id) ->where(DB::raw("DATE_FORMAT(jornada.data_inicial, '%Y-%m-%d')"), '<=', request()->data_saida) ->where(DB::raw("DATE_FORMAT(jornada.data_final, '%Y-%m-%d')"), '>=', request()->data_saida) ->select( 'transporte_paciente_viagem.protocolo', 'jornada.id', 'jornada.data_inicial', 'jornada.data_final', 'veiculo.numero_placa', 'veiculo.numero_capacidade', 'veiculo.tipo_id', 'dia_semana.id as geral_dia_semana_id', 'dia_semana.descricao as geral_dia_semana_descricao', 'transporte_paciente_viagem.id as viagem_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"), DB::raw('COALESCE(agendamentos.total_agendados, 0) as total_agendados') ) ->orderByRaw('CASE WHEN transporte_paciente_viagem.id IS NOT NULL THEN 0 ELSE 1 END') ->orderBy('jornada.data_inicial') ->groupBy('jornada.id') ->get(); return $jornadas; } public static function getHorariosSaida() { $now = Carbon::now(); $currentDate = $now->format('Y-m-d'); $data_saida = request()->data_saida ?? $currentDate; return Agendar::where('data_saida', $data_saida) ->where('transporte_paciente_agendar_transporte.status_id', Status::AGENDADO) ->whereNotNull('horario_saida') ->when(request()->municipio_id, function ($query) { $query->where('municipio_id', request()->municipio_id); }) ->when(request()->destino_id, function ($query) { $query->where('destino_id', request()->destino_id); }) ->select(DB::raw("TIME_FORMAT(horario_saida, '%H:%i') as horario_saida")) ->distinct() ->orderBy('horario_saida') ->get(); } public static function getMunicipios() { $now = Carbon::now(); $currentDate = $now->format('Y-m-d'); $data_saida = request()->data_saida ?? $currentDate; return Agendar::join('intranet.cadastro_municipio', 'intranet.cadastro_municipio.id', '=', 'transporte_paciente_agendar_transporte.municipio_id') ->whereIn('transporte_paciente_agendar_transporte.status_id', [Status::AGENDADO, Status::MODIFICADO]) ->where('transporte_paciente_agendar_transporte.data_saida', $data_saida) ->whereNotNull('transporte_paciente_agendar_transporte.viagem_id') ->select('intranet.cadastro_municipio.id','intranet.cadastro_municipio.nome') ->distinct() ->get(); } public static function getDestinos() { $now = Carbon::now(); $currentDate = $now->format('Y-m-d'); $data_saida = request()->data_saida ?? $currentDate; return Destino::join('transporte_paciente_agendar_transporte', 'transporte_paciente_agendar_transporte.destino_id', '=', 'transporte_paciente_destino.id') ->whereIn('transporte_paciente_agendar_transporte.status_id', [Status::AGENDADO, Status::MODIFICADO]) ->where('transporte_paciente_destino.municipio_id', request()->municipio_id) ->where('transporte_paciente_agendar_transporte.data_saida', $data_saida) ->where('transporte_paciente_destino.bloqueado', false) ->whereNotNull('transporte_paciente_agendar_transporte.viagem_id') ->select('transporte_paciente_destino.id','transporte_paciente_destino.descricao_destino as descricao') ->distinct() ->get(); } private static function getModelData($destino = null) { $destino = [ 'id' => $destino->id ?? null, 'municipio_id' => $destino->municipio_id ?? null, 'destino_id' => $destino->destino_id ?? null, 'data_saida' => $destino->data_saida ?? null, 'horario_saida' => $destino->horario_saida ?? null, 'jornada_id' => $destino->jornada_id ?? null, 'veiculo_id' => $destino->veiculo_id ?? null, 'total_agendados' => $destino->total_agendados ?? null, 'capacidade' => $destino->capacidade ?? null, 'tipo_veiculo_id' => $destino->tipo_veiculo_id ?? null, 'tipo_passageiro_id' => $destino->tipo_passageiro_id ?? null, 'supervisor_id' => $destino->supervisor_id ?? null, 'total_agendados' => $destino->total_agendados ?? null, 'capacidade' => $destino->capacidade ?? null, ]; return $destino; } public static function create() { return [ 'form' => self::getFormData(), 'model' => self::getModelData(), ]; } public static function store() { $viagens = []; foreach (request()->all() as $params) { if ($params['atribuido'] === true) { $escolher = Agendar::where('id', $params['id'])->first(); if($escolher->veiculo_id != $params['veiculo_id']) { $escolher->veiculo_edited_by = self::getCurrentLotacao()->usuario->id; $escolher->veiculo_edited_at = Carbon::now(); $escolher->funcionalidade_origem = Funcionalidade::TRANSFERENCIA_VEICULO; } $escolher->veiculo_id = $params['veiculo_id']; $escolher->supervisor_id = $params['supervisor_id']; $escolher->jornada_id = $params['jornada_id']; $viagem_id = $escolher->viagem_id; $viagem = Viagem::where('id', $params['viagem_id'])->where('status_id', ViagemStatus::ABERTO)->first(); if($viagem) { $viagem->diaria = $params['diaria']; $viagem->jornada_id = $params['jornada_id']; if (!is_null($params['diaria'])) { $viagem->diaria = str_replace('.', '', $viagem->diaria); $viagem->diaria = str_replace(',', '.', $viagem->diaria); } $viagem->condutor_id = $params['motorista_id']; $viagem->save(); $escolher->viagem_id = $params['viagem_id']; } else { $atual = Viagem::where('id', $escolher->viagem_id)->where('status_id', ViagemStatus::ABERTO)->first(); $viagem = Viagem::create([ 'condutor_id' => $params['motorista_id'], 'veiculo_id' => $params['veiculo_id'], 'data' => Carbon::createFromFormat('d/m/Y', $params['data_saida']), 'horario_saida_temp' => $atual->horario_saida_temp, 'diaria' => $atual->diaria, 'jornada_id' => $params['jornada_id'], 'status' => ViagemStatus::ABERTO, ])->fresh(); $escolher->viagem_id = $viagem->id; array_push($viagens, $viagem->id); } $escolher->save(); if(Agendar::where('viagem_id', $viagem_id)->get()->count() == 0) { $viagem_anterior = Viagem::find($viagem_id); $viagem_anterior->status_id = ViagemStatus::CANCELADO; if(is_null($viagem->protocolo)) { $viagem->protocolo = $viagem_anterior->protocolo; $viagem->save(); } $viagem_anterior->protocolo = Viagem::max('protocolo') + 1; $viagem_anterior->save(); } } } foreach ($viagens as $viagem_id) { $viagem = Viagem::find($viagem_id); if(is_null($viagem->protocolo)) { $viagem->protocolo = Viagem::max('protocolo') + 1; $viagem->save(); } } } }