Files
rkm-conectasus-ci-sandbox/api/app/Services/PainelSenha/FilaService.php
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

146 lines
4.4 KiB
PHP

<?php
namespace App\Services\PainelSenha;
use App\Enums\Administracao\Modulo;
use App\Enums\PainelSenha\Status;
use App\Models\PainelSenha\Fila;
use App\Models\PainelSenha\OpcaoEntrada;
use App\Models\PainelSenha\Prioridade;
use App\Models\PainelSenha\TempoEspera;
use App\Services\Administracao\ModuloService;
use App\Services\Ambulatorio\FilaService as AmbulatorioFilaService;
use App\Services\Farmacia\FilaAtendimentoService as FarmaciaFilaAtendimentoService;
use App\Services\Imunizacao\FilaAtendimentoService as ImunizacaoFilaAtendimentoService;
use App\Services\PainelSenha\FilaAtendimentoService as PainelSenhaFilaAtendimentoService;
use App\Services\Service;
class FilaService extends Service
{
public static function index()
{
return Fila::query();
}
public static function create()
{
return [
'form' => [
'opcoes_entrada' => OpcaoEntrada::orderBy('nome')
->whereHas('centroCusto', function($query) {
$query->where('id', self::getCurrentCentroCusto()->id);
})
->get()
->map(function($query) {
return [
'id' => $query->id,
'nome' => $query->nome,
'prioridade_obrigatoria' => $query->prioridade_obrigatoria
];
}),
'prioridades' => Prioridade::orderBy('nome')
->get()
->map(function($query) {
return [
'id' => $query->id,
'nome' => $query->nome,
];
}),
],
];
}
public static function store($request)
{
$fila = new Fila();
$tempoEspera = TempoEspera::orderBy('tempo')
->first();
$senha = (
$fila->where('opcao_entrada_id', $request['opcao_entrada_id'])
->whereRaw('emitido_em = CURRENT_DATE')
->max('senha') ?? 0
) + 1;
$params = [
'opcao_entrada_id' => $request['opcao_entrada_id'],
'centro_custo_id' => $request['centro_custo_id'],
'tempo_espera_id' => $tempoEspera->id ?? null,
'prioridade_id' => $request['prioridade_id'] ?? null,
'status_id' => Status::EM_ESPERA,
'senha' => $senha,
];
$fila = $fila->create($params)->fresh();
if ($fila->opcaoEntrada->modulo_id === ModuloService::getId(Modulo::PAINEL_SENHA)) {
PainelSenhaFilaAtendimentoService::dispatch($fila->opcaoEntradaAtual->id, $fila->centro_custo_id);
}
else if ($fila->opcaoEntrada->modulo_id === ModuloService::getId(Modulo::AMBULATORIO)) {
AmbulatorioFilaService::dispatch($fila->centro_custo_id);
}
else if ($fila->opcaoEntrada->modulo_id === ModuloService::getId(Modulo::IMUNIZACAO)) {
ImunizacaoFilaAtendimentoService::dispatch($fila->opcaoEntradaAtual->id, $fila->centro_custo_id);
}
else if ($fila->opcaoEntrada->modulo_id === ModuloService::getId(Modulo::FARMACIA)) {
FarmaciaFilaAtendimentoService::dispatch($fila->opcaoEntradaAtual->id, $fila->centro_custo_id);
}
return $fila;
}
public static function show($id)
{
return self::get(Fila::class, $id);
}
public static function destroy($id)
{
self::show($id)->delete();
}
public static function answer($id)
{
$fila = self::show($id);
$params = [
'status_id' => Status::EM_ATENDIMENTO
];
return tap($fila)->update($params)
->fresh();
}
public static function forward($request, $id)
{
$fila = self::show($id);
$params = [
'centro_custo_id' => $request['centro_custo_id_para'],
'status_id' => Status::EM_ESPERA,
'prioridade_id' => $request['prioridade_id'] ?? null,
];
return tap($fila)->update($params)
->fresh();
}
public static function evade($request, $id)
{
$fila = self::show($id);
$params = [
'evadido' => true,
'motivo_evasao' => $request['motivo_evasao'],
];
return tap($fila)->update($params)
->fresh();
}
}