get(); } private static function obterMarcas() { return Marca::orderBy('descricao')->get(); } private static function obterTipos() { return Tipo::all(); } private static function obterTiposPassageiros() { return TipoPassageiro::all(); } private static function getFormData() { $now = Carbon::now(); return [ 'combustiveis' => self::obterCombustiveis(), 'cores' => self::obterCores(), 'marcas' => self::obterMarcas(), 'tipos' => self::obterTipos(), 'tiposPassageiros' => self::obterTiposPassageiros(), 'dataAtual' => $now->format('d/m/Y'), ]; } private static function getModelData($veiculo = null) { return [ 'id' => $veiculo->id ?? null, 'numero_placa' => $veiculo->numero_placa ?? null !== null ? MaskUtil::getPlacaMasked($veiculo->numero_placa) : null, 'padrao_placa_mercosul' => $veiculo->padrao_placa_mercosul ?? null, 'descricao_modelo' => $veiculo->descricao_modelo ?? null, 'numero_capacidade' => $veiculo->numero_capacidade ?? null, 'ano_fabricacao' => $veiculo->ano_fabricacao ?? null, 'numero_patrimonio' => $veiculo->numero_patrimonio ?? null, 'prefixo' => $veiculo->prefixo ?? null, 'kilometro_inicial' => $veiculo->kilometro_inicial ?? null, 'numero_renavam' => $veiculo->numero_renavam ?? null, 'numero_eixos' => $veiculo->numero_eixos ?? null, 'numero_chassi' => $veiculo->numero_chassi ?? null, 'data_aquisicao' => $veiculo->data_aquisicao ?? null, 'numero_cnpj_proprietario' => $veiculo->numero_cnpj_proprietario ?? null !== null ? MaskUtil::getCnpjMasked($veiculo->numero_cnpj_proprietario) : null, 'nome_proprietario' => $veiculo->nome_proprietario ?? null, 'bloqueado' => $veiculo->bloqueado ?? null, 'tipo_ambulancia' => $veiculo->tipo_ambulancia ?? null, 'marca_id' => $veiculo->marca_id ?? null, 'tipo_id' => $veiculo->tipo_id ?? null, 'tipo_passageiro_id' => $veiculo->tipo_passageiro_id ?? null, 'cor_id' => $veiculo->cor_id ?? null, 'combustivel_id' => $veiculo->combustivel_id ?? null, ]; } public static function create() { return [ 'form' => self::getFormData(), 'model' => self::getModelData(), ]; } public static function show($id) { return Veiculo::find($id); } public static function update($id) { self::validate(); return Veiculo::where('id', $id)->update(request()->all()); } public static function bloquear($id) { $veiculo = self::show($id); return Veiculo::where('id', $id)->update(['bloqueado' => $veiculo->bloqueado == 1 ? 0 : 1]); } public static function edit($id) { return [ 'form' => self::getFormData(), 'model' => self::getModelData(self::show($id)), ]; } public static function store() { self::validate(); return Veiculo::create(request()->all())->fresh(); } public static function destroy($id) { try { return self::show($id)->delete(); } catch (\Throwable $th) { throw new DeletingModelException(); } } public static function datatable() { $veiculos = DB::table('transporte_paciente_veiculo') ->join( 'transporte_paciente_veiculo_combustivel', 'transporte_paciente_veiculo.combustivel_id', '=', 'transporte_paciente_veiculo_combustivel.id' ) ->join( 'transporte_paciente_veiculo_cor', 'transporte_paciente_veiculo.cor_id', '=', 'transporte_paciente_veiculo_cor.id' ) ->join( 'transporte_paciente_veiculo_marca', 'transporte_paciente_veiculo.marca_id', '=', 'transporte_paciente_veiculo_marca.id' ) ->join( 'transporte_paciente_veiculo_tipo', 'transporte_paciente_veiculo.tipo_id', '=', 'transporte_paciente_veiculo_tipo.id' ) ->select( 'transporte_paciente_veiculo.*', 'transporte_paciente_veiculo_combustivel.descricao as descricao_combustivel', 'transporte_paciente_veiculo_cor.descricao as descricao_cor', 'transporte_paciente_veiculo_marca.descricao as descricao_marca', 'transporte_paciente_veiculo_tipo.descricao as descricao_tipo', DB::raw(" CASE WHEN transporte_paciente_veiculo.bloqueado THEN 'INATIVO' ELSE 'ATIVO' END AS status "), ); return datatables() ->of($veiculos) ->filterColumn('transporte_paciente_veiculo.bloqueado', function ($query, $keyword) { $query->whereRaw(" CASE WHEN transporte_paciente_veiculo.bloqueado THEN 'INATIVO' ELSE 'ATIVO' END LIKE ?", ["%{$keyword}%"] ); }) ->filterColumn('transporte_paciente_veiculo.numero_placa', function ($query, $keyword) { $query ->whereRaw("transporte_paciente_veiculo.numero_placa like ?", ["%{$keyword}%"]) ->orWhereRaw( "CONCAT( SUBSTR(transporte_paciente_veiculo.numero_placa,1,3), '-', SUBSTR(transporte_paciente_veiculo.numero_placa,4,4) ) like ?", ["%{$keyword}%"] ); }); } private static function validate() { return request()->validate( [ 'numero_placa' => [ 'required', 'string', 'min:7', 'max:7', Rule::unique('transporte_paciente_veiculo') ->ignore(request()->veiculo) ], 'descricao_modelo' => [ 'required', 'max:56', ], 'numero_capacidade' => [ 'required', 'max:3', ], 'ano_fabricacao' => [ 'required', 'min:4', 'max:4', ], 'numero_patrimonio' => [ 'max:10', ], 'prefixo' => [ 'max:3', ], 'kilometro_inicial' => [ 'required', 'max:11', ], 'numero_renavam' => [ 'required', 'max:11', Rule::unique('transporte_paciente_veiculo') ->ignore(request()->veiculo) ], 'numero_eixos' => [ 'required', 'max:2', ], 'numero_chassi' => [ 'required', 'max:17', Rule::unique('transporte_paciente_veiculo') ->ignore(request()->veiculo) ], 'data_aquisicao' => [ 'required' ], 'numero_cnpj_proprietario' => [ 'required', 'max:14', ], 'nome_proprietario' => [ 'required', 'min:4', 'max:72', new NomeCompleto, ], 'bloqueado' => [ 'required', ], 'tipo_ambulancia' => [ 'required', ], 'marca_id' => [ 'required', ], 'tipo_id' => [ 'required', ], 'tipo_passageiro_id' => [ 'required', ], 'cor_id' => [ 'required', ], 'combustivel_id' => [ 'required', ], ], [ 'numero_placa.unique' => 'A placa já foi inserida anteriormente.', 'numero_renavam.unique' => 'O número do renavam já foi inserido anteriormente.', 'numero_chassi.unique' => 'O número do chassi já foi inserido anteriormente.', ] ); } }