Files
rkm-conectasus-ci-sandbox/api/app/Services/Farmacia/LivroPsicotropicoService.php
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

165 lines
4.3 KiB
PHP

<?php
namespace App\Services\Farmacia;
use App\Enums\Cadastro\Material\LivroRegistro as LivroRegistroEnum;
use App\Enums\Cadastro\Material\LivroRegistroTipo as LivroRegistroTipoEnum;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Farmacia\Livro;
use App\Models\Farmacia\LivroPagina;
use App\Services\Service;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
class LivroPsicotropicoService extends Service
{
public static $livroRegistroIds = [
LivroRegistroEnum::ENTORPECENTES,
LivroRegistroEnum::PSICOTROPICOS,
LivroRegistroEnum::CONTROLE_ESPECIAL,
LivroRegistroEnum::IMUNOSSUPRESSORES,
LivroRegistroEnum::ANTI_RETROVIRAIS,
LivroRegistroEnum::ANABOLIZANTE,
LivroRegistroEnum::ANTIMICROBIANOS,
];
public static $livroRegistroTipoIds = [
LivroRegistroTipoEnum::A1,
LivroRegistroTipoEnum::A2,
LivroRegistroTipoEnum::A3,
LivroRegistroTipoEnum::B1,
LivroRegistroTipoEnum::B2,
LivroRegistroTipoEnum::C1,
LivroRegistroTipoEnum::C2,
LivroRegistroTipoEnum::C3,
LivroRegistroTipoEnum::C4,
LivroRegistroTipoEnum::C5,
];
public static function datatable()
{
return LivroService::datatable(self::$livroRegistroIds, self::$livroRegistroTipoIds, true);
}
public static function list()
{
return LivroService::list(self::$livroRegistroIds, self::$livroRegistroTipoIds, true);
}
public static function create()
{
return LivroService::create(self::$livroRegistroIds, self::$livroRegistroTipoIds);
}
public static function edit($id)
{
$livro = Livro::findOrFail($id);
return LivroService::edit($livro, self::$livroRegistroIds, self::$livroRegistroTipoIds);
}
public static function getLinhas($paginaId)
{
$pagina = LivroPagina::findOrFail($paginaId);
return LivroService::getLinhas($pagina);
}
public static function store()
{
self::validate();
$livro = null;
DB::transaction(function () use (&$livro) {
$livro = LivroService::store(self::getStoreParams());
});
return $livro;
}
private static function getStoreParams()
{
$params = request()->except(['numero', 'status_id']);
$params['aberto_em'] = Carbon::createFromFormat('d/m/Y', $params['aberto_em']);
return $params;
}
public static function update($id)
{
$livro = Livro::findOrFail($id);
DB::transaction(function () use ($livro) {
LivroService::updateMovimentacoes($livro);
});
return $livro;
}
public static function fecharLivro($id)
{
$livro = Livro::findOrFail($id);
DB::transaction(function () use ($livro) {
LivroService::fecharLivro($livro);
});
return $livro->fresh();
}
public static function validate()
{
$rules = [
'aberto_em' => [
'required',
'date_format:d/m/Y'
],
'livro_registro_id' => [
'required',
'integer',
Rule::in(self::$livroRegistroIds),
],
'livro_registro_tipo_id' => [
'nullable',
Rule::requiredIf(fn () => request()->livro_registro_id !== LivroRegistroEnum::ANTIMICROBIANOS),
'integer',
Rule::in(self::$livroRegistroTipoIds),
],
'quantidade_paginas' => [
'required',
'integer',
'between:1,999',
],
'registro' => [
'required',
'string',
'max:100',
],
'usuario_farmaceutico_id' => [
'required',
'integer',
Rule::exists(Usuario::class, 'id'),
],
'inscricao_estadual' => [
'nullable',
'digits_between:8,14',
],
'autoridade_sanitaria' => [
'required',
'string',
'max:100',
],
];
$messages = [];
request()->validate($rules, $messages);
}
}