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); } }