This commit is contained in:
208
api/app/Services/Cadastro/FeridaService.php
Normal file
208
api/app/Services/Cadastro/FeridaService.php
Normal file
@@ -0,0 +1,208 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Models\Cadastro\Ferida;
|
||||
use App\Models\Cadastro\FeridaProcedimento;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class FeridaService extends Service
|
||||
{
|
||||
public static function datatable()
|
||||
{
|
||||
return DB::table('cadastro_ferida as ferida')
|
||||
->select(DB::raw("
|
||||
ferida.id,
|
||||
ferida.nome,
|
||||
ferida.ativo,
|
||||
'ferida.identificador_externo',
|
||||
ferida.observacao
|
||||
"));
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => [
|
||||
'nome' => null,
|
||||
'ativo' => true,
|
||||
'identificador_externo' => null,
|
||||
'cid' => null,
|
||||
'observacao' => null,
|
||||
'procedimento' => null,
|
||||
'procedimentos' => [],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$params = self::getParams();
|
||||
|
||||
$ferida = Ferida::create($params);
|
||||
|
||||
foreach (request()->procedimentos as $procedimento) {
|
||||
|
||||
$cidId = $procedimento['cid_id'] ?? null;
|
||||
$quantidade = $procedimento['quantidade'] ?? null;
|
||||
|
||||
FeridaProcedimento::create([
|
||||
'ferida_id' => $ferida->id,
|
||||
'procedimento_id' => $procedimento['id'],
|
||||
'cid_id' => $cidId,
|
||||
'quantidade' => $quantidade,
|
||||
]);
|
||||
}
|
||||
|
||||
return $ferida;
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$ferida = Ferida::with(
|
||||
[
|
||||
'procedimentos.procedimento',
|
||||
'procedimentos.cid'
|
||||
]
|
||||
)->findOrFail($id);
|
||||
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => [
|
||||
'nome' => $ferida->nome,
|
||||
'ativo' => $ferida->ativo ?? false,
|
||||
'identificador_externo' => $ferida->identificador_externo,
|
||||
'observacao' => $ferida->observacao ?? null,
|
||||
'procedimento' => null,
|
||||
'procedimentos' => $ferida->procedimentos->map(fn ($procedimento) =>
|
||||
|
||||
(object) [
|
||||
'codigo' => $procedimento->procedimento->codigo,
|
||||
'nome' => $procedimento->procedimento->nome,
|
||||
'id' => $procedimento->procedimento_id,
|
||||
'cid_id' => $procedimento->cid_id,
|
||||
'cid' => $procedimento->cid,
|
||||
'quantidade' => $procedimento->quantidade,
|
||||
]
|
||||
),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$ferida = Ferida::findOrFail($id);
|
||||
$params = self::getParams();
|
||||
|
||||
$ferida->update($params);
|
||||
|
||||
FeridaProcedimento::where('ferida_id', $ferida->id)->delete();
|
||||
|
||||
foreach (request()->procedimentos as $procedimento) {
|
||||
|
||||
$cidId = $procedimento['cid_id'] ?? null;
|
||||
$quantidade = $procedimento['quantidade'] ?? null;
|
||||
|
||||
FeridaProcedimento::create([
|
||||
'ferida_id' => $ferida->id,
|
||||
'procedimento_id' => $procedimento['id'],
|
||||
'cid_id' => $cidId,
|
||||
'quantidade' => $quantidade,
|
||||
]);
|
||||
}
|
||||
|
||||
return $ferida->fresh();
|
||||
}
|
||||
|
||||
private static function getParams()
|
||||
{
|
||||
$params = request()->except(['procedimentos']);
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
public static function activate($id)
|
||||
{
|
||||
$feriado = Ferida::findOrFail($id);
|
||||
|
||||
$feriado->update(['ativo' => true]);
|
||||
|
||||
return $feriado->fresh();
|
||||
}
|
||||
|
||||
public static function deactivate($id)
|
||||
{
|
||||
$feriado = Ferida::findOrFail($id);
|
||||
|
||||
$feriado->update(['ativo' => false]);
|
||||
|
||||
return $feriado->fresh();
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
|
||||
FeridaProcedimento::where('ferida_id', $id)->delete();
|
||||
Ferida::findOrFail($id)->delete();
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
$validator = Validator::make(request()->all(), [
|
||||
'nome' => [
|
||||
'required',
|
||||
'string',
|
||||
'between:3,100',
|
||||
Rule::unique(Ferida::class, 'nome')
|
||||
->ignore(request()->route('ferida'))
|
||||
],
|
||||
'ativo' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
'identificador_externo' => [
|
||||
'nullable',
|
||||
'alpha_num',
|
||||
'max:64',
|
||||
Rule::unique(Ferida::class, 'identificador_externo')
|
||||
->ignore(request()->route('ferida'))
|
||||
],
|
||||
'observacao' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:500',
|
||||
],
|
||||
], [
|
||||
'nome.unique' => 'O nome da Ferida já foi inserido anteriormente.',
|
||||
'identificador_externo.alpha_num' => 'O Identificador Externo deve conter apenas letras e números.',
|
||||
'identificador_externo.max' => 'O Identificador Externo não pode ter mais que 64 caracteres.',
|
||||
'identificador_externo.unique' => 'O Identificador Externo já está em uso.',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
if ($validator->errors()->has('identificador_externo')) {
|
||||
Log::info('Tentativa de gravação de Identificador Externo inválido ou duplicado.', [
|
||||
'user_id' => auth()->id(),
|
||||
'identificador_externo' => request('identificador_externo'),
|
||||
'errors' => $validator->errors()->get('identificador_externo')
|
||||
]);
|
||||
}
|
||||
|
||||
$validator->validate();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user