This commit is contained in:
311
api/app/Services/TransportePaciente/Veiculo/VeiculoService.php
Normal file
311
api/app/Services/TransportePaciente/Veiculo/VeiculoService.php
Normal file
@@ -0,0 +1,311 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Veiculo;
|
||||
|
||||
use App\Exceptions\Model\DeletingModelException;
|
||||
use App\Models\TransportePaciente\Veiculo\Combustivel;
|
||||
use App\Models\TransportePaciente\Veiculo\Cor;
|
||||
use App\Models\TransportePaciente\Veiculo\Marca;
|
||||
use App\Models\TransportePaciente\Veiculo\Tipo;
|
||||
use App\Models\TransportePaciente\Veiculo\TipoPassageiro;
|
||||
use App\Models\TransportePaciente\Veiculo\Veiculo;
|
||||
use App\Rules\NomeCompleto;
|
||||
use App\Services\Service;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class VeiculoService extends Service
|
||||
{
|
||||
private static function obterCombustiveis()
|
||||
{
|
||||
|
||||
return Combustivel::all();
|
||||
}
|
||||
|
||||
private static function obterCores()
|
||||
{
|
||||
|
||||
return Cor::orderBy('descricao')->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.',
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user