[ 'periodo' => [ 'start' => null, 'end' => null ], 'sala_vacinacao_id' => null, 'vacina_id' => null, 'dados_campanha' => 1 ], 'form' => [ 'salas_vacinacao' => [], 'vacinas' => [], 'dados_campanha' => [ [ 'id' => 1, 'descricao' => 'Sim', ], [ 'id' => 2, 'descricao' => 'Não', ] ], ] ]; } public static function getSalasVacinacao() { return RegistroAplicacao::with('saidaVacina.saida.salaVacinacao.infraestrutura.unidade') ->where('data_aplicacao', '>=', request()->data_inicial) ->where('data_aplicacao', '<=', request()->data_final) ->has('saidaVacina.saida') ->get() ->unique('saidaVacina.saida.sala_vacinacao_id') ->map(function($query) { return [ 'id' => $query->saidaVacina->saida->sala_vacinacao_id, 'nome_fantasia' => $query->saidaVacina->saida->salaVacinacao->infraestrutura->unidade->nome_fantasia ]; }) ->sortBy('nome_fantasia') ->values() ->all(); } public static function getVacinas() { return RegistroAplicacao::with('saidaVacina.vacina') ->where('data_aplicacao', '>=', request()->data_inicial) ->where('data_aplicacao', '<=', request()->data_final) ->when(request()->sala_vacinacao_id, fn($q) => $q->whereHas('saidaVacina.saida', fn($q) => $q->where('sala_vacinacao_id', request()->sala_vacinacao_id))) ->has('saidaVacina') ->get() ->unique('saidaVacina.vacina_id') ->map(function($query) { return [ 'id' => $query->saidaVacina->vacina_id, 'nome' => self::getParametrizacaoDescricaoVacina($query->saidaVacina->vacina) ]; }) ->sortBy('nome') ->values() ->all(); } public static function list() { $registros = []; $totais = []; $total = 0; RegistroAplicacao::with([ 'saidaVacina.saida.salaVacinacao.infraestrutura.unidade', 'saidaVacina.vacina', ]) ->where('data_aplicacao', '>=', request()->data_inicial) ->where('data_aplicacao', '<=', request()->data_final) ->when(request()->sala_vacinacao_id, fn($q) => $q->whereHas('saidaVacina.saida', fn($q) => $q->where('sala_vacinacao_id', request()->sala_vacinacao_id))) ->when(request()->vacina_id, fn($q) => $q->whereHas('saidaVacina.vacina', fn($q) => $q->where('vacina_id', request()->vacina_id))) ->when(request()->dados_campanha == 2, fn($q) => $q->whereNull('campanha_id')) ->has('saidaVacina') ->get() ->groupBy('saidaVacina.saida.sala_vacinacao_id') ->each(function($query) use(&$registros, &$totais, &$total) { $query->groupBy('saidaVacina.vacina_id')->each(function($query) use(&$registros) { $registros[] = [ 'sala_vacinacao' => $query[0]->saidaVacina->saida->salaVacinacao->infraestrutura->unidade->nome_fantasia, 'vacina' => self::getParametrizacaoDescricaoVacina($query[0]->saidaVacina->vacina), 'doses' => $query->sum('saidaVacina.quantidade') ]; }); $sum = $query->sum('saidaVacina.quantidade'); $totais[] = [ 'sala_vacinacao' => $query[0]->saidaVacina->saida->salaVacinacao->infraestrutura->unidade->nome_fantasia, 'doses' => $sum ]; $total += $sum; }); return [ 'registros' => $registros, 'totais' => $totais, 'total' => $total ]; } public static function getPrintData() { $sala_vacinacao = SalaVacinacao::find(request()->sala_vacinacao_id); $registros = self::list(); return [ 'data_inicial' => Carbon::parse(request()->data_inicial)->format('d/m/Y'), 'data_final' => Carbon::parse(request()->data_final)->format('d/m/Y'), 'sala_vacinacao' => $sala_vacinacao ? $sala_vacinacao->infraestrutura->unidade->nome_fantasia : 'TODAS', 'vacina' => Vacina::find(request()->vacina_id)->nome ?? 'TODAS', 'dados_campanha' => request()->dados_campanha == 1 ? 'SIM' : 'NÃO', 'rows' => $registros['registros'], 'totais' => $registros['totais'], 'total' => $registros['total'] ]; } private static function getParametrizacaoDescricaoVacina($vacina) { $parametrizacao = Parametrizacao::first(); if($parametrizacao && $parametrizacao->parametrizacao_descricao_vacina_id) { switch($parametrizacao->parametrizacao_descricao_vacina_id) { case ParametrizacaoDescricaoVacina::DESCRICAO: return $vacina->nome; case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA: return $vacina->abreviacao; case ParametrizacaoDescricaoVacina::SIGLA: return $vacina->sigla; case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO: return "$vacina->sigla - $vacina->nome"; case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA: return "$vacina->sigla - $vacina->abreviacao"; case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA_DESCRICAO: return "$vacina->abreviacao - $vacina->nome"; case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA_DESCRICAO: return "$vacina->sigla - $vacina->abreviacao - $vacina->nome"; default: return $vacina->nome; } } return $vacina->nome; } }