init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,210 @@
<?php
namespace App\Services\ExameLaboratorial;
use App\Models\ExameLaboratorial\FormulaExame\FormulaExame;
use App\Models\ExameLaboratorial\FormulaExame\FormulaExameFator;
use App\Models\ExameLaboratorial\FormulaExame\Operacao;
use App\Services\Service;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class FormulaExameService extends Service
{
public static function datatable()
{
$FormulaExame = DB::table('exame_laboratorial_formula_exame')
->leftJoin(
'exame_laboratorial_formula_exame_fator',
'exame_laboratorial_formula_exame_fator.formula_exame_id',
'exame_laboratorial_formula_exame.id'
)
->groupBy('exame_laboratorial_formula_exame.id')
->select(
'exame_laboratorial_formula_exame.id',
'exame_laboratorial_formula_exame.nome',
DB::raw('group_concat(exame_laboratorial_formula_exame_fator.fator separator ", ") as fatores'),
)
->whereNull('exame_laboratorial_formula_exame.deleted_at');
return $FormulaExame;
}
public static function create()
{
return [
'form' => [
'operacoes' => Operacao::orderBy('id')
->get()
->map(fn ($query) => [
'id' => $query->id,
'descricao' => $query->descricao,
]),
],
];
}
public static function store(Request $request)
{
self::validate($request);
$formula_exame = new FormulaExame;
DB::transaction(function () use ($request) {
$formula_exame = FormulaExame::create($request->all());
$formula_exame_id = $formula_exame->id;
foreach ($request['fatores'] as $param) {
$fator = new FormulaExameFator();
$fator->fill($param);
$fator->formula_exame_id = $formula_exame_id;
$fator->valor = $param['valor'];
if (!is_null($param['valor'])) {
$fator->valor = str_replace('.', '', $fator->valor);
$fator->valor = str_replace(',', '.', $fator->valor);
}
$fator->exponenciacao_valor = $param['exponenciacao_valor'];
if (!is_null($param['exponenciacao_valor'])) {
$fator->exponenciacao_valor = str_replace('.', '', $fator->exponenciacao_valor);
$fator->exponenciacao_valor = str_replace(',', '.', $fator->exponenciacao_valor);
}
$fator->save();
}
});
return $formula_exame;
}
public static function edit($id)
{
$FormulaExame = FormulaExame::findOrFail($id);
return [
'form' => [
'operacoes' => Operacao::orderBy('id')
->get()
->map(fn ($query) => [
'id' => $query->id,
'descricao' => $query->descricao,
]),
],
'model' => [
'id' => $FormulaExame->id,
'nome' => $FormulaExame->nome,
'fatores' => FormulaExameFator::where('formula_exame_id', $FormulaExame->id)
->get()
->map(function($query) {
return [
'id' => $query->id,
'formula_exame_id' => $query->formula_exame_id,
'fator' => $query->fator,
'operacao_id' => $query->operacao_id,
'operacao_descricao' => $query->operacao->descricao,
'tipo' => $query->tipo,
'valor' => $query->valor ? number_format($query->valor, 6, ',', '.') : null,
'exponenciacao' => $query->exponenciacao ? true : false,
'exponenciacao_tipo' => $query->exponenciacao_tipo,
'exponenciacao_valor' => $query->exponenciacao_valor
? number_format($query->exponenciacao_valor, 6, ',', '.')
: null,
'ordem' => $query->ordem,
];
})->values(),
]
];
}
public static function update($request, $id)
{
self::validate($request);
$FormulaExame = FormulaExame::findOrFail($id);
DB::transaction(function () use ($request, $FormulaExame, $id) {
$FormulaExame->update($request->all());
$ids = [];
foreach ($request['fatores'] as $param) {
$fator = FormulaExameFator::where('id', $param['id'])
->first() ?? new FormulaExameFator();
$fator->fill($param);
$fator->formula_exame_id = $id;
$fator->valor = $param['valor'];
if (!is_null($param['valor'])) {
$fator->valor = str_replace('.', '', $fator->valor);
$fator->valor = str_replace(',', '.', $fator->valor);
}
$fator->exponenciacao_valor = $param['exponenciacao_valor'];
if (!is_null($param['exponenciacao_valor'])) {
$fator->exponenciacao_valor = str_replace('.', '', $fator->exponenciacao_valor);
$fator->exponenciacao_valor = str_replace(',', '.', $fator->exponenciacao_valor);
}
$fator->save();
$ids[] = $fator->id;
}
FormulaExameFator::where('formula_exame_id', $id)->whereNotIn('id', $ids)->delete();
});
return $FormulaExame;
}
public static function destroy($id)
{
FormulaExame::findOrFail($id)->delete();
return null;
}
private static function validate($request)
{
$validations = [
'nome' => [
'required',
'string',
'between:3,100',
],
'fatores.*.fator' => [
'required',
'string',
'between:3,50',
],
'fatores.*.operacao_id' => [
'required',
'integer',
],
'fatores.*.ordem' => [
'required',
'integer',
],
];
$messages = [
'nome.required' => 'Nome é obrigatório.',
'fatores.*.fator' => 'Fator é obrigatório.',
'fatores.*.operacao_id' => 'Operação é obrigatória.',
'fatores.*.ordem' => 'Ordem é obrigatória.',
];
return $request->validate($validations, $messages);
}
}