Files
rkm-conectasus-ci-sandbox/api/app/Http/Controllers/Impressao/Ambulatorio/DeclaracaoComparecimentoController.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

110 lines
4.1 KiB
PHP

<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\Estabelecimento\CentroCusto;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Services\Ambulatorio\AtendimentoService;
use App\Services\Ambulatorio\GerenciamentoDiarioService;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf1;
use Carbon\Carbon;
use Illuminate\Support\Str;
class DeclaracaoComparecimentoController extends Controller
{
private const TITLE = 'DECLARAÇÃO DE COMPARECIMENTO';
private const TEMPLATE = 'ambulatorio.declaracao-comparecimento';
public function __invoke($atendimentoId)
{
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
$declaracoes = $this->getDeclaracoesNaoSalvas($atendimentoId);
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::DECLARACAO_COMPARECIMENTO);
} else {
$declaracoes = $this->getDeclaracoes($atendimentoId);
}
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('declaracoes'));
}
private function getDeclaracoesNaoSalvas($pacienteId)
{
$paciente = Paciente::findOrFail($pacienteId);
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
$centroCusto = CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'));
$declaracoes[] = [
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social,
],
'nome_acompanhante' => request()->nome_acompanhante,
'motivo_comparecimento' => request()->motivo_comparecimento,
'data' => Carbon::now()->format('d/m/Y'),
'entrada' => request()->entrada,
'saida' => request()->saida,
'unidade' => $centroCusto->infraestrutura->unidade->nome_fantasia,
'infraestrutura' => $centroCusto->infraestrutura->nome,
'turno' => !isset(request()->turno['nome'])
? null
: Str::lower(request()->turno['nome']),
'informacoes_administrativas' => [
'usuario_nome' => $lotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - '
. $lotacao->ocupacao->nome,
'documento' => $lotacao->usuario->registro_tipo_id
? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $lotacao->usuario->registro_tipo_outro
: $lotacao->usuario->registroTipo->sigla
) . ": {$lotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
];
$data = [
'declaracoes' => $declaracoes,
];
return $data;
}
private function getDeclaracoes($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$declaracoes = [];
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$atendimento->declaracoesComparecimento()
->where(fn ($q) => $q
->whereDoesntHave('soap')
->orWhereHas('soap', fn ($q) => $q
->where('is_rascunho', false)
)
)
->orderByDesc('created_at')
->get(['id'])
->each(function ($declaracao) use (&$declaracoes) {
$declaracoes[] = GerenciamentoDiarioService::getDeclaracaoComparecimentoPrintData($declaracao->id);
});
$data = [
'declaracoes' => $declaracoes,
'paraAssinar' => $paraAssinaturaEletronica,
];
return $data;
}
}