This commit is contained in:
228
api/app/Services/Manutencao/ParametrizacaoService.php
Normal file
228
api/app/Services/Manutencao/ParametrizacaoService.php
Normal file
@@ -0,0 +1,228 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Manutencao;
|
||||
|
||||
use App\Models\Manutencao\Prioridade;
|
||||
use App\Models\Manutencao\PrioridadeTipo;
|
||||
use App\Models\Manutencao\Sla;
|
||||
use App\Models\Manutencao\Status;
|
||||
use App\Models\Manutencao\StatusTipo;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
use App\Models\Cadastro\ServicoManutencao;
|
||||
use App\Models\Manutencao\SolicitacaoStatusHistorico;
|
||||
|
||||
class ParametrizacaoService extends Service
|
||||
{
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
|
||||
return [
|
||||
'status_tipo' => StatusTipo::all(),
|
||||
'prioridade_tipo' => PrioridadeTipo::all(),
|
||||
'prioridades' => Prioridade::select('id', 'nome')->get(),
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
private static function getModelData()
|
||||
{
|
||||
return [
|
||||
'status' => Status::all()->map(fn ($status) => [
|
||||
'id' => $status->id,
|
||||
'tipo_status_id' => $status->tipo_id,
|
||||
'tipo_status_nome' => $status->statusTipo->nome,
|
||||
'nome_status' => $status->nome,
|
||||
'allow_destroy' => SolicitacaoStatusHistorico::where('status_id', $status->id)->exists(),
|
||||
]),
|
||||
'prioridade' => Prioridade::all()->map(fn ($prioridade) => [
|
||||
'id' => $prioridade->id,
|
||||
'tipo_prioridade_id' => $prioridade->tipo_id,
|
||||
'tipo_prioridade_nome' => $prioridade->prioridadeTipo->nome,
|
||||
'nome_prioridade' => $prioridade->nome,
|
||||
'allow_destroy' => ServicoManutencao::where('prioridade_id', $prioridade->id)->exists(),
|
||||
]),
|
||||
'sla' => Sla::all()->map(fn ($sla) => [
|
||||
'id' => $sla->id,
|
||||
'prioridade_id' => $sla->prioridade_id,
|
||||
'prioridade_nome' => $sla->prioridade->nome,
|
||||
'tempo_de_atendimento' => $sla->tempo_atendimento,
|
||||
'allow_destroy' => TRUE,
|
||||
]),
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$status = collect(request()->status);
|
||||
$prioridade = collect(request()->prioridade);
|
||||
$sla = collect(request()->sla);
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
try {
|
||||
|
||||
$statusParams = self::saveStatus($status);
|
||||
$slaParams = self::saveSla($sla);
|
||||
$prioridadeParams = self::savePrioridade($prioridade);
|
||||
|
||||
DB::commit();
|
||||
|
||||
return [
|
||||
'status' => $statusParams,
|
||||
'prioridade' => $prioridadeParams,
|
||||
'sla' => $slaParams,
|
||||
];
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
private static function saveStatus($status)
|
||||
{
|
||||
$statusIds = $status->pluck('id');
|
||||
|
||||
$status->each(function ($status) {
|
||||
Status::updateOrCreate(
|
||||
[
|
||||
'id' => $status['id'],
|
||||
],
|
||||
[
|
||||
'tipo_id' => $status['tipo_status_id'],
|
||||
'nome' => $status['nome_status'],
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
Status::whereNotIn('id', $statusIds)->delete();
|
||||
|
||||
return $status->pluck('id');
|
||||
}
|
||||
|
||||
private static function savePrioridade($prioridade)
|
||||
{
|
||||
$prioridadeIds = $prioridade->pluck('id');
|
||||
|
||||
$prioridade->each(function ($prioridade) {
|
||||
Prioridade::updateOrCreate(
|
||||
[
|
||||
'id' => $prioridade['id'],
|
||||
],
|
||||
[
|
||||
'tipo_id' => $prioridade['tipo_prioridade_id'],
|
||||
'nome' => $prioridade['nome_prioridade'],
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
Prioridade::whereNotIn('id', $prioridadeIds)->delete();
|
||||
|
||||
return $prioridade->pluck('id');
|
||||
}
|
||||
|
||||
private static function saveSla($sla)
|
||||
{
|
||||
$slaIds = $sla->pluck('id');
|
||||
|
||||
$sla->each(function ($sla) {
|
||||
Sla::updateOrCreate(
|
||||
[
|
||||
'id' => $sla['id'],
|
||||
],
|
||||
[
|
||||
'prioridade_id' => $sla['prioridade_id'],
|
||||
'tempo_atendimento' => $sla['tempo_de_atendimento'],
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
Sla::whereNotIn('id', $slaIds)->delete();
|
||||
|
||||
return $sla->pluck('id');
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
|
||||
self::getStatusValidations();
|
||||
self::getSlaValidations();
|
||||
self::getPrioridadeValidations();
|
||||
}
|
||||
|
||||
private static function getStatusValidations()
|
||||
{
|
||||
|
||||
request()->validate([
|
||||
'status' => [
|
||||
'present',
|
||||
'array',
|
||||
],
|
||||
'status.*.tipo_status_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists(StatusTipo::class, 'id'),
|
||||
],
|
||||
'status.*.nome_status' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:100',
|
||||
'min:3',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
private static function getSlaValidations()
|
||||
{
|
||||
request()->validate([
|
||||
'sla' => [
|
||||
'present',
|
||||
'array',
|
||||
],
|
||||
'sla.*.prioridade_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists(Prioridade::class, 'id'),
|
||||
],
|
||||
'sla.*.tempo_de_atendimento' => [
|
||||
'required',
|
||||
'string',
|
||||
'min:5',
|
||||
'max:6',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
private static function getPrioridadeValidations()
|
||||
{
|
||||
request()->validate([
|
||||
'prioridade' => [
|
||||
'present',
|
||||
'array',
|
||||
],
|
||||
'prioridade.*.tipo_prioridade_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists(PrioridadeTipo::class, 'id'),
|
||||
],
|
||||
'prioridade.*.nome_prioridade' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:100',
|
||||
'min:3',
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user