parametrizacao_descricao_vacina_id ?? null) { case ParametrizacaoDescricaoVacina::DESCRICAO: { return "{$tableAlias}.nome"; } case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA: { return "{$tableAlias}.abreviacao"; } case ParametrizacaoDescricaoVacina::SIGLA: { return "{$tableAlias}.sigla"; } case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO: { return "CONCAT({$tableAlias}.sigla, ' - ', {$tableAlias}.nome)"; } case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA: { return "CONCAT({$tableAlias}.sigla, ' - ', {$tableAlias}.abreviacao)"; } case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA_DESCRICAO: { return "CONCAT({$tableAlias}.abreviacao, ' - ', {$tableAlias}.nome)"; } case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA_DESCRICAO: { return "CONCAT({$tableAlias}.sigla, ' - ', {$tableAlias}.abreviacao, ' - ', {$tableAlias}.nome)"; } default: { return "{$tableAlias}.nome"; } } } public static function getDescricao($vacinaModel) { switch (Parametrizacao::first()->parametrizacao_descricao_vacina_id ?? null) { case ParametrizacaoDescricaoVacina::DESCRICAO: { return $vacinaModel->nome; } case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA: { return $vacinaModel->abreviacao; } case ParametrizacaoDescricaoVacina::SIGLA: { return $vacinaModel->sigla; } case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO: { return "{$vacinaModel->sigla} - {$vacinaModel->nome}"; } case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA: { return "{$vacinaModel->sigla} - {$vacinaModel->abreviacao}"; } case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA_DESCRICAO: { return "{$vacinaModel->abreviacao} - {$vacinaModel->nome}"; } case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA_DESCRICAO: { return "{$vacinaModel->sigla} - {$vacinaModel->abreviacao} - {$vacinaModel->nome}"; } default: { return $vacinaModel->nome; } } } public static function create() { return [ 'model' => self::getModelData(), ]; } public static function store($request) { self::validate($request); return Vacina::create($request->all())->fresh(); } public static function show($id) { return Vacina::find($id); } public static function edit($id) { return [ 'model' => self::getModelData($id), ]; } public static function update($request, $id) { self::validate($request); return self::show($id)->update($request->all()); } public static function destroy($id) { return self::show($id)->delete(); } public static function datatable() { return DB::table('cadastro_vacina') ->select([ 'id', 'codigo', 'nome', 'abreviacao', 'sigla', DB::raw("CASE WHEN calendario THEN 'Sim' ELSE 'Não' END AS calendario"), ]); } public static function autocomplete() { $vacinas = DB::table('cadastro_vacina') ->select([ 'id', 'codigo', 'nome', 'abreviacao', 'sigla', ]); if (request('distribuicao')) { $vacinas = DB::table('cadastro_vacina') ->select([ 'cadastro_vacina.id', 'cadastro_vacina.codigo', 'cadastro_vacina.nome', 'cadastro_vacina.abreviacao', 'cadastro_vacina.sigla', 'imunizacao_entrada_vacina.lote', 'imunizacao_produtor.nome AS produtor_nome', 'imunizacao_apresentacao.nome AS apresentacao' ]) ->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.vacina_id', 'cadastro_vacina.id') ->join('imunizacao_produtor', 'imunizacao_produtor.id', 'imunizacao_entrada_vacina.produtor_id') ->leftJoin('imunizacao_apresentacao', 'imunizacao_apresentacao.id', 'imunizacao_entrada_vacina.apresentacao_id') ->join('imunizacao_entrada', 'imunizacao_entrada_vacina.entrada_id', 'imunizacao_entrada.id') ->where('imunizacao_entrada.sala_vacinacao_id', request()->get('sala_vacinacao_id')) ->groupBy([ 'cadastro_vacina.id', 'cadastro_vacina.codigo', 'cadastro_vacina.nome', 'cadastro_vacina.abreviacao', 'cadastro_vacina.sigla', 'imunizacao_entrada_vacina.lote', 'imunizacao_produtor.nome', 'imunizacao_apresentacao.nome' ]) ->havingRaw(' SUM( imunizacao_entrada_vacina.quantidade - COALESCE(( SELECT SUM(isv.quantidade) FROM imunizacao_saida_vacina AS isv WHERE isv.entrada_vacina_id = imunizacao_entrada_vacina.id ), 0) ) > 0 '); } if(request()->has('registro')) { if (request()->has('usar_esquema_vacinal') && DataUtil::isStringTrue(request()->usar_esquema_vacinal)) { $dataNascimento = Paciente::findOrFail(request()->paciente_id)->cidadao->data_nascimento; if (is_null($dataNascimento)) { $vacinas->whereRaw('1 = 0'); } $dataRegistro = Carbon::createFromFormat('d/m/Y', request()->data_registro); $idade = $dataNascimento->diff($dataRegistro); $vacinas->whereExists(function ($query) use ($idade) { $query->select(DB::raw(1)) ->from('imunizacao_esquema_vacinal_regra as regra') ->join('imunizacao_esquema_vacinal_faixa_etaria as faixa_etaria', 'faixa_etaria.id', 'regra.faixa_etaria_id') ->whereColumn('regra.vacina_id', 'cadastro_vacina.id') ->where(fn ($q) => $q ->where(fn ($q) => $q ->where('faixa_etaria.inicio_ano', '<', $idade->y) ->orWhere(fn ($q) => $q ->where('faixa_etaria.inicio_ano', '=', $idade->y) ->where('faixa_etaria.inicio_mes', '<', $idade->m) ) ->orWhere(fn ($q) => $q ->where('faixa_etaria.inicio_ano', '=', $idade->y) ->where('faixa_etaria.inicio_mes', '=', $idade->m) ->where('faixa_etaria.inicio_dia', '<=', $idade->d) ) ) ->where(fn ($q) => $q ->where('faixa_etaria.fim_ano', '>', $idade->y) ->orWhere(fn ($q) => $q ->where('faixa_etaria.fim_ano', '=', $idade->y) ->where('faixa_etaria.fim_mes', '>', $idade->m) ) ->orWhere(fn ($q) => $q ->where('faixa_etaria.fim_ano', '=', $idade->y) ->where('faixa_etaria.fim_mes', '=', $idade->m) ->where('faixa_etaria.fim_dia', '>=', $idade->d) ) ) ); }); } else { $vacinas->whereExists(function($query) { $query->select(DB::raw(1)) ->from('atencao_basica_vacinacao_regra') ->when((isset(request()->origem) && request()->origem === 'aplicacao'), fn ($q) => $q->where('exibe_aplicacao', true)) ->when((isset(request()->origem) && request()->origem === 'atualizacao'), fn ($q) => $q->where('exibe_atualizacao', true)) ->when((isset(request()->origem) && request()->origem === 'aprazamento'), fn ($q) => $q->where('exibe_aprazamento', true)) ->whereColumn('atencao_basica_vacinacao_regra.codigo', 'cadastro_vacina.codigo'); }); } } if(request()->has('cria_ficha_ab')) { $vacinas->whereNotNull('codigo'); } /*if (request()->has('sala_vacinacao_id') && request()->has('possui_saldo_estoque')) { $vacinas->whereRaw(' ( SELECT SUM(imunizacao_entrada_vacina.quantidade - COALESCE(( SELECT SUM(imunizacao_saida_vacina.quantidade) FROM imunizacao_saida_vacina WHERE imunizacao_saida_vacina.entrada_vacina_id = imunizacao_entrada_vacina.id ), 0)) FROM imunizacao_entrada_vacina INNER JOIN imunizacao_entrada ON imunizacao_entrada.id = imunizacao_entrada_vacina.entrada_id WHERE imunizacao_entrada.sala_vacinacao_id = ' . request()->get('sala_vacinacao_id') . ' AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id ) > 0 '); }*/ return $vacinas; } private static function validate($request) { return $request->validate([ 'nome' => [ 'required', 'string', 'between:3,300', Rule::unique('cadastro_vacina')->ignore($request->vacina), ], 'abreviacao' => [ 'required', 'string', 'between:1,100', ], 'sigla' => [ 'required', 'string', 'between:1,100', ], 'calendario' => [ 'required', 'boolean', ], ]); } private static function getModelData($id = null) { $vacina = self::show($id); return [ 'id' => $vacina->id ?? null, 'codigo' => $vacina->codigo ?? null, 'nome' => $vacina->nome ?? null, 'abreviacao' => $vacina->abreviacao ?? null, 'sigla' => $vacina->sigla ?? null, 'calendario' => $vacina->calendario ?? false, ]; } public static function getPaciente($id) { $paciente = DB::table('cadastro_paciente') ->select([ 'cadastro_cidadao.data_nascimento AS cidadao_data_nascimento', ]) ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id') ->whereNull('cadastro_paciente.deleted_at') ->where('cadastro_paciente.id', $id) ->first(); return [ 'cidadao_idade_anos' => (int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%y'), 'cidadao_idade_meses' => (int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%m'), 'cidadao_idade_dias' => (int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%d'), ]; } }