init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,169 @@
<?php
namespace App\Services\Imunizacao;
use App\Enums\Imunizacao\ParametrizacaoDescricaoVacina;
use App\Models\Cadastro\Vacina;
use App\Models\Imunizacao\Parametrizacao;
use App\Models\Imunizacao\RegistroAplicacao;
use App\Models\Imunizacao\RegistroAtualizacao;
use App\Models\Imunizacao\SalaVacinacao;
use App\Services\Service;
use Carbon\Carbon;
class RelatorioConsolidadoAplicacaoService extends Service
{
public static function index()
{
return [
'model' => [
'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;
}
}