211 lines
6.7 KiB
PHP
211 lines
6.7 KiB
PHP
<?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);
|
|
}
|
|
}
|