This commit is contained in:
210
api/app/Services/ExameLaboratorial/FormulaExameService.php
Normal file
210
api/app/Services/ExameLaboratorial/FormulaExameService.php
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user