276 lines
9.4 KiB
PHP
276 lines
9.4 KiB
PHP
<?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);
|
|
}
|
|
|
|
|
|
}
|