This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user