Files
rkm-conectasus-ci-sandbox/api/app/Services/TransportePaciente/ReimpressaoProtocoloService.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

116 lines
5.0 KiB
PHP

<?php
namespace App\Services\TransportePaciente;
use App\Enums\TransportePaciente\Status;
use App\Models\Intranet\Cliente;
use App\Models\TransportePaciente\Parametrizacao\Parametrizacao;
use App\Models\TransportePaciente\Ponto\Ponto;
use App\Services\Service;
use Illuminate\Support\Facades\DB;
class ReimpressaoProtocoloService extends Service
{
public static function index()
{
$parametrizacao = Parametrizacao::first();
$cliente = Cliente::where('link', app('config')->get('database.default'))->firstOrFail();
$currentLotacao = self::getCurrentLotacao();
return [
'model' => [
'prontuario' => null,
'nome' => null,
'nascimento' => null,
],
'form' => [
'mensagem_protocolo' => $parametrizacao->mensagem_protocolo ?? null,
'cliente' => [
'sistema' => [
'ramo_atividade' => [
'nome' => $cliente->sistema->ramoAtividade->nome ?? null,
],
'nome' => $cliente->sistema->nome ?? null,
'versao' => $cliente->sistema->versao ?? null,
],
'municipio' => [
'estado' => [
'uf' => $cliente->municipio->estado->uf ?? null,
],
'nome' => $cliente->municipio->nome ?? null,
],
'nome' => $cliente->nome ?? null,
'email' => $cliente->email ?? null,
'site' => $cliente->site ?? null,
'logotipo' => $cliente->logotipo ?? null,
],
'usuario' => $currentLotacao->usuario->cidadao->nome,
'pontos' => self::getPontos(),
],
];
}
public static function search()
{
return DB::table('transporte_paciente_agendar_transporte as agenda')
->select(
'agenda.id',
'agenda.data as data_consulta',
'cidadao.nome as nome',
'cidadao.nome_social',
'cidadao.data_nascimento',
DB::raw('LPAD(paciente.prontuario, 6, 0) as prontuario'),
'municipio.nome as municipio',
'destino.descricao_destino as destino',
'agenda.acompanhante',
'agenda.data_saida',
'agenda.horario_saida',
'agenda.ponto_id',
'agenda.observacao',
'motivo.descricao as motivo',
'ponto.descricao as ponto',
'infraestrutura.telefone as infraestrutura_telefone',
DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) as veiculo'),
DB::raw("
(
SELECT GROUP_CONCAT(cadastro_cidadao_telefone.numero SEPARATOR ', ')
FROM cadastro_cidadao_telefone
WHERE cadastro_cidadao_telefone.cidadao_id = cidadao.id
AND cadastro_cidadao_telefone.deleted_at IS NULL
) AS telefone_paciente
"),
)
->leftJoin('cadastro_paciente as paciente', 'agenda.paciente_id', 'paciente.id')
->leftJoin('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id')
->leftJoin('transporte_paciente_motivo_viagem_procedimento as motivo', 'agenda.motivo_id', 'motivo.id')
->leftJoin('transporte_paciente_ponto as ponto','agenda.ponto_id', 'ponto.id')
->leftJoin('transporte_paciente_veiculo as veiculo', 'agenda.veiculo_id', 'veiculo.id')
->leftJoin('transporte_paciente_destino as destino', 'agenda.destino_id', 'destino.id')
->leftJoin('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
->leftJoin('cadastro_lotacao as lotacao', 'agenda.created_lotacao_id', 'lotacao.id')
->leftJoin('cadastro_infraestrutura as infraestrutura', 'lotacao.infraestrutura_id', 'infraestrutura.id')
->when(request()->prontuario, function($query){
$query->where('paciente.prontuario', request()->prontuario);
})
->when(request()->nome, function($query){
$query->where('cidadao.nome', 'like', request()->nome . '%');
})
->when(request()->nascimento, function($query){
$query->where('cidadao.data_nascimento', request()->nascimento);
})
->whereIn('agenda.status_id', [Status::AGENDADO, Status::MODIFICADO])
->orderBy('agenda.data')
->get();
}
public static function getPontos()
{
return Ponto::select([
'id',
DB::raw('COALESCE(descricao, "CASA DO PACIENTE") AS descricao'),
])
->orderBy('descricao')
->get();
}
}