165 lines
4.3 KiB
PHP
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);
|
|
}
|
|
}
|