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