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,275 @@
<?php
namespace App\Http\Controllers\Cadastro\Medicamento;
use App\Enums\Cadastro\Medicamento\FormaFarmaceutica as MedicamentoFormaFarmaceutica;
use App\Enums\Cadastro\Medicamento\ViaAdministracao as MedicamentoViaAdministracao;
use App\Enums\Cadastro\UnidadeMedida as CadastroUnidadeMedida;
use App\Http\Controllers\Controller;
use App\Http\Requests\Cadastro\Medicamento\MedicamentoRequest;
use App\Models\Cadastro\Medicamento\FormaFarmaceutica;
use App\Models\Cadastro\Medicamento\Medicamento;
use App\Models\Cadastro\Medicamento\ReceitaTipo;
use App\Models\Cadastro\Medicamento\ViaAdministracao;
use App\Models\Cadastro\UnidadeMedida;
use App\Utils\DataUtil;
use DB;
use Illuminate\Http\Response;
class MedicamentoController extends Controller
{
protected $modulo = 'cadastro';
protected $funcionalidade = 'medicamento';
public function autocomplete()
{
$medicamentos = DB::table('cadastro_medicamento')
->select(
'cadastro_medicamento.id',
'cadastro_medicamento.nome',
'cadastro_via_administracao.nome AS via_administracao',
'via_administracao_id',
'cadastro_forma_farmaceutica.nome AS forma_farmaceutica',
'forma_farmaceutica_id',
'cadastro_unidade_medida.sigla AS unidade_medida',
'unidade_medida_id',
'receita_tipo_id',
'exibir_receita',
'exibir_prescricao_interna',
)
->leftJoin(
'cadastro_forma_farmaceutica',
'cadastro_forma_farmaceutica.id',
'cadastro_medicamento.forma_farmaceutica_id'
)
->leftJoin(
'cadastro_via_administracao',
'cadastro_via_administracao.id',
'cadastro_medicamento.via_administracao_id'
)
->leftJoin(
'cadastro_unidade_medida',
'cadastro_unidade_medida.id',
'cadastro_medicamento.unidade_medida_id'
)
->whereNull('cadastro_medicamento.deleted_at');
if (DataUtil::isStringTrue(request()->exibir_prescricao_interna)) {
$medicamentos->where('cadastro_medicamento.exibir_prescricao_interna', '=', 1);
}
if (DataUtil::isStringTrue(request()->exibir_receita)) {
$medicamentos->where('cadastro_medicamento.exibir_receita', '=', 1);
}
if (is_numeric(request()->query('via_administracao_id'))) {
$medicamentos->where('via_administracao_id', request()->query('via_administracao_id'));
}
if (is_numeric(request()->query('receita_tipo_id'))) {
$medicamentos->where('receita_tipo_id', request()->query('receita_tipo_id'));
}
return datatables()->of($medicamentos)->toJson();
}
public function datatable()
{
$medicamentos = DB::table('cadastro_medicamento')
->select(
'id',
'nome',
)
->whereNull('cadastro_medicamento.deleted_at');
return datatables()->of($medicamentos)->skipTotalRecords()->toJson();
}
public function index()
{
$this->auth(__FUNCTION__);
$medicamentos = $this->get(Medicamento::class)->orderBy('nome')->get();
return response()->json($medicamentos, Response::HTTP_OK);
}
public function create()
{
$this->auth(__FUNCTION__);
$medicamento = new Medicamento;
$medicamento->fill(array_fill_keys($medicamento->getFillable(), null));
return response()->json(
[
'form' => $this->getFormData(),
'model' => $medicamento->makeHidden(['id'])
],
Response::HTTP_OK
);
}
public function store(MedicamentoRequest $request)
{
$this->auth(__FUNCTION__);
$medicamento = Medicamento::create($this->getParams($request))->fresh();
return response()->json($medicamento, Response::HTTP_CREATED);
}
public function show($id)
{
$this->auth(__FUNCTION__);
return response()->json($this->get(Medicamento::class, $id), Response::HTTP_OK);
}
public function edit($id)
{
$this->auth(__FUNCTION__);
$medicamento = Medicamento::findOrFail($id);
return response()->json(
[
'form' => $this->getFormData(),
'model' => $medicamento->makeHidden(['id'])
],
Response::HTTP_OK
);
}
private function getFormData()
{
return [
'unidades_medida' => $this->getUnidadesMedida(),
'vias_administracao' => $this->getViasAdministracao(),
'formas_farmaceutica' => $this->getFormasFarmaceuticas(),
'tipos_receita' => ReceitaTipo::orderBy('nome')->get(),
];
}
private function getUnidadesMedida()
{
$unidades = [
CadastroUnidadeMedida::GOTAS,
CadastroUnidadeMedida::GRAMAS,
CadastroUnidadeMedida::MILIGRAMAS,
CadastroUnidadeMedida::MILILITROS,
CadastroUnidadeMedida::UNIDADES,
CadastroUnidadeMedida::UNIDADES_INTERNACIONAIS,
CadastroUnidadeMedida::DOSE,
];
return UnidadeMedida::whereIn('id', $unidades)->orderBy('nome')->get(['id', 'nome']);
}
private function getViasAdministracao()
{
$vias = [
MedicamentoViaAdministracao::BUCAL,
MedicamentoViaAdministracao::CAPILAR,
MedicamentoViaAdministracao::DERMATOLOGICA,
MedicamentoViaAdministracao::ENDOVENOSA,
MedicamentoViaAdministracao::EPIDURAL,
MedicamentoViaAdministracao::EXTERNO,
MedicamentoViaAdministracao::INALATORIA,
MedicamentoViaAdministracao::INALATORIA_POR_VIA_NASAL,
MedicamentoViaAdministracao::INALATORIA_POR_VIA_ORAL,
MedicamentoViaAdministracao::INTRA_ARTERIAL,
MedicamentoViaAdministracao::INTRA_ARTICULAR,
MedicamentoViaAdministracao::INTRADERMICA,
MedicamentoViaAdministracao::INTRAMUSCULAR,
MedicamentoViaAdministracao::INTRATECAL,
MedicamentoViaAdministracao::INTRAUTERINA,
MedicamentoViaAdministracao::INTRAVENOSA,
MedicamentoViaAdministracao::IRRIGACAO,
MedicamentoViaAdministracao::LOCAL,
MedicamentoViaAdministracao::NASAL,
MedicamentoViaAdministracao::OFTALMICA,
MedicamentoViaAdministracao::ORAL,
MedicamentoViaAdministracao::OTOLOGICA,
MedicamentoViaAdministracao::OUTRAS,
MedicamentoViaAdministracao::PARENTERAL,
MedicamentoViaAdministracao::RETAL,
MedicamentoViaAdministracao::SUBCUTANEA,
MedicamentoViaAdministracao::SUBLINGUAL,
MedicamentoViaAdministracao::TOPICA,
MedicamentoViaAdministracao::TRANSDERMICA,
MedicamentoViaAdministracao::URETRAL,
MedicamentoViaAdministracao::VAGINAL,
MedicamentoViaAdministracao::IMPLANTE_SUBDERMICO,
];
return ViaAdministracao::whereIn('id', $vias)->orderBy('nome')->get();
}
private function getFormasFarmaceuticas()
{
$formas = [
MedicamentoFormaFarmaceutica::ADESIVO,
MedicamentoFormaFarmaceutica::AEROSSOL,
MedicamentoFormaFarmaceutica::CAPSULA,
MedicamentoFormaFarmaceutica::CARPULE,
MedicamentoFormaFarmaceutica::COLIRIO,
MedicamentoFormaFarmaceutica::COMPRIMIDO,
MedicamentoFormaFarmaceutica::CREME,
MedicamentoFormaFarmaceutica::DRAGEA,
MedicamentoFormaFarmaceutica::ELIXIR,
MedicamentoFormaFarmaceutica::EMULSAO,
MedicamentoFormaFarmaceutica::ENEMA,
MedicamentoFormaFarmaceutica::ESMALTE,
MedicamentoFormaFarmaceutica::GEL,
MedicamentoFormaFarmaceutica::GELEIA,
MedicamentoFormaFarmaceutica::GRANULADO,
MedicamentoFormaFarmaceutica::LIQUIDO,
MedicamentoFormaFarmaceutica::LOCAO,
MedicamentoFormaFarmaceutica::OVULO,
MedicamentoFormaFarmaceutica::PASTA,
MedicamentoFormaFarmaceutica::PASTILHA,
MedicamentoFormaFarmaceutica::PO,
MedicamentoFormaFarmaceutica::POMADA,
MedicamentoFormaFarmaceutica::SABONETE,
MedicamentoFormaFarmaceutica::SOLUCAO,
MedicamentoFormaFarmaceutica::SPRAY,
MedicamentoFormaFarmaceutica::SUPOSITORIO,
MedicamentoFormaFarmaceutica::SUSPENSAO,
MedicamentoFormaFarmaceutica::UNIDADE,
MedicamentoFormaFarmaceutica::TABLETE,
MedicamentoFormaFarmaceutica::XAROPE,
];
return FormaFarmaceutica::whereIn('id', $formas)->orderBy('nome')->get();
}
public function update(MedicamentoRequest $request, $id)
{
$this->auth(__FUNCTION__);
$medicamento = tap(Medicamento::findOrFail($id))->update($this->getParams($request));
return response()->json($medicamento->fresh(), Response::HTTP_OK);
}
private function getParams($request)
{
return $request->all();
}
public function destroy($id)
{
$this->auth(__FUNCTION__);
Medicamento::findOrFail($id)->delete();
return response()->json(null, Response::HTTP_NO_CONTENT);
}
}