This commit is contained in:
191
api/app/Services/TransportePaciente/AgendadorService.php
Normal file
191
api/app/Services/TransportePaciente/AgendadorService.php
Normal file
@@ -0,0 +1,191 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente;
|
||||
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class AgendadorService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
$hoje = Carbon::now()->format('Y-m-d');
|
||||
return [
|
||||
'model' => [
|
||||
'periodo' => [
|
||||
'start' => $hoje,
|
||||
'end' => $hoje,
|
||||
],
|
||||
'municipio' => null,
|
||||
'destino' => null,
|
||||
'horario' => null,
|
||||
'paciente' => null,
|
||||
],
|
||||
'form' => self::getFormData($hoje)
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData($hoje)
|
||||
{
|
||||
return [
|
||||
'municipios' => DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'agendar.municipio_id')
|
||||
->select('municipio.id', 'municipio.nome')
|
||||
->whereBetween('agendar.data_saida', [$hoje, $hoje])
|
||||
->orderBy('municipio.nome')
|
||||
->groupBy('municipio.id')
|
||||
->get(),
|
||||
'destinos' => DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->select('destino.id', 'destino.descricao_destino as descricao')
|
||||
->whereBetween('agendar.data_saida', [$hoje, $hoje])
|
||||
->orderBy('descricao')
|
||||
->groupBy('destino.id')
|
||||
->get(),
|
||||
'horarios' => DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select('id', DB::raw("DATE_FORMAT(agendar.horario_saida, '%H:%i') as horario"))
|
||||
->whereBetween('agendar.data_saida', [$hoje, $hoje])
|
||||
->groupBy('horario')
|
||||
->orderBy('horario')
|
||||
->get(),
|
||||
'pacientes' => DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'agendar.paciente_id as id',
|
||||
'cidadao.nome as nome'
|
||||
)
|
||||
->whereBetween('agendar.data_saida', [$hoje, $hoje])
|
||||
->join('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->join('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->get(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function getMunicipios()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.municipio_id')
|
||||
->select('municipio.id', 'municipio.nome')
|
||||
->whereBetween('agendar.data_saida', [request()->periodo['start'], request()->periodo['end']])
|
||||
->orderBy('municipio.nome')
|
||||
->groupBy('municipio.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getDestinos()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->select('destino.id', 'destino.descricao_destino as descricao')
|
||||
->whereBetween('agendar.data_saida', [request()->periodo['start'], request()->periodo['end']])
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->orderBy('descricao')
|
||||
->groupBy('destino.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getHorarios()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(DB::raw("DATE_FORMAT(agendar.horario_saida, '%H:%i') as horario"))
|
||||
->whereBetween('agendar.data_saida', [request()->periodo['start'], request()->periodo['end']])
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->distinct()
|
||||
->groupBy('horario')
|
||||
->orderBy('horario')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getPacientes()
|
||||
{
|
||||
$horario = request()->horario;
|
||||
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'agendar.paciente_id as id',
|
||||
'cidadao.nome as nome'
|
||||
)
|
||||
->distinct()
|
||||
->whereBetween('agendar.data_saida', [request()->periodo['start'], request()->periodo['end']])
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->when($horario, function($query) use ($horario) {
|
||||
$query->whereRaw("DATE_FORMAT(agendar.horario_saida, '%H:%i') = ?", [$horario]);
|
||||
})
|
||||
->join('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->join('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->orderBy('nome')
|
||||
->get();
|
||||
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
request()->validate([
|
||||
'periodo' => 'required'
|
||||
], [
|
||||
'periodo.start.required' => 'O período inicial é obrigatório',
|
||||
'periodo.end.required' => 'O período final é obrigatório',
|
||||
]);
|
||||
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'agendar.id',
|
||||
'cidadao.nome as paciente',
|
||||
'paciente.prontuario',
|
||||
DB::raw("TRIM('0' FROM DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),cidadao.data_nascimento) + 0), '%Y')) as idade"),
|
||||
'destino.descricao_destino as destino',
|
||||
'municipio.nome as municipio',
|
||||
DB::raw('CONCAT(DATE_FORMAT(agendar.data_saida, "%d/%m/%Y"), " ", DATE_FORMAT(agendar.horario_saida, "%H:%i")) as dataHoraSaida'),
|
||||
DB::raw("
|
||||
CASE
|
||||
WHEN ponto.descricao IS NULL THEN CONCAT('CASA DO PACIENTE')
|
||||
ELSE ponto.descricao
|
||||
END as ponto
|
||||
"),
|
||||
'agendar.acompanhante',
|
||||
'cidadao_usuario.nome as usuario',
|
||||
DB::raw("DATE_FORMAT(agendar.created_at, '%d/%m/%Y %H:%i') as hora_agendamento"),
|
||||
DB::raw("DATE_FORMAT(agendar.updated_at, '%d/%m/%Y %H:%i') as hora_atualizacao"),
|
||||
'status.descricao as status'
|
||||
)
|
||||
->join('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->join('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->join('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id')
|
||||
->join('transporte_paciente_ponto as ponto','agendar.ponto_id', 'ponto.id')
|
||||
->leftJoin('transporte_paciente_veiculo as veiculo', 'agendar.veiculo_id', 'veiculo.id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
||||
->join('cadastro_lotacao as lotacao', 'lotacao.id', 'agendar.created_lotacao_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'lotacao.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao_usuario', 'cidadao_usuario.id', 'usuario.cidadao_id')
|
||||
->join('transporte_paciente_status as status', 'status.id', 'agendar.status_id')
|
||||
->whereBetween('agendar.data_saida', [request()->periodo['start'], request()->periodo['end']])
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->when(request()->horario, function($query) {
|
||||
$query->where('agendar.horario_saida', request()->horario);
|
||||
})
|
||||
->when(request()->paciente, function($query) {
|
||||
$query->where('agendar.paciente_id', request()->paciente);
|
||||
})
|
||||
->latest('agendar.updated_at')
|
||||
->get();
|
||||
}
|
||||
}
|
||||
925
api/app/Services/TransportePaciente/Agendar/AgendarService.php
Normal file
925
api/app/Services/TransportePaciente/Agendar/AgendarService.php
Normal file
@@ -0,0 +1,925 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Agendar;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Classificacao;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\TransportePaciente\Funcionalidade;
|
||||
use App\Enums\TransportePaciente\Status;
|
||||
use App\Exceptions\TransportePaciente\ExceededCapacidadeVeiculoException;
|
||||
use App\Models\Cadastro\Parametrizacao\ParametrizacaoPermissaoUsuario;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Cadastro\SujeitoAtencao\PacienteClassificacao;
|
||||
use App\Models\Intranet\Cliente;
|
||||
use App\Models\TransportePaciente\Acompanhante;
|
||||
use App\Models\TransportePaciente\Agendar\Agendar;
|
||||
use App\Models\TransportePaciente\Destino\Destino;
|
||||
use App\Models\TransportePaciente\Parametrizacao\Parametrizacao;
|
||||
use App\Models\TransportePaciente\Ponto\Ponto;
|
||||
use App\Models\TransportePaciente\PreAgendamentoTransporte;
|
||||
use App\Models\TransportePaciente\Relacao;
|
||||
use App\Models\TransportePaciente\Veiculo\Tipo;
|
||||
use App\Models\TransportePaciente\Veiculo\TipoPassageiro;
|
||||
use App\Models\TransportePaciente\Veiculo\Veiculo;
|
||||
use App\Services\Integracao\CnsService;
|
||||
use App\Services\Service;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class AgendarService extends Service
|
||||
{
|
||||
|
||||
private static function getFormData($id)
|
||||
{
|
||||
$now = Carbon::now();
|
||||
|
||||
$paciente = Paciente::with('unidade')->findOrFail($id);
|
||||
$endereco = $paciente->cidadao->domicilio->endereco ?? null;
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
$cliente = Cliente::where('link', app('config')->get('database.default'))->firstOrFail();
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
$responsavel = Lotacao::find($paciente->created_lotacao_id);
|
||||
$area = null;
|
||||
|
||||
if ($responsavel) {
|
||||
|
||||
$area = self::getAreaMicroarea($responsavel->usuario->id, $paciente->created_lotacao_id,
|
||||
$responsavel->infraestrutura_id, $responsavel->infraestrutura->unidade_id,
|
||||
$responsavel->ocupacao_id);
|
||||
$microarea = $area ? ($area->microarea ? $area->microarea : 'Sem Microárea') : null;
|
||||
}
|
||||
|
||||
$permissaoUsuario = ParametrizacaoPermissaoUsuario::where('usuario_id', $currentLotacao->usuario_id)
|
||||
->where('infraestrutura_id', $currentLotacao->infraestrutura_id)
|
||||
->first();
|
||||
|
||||
$countUsuario = ParametrizacaoPermissaoUsuario::count();
|
||||
|
||||
$classificacoes = $permissaoUsuario
|
||||
? PacienteClassificacao::orderBy('descricao')
|
||||
->get()
|
||||
->filter(function ($classificacao) use ($permissaoUsuario) {
|
||||
|
||||
$exibe = false;
|
||||
|
||||
switch ($classificacao->id) {
|
||||
case Classificacao::MUNICIPE:
|
||||
$exibe = $permissaoUsuario->municipe;
|
||||
break;
|
||||
case Classificacao::PROVISORIO:
|
||||
$exibe = $permissaoUsuario->provisorio;
|
||||
break;
|
||||
case Classificacao::OUTRO_MUNICIPIO:
|
||||
$exibe = $permissaoUsuario->outro_municipio;
|
||||
break;
|
||||
}
|
||||
|
||||
return $exibe ? [
|
||||
'id' => $classificacao->id,
|
||||
'descricao' => $classificacao->descricao
|
||||
] : null;
|
||||
})
|
||||
->values()
|
||||
: [];
|
||||
|
||||
return [
|
||||
'data_atual' => $now->format('d/m/Y'),
|
||||
'tipos_passageiro' => TipoPassageiro::orderBy('descricao')->get(),
|
||||
'tipos_veiculo' => Tipo::orderBy('descricao')->get(),
|
||||
'horario_saida' => $parametrizacao->horario_saida ?? null,
|
||||
'veiculo_obrigatorio' => $parametrizacao->veiculo ?? null,
|
||||
'mensagem_protocolo' => $parametrizacao->mensagem_protocolo ?? null,
|
||||
'agendar_transporte_jornada' => $parametrizacao->agendar_transporte_jornada ?? null,
|
||||
'dados_acompanhante' => $parametrizacao->dados_acompanhante ?? null,
|
||||
'comprovante_acompanhante' => $parametrizacao->comprovante_acompanhante ?? null,
|
||||
'campo_livre' => $parametrizacao->campo_livre ?? null,
|
||||
'acompanhante' => [
|
||||
['value' => 0, 'text' => 'Nenhum'],
|
||||
['value' => 1, 'text' => '1'],
|
||||
['value' => 2, 'text' => '2'],
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome ?? null,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'prefere_nome_social' => $paciente->cidadao
|
||||
->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'data_nascimento' => $paciente->cidadao->data_nascimento
|
||||
? $paciente->cidadao->data_nascimento->format('d/m/Y')
|
||||
: '',
|
||||
'nacionalidade_id' => $paciente->cidadao->nacionalidade_id ?? null,
|
||||
'raca_cor_id' => $paciente->cidadao->raca_cor_id ?? null,
|
||||
'etnia_indigena_id' => $paciente->cidadao->etnia_indigena_id ?? null,
|
||||
'domicilio_id' => $paciente->cidadao->domicilio_id ?? null,
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? null,
|
||||
'convenio_medico_nome' => $paciente->cidadao->conveniosMedico->first()->nome ?? null,
|
||||
'situacao_familiar' => $paciente->cidadao->situacaoFamiliarConjugal->descricao ?? null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'unidade' => $paciente->unidade->nome_fantasia ?? null,
|
||||
'telefone_unidade_agendadora' => $currentLotacao->infraestrutura->telefone ? MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone) : null,
|
||||
'sexo' => $paciente->cidadao->sexo ?? '-',
|
||||
'classificacao_id' => $paciente->classificacao_id ?? '-',
|
||||
'classificacao_nome' => $paciente->classificacao->descricao ?? '-',
|
||||
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : '',
|
||||
'idade' => $paciente->cidadao->data_nascimento
|
||||
? "{$paciente->cidadao->idade['anos']} ano(s), "
|
||||
. "{$paciente->cidadao->idade['meses']} mês(es) e "
|
||||
. "{$paciente->cidadao->idade['dias']} dia(s) "
|
||||
: 'NÃO INFORMADA',
|
||||
'required_acompanhante' => $paciente->cidadao->idade['anos']
|
||||
? ($paciente->cidadao->idade['anos'] < 8 || $paciente->cidadao->idade['anos'] > 80 ? true : false)
|
||||
: false,
|
||||
'telefones' => $paciente->cidadao->telefones
|
||||
->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
||||
'nome_mae' => $paciente->cidadao->nome_mae,
|
||||
'cidadao_id' => $paciente->cidadao_id,
|
||||
'responsavel_cadastro' => $responsavel ? $responsavel->usuario->cidadao->nome : null,
|
||||
'area_microarea' => $area ? $area->area . '/' . $microarea : null
|
||||
],
|
||||
'endereco' => [
|
||||
'estado_id' => $endereco ? $endereco->logradouro->municipio->estado->id : null,
|
||||
'municipio' => $endereco ? $endereco->logradouro->municipio : null,
|
||||
'logradouro' => $endereco ? $endereco->logradouro : null,
|
||||
'cep' => $endereco ? MaskUtil::getCepMasked($endereco->logradouro->cep) : null,
|
||||
'numero' => $endereco ? $endereco->numero : null,
|
||||
'sem_numero' => $endereco ? $endereco->sem_numero : null,
|
||||
'complemento' => $endereco ? $endereco->complemento ?? '' : null,
|
||||
'zona_id' => $endereco ? $endereco->zona_id : 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,
|
||||
'pre_agendamentos' => self::getPreAgendamentos($id),
|
||||
'relacoes' => Relacao::get(),
|
||||
'municipios' => DB::table('transporte_paciente_destino as destino')
|
||||
->select('municipio.id', 'municipio.nome')
|
||||
->join('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
||||
->where('bloqueado', false)
|
||||
->groupBy('destino.municipio_id')
|
||||
->get(),
|
||||
'pontos' => self::getPontos($id),
|
||||
'tipos_passageiro' => TipoPassageiro::orderBy('descricao')->get(),
|
||||
'classificacoes' => $classificacoes,
|
||||
'is_permissao_cadastro' => $countUsuario === 0 ? true : false,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModelData($agendar = null)
|
||||
{
|
||||
$agendar = [
|
||||
'id' => null,
|
||||
'paciente_id' => null,
|
||||
'motivo' => null,
|
||||
'data' => null,
|
||||
'horario' => null,
|
||||
'municipio' => null,
|
||||
'destino_id' => null,
|
||||
'acompanhante' => 0,
|
||||
'ponto_id' => null,
|
||||
'data_saida' => null,
|
||||
'horario_saida' => null,
|
||||
'tipo_passageiro_id' => null,
|
||||
'veiculo_id' => null,
|
||||
'jornada_id' => null,
|
||||
'pre_agendamento_id' => null,
|
||||
'consulta_observacao' => null,
|
||||
'acompanhante1' => null,
|
||||
'nome1' => null,
|
||||
'telefone1' => null,
|
||||
'relacao1' => null,
|
||||
'acompanhante2' => null,
|
||||
'nome2' => null,
|
||||
'telefone2' => null,
|
||||
'relacao2' => null,
|
||||
'observacao' => null,
|
||||
];
|
||||
|
||||
return $agendar;
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
$model = self::getModelData(Agendar::find($id));
|
||||
$model['observacao'] = self::getObservacao($id);
|
||||
|
||||
return [
|
||||
'additionals' => [
|
||||
'permissoes_atualizacao_cadastro_paciente' => self::getPermissoesAtualizacaoCadastroPaciente(),
|
||||
],
|
||||
'form' => self::getFormData($id),
|
||||
'model' => $model,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getObservacao($id)
|
||||
{
|
||||
$ultimo_agendamento = Agendar::where('paciente_id', $id)->latest()->first();
|
||||
if($ultimo_agendamento) {
|
||||
return $ultimo_agendamento->observacao;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
if (request()->supervisor_id === null && request()->veiculo_id !== null && isset(request()->capacidade)) {
|
||||
|
||||
$agendados = intval(request()->total_agendados) ?? 0;
|
||||
$acompanhante = intval(request()->acompanhante) ?? 0;
|
||||
$capacidade = intval(request()->capacidade) ?? 0;
|
||||
|
||||
if (($agendados + $acompanhante + 1) > $capacidade ) {
|
||||
|
||||
throw new ExceededCapacidadeVeiculoException;
|
||||
}
|
||||
}
|
||||
|
||||
$agendar = null;
|
||||
DB::transaction(function () use (&$agendar) {
|
||||
if(isset(request()->acompanhante1) && isset(request()->acompanhante1['id']) && isset(request()->relacao1) || isset(request()->nome1)) {
|
||||
$acompanhante1 = Acompanhante::create([
|
||||
'relacao_id' => request()->relacao1,
|
||||
'usuario_id' => request()->acompanhante1['id'] ?? null,
|
||||
'nome' => request()->nome1 ?? null,
|
||||
'telefone' => isset(request()->acompanhante1['id']) ? null : request()->telefone1,
|
||||
])->fresh();
|
||||
|
||||
if (isset(request()->acompanhante1['id'])) {
|
||||
$telefonePrincipal = Paciente::findOrFail(request()->acompanhante1['id'])->cidadao->telefones()->where('principal', true);
|
||||
|
||||
if (is_null(request()->telefone1)) {
|
||||
$telefonePrincipal->delete();
|
||||
} else {
|
||||
$telefonePrincipal->update(['numero' => request()->telefone1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(isset(request()->acompanhante2) && isset(request()->acompanhante2['id']) && isset(request()->relacao2) || isset(request()->nome2)) {
|
||||
$acompanhante2 = Acompanhante::create([
|
||||
'relacao_id' => request()->relacao2,
|
||||
'usuario_id' => request()->acompanhante2['id'] ?? null,
|
||||
'nome' => request()->nome2 ?? null,
|
||||
'telefone' => isset(request()->acompanhante2['id']) ? null : request()->telefone2,
|
||||
])->fresh();
|
||||
|
||||
if (isset(request()->acompanhante2['id'])) {
|
||||
$telefonePrincipal = Paciente::findOrFail(request()->acompanhante2['id'])->cidadao->telefones()->where('principal', true);
|
||||
|
||||
if (is_null(request()->telefone2)) {
|
||||
$telefonePrincipal->delete();
|
||||
} else {
|
||||
$telefonePrincipal->update(['numero' => request()->telefone2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$agendar = Agendar::create(request()->all() + [
|
||||
'acompanhante_1_id' => $acompanhante1->id ?? null,
|
||||
'acompanhante_2_id' => $acompanhante2->id ?? null,
|
||||
'veiculo_edited_by' => request()->veiculo_id ? self::getCurrentLotacao()->usuario->id : null,
|
||||
'veiculo_edited_at' => request()->veiculo_id ? Carbon::now() : null,
|
||||
'funcionalidade_origem' => request()->veiculo_id ? Funcionalidade::AGENDAR_TRANSPORTE : null
|
||||
])->fresh();
|
||||
|
||||
$preAgendar = PreAgendamentoTransporte::find(request()->pre_agendamento_id);
|
||||
|
||||
if ($preAgendar) {
|
||||
$preAgendar->horario_saida = request()->horario_saida;
|
||||
$preAgendar->data_saida = request()->data_saida;
|
||||
$preAgendar->veiculo_id = request()->veiculo_id;
|
||||
$preAgendar->jornada_id = request()->jornada_id;
|
||||
$preAgendar->save();
|
||||
}
|
||||
|
||||
HistoricoService::create($agendar, Status::AGENDADO, $agendar->updated_lotacao_id);
|
||||
});
|
||||
|
||||
return $agendar;
|
||||
}
|
||||
|
||||
public static function update()
|
||||
{
|
||||
if (request()->supervisor_id === null && request()->veiculo_id !== null && isset(request()->capacidade)) {
|
||||
|
||||
$agendados = intval(request()->total_agendados) ?? 0;
|
||||
$acompanhante = intval(request()->acompanhante) ?? 0;
|
||||
$capacidade = intval(request()->capacidade) ?? 0;
|
||||
|
||||
if (($agendados + $acompanhante + 1) > $capacidade ) {
|
||||
|
||||
throw new ExceededCapacidadeVeiculoException;
|
||||
}
|
||||
}
|
||||
|
||||
$agendar = Agendar::find(request()->agendar_id);
|
||||
|
||||
if (isset($agendar)) {
|
||||
|
||||
$agendar->horario_saida = request()->horario_saida;
|
||||
$agendar->veiculo_id = request()->veiculo_id;
|
||||
$agendar->jornada_id = request()->jornada_id;
|
||||
$agendar->veiculo_edited_by = request()->veiculo_id ? self::getCurrentLotacao()->usuario->id : null;
|
||||
$agendar->veiculo_edited_at = request()->veiculo_id ? Carbon::now() : null;
|
||||
$agendar->funcionalidade_origem = request()->veiculo_id ? Funcionalidade::PRE_AGENDAR_TRANSPORTE : null;
|
||||
$agendar->save();
|
||||
|
||||
$preAgendar = PreAgendamentoTransporte::find(request()->pre_agendamento_id);
|
||||
|
||||
$preAgendar->data_saida = request()->data_saida;
|
||||
$preAgendar->horario_saida = request()->horario_saida;
|
||||
$preAgendar->veiculo_id = request()->veiculo_id;
|
||||
$preAgendar->jornada_id = request()->jornada_id;
|
||||
$preAgendar->save();
|
||||
|
||||
HistoricoService::create($agendar, Status::MODIFICADO, $agendar->updated_lotacao_id);
|
||||
}
|
||||
|
||||
return $agendar;
|
||||
}
|
||||
|
||||
public static function getAgendados() {
|
||||
|
||||
return [
|
||||
'municipio' => Agendar::where('municipio_id', request()->municipio_id)
|
||||
->whereNotIn('status_id', [Status::CANCELADO])
|
||||
->where('data', request()->data)
|
||||
->select(
|
||||
DB::raw('SUM(IFNULL(acompanhante, 0) + 1) AS total'),
|
||||
)
|
||||
->first(),
|
||||
'destinos' => Agendar::where('municipio_id', request()->municipio_id)
|
||||
->where('data', request()->data)
|
||||
->select(
|
||||
'destino_id',
|
||||
DB::raw('SUM(IFNULL(acompanhante, 0) + 1) AS quantidade'),
|
||||
)
|
||||
->groupBy('destino_id')
|
||||
->get()
|
||||
->map(fn($query) => [
|
||||
'id' => $query->id ?? null,
|
||||
'destino_id' => $query->destino_id ?? null,
|
||||
'destino' => $query->destino->descricao_destino ?? null,
|
||||
'quantidade' => $query->quantidade,
|
||||
'agendados' => Agendar::where('municipio_id', request()->municipio_id)
|
||||
->whereNotIn('status_id', [Status::CANCELADO])
|
||||
->where('destino_id', $query->destino_id)
|
||||
->where('data', request()->data)
|
||||
->select(
|
||||
DB::raw('SUM(IFNULL(acompanhante, 0) + 1) AS quantidade'),
|
||||
DB::raw("
|
||||
CASE WHEN horario_saida IS NOT NULL THEN
|
||||
TIME_FORMAT(horario_saida, '%H:%i')
|
||||
ELSE
|
||||
'Não informado'
|
||||
END AS horario_saida
|
||||
"),
|
||||
)
|
||||
->groupBy('horario_saida')
|
||||
->get()
|
||||
->map(fn($query) => [
|
||||
'quantidade' => $query->quantidade,
|
||||
'horario_saida' => $query->horario_saida,
|
||||
])
|
||||
])
|
||||
];
|
||||
}
|
||||
|
||||
public static function getFaltasPaciente() {
|
||||
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
|
||||
if ($parametrizacao && $parametrizacao->faltas && $parametrizacao->periodo) {
|
||||
|
||||
$dataAtual = Carbon::now();
|
||||
$dataDe = $dataAtual->copy()->subMonths($parametrizacao->periodo);
|
||||
|
||||
return Agendar::where('paciente_id', request()->paciente_id)
|
||||
->whereBetween('data', [$dataDe, $dataAtual])
|
||||
->where('status_id', Status::FALTOU)
|
||||
->select(
|
||||
DB::raw("LPAD(COUNT(*), 2, '0') AS total"),
|
||||
DB::raw("LPAD(" . $parametrizacao->faltas . ", 2, '0') AS limite"),
|
||||
DB::raw("LPAD(" . $parametrizacao->periodo . ", 2, '0') AS periodo")
|
||||
)
|
||||
->groupBy('paciente_id')
|
||||
->first();
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
public static function getDestinos() {
|
||||
|
||||
return Destino::where('municipio_id', request()->municipio_id)
|
||||
->where('bloqueado', false)
|
||||
->orderBy('descricao_destino')
|
||||
->get()
|
||||
->map(fn($query) => [
|
||||
'id' => $query->id ?? null,
|
||||
'descricao' => $query->descricao_destino ?? null,
|
||||
]);
|
||||
}
|
||||
|
||||
public static function getPontos() {
|
||||
return DB::table('transporte_paciente_ponto')
|
||||
->where('bloqueado', false)
|
||||
->distinct()
|
||||
->select([
|
||||
'id',
|
||||
DB::raw('COALESCE(descricao, "CASA DO PACIENTE") AS descricao'),
|
||||
])
|
||||
->orderBy('descricao')
|
||||
->groupBy('descricao')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getAgendadosPaciente() {
|
||||
|
||||
return Agendar::where('paciente_id', request()->paciente_id)
|
||||
->where('data_saida', request()->data_saida)
|
||||
->whereNotIn('status_id', [Status::CANCELADO, Status::TRANSPORTADO])
|
||||
->get()
|
||||
->map(fn($query) => [
|
||||
'id' => $query->id ?? null,
|
||||
'jornada_id' => $query->jornada_id ?? null,
|
||||
'jornada_descricao' => $query->jornada_id
|
||||
? (new Carbon($query->jornada->data_inicial))->format('d/m/Y H:i')
|
||||
. ' - '
|
||||
. (new Carbon($query->jornada->data_final))->format('d/m/Y H:i')
|
||||
. ' - '
|
||||
. $query->jornada_id
|
||||
: null,
|
||||
'veiculo_id' => $query->veiculo_id ?? null,
|
||||
'veiculo_descricao' => $query->veiculo_id
|
||||
? $query->veiculo->numero_placa . ' - ' . $query->veiculo->descricao_modelo
|
||||
: null,
|
||||
'numero_placa' => $query->veiculo->numero_placa ?? null,
|
||||
'descricao_modelo' => $query->veiculo->descricao_modelo ?? null,
|
||||
'data_inicial' => $query->jornada->data_inicial ?? $query->data,
|
||||
'data_final' => $query->jornada->data_final ?? $query->data,
|
||||
'data' => (new Carbon($query->data))->format('d/m/Y') ?? null,
|
||||
'horario' => (new Carbon($query->horario))->format('H:i') ?? null,
|
||||
'horario_saida' => (new Carbon($query->horario_saida))->format('H:i') ?? null,
|
||||
'destino_id' => $query->destino_id ?? null,
|
||||
'destino' => $query->destino->descricao_destino ?? null,
|
||||
'municipio_id' => $query->municipio_id ?? null,
|
||||
'municipio' => $query->municipio->nome ?? null,
|
||||
'uf' => $query->municipio->estado->uf ?? null,
|
||||
'status' => $query->status_id,
|
||||
'consulta_observacao' => $query->consulta_observacao,
|
||||
'observacao' => $query->observacao,
|
||||
'motivo_descricao' => $query->motivo->descricao,
|
||||
]);
|
||||
}
|
||||
|
||||
public static function getVeiculos($preAgendado = false, $dataSaida = null, $horarioSaida = null)
|
||||
{
|
||||
if (request()->boolean('agendar_transporte_jornada') || $preAgendado) {
|
||||
|
||||
$dataSaida = $preAgendado ? $dataSaida : request()->data_saida;
|
||||
$horarioSaida = $preAgendado ? $horarioSaida : request()->horario_saida;
|
||||
$horarioConsulta = request()->horario_consulta;
|
||||
$dataInicial = request()->data_inicial;
|
||||
$dataFinal = request()->data_final;
|
||||
$diaSemana = request()->dia_semana;
|
||||
|
||||
$veiculos = DB::table('transporte_paciente_veiculo as veiculo')
|
||||
->join('transporte_paciente_jornada as jornada', 'veiculo.id', 'jornada.veiculo_id')
|
||||
->select([
|
||||
'veiculo.id',
|
||||
'veiculo.numero_placa',
|
||||
'veiculo.descricao_modelo',
|
||||
'veiculo.numero_capacidade',
|
||||
'veiculo.tipo_id'
|
||||
])
|
||||
->when($horarioSaida, function ($query) use ($horarioSaida) {
|
||||
$query->where(DB::raw("DATE_FORMAT(jornada.data_inicial, '%H:%i')"), '<=', $horarioSaida)
|
||||
->where(DB::raw("DATE_FORMAT(jornada.data_final, '%H:%i')"), '>=', $horarioSaida);
|
||||
})
|
||||
->when($dataSaida, function ($query) use ($dataSaida) {
|
||||
$query->where(DB::raw("DATE_FORMAT(jornada.data_inicial, '%Y-%m-%d')"), '<=', $dataSaida)
|
||||
->where(DB::raw("DATE_FORMAT(jornada.data_final, '%Y-%m-%d')"), '>=', $dataSaida);
|
||||
})
|
||||
->when($horarioConsulta, function ($query) use ($horarioConsulta) {
|
||||
$query->where(DB::raw("DATE_FORMAT(jornada.data_inicial, '%H:%i')"), '<=', $horarioConsulta)
|
||||
->where(DB::raw("DATE_FORMAT(jornada.data_final, '%H:%i')"), '>=', $horarioConsulta);
|
||||
})
|
||||
->when($dataInicial, function ($query) use ($dataInicial, $dataFinal) {
|
||||
$query->where(DB::raw("DATE_FORMAT(jornada.data_inicial, '%Y-%m-%d')"), '>=', $dataInicial)
|
||||
->where(DB::raw("DATE_FORMAT(jornada.data_final, '%Y-%m-%d')"), '<=', $dataFinal);
|
||||
})
|
||||
->when($diaSemana, function ($query) use ($diaSemana) {
|
||||
$query->whereIn('jornada.geral_dia_semana_id', $diaSemana);
|
||||
})
|
||||
->where('veiculo.bloqueado', false)
|
||||
->orderBy('veiculo.numero_placa')
|
||||
->groupBy('veiculo.id')
|
||||
->get()
|
||||
->map(fn($query) => [
|
||||
'id' => $query->id ?? null,
|
||||
'descricao' => $query->numero_placa . ' - ' . $query->descricao_modelo,
|
||||
'capacidade' => $query->numero_capacidade ?? null,
|
||||
'tipo_id' => $query->tipo_id ?? null,
|
||||
'agendados' => Agendar::where('veiculo_id', $query->id)
|
||||
->whereNotIn('status_id', [Status::CANCELADO])
|
||||
->when($dataSaida, function ($query) use ($dataSaida) {
|
||||
$query->where(DB::raw("DATE_FORMAT(data_saida, '%Y-%m-%d')"), $dataSaida);
|
||||
})
|
||||
->when($dataInicial, function ($query) use ($dataInicial, $dataFinal) {
|
||||
$query->where(DB::raw("DATE_FORMAT(data_saida, '%Y-%m-%d')"), '>=', $dataInicial)
|
||||
->where(DB::raw("DATE_FORMAT(data_saida, '%Y-%m-%d')"), '<=', $dataFinal);
|
||||
})
|
||||
->select(
|
||||
DB::raw("DATE_FORMAT(data_saida, '%Y-%m-%d') as data_saida"),
|
||||
DB::raw('SUM(IFNULL(acompanhante, 0) + 1) AS quantidade')
|
||||
)
|
||||
->groupBy('veiculo_id', DB::raw("DATE_FORMAT(data_saida, '%Y-%m-%d')"))
|
||||
->get()
|
||||
->map(function($result) {
|
||||
return [
|
||||
'data_saida' => $result->data_saida,
|
||||
'quantidade' => $result->quantidade
|
||||
];
|
||||
})
|
||||
]);
|
||||
} else {
|
||||
|
||||
$veiculos = Veiculo::where('bloqueado', false)
|
||||
->get()
|
||||
->map(fn($query) => [
|
||||
'id' => $query->id ?? null,
|
||||
'descricao' => $query->numero_placa . ' - ' . $query->descricao_modelo,
|
||||
'capacidade' => $query->numero_capacidade ?? null,
|
||||
'tipo_id' => $query->tipo_id ?? null,
|
||||
'agendados' => Agendar::where('veiculo_id', $query->id)
|
||||
->whereNotIn('status_id', [Status::CANCELADO])
|
||||
->when($dataSaida, function ($query) use ($dataSaida) {
|
||||
$query->where(DB::raw("DATE_FORMAT(data_saida, '%Y-%m-%d')"), $dataSaida);
|
||||
})
|
||||
->select(
|
||||
DB::raw('SUM(IFNULL(acompanhante, 0) + 1) AS quantidade'),
|
||||
)
|
||||
->groupBy('veiculo_id')
|
||||
->first()
|
||||
]);
|
||||
}
|
||||
|
||||
return $veiculos;
|
||||
}
|
||||
|
||||
public static function getJornadas($IdVeiculo = false, $saidaDataHorario = false)
|
||||
{
|
||||
$paciente_id = request()->paciente_id;
|
||||
$gerenciamento = request()->gerenciamento;
|
||||
$dataHorarioSaida = request()->data_horario_saida;
|
||||
$dataInicial = request()->data_inicial ? request()->data_inicial : request()->data_saida;
|
||||
$dataFinal = request()->data_final ? request()->data_final : request()->data_saida;
|
||||
$diaSemana = request()->dia_semana;
|
||||
$veiculoId = request()->veiculo_id;
|
||||
|
||||
$jornadas = DB::table('transporte_paciente_jornada as jornada')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'jornada.veiculo_id', 'veiculo.id')
|
||||
->join('geral_dia_semana as dia_semana', 'jornada.geral_dia_semana_id', 'dia_semana.id')
|
||||
->leftJoin(DB::raw(
|
||||
'(SELECT jornada_id, paciente_id, status_id, SUM(IFNULL(acompanhante, 0) + 1) AS total_agendados
|
||||
FROM transporte_paciente_agendar_transporte where status_id NOT IN ('.Status::CANCELADO.')'
|
||||
.($paciente_id && !$gerenciamento ? " and paciente_id <> $paciente_id" : '').
|
||||
' GROUP BY jornada_id) AS agendamentos'),
|
||||
'jornada.id', '=', 'agendamentos.jornada_id'
|
||||
)
|
||||
->when(request()->veiculo_id, fn ($query) => $query->where('jornada.veiculo_id', request()->veiculo_id))
|
||||
->when($dataHorarioSaida, function ($query) use ($dataHorarioSaida) {
|
||||
$query->where('jornada.data_inicial', '<=', $dataHorarioSaida)
|
||||
->where('jornada.data_final', '>=', $dataHorarioSaida);
|
||||
})
|
||||
->when($dataInicial, function ($query) use ($dataInicial, $dataFinal) {
|
||||
$query->where(DB::raw("DATE_FORMAT(jornada.data_inicial, '%Y-%m-%d')"), '>=', $dataInicial)
|
||||
->where(DB::raw("DATE_FORMAT(jornada.data_final, '%Y-%m-%d')"), '<=', $dataFinal);
|
||||
})
|
||||
->when($diaSemana, function ($query) use ($diaSemana) {
|
||||
$query->whereIn('jornada.geral_dia_semana_id', $diaSemana);
|
||||
})
|
||||
->when($saidaDataHorario, function ($query) use ($saidaDataHorario) {
|
||||
$query->where('jornada.data_inicial', '>=', $saidaDataHorario)
|
||||
->where('jornada.data_final', '<=', $saidaDataHorario);
|
||||
})
|
||||
->select(
|
||||
'jornada.id',
|
||||
'jornada.data_inicial',
|
||||
'jornada.data_final',
|
||||
'veiculo.numero_placa',
|
||||
'veiculo.id as veiculo_id',
|
||||
'veiculo.numero_capacidade',
|
||||
'veiculo.tipo_id',
|
||||
'veiculo.tipo_passageiro_id as veiculo_tipo_passageiro_id',
|
||||
'dia_semana.id as geral_dia_semana_id',
|
||||
'dia_semana.descricao as geral_dia_semana_descricao',
|
||||
DB::raw('COALESCE(agendamentos.total_agendados, 0) as total_agendados'),
|
||||
DB::raw("CONCAT(
|
||||
DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
jornada.id
|
||||
) AS descricao")
|
||||
)
|
||||
->orderBy('jornada.data_inicial')
|
||||
->get();
|
||||
|
||||
return $jornadas;
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
return request()->validate(
|
||||
[
|
||||
'data' => [
|
||||
'required',
|
||||
],
|
||||
'data_saida' => [
|
||||
'required',
|
||||
],
|
||||
'horario' => [
|
||||
'required',
|
||||
],
|
||||
'destino_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
],
|
||||
'motivo_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
],
|
||||
'municipio_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
],
|
||||
'ponto_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
],
|
||||
],
|
||||
[
|
||||
'data.required' => 'É obrigatório informar a data',
|
||||
'data_saida.required' => 'É obrigatório informar a data da saída',
|
||||
'horario.required' => 'É obrigatório informar o horário',
|
||||
'destino_id.required' => 'É obrigatório informar o destino',
|
||||
'motivo_id.required' => 'É obrigatório informar o motivo',
|
||||
'municipio_id.required' => 'É obrigatório informar o município',
|
||||
'ponto_id.required' => 'É obrigatório informar o ponto de referência',
|
||||
'municipio_id.required' => 'É obrigatório informar o município',
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public static function editHorario()
|
||||
{
|
||||
return [
|
||||
'form' => [
|
||||
'minDate' => Carbon::now()->format('Y-m-d'),
|
||||
'municipios' => self::getMunicipios(),
|
||||
'locais' => self::getLocais(),
|
||||
'horarios' => self::getHorarios(),
|
||||
],
|
||||
'model' => [
|
||||
'data' => Carbon::now()->format('Y-m-d'),
|
||||
'municipio_id' => null,
|
||||
'destino_id' => null,
|
||||
'horario' => null,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function getMunicipios()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select('agendar.municipio_id as id', 'municipio.nome')
|
||||
->where('agendar.data', request()->data ?? Carbon::now()->format('Y-m-d'))
|
||||
->where('agendar.status_id', Status::AGENDADO)
|
||||
->when(request()->destino_id, function ($query) {
|
||||
$query->where('destino_id', request()->destino_id);
|
||||
})
|
||||
->when(request()->horario, function ($query) {
|
||||
$query->where('horario', request()->horario);
|
||||
})
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', '=', 'agendar.municipio_id')
|
||||
->groupBy('id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getLocais()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select('agendar.destino_id as id', 'destino.descricao_destino as descricao')
|
||||
->where('agendar.data', request()->data ?? Carbon::now()->format('Y-m-d'))
|
||||
->where('agendar.status_id', Status::AGENDADO)
|
||||
->when(request()->municipio_id, function ($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio_id);
|
||||
})
|
||||
->when(request()->horario, function ($query) {
|
||||
$query->where('horario', request()->horario);
|
||||
})
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', '=', 'agendar.destino_id')
|
||||
->groupBy('id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getHorarios()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select('horario')
|
||||
->where('agendar.data', request()->data ?? Carbon::now()->format('Y-m-d'))
|
||||
->where('agendar.status_id', Status::AGENDADO)
|
||||
->when(request()->municipio_id, function ($query) {
|
||||
$query->where('municipio_id', request()->municipio_id);
|
||||
})
|
||||
->when(request()->destino_id, function ($query) {
|
||||
$query->where('destino_id', request()->destino_id);
|
||||
})
|
||||
->groupBy('horario')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getAgendamentos()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'agendar.id',
|
||||
'cidadao.nome',
|
||||
'paciente.prontuario',
|
||||
'cidadao.data_nascimento',
|
||||
'destino.descricao_destino as destino',
|
||||
'agendar.horario',
|
||||
'agendar.horario_saida',
|
||||
'ponto.descricao as ponto',
|
||||
)
|
||||
->where('agendar.data', request()->data)
|
||||
->where('agendar.status_id', Status::AGENDADO)
|
||||
->when(request()->municipio_id, function ($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio_id);
|
||||
})
|
||||
->when(request()->destino_id, function ($query) {
|
||||
$query->where('destino_id', request()->destino_id);
|
||||
})
|
||||
->when(request()->horario, function ($query) {
|
||||
$query->where('horario', request()->horario);
|
||||
})
|
||||
->join('cadastro_paciente as paciente', 'agendar.paciente_id', '=', 'paciente.id')
|
||||
->join('cadastro_cidadao as cidadao', 'paciente.cidadao_id', '=', 'cidadao.id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', '=', 'destino.id')
|
||||
->join('transporte_paciente_ponto as ponto', 'agendar.ponto_id', '=', 'ponto.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getPreAgendamentos($id)
|
||||
{
|
||||
return PreAgendamentoTransporte::where('paciente_id', $id)
|
||||
->doesntHave('agendamento')
|
||||
->whereDate('data', '>=', Carbon::now())
|
||||
->get()
|
||||
->map(function($query) {
|
||||
return [
|
||||
'id' => $query->id,
|
||||
'paciente_id' => $query->paciente_id,
|
||||
'tipo_passgeiro_id' => $query->tipo_passageiro_id,
|
||||
'municipio' => $query->municipio->nome,
|
||||
'municipio_id' => $query->municipio_id,
|
||||
'transportePacienteDestino' => $query->destino->descricao_destino,
|
||||
'destino_id' => $query->destino_id,
|
||||
'transportePacienteMotivo' => $query->motivo->descricao,
|
||||
'motivo_id' => $query->motivo_id,
|
||||
'preAgendamentoData' => $query->data,
|
||||
'data' => Carbon::parse($query->data)->format('d/m/Y'),
|
||||
'data_saida' => Carbon::parse($query->data_saida)->format('d/m/Y'),
|
||||
'horario' => Carbon::parse($query->horario)->format('H:i'),
|
||||
'horario_saida' => $query->horario_saida,
|
||||
'acompanhante' => $query->acompanhante,
|
||||
'acompanhante_1_id' => $query->acompanhante_1_id,
|
||||
'acompanhante1' => $query->acompanhante1->usuario ?? null,
|
||||
'relacao1' => $query->acompanhante1->relacao_id ?? null,
|
||||
'acompanhante_2_id' => $query->acompanhante_2_id,
|
||||
'acompanhante2' => $query->acompanhante2->usuario ?? null,
|
||||
'relacao2' => $query->acompanhante2->relacao_id ?? null,
|
||||
'veiculo_id' => $query->veiculo_id,
|
||||
'jornada_id' => $query->jornada_id,
|
||||
'ponto_id' => $query->ponto_id,
|
||||
'observacao' => $query->observacao,
|
||||
'veiculo_capacidade' => $query->veiculo->numero_capacidade ?? null,
|
||||
'veiculo_tipo_id' => $query->veiculo->tipo_id ?? null,
|
||||
'selecionado' => false,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
public static function updateHorario($request)
|
||||
{
|
||||
foreach($request->agendamentos as $agendamento){
|
||||
$agendar = Agendar::find($agendamento['id']);
|
||||
$ultimaLotacao = $agendar->updated_lotacao_id;
|
||||
|
||||
$agendar->horario_saida = $agendamento['novo_horario'];
|
||||
$agendar->save();
|
||||
|
||||
HistoricoService::create($agendar, Status::MODIFICADO, $ultimaLotacao);
|
||||
}
|
||||
}
|
||||
|
||||
public static function salvarObservacao()
|
||||
{
|
||||
$ultimo_agendamento = Agendar::where('paciente_id', request()->id)->latest()->first();
|
||||
if($ultimo_agendamento) {
|
||||
$ultimo_agendamento->observacao = request()->observacao;
|
||||
$ultimo_agendamento->save();
|
||||
|
||||
HistoricoService::create($ultimo_agendamento, Status::MODIFICADO, $ultimo_agendamento->updated_lotacao_id);
|
||||
}
|
||||
}
|
||||
|
||||
public static function getHistoricos($id)
|
||||
{
|
||||
return HistoricoService::show($id);
|
||||
}
|
||||
|
||||
public static function getTipoPassageiros()
|
||||
{
|
||||
return DB::table('transporte_paciente_jornada as jornada')
|
||||
->select(
|
||||
'tipo_passageiro.descricao',
|
||||
'tipo_passageiro.id'
|
||||
)
|
||||
->join('transporte_paciente_veiculo as veiculo', 'jornada.veiculo_id', 'veiculo.id')
|
||||
->join('transporte_paciente_veiculo_tipo_passageiro as tipo_passageiro', 'veiculo.tipo_passageiro_id', 'tipo_passageiro.id')
|
||||
->whereRaw('DATE_FORMAT(jornada.data_inicial, "%Y-%m-%d") >= ?', [request()->data_saida])
|
||||
->whereRaw('DATE_FORMAT(jornada.data_final, "%Y-%m-%d") >= ?', [request()->data_saida])
|
||||
->when(request()->horario_saida, function($query) {
|
||||
return $query->whereRaw('DATE_FORMAT(jornada.data_inicial, "%H:%i") <= ?', [request()->horario_saida]);
|
||||
})
|
||||
->when(request()->horario_saida, function($query) {
|
||||
return $query->whereRaw('DATE_FORMAT(jornada.data_final, "%H:%i") >= ?', [request()->horario_saida]);
|
||||
})
|
||||
->orderBy('tipo_passageiro.descricao')
|
||||
->groupBy('tipo_passageiro.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getPermissoesAtualizacaoCadastroPaciente()
|
||||
{
|
||||
$parametrizacao = CnsService::getParametrizacao();
|
||||
|
||||
if (!is_null($parametrizacao)) {
|
||||
$lotacao = self::getCurrentLotacao();
|
||||
|
||||
return DB::table('cadastro_parametrizacao_permissao_usuario')
|
||||
->select([
|
||||
'municipe',
|
||||
'provisorio',
|
||||
'outro_municipio',
|
||||
])
|
||||
->where('infraestrutura_id', $lotacao->infraestrutura_id)
|
||||
->where('usuario_id', $lotacao->usuario_id)
|
||||
->get()
|
||||
->first();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static function getAreaMicroarea($usuario, $lotacao, $infraestrutura, $unidade)
|
||||
{
|
||||
return DB::table('cadastro_lotacao')
|
||||
->select('atencao_basica_parametrizacao_area.descricao AS area',
|
||||
'atencao_basica_parametrizacao_microarea.descricao AS microarea'
|
||||
)
|
||||
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_lotacao.usuario_id')
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
|
||||
->leftJoin('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_area.id', 'atencao_basica_parametrizacao_equipe.area_id')
|
||||
->leftJoin('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id')
|
||||
->where('cadastro_lotacao.id', $lotacao)
|
||||
->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $usuario)
|
||||
->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $infraestrutura)
|
||||
->where('atencao_basica_parametrizacao_equipe.unidade_id', $unidade)
|
||||
->first();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Agendar;
|
||||
|
||||
use App\Models\TransportePaciente\Agendar\Historico;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class HistoricoService extends Service
|
||||
{
|
||||
public static function create($transporte, $status, $ultimaLotacao){
|
||||
return Historico::create([
|
||||
'transporte_paciente_agendar_transporte_id' => $transporte->id,
|
||||
'data_saida' => $transporte->data_saida,
|
||||
'horario_saida' => $transporte->horario_saida,
|
||||
'destino_id' => $transporte->destino_id,
|
||||
'veiculo_id' => $transporte->veiculo_id,
|
||||
'acompanhante' => $transporte->acompanhante,
|
||||
'motivo_id' => $transporte->motivo_id,
|
||||
'status_id' => $status,
|
||||
'lotacao_anterior_id' => $ultimaLotacao,
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte_historico as historico')
|
||||
->select(
|
||||
'historico.id',
|
||||
'cidadaoCadastro.nome as usuario_cadastro',
|
||||
'cidadaoEdicao.nome as usuario_edicao',
|
||||
'transporte_paciente_destino.descricao_destino as destino',
|
||||
'historico.acompanhante as acompanhantes',
|
||||
'transporte_paciente_motivo_viagem_procedimento.descricao as motivo',
|
||||
'transporte_paciente_status.descricao as status',
|
||||
DB::raw('CONCAT(DATE_FORMAT(historico.created_at, "%d/%m/%Y %H:%i")) as data_hora_modificacao'),
|
||||
DB::raw('CONCAT(transporte_paciente_veiculo.descricao_modelo, " / ", transporte_paciente_veiculo.numero_placa) as veiculo'),
|
||||
DB::raw('CONCAT(DATE_FORMAT(historico.data_saida, "%d/%m/%Y"), " ", DATE_FORMAT(historico.horario_saida, "%H:%i")) as dataHoraSaida'),
|
||||
|
||||
)
|
||||
->where('transporte_paciente_agendar_transporte_id', $id)
|
||||
->join('cadastro_lotacao as lotacaoUsuarioCadastro', 'lotacaoUsuarioCadastro.id', 'historico.lotacao_anterior_id')
|
||||
->join('cadastro_usuario as usuarioCadastro', 'usuarioCadastro.id', 'lotacaoUsuarioCadastro.usuario_id')
|
||||
->join('cadastro_cidadao as cidadaoCadastro', 'cidadaoCadastro.id', 'usuarioCadastro.cidadao_id')
|
||||
|
||||
->join('cadastro_lotacao as lotacaoUsuarioEdicao', 'lotacaoUsuarioEdicao.id', 'historico.updated_lotacao_id')
|
||||
->join('cadastro_usuario as usuarioEdicao', 'usuarioEdicao.id', 'lotacaoUsuarioEdicao.usuario_id')
|
||||
->join('cadastro_cidadao as cidadaoEdicao', 'cidadaoEdicao.id', 'usuarioEdicao.cidadao_id')
|
||||
|
||||
->leftJoin('transporte_paciente_destino', 'transporte_paciente_destino.id', 'historico.destino_id')
|
||||
->leftJoin('transporte_paciente_veiculo', 'transporte_paciente_veiculo.id', 'historico.veiculo_id')
|
||||
->join('transporte_paciente_motivo_viagem_procedimento', 'transporte_paciente_motivo_viagem_procedimento.id', 'historico.motivo_id')
|
||||
->join('transporte_paciente_status', 'transporte_paciente_status.id', 'historico.status_id')
|
||||
->latest('historico.created_at')
|
||||
->get()
|
||||
;
|
||||
}
|
||||
}
|
||||
260
api/app/Services/TransportePaciente/Condutor/CondutorService.php
Normal file
260
api/app/Services/TransportePaciente/Condutor/CondutorService.php
Normal file
@@ -0,0 +1,260 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Condutor;
|
||||
|
||||
use App\Exceptions\Model\DeletingModelException;
|
||||
use App\Models\Cadastro\SujeitoAtencao\CarteiraHabilitacaoCategoria;
|
||||
use App\Models\TransportePaciente\Condutor\Condutor;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class CondutorService extends Service
|
||||
{
|
||||
private static function getCarteiraHabilitacaoCategoria()
|
||||
{
|
||||
return CarteiraHabilitacaoCategoria::all();
|
||||
}
|
||||
|
||||
private static function getUsuariosCondutores($condutor = null)
|
||||
{
|
||||
if ($condutor) {
|
||||
|
||||
return DB::table('cadastro_usuario')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
||||
->join('cadastro_lotacao', 'cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
|
||||
->whereNull('cadastro_lotacao.deleted_at')
|
||||
->whereIn(
|
||||
'cadastro_usuario.id',
|
||||
DB::table('transporte_paciente_condutor')
|
||||
->where(
|
||||
'usuario_id',
|
||||
$condutor->usuario_id
|
||||
)
|
||||
->select('transporte_paciente_condutor.usuario_id as id')
|
||||
->get()
|
||||
->pluck('id')
|
||||
)
|
||||
->whereIn(
|
||||
'cadastro_lotacao.ocupacao_id',
|
||||
DB::table('sigtap.ocupacao')
|
||||
->where(
|
||||
'sigtap.ocupacao.nome',
|
||||
'like',
|
||||
'MOTORISTA%'
|
||||
)
|
||||
->orWhere(
|
||||
'sigtap.ocupacao.nome',
|
||||
'like',
|
||||
'CONDUTOR%'
|
||||
)
|
||||
->select('sigtap.ocupacao.id')
|
||||
->get()
|
||||
->pluck('id')
|
||||
)
|
||||
->select([
|
||||
'cadastro_usuario.id',
|
||||
'cadastro_cidadao.nome'
|
||||
])
|
||||
->groupBy('cadastro_usuario.id')
|
||||
->orderby('nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
return DB::table('cadastro_usuario')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
||||
->join('cadastro_lotacao', 'cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
|
||||
->whereNull('cadastro_lotacao.deleted_at')
|
||||
->whereNotIn(
|
||||
'cadastro_usuario.id',
|
||||
DB::table('transporte_paciente_condutor')
|
||||
->select('transporte_paciente_condutor.usuario_id as id')
|
||||
->get()
|
||||
->pluck('id')
|
||||
)
|
||||
->whereIn(
|
||||
'cadastro_lotacao.ocupacao_id',
|
||||
DB::table('sigtap.ocupacao')
|
||||
->where(
|
||||
'sigtap.ocupacao.nome',
|
||||
'like',
|
||||
'MOTORISTA%'
|
||||
)
|
||||
->orWhere(
|
||||
'sigtap.ocupacao.nome',
|
||||
'like',
|
||||
'CONDUTOR%'
|
||||
)
|
||||
->select('sigtap.ocupacao.id')
|
||||
->get()
|
||||
->pluck('id')
|
||||
)
|
||||
->select([
|
||||
'cadastro_usuario.id',
|
||||
'cadastro_cidadao.nome',
|
||||
])
|
||||
->groupBy('cadastro_usuario.id')
|
||||
->orderby('nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getFormData($condutor = null)
|
||||
{
|
||||
return [
|
||||
'condutores' => self::getUsuariosCondutores($condutor),
|
||||
'categorias' => self::getCarteiraHabilitacaoCategoria(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModelData($condutor = null)
|
||||
{
|
||||
return [
|
||||
'id' => $condutor->id ?? null,
|
||||
'usuario_id' => $condutor->usuario_id ?? null,
|
||||
'categoria_cnh_id' => $condutor->categoria_cnh_id ?? null,
|
||||
'numero_cnh' => $condutor->numero_cnh ?? null,
|
||||
'bloqueado' => $condutor->bloqueado ?? null,
|
||||
'vencimento_habilitacao' => $condutor->vencimento_habilitacao ?? null,
|
||||
'matricula' => $condutor->matricula ?? null
|
||||
];
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
return Condutor::find($id);
|
||||
}
|
||||
|
||||
public static function update($request, $id)
|
||||
{
|
||||
self::validate($request);
|
||||
|
||||
return Condutor::where('id', $id)->update($request->all());
|
||||
}
|
||||
|
||||
public static function bloquear($id)
|
||||
{
|
||||
$condutor = self::show($id);
|
||||
|
||||
return Condutor::where('id', $id)->update(['bloqueado' => $condutor->bloqueado == 1 ? 0 : 1]);
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$condutor = self::show($id);
|
||||
|
||||
return [
|
||||
'form' => self::getFormData($condutor),
|
||||
'model' => self::getModelData($condutor),
|
||||
];
|
||||
}
|
||||
|
||||
public static function store($request)
|
||||
{
|
||||
self::validate($request);
|
||||
|
||||
return Condutor::create($request->all())->fresh();
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
try {
|
||||
return self::show($id)->delete();
|
||||
} catch (\Throwable $th) {
|
||||
throw new DeletingModelException();
|
||||
}
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
$condutores = DB::table('transporte_paciente_condutor')
|
||||
->join(
|
||||
'cadastro_carteira_habilitacao_categoria',
|
||||
'transporte_paciente_condutor.categoria_cnh_id',
|
||||
'=',
|
||||
'cadastro_carteira_habilitacao_categoria.id'
|
||||
)->join(
|
||||
'cadastro_usuario',
|
||||
'transporte_paciente_condutor.usuario_id',
|
||||
'=',
|
||||
'cadastro_usuario.id'
|
||||
)->join(
|
||||
'cadastro_cidadao',
|
||||
'cadastro_usuario.cidadao_id',
|
||||
'=',
|
||||
'cadastro_cidadao.id'
|
||||
)->select(
|
||||
'cadastro_cidadao.nome',
|
||||
'transporte_paciente_condutor.id',
|
||||
'transporte_paciente_condutor.usuario_id',
|
||||
'transporte_paciente_condutor.numero_cnh',
|
||||
'transporte_paciente_condutor.categoria_cnh_id',
|
||||
'transporte_paciente_condutor.bloqueado',
|
||||
'cadastro_carteira_habilitacao_categoria.letra as categoria',
|
||||
DB::raw("
|
||||
CASE WHEN transporte_paciente_condutor.bloqueado THEN
|
||||
'INATIVO'
|
||||
ELSE
|
||||
'ATIVO'
|
||||
END AS status
|
||||
"),
|
||||
DB::raw("DATE_FORMAT(transporte_paciente_condutor.vencimento_habilitacao, '%d/%m/%Y') AS vencimento_habilitacao"),
|
||||
);
|
||||
|
||||
return datatables()
|
||||
->of($condutores)
|
||||
->filterColumn('transporte_paciente_condutor.bloqueado', function ($query, $keyword) {
|
||||
|
||||
$query->whereRaw("
|
||||
CASE WHEN transporte_paciente_condutor.bloqueado THEN
|
||||
'INATIVO'
|
||||
ELSE
|
||||
'ATIVO'
|
||||
END LIKE ?", ["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->filterColumn('transporte_paciente_condutor.vencimento_habilitacao', function ($query, $keyword) {
|
||||
$query
|
||||
->whereRaw("DATE_FORMAT(transporte_paciente_condutor.vencimento_habilitacao, '%d/%m/%Y') LIKE ?", ["%{$keyword}%"])
|
||||
->orWhereRaw(
|
||||
"CONCAT(
|
||||
SUBSTR(transporte_paciente_condutor.vencimento_habilitacao,9,2),
|
||||
SUBSTR(transporte_paciente_condutor.vencimento_habilitacao,6,2),
|
||||
SUBSTR(transporte_paciente_condutor.vencimento_habilitacao,1,4)
|
||||
) like ?",
|
||||
["%{$keyword}%"]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
private static function validate($request)
|
||||
{
|
||||
return $request->validate([
|
||||
'usuario_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::unique('transporte_paciente_condutor')
|
||||
->ignore($request->condutor)
|
||||
],
|
||||
'numero_cnh' => [
|
||||
'required',
|
||||
'String',
|
||||
],
|
||||
'categoria_cnh_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
],
|
||||
'vencimento_habilitacao' => [
|
||||
'required',
|
||||
'date',
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
267
api/app/Services/TransportePaciente/Destino/DestinoService.php
Normal file
267
api/app/Services/TransportePaciente/Destino/DestinoService.php
Normal file
@@ -0,0 +1,267 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Destino;
|
||||
|
||||
use App\Enums\Geral\DocumentoTipo;
|
||||
use App\Exceptions\Model\DeletingModelException;
|
||||
use App\Models\Cadastro\Localizacao\LogradouroTipo;
|
||||
use App\Models\Intranet\Estado;
|
||||
use App\Models\Intranet\Municipio;
|
||||
use App\Models\TransportePaciente\Destino\Destino;
|
||||
use App\Models\TransportePaciente\Destino\DestinoTipo;
|
||||
use App\Services\Service;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class DestinoService extends Service
|
||||
{
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
|
||||
return [
|
||||
'data_atual' => $now->format('d/m/Y'),
|
||||
'estados' => Estado::all(),
|
||||
'tipos_destino' => DestinoTipo::all(),
|
||||
'tiposLogradouro' => LogradouroTipo::orderBy('descricao')->get()->map(fn ($tipo) => [
|
||||
'id' => $tipo->id,
|
||||
'descricao' => $tipo->descricao,
|
||||
])
|
||||
];
|
||||
}
|
||||
|
||||
private static function obterMunicipio($municipioId = null)
|
||||
{
|
||||
$municipio = [
|
||||
'id' => '',
|
||||
'nome' => '',
|
||||
'ibge' => '',
|
||||
];
|
||||
|
||||
if (!is_null($municipioId)) {
|
||||
|
||||
$dadosMunicipio = Municipio::where('id', $municipioId)->get();
|
||||
|
||||
$municipio['id'] = $dadosMunicipio[0]->id;
|
||||
$municipio['nome'] = $dadosMunicipio[0]->nome;
|
||||
$municipio['ibge'] = $dadosMunicipio[0]->ibge;
|
||||
}
|
||||
|
||||
return $municipio;
|
||||
}
|
||||
|
||||
private static function getModelData($destino = null)
|
||||
{
|
||||
|
||||
if (!is_null($destino)) {
|
||||
|
||||
if ($destino->documento_tipo_id && ($destino->numero_cnpj || $destino->numero_cpf)) {
|
||||
|
||||
$destino->numero_documento = $destino->documento_tipo_id === DocumentoTipo::CNPJ ?
|
||||
MaskUtil::getCnpjMasked($destino->numero_cnpj) :
|
||||
MaskUtil::getCpfMasked($destino->numero_cpf);
|
||||
}
|
||||
}
|
||||
|
||||
$destino = [
|
||||
'id' => $destino->id ?? null,
|
||||
'descricao_destino' => $destino->descricao_destino ?? null,
|
||||
'numero_telefone_fax' => $destino->numero_telefone_fax ?? null !== null ?
|
||||
MaskUtil::getPhoneMasked($destino->numero_telefone_fax) :
|
||||
'',
|
||||
'numero_documento' => $destino->numero_documento ?? null,
|
||||
'nome_logradouro' => $destino->nome_logradouro ?? null,
|
||||
'numero_logradouro' => $destino->numero_logradouro ?? null,
|
||||
'nome_complemento' => $destino->nome_complemento ?? null,
|
||||
'nome_bairro' => $destino->nome_bairro ?? null,
|
||||
'numero_cep' => $destino->numero_cep ?? null !== null ?
|
||||
MaskUtil::getCepMasked($destino->numero_cep) :
|
||||
null,
|
||||
'numero_telefone_comercial' => $destino->numero_telefone_comercial ?? null !== null ?
|
||||
MaskUtil::getPhoneMasked($destino->numero_telefone_comercial) :
|
||||
'',
|
||||
'observacao' => $destino->observacao ?? null,
|
||||
'cnes' => $destino->cnes ?? null,
|
||||
'bloqueado' => $destino->bloqueado ?? null,
|
||||
'tipo_prestador' => $destino->tipo_prestador ?? null,
|
||||
'distancia' => $destino->distancia ?? null,
|
||||
'destino_tipo_id' => $destino->destino_tipo_id ?? null,
|
||||
'cadastro_logradouro_tipo_id' => $destino->cadastro_logradouro_tipo_id ?? null,
|
||||
'documento_tipo_id' => $destino->documento_tipo_id ?? DocumentoTipo::CNPJ,
|
||||
'usuario_id' => $destino->usuario_id ?? null,
|
||||
'estado_id' => $destino->estado_id ?? null,
|
||||
'municipio_id' => $destino->municipio_id ?? null,
|
||||
'municipio' => self::obterMunicipio($destino->municipio_id ?? null),
|
||||
];
|
||||
|
||||
return $destino;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
return Destino::find($id);
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return Destino::where('id', $id)->update(request()->all());
|
||||
}
|
||||
|
||||
public static function bloquear($id)
|
||||
{
|
||||
$destino = self::show($id);
|
||||
|
||||
return Destino::where('id', $id)->update(['bloqueado' => $destino->bloqueado == 1 ? 0 : 1]);
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(self::show($id)),
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return Destino::create(request()->all())->fresh();
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
try {
|
||||
return self::show($id)->delete();
|
||||
} catch (\Throwable $th) {
|
||||
throw new DeletingModelException;
|
||||
}
|
||||
}
|
||||
|
||||
public static function obterDestinos()
|
||||
{
|
||||
return Destino::all();
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
$tipoCpf = DocumentoTipo::CPF;
|
||||
$tipoCnpj = DocumentoTipo::CNPJ;
|
||||
|
||||
$destinos = DB::table('transporte_paciente_destino')
|
||||
->leftJoin(
|
||||
'transporte_paciente_destino_tipo',
|
||||
'transporte_paciente_destino.destino_tipo_id',
|
||||
'=',
|
||||
'transporte_paciente_destino_tipo.id'
|
||||
)
|
||||
->leftJoin('intranet.cadastro_municipio as municipio', 'municipio.id', 'transporte_paciente_destino.municipio_id')
|
||||
->select(
|
||||
'transporte_paciente_destino.id',
|
||||
'transporte_paciente_destino.descricao_destino',
|
||||
'transporte_paciente_destino.documento_tipo_id',
|
||||
'municipio.nome as municipio',
|
||||
'transporte_paciente_destino.bloqueado',
|
||||
'transporte_paciente_destino_tipo.descricao as descricao_tipo_destino',
|
||||
DB::raw("
|
||||
case
|
||||
when transporte_paciente_destino.documento_tipo_id is null
|
||||
then '-'
|
||||
when transporte_paciente_destino.documento_tipo_id = {$tipoCpf}
|
||||
then transporte_paciente_destino.numero_cpf
|
||||
when transporte_paciente_destino.documento_tipo_id = {$tipoCnpj}
|
||||
then transporte_paciente_destino.numero_cnpj
|
||||
else
|
||||
'-'
|
||||
end as numero_documento
|
||||
"),
|
||||
DB::raw("
|
||||
CASE WHEN transporte_paciente_destino.bloqueado THEN
|
||||
'INATIVO'
|
||||
ELSE
|
||||
'ATIVO'
|
||||
END AS status
|
||||
"),
|
||||
);
|
||||
|
||||
return datatables()
|
||||
->of($destinos)
|
||||
->filterColumn('transporte_paciente_destino.bloqueado', function ($query, $keyword) {
|
||||
|
||||
$query->whereRaw("
|
||||
CASE WHEN transporte_paciente_destino.bloqueado THEN
|
||||
'INATIVO'
|
||||
ELSE
|
||||
'ATIVO'
|
||||
END LIKE ?", ["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->filterColumn('transporte_paciente_destino.documento_tipo_id', function ($query, $keyword) {
|
||||
|
||||
$query
|
||||
->whereRaw("transporte_paciente_destino.numero_cpf like ?", ["%{$keyword}%"])
|
||||
->orWhereRaw(
|
||||
"CONCAT(
|
||||
SUBSTR(transporte_paciente_destino.numero_cpf,1,3),
|
||||
'.',
|
||||
SUBSTR(transporte_paciente_destino.numero_cpf,4,3),
|
||||
'.',
|
||||
SUBSTR(transporte_paciente_destino.numero_cpf,7,3),
|
||||
'-',
|
||||
SUBSTR(transporte_paciente_destino.numero_cpf,10,2)
|
||||
) like ?",
|
||||
["%{$keyword}%"]
|
||||
)
|
||||
->orWhereRaw("transporte_paciente_destino.numero_cnpj like ?", ["%{$keyword}%"])
|
||||
->orWhereRaw(
|
||||
"CONCAT(
|
||||
SUBSTR(transporte_paciente_destino.numero_cnpj, 1, 2),
|
||||
'.',
|
||||
SUBSTR(transporte_paciente_destino.numero_cnpj, 3, 3),
|
||||
'.',
|
||||
SUBSTR(transporte_paciente_destino.numero_cnpj, 6, 3),
|
||||
'/',
|
||||
SUBSTR(transporte_paciente_destino.numero_cnpj, 9, 4),
|
||||
'-',
|
||||
SUBSTR(transporte_paciente_destino.numero_cnpj, 13, 2)
|
||||
) like ?",
|
||||
["%{$keyword}%"]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
return request()->validate(
|
||||
[
|
||||
'descricao_destino' => [
|
||||
'required',
|
||||
'min:3',
|
||||
'max:100',
|
||||
Rule::unique('transporte_paciente_destino')
|
||||
->where(function ($query) {
|
||||
return $query->where('municipio_id', request()->municipio_id);
|
||||
})
|
||||
->ignore(request()->destino),
|
||||
],
|
||||
],
|
||||
[
|
||||
'descricao_destino.unique' => 'O destino já foi inserido anteriormente para este município.',
|
||||
'descricao_destino.min' => 'A descrição do destino precisa ter no mínimo 3 caracteres.'
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
474
api/app/Services/TransportePaciente/Escolher/EscolherService.php
Normal file
474
api/app/Services/TransportePaciente/Escolher/EscolherService.php
Normal file
@@ -0,0 +1,474 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Escolher;
|
||||
|
||||
use App\Enums\TransportePaciente\Funcionalidade;
|
||||
use App\Enums\TransportePaciente\Status;
|
||||
use App\Exceptions\TransportePaciente\ExceededCapacidadeVeiculoException;
|
||||
use App\Models\TransportePaciente\Agendar\Agendar;
|
||||
use App\Models\TransportePaciente\Destino\Destino;
|
||||
use App\Models\TransportePaciente\Parametrizacao\Parametrizacao;
|
||||
use App\Models\TransportePaciente\Veiculo\Tipo;
|
||||
use App\Models\TransportePaciente\Veiculo\TipoPassageiro;
|
||||
use App\Models\TransportePaciente\Veiculo\Veiculo;
|
||||
use App\Services\Service;
|
||||
use App\Services\TransportePaciente\Agendar\HistoricoService;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class EscolherService extends Service
|
||||
{
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$agendamentos = DB::table('transporte_paciente_agendar_transporte')
|
||||
->select([
|
||||
'transporte_paciente_agendar_transporte.id',
|
||||
'transporte_paciente_agendar_transporte.supervisor_id',
|
||||
'transporte_paciente_agendar_transporte.jornada_id',
|
||||
DB::raw('DATE_FORMAT(transporte_paciente_agendar_transporte.data, "%d/%m/%Y") AS data_consulta'),
|
||||
DB::raw('DATE_FORMAT(transporte_paciente_agendar_transporte.data_saida, "%d/%m/%Y") AS data_saida'),
|
||||
DB::raw('TIME_FORMAT(transporte_paciente_agendar_transporte.horario, "%H:%i") AS horario_consulta'),
|
||||
DB::raw('COALESCE(
|
||||
pre.observacao,
|
||||
transporte_paciente_agendar_transporte.consulta_observacao,
|
||||
NULL
|
||||
) AS consulta_observacao'),
|
||||
'transporte_paciente_agendar_transporte.horario_saida',
|
||||
DB::raw('COALESCE(transporte_paciente_agendar_transporte.acompanhante, "NÃO") AS acompanhante'),
|
||||
DB::raw('COALESCE(transporte_paciente_ponto.descricao, "CASA DO PACIENTE") AS ponto'),
|
||||
DB::raw('COALESCE(transporte_paciente_destino.descricao_destino, "-") AS destino'),
|
||||
'intranet.cadastro_municipio.nome AS municipio',
|
||||
'cadastro_paciente.id AS paciente_id',
|
||||
'cadastro_cidadao.nome AS paciente_nome',
|
||||
'cadastro_cidadao.preferencia_nome_id AS paciente_preferencia_nome_id',
|
||||
'cadastro_cidadao.nome_social AS paciente_nome_social',
|
||||
'usuario_cidadao.nome AS profissional_nome',
|
||||
'cadastro_cidadao.sexo_id AS paciente_sexo_id',
|
||||
'transporte_paciente_agendar_transporte.status_id',
|
||||
DB::raw('DATE_FORMAT(cadastro_cidadao.data_nascimento, "%d/%m/%Y") AS paciente_nascimento'),
|
||||
DB::raw('LPAD(cadastro_paciente.prontuario,7,0) as paciente_prontuario'),
|
||||
DB::raw('CONCAT(TIMESTAMPDIFF(YEAR, cadastro_cidadao.data_nascimento, transporte_paciente_agendar_transporte.data), " anos") AS paciente_idade'),
|
||||
DB::raw('false AS selecionado'),
|
||||
DB::raw('null AS veiculo_id'),
|
||||
DB::raw('"NÃO ATRIBUÍDO" AS veiculo_nome'),
|
||||
'transporte_paciente_veiculo_tipo_passageiro.id AS tipo_passageiro_id',
|
||||
'transporte_paciente_veiculo_tipo_passageiro.descricao AS tipo_passageiro_descricao',
|
||||
])
|
||||
->join('transporte_paciente_ponto', 'transporte_paciente_ponto.id', 'transporte_paciente_agendar_transporte.ponto_id')
|
||||
->join('transporte_paciente_destino', 'transporte_paciente_destino.id', 'transporte_paciente_agendar_transporte.destino_id')
|
||||
->join('intranet.cadastro_municipio', 'intranet.cadastro_municipio.id', 'transporte_paciente_agendar_transporte.municipio_id')
|
||||
->join('cadastro_paciente', 'cadastro_paciente.id', 'transporte_paciente_agendar_transporte.paciente_id')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->join(
|
||||
'cadastro_lotacao',
|
||||
'cadastro_lotacao.id',
|
||||
'transporte_paciente_agendar_transporte.created_lotacao_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_usuario AS usuario_lotacao',
|
||||
'usuario_lotacao.id',
|
||||
'cadastro_lotacao.usuario_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_cidadao AS usuario_cidadao',
|
||||
'usuario_cidadao.id',
|
||||
'usuario_lotacao.cidadao_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'transporte_paciente_pre_agendamento_transporte as pre',
|
||||
'pre.id',
|
||||
'transporte_paciente_agendar_transporte.pre_agendamento_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'transporte_paciente_veiculo_tipo_passageiro',
|
||||
'transporte_paciente_veiculo_tipo_passageiro.id',
|
||||
'transporte_paciente_agendar_transporte.tipo_passageiro_id'
|
||||
);
|
||||
|
||||
$agendamentos->whereNull('transporte_paciente_agendar_transporte.veiculo_id');
|
||||
$agendamentos = $agendamentos->whereIn('transporte_paciente_agendar_transporte.status_id', [Status::AGENDADO, Status::MODIFICADO, Status::REAGENDADO]);
|
||||
|
||||
if (request()->data_saida) {
|
||||
|
||||
$agendamentos->where('transporte_paciente_agendar_transporte.data_saida', request()->data_saida);
|
||||
} else {
|
||||
|
||||
$agendamentos->where('transporte_paciente_agendar_transporte.data_saida', $currentDate);
|
||||
}
|
||||
|
||||
if (request()->municipio_id) {
|
||||
|
||||
$agendamentos->where('transporte_paciente_agendar_transporte.municipio_id', request()->municipio_id);
|
||||
}
|
||||
|
||||
if (request()->destino_id) {
|
||||
|
||||
$agendamentos->where('transporte_paciente_agendar_transporte.destino_id', request()->destino_id);
|
||||
}
|
||||
|
||||
if (request()->tipo_passageiro_id) {
|
||||
|
||||
$agendamentos->where('transporte_paciente_agendar_transporte.tipo_passageiro_id', request()->tipo_passageiro_id);
|
||||
}
|
||||
|
||||
if (request()->horario_saida) {
|
||||
|
||||
$agendamentos->where('transporte_paciente_agendar_transporte.horario_saida', request()->horario_saida);
|
||||
}
|
||||
|
||||
if (request()->ordenacao) {
|
||||
|
||||
if (request()->ordenacao == 'paciente') {
|
||||
|
||||
$agendamentos = $agendamentos->orderBy('cadastro_cidadao.nome');
|
||||
}
|
||||
else if (request()->ordenacao == 'agendamento') {
|
||||
|
||||
$agendamentos = $agendamentos->orderBy('transporte_paciente_agendar_transporte.id');
|
||||
}
|
||||
else if (request()->ordenacao == 'data_consulta') {
|
||||
|
||||
$agendamentos = $agendamentos
|
||||
->orderBy('transporte_paciente_agendar_transporte.data')
|
||||
->orderBy('transporte_paciente_agendar_transporte.horario');
|
||||
}
|
||||
else if (request()->ordenacao == 'hora_saida') {
|
||||
|
||||
$agendamentos = $agendamentos
|
||||
->orderBy('transporte_paciente_agendar_transporte.data_saida')
|
||||
->orderBy('transporte_paciente_agendar_transporte.horario_saida');
|
||||
}
|
||||
else if (request()->ordenacao == 'local_consulta') {
|
||||
|
||||
$agendamentos = $agendamentos
|
||||
->orderBy('transporte_paciente_destino.descricao_destino');
|
||||
}
|
||||
else if (request()->ordenacao == 'ponto_referencia') {
|
||||
|
||||
$agendamentos = $agendamentos
|
||||
->orderBy(DB::raw('COALESCE(transporte_paciente_ponto.descricao, "CASA DO PACIENTE")'));
|
||||
}
|
||||
} else {
|
||||
$agendamentos = $agendamentos
|
||||
->orderBy('transporte_paciente_agendar_transporte.horario_saida');
|
||||
}
|
||||
|
||||
$agendamentos = $agendamentos->get();
|
||||
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
|
||||
return [
|
||||
'veiculos' => self::getVeiculos($parametrizacao->agendar_transporte_jornada ?? null),
|
||||
'jornadas' => self::getJornadas(),
|
||||
'agendamentos' => $agendamentos,
|
||||
'agendamentos_jornada' => self::getAgendadosPaciente()
|
||||
];
|
||||
}
|
||||
|
||||
public static function getAgendadosPaciente() {
|
||||
|
||||
return Agendar::where('data_saida', request()->data_saida)
|
||||
->when(request()->municipio_id, function ($query) {
|
||||
$query->where('municipio_id', request()->municipio_id);
|
||||
})
|
||||
->when(request()->destino_id, function ($query) {
|
||||
$query->where('destino_id', request()->destino_id);
|
||||
})
|
||||
->when(request()->horario_saida, function ($query) {
|
||||
$query->where('horario_saida', request()->horario_saida);
|
||||
})
|
||||
->whereNotNull('veiculo_id')
|
||||
->whereNotIn('status_id', [Status::CANCELADO, Status::TRANSPORTADO])
|
||||
->get()
|
||||
->map(fn($query) => [
|
||||
'id' => $query->id ?? null,
|
||||
'jornada_id' => $query->jornada_id ?? null,
|
||||
'jornada_descricao' => $query->jornada_id
|
||||
? (new Carbon($query->jornada->data_inicial))->format('d/m/Y H:i')
|
||||
. ' - '
|
||||
. (new Carbon($query->jornada->data_final))->format('d/m/Y H:i')
|
||||
. ' - '
|
||||
. $query->jornada_id
|
||||
: null,
|
||||
'paciente_id' => $query->paciente_id ?? null,
|
||||
'paciente_nome' => $query->paciente->cidadao->nome ?? null,
|
||||
'veiculo_id' => $query->veiculo_id ?? null,
|
||||
'numero_placa' => $query->veiculo->numero_placa ?? null,
|
||||
'descricao_modelo' => $query->veiculo->descricao_modelo ?? null,
|
||||
'data_inicial' => $query->jornada->data_inicial ?? $query->data,
|
||||
'data_final' => $query->jornada->data_final ?? $query->data,
|
||||
'data' => (new Carbon($query->data))->format('d/m/Y') ?? null,
|
||||
'horario' => (new Carbon($query->horario))->format('H:i') ?? null,
|
||||
'destino' => $query->destino->descricao_destino ?? null,
|
||||
'municipio' => $query->municipio->nome ?? null,
|
||||
'uf' => $query->municipio->estado->uf ?? null,
|
||||
'motivo' => $query->motivo->descricao ?? null,
|
||||
'observacao' => $query->observacao,
|
||||
]);
|
||||
}
|
||||
|
||||
public static function loadFields()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData()
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
|
||||
return [
|
||||
'data_atual' => $now->format('d/m/Y'),
|
||||
'periodo' => [
|
||||
'start' => $currentDate,
|
||||
'end' => $currentDate,
|
||||
],
|
||||
'municipios' => self::getMunicipios(),
|
||||
'destinos' => self::getDestinos(),
|
||||
'horariosSaida' => self::getHorariosSaida(),
|
||||
'tipos_passageiro' => TipoPassageiro::orderBy('descricao')->get(),
|
||||
'tipos_veiculo' => Tipo::orderBy('descricao')->get(),
|
||||
'horario_saida' => $parametrizacao->horario_saida ?? null,
|
||||
'mensagem_protocolo' => $parametrizacao->mensagem_protocolo ?? null,
|
||||
'agendar_transporte_jornada' => $parametrizacao->agendar_transporte_jornada ?? null,
|
||||
'ordenacao' => [
|
||||
['value' => 'agendamento', 'text' => 'AGENDAMENTO'],
|
||||
['value' => 'data_consulta', 'text' => 'DATA / HORA DA CONSULTA'],
|
||||
['value' => 'hora_saida', 'text' => 'HORÁRIO DE SAÍDA'],
|
||||
['value' => 'local_consulta', 'text' => 'LOCAL DE CONSULTA'],
|
||||
['value' => 'paciente', 'text' => 'PACIENTE'],
|
||||
['value' => 'ponto_referencia', 'text' => 'PONTO DE REFERÊNCIA'],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function getVeiculos($jornada) {
|
||||
|
||||
if ($jornada) {
|
||||
|
||||
$veiculos = DB::table('transporte_paciente_veiculo as veiculo')
|
||||
->join('transporte_paciente_jornada as jornada', 'veiculo.id', 'jornada.veiculo_id')
|
||||
->when(request()->tipo_passageiro_id, function ($query) {
|
||||
if (in_array(request()->tipo_passageiro_id, [3, 4])) {
|
||||
$query->whereIn('veiculo.tipo_passageiro_id', [3, 4]);
|
||||
} else {
|
||||
$query->where('veiculo.tipo_passageiro_id', request()->tipo_passageiro_id);
|
||||
}
|
||||
})
|
||||
->when(request()->horario_saida, function ($query) {
|
||||
$query->where(DB::raw("DATE_FORMAT(jornada.data_inicial, '%H:%i')"), '<=', request()->horario_saida)
|
||||
->where(DB::raw("DATE_FORMAT(jornada.data_final, '%H:%i')"), '>=', request()->horario_saida);
|
||||
})
|
||||
->when(request()->data_saida, function ($query) {
|
||||
$query->where(DB::raw("DATE_FORMAT(jornada.data_inicial, '%Y-%m-%d')"), '<=', request()->data_saida)
|
||||
->where(DB::raw("DATE_FORMAT(jornada.data_final, '%Y-%m-%d')"), '>=', request()->data_saida);
|
||||
})
|
||||
->where('veiculo.bloqueado', false)
|
||||
->select(
|
||||
'veiculo.id',
|
||||
DB::raw('CONCAT(
|
||||
veiculo.numero_placa,
|
||||
" - ",
|
||||
veiculo.descricao_modelo
|
||||
) AS descricao')
|
||||
)
|
||||
->orderBy('veiculo.numero_placa')
|
||||
->groupBy('veiculo.id')
|
||||
->get();
|
||||
} else {
|
||||
|
||||
$veiculos = Veiculo::where('bloqueado', false)
|
||||
->get()
|
||||
->map(fn($query) => [
|
||||
'id' => $query->id ?? null,
|
||||
'descricao' => $query->numero_placa . ' - ' . $query->descricao_modelo,
|
||||
'capacidade' => $query->numero_capacidade ?? null,
|
||||
'tipo_id' => $query->tipo_id ?? null,
|
||||
'agendados' => Agendar::where('veiculo_id', $query->id)
|
||||
->whereNotIn('status_id', [Status::CANCELADO])
|
||||
->when(request()->data_saida, function ($query) {
|
||||
$query->where(DB::raw("DATE_FORMAT(data_saida, '%Y-%m-%d')"), request()->data_saida);
|
||||
})
|
||||
->select(
|
||||
DB::raw('SUM(IFNULL(acompanhante, 0) + 1) AS quantidade'),
|
||||
)
|
||||
->groupBy('veiculo_id')
|
||||
->first()
|
||||
]);
|
||||
}
|
||||
|
||||
return $veiculos;
|
||||
}
|
||||
|
||||
public static function getJornadas()
|
||||
{
|
||||
$jornadas = DB::table('transporte_paciente_jornada as jornada')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'jornada.veiculo_id', 'veiculo.id')
|
||||
->join('geral_dia_semana as dia_semana', 'jornada.geral_dia_semana_id', 'dia_semana.id')
|
||||
->leftJoin(DB::raw(
|
||||
'(
|
||||
SELECT jornada_id, SUM(IFNULL(acompanhante, 0) + 1) AS total_agendados
|
||||
FROM transporte_paciente_agendar_transporte
|
||||
where status_id NOT IN ('.Status::CANCELADO.')
|
||||
GROUP BY jornada_id
|
||||
) AS agendamentos
|
||||
'),
|
||||
'jornada.id',
|
||||
'agendamentos.jornada_id'
|
||||
)
|
||||
->when(request()->veiculo_id, fn ($query) => $query->where('jornada.veiculo_id', request()->veiculo_id))
|
||||
->where(DB::raw("DATE_FORMAT(jornada.data_inicial, '%Y-%m-%d')"), '<=', request()->data_saida)
|
||||
->where(DB::raw("DATE_FORMAT(jornada.data_final, '%Y-%m-%d')"), '>=', request()->data_saida)
|
||||
->select(
|
||||
'jornada.id',
|
||||
'jornada.data_inicial',
|
||||
'jornada.data_final',
|
||||
'veiculo.id as veiculo_id',
|
||||
'veiculo.numero_placa',
|
||||
'veiculo.numero_capacidade',
|
||||
'veiculo.tipo_id',
|
||||
'dia_semana.id as geral_dia_semana_id',
|
||||
'dia_semana.descricao as geral_dia_semana_descricao',
|
||||
DB::raw("CONCAT(
|
||||
DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
jornada.id
|
||||
) AS descricao"),
|
||||
DB::raw('COALESCE(agendamentos.total_agendados, 0) as total_agendados')
|
||||
)
|
||||
->orderBy('jornada.data_inicial')
|
||||
->get();
|
||||
|
||||
return $jornadas;
|
||||
}
|
||||
|
||||
public static function getHorariosSaida() {
|
||||
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$data_saida = request()->data_saida ?? $currentDate;
|
||||
|
||||
return Agendar::where('data_saida', $data_saida)
|
||||
->whereNotNull('horario_saida')
|
||||
->whereNull('veiculo_id')
|
||||
->whereNotIn('status_id', [Status::CANCELADO, Status::TRANSPORTADO])
|
||||
->when(request()->municipio_id, function ($query) {
|
||||
|
||||
$query->where('municipio_id', request()->municipio_id);
|
||||
})
|
||||
->when(request()->destino_id, function ($query) {
|
||||
|
||||
$query->where('destino_id', request()->destino_id);
|
||||
})
|
||||
->select(DB::raw("TIME_FORMAT(horario_saida, '%H:%i') as horario_saida"))
|
||||
->distinct()
|
||||
->orderBy('horario_saida')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getMunicipios() {
|
||||
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$data_saida = request()->data_saida ?? $currentDate;
|
||||
|
||||
return Agendar::leftJoin('intranet.cadastro_municipio', 'intranet.cadastro_municipio.id', '=', 'transporte_paciente_agendar_transporte.municipio_id')
|
||||
->where('transporte_paciente_agendar_transporte.data_saida', $data_saida)
|
||||
->whereNull('transporte_paciente_agendar_transporte.veiculo_id')
|
||||
->whereNotIn('transporte_paciente_agendar_transporte.status_id', [Status::CANCELADO, Status::TRANSPORTADO])
|
||||
->select('intranet.cadastro_municipio.id','intranet.cadastro_municipio.nome')
|
||||
->distinct()
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getDestinos() {
|
||||
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$data_saida = request()->data_saida ?? $currentDate;
|
||||
|
||||
return Destino::leftJoin('transporte_paciente_agendar_transporte', 'transporte_paciente_agendar_transporte.destino_id', '=', 'transporte_paciente_destino.id')
|
||||
->whereNull('transporte_paciente_agendar_transporte.veiculo_id')
|
||||
->whereNotIn('transporte_paciente_agendar_transporte.status_id', [Status::CANCELADO, Status::TRANSPORTADO])
|
||||
->where('transporte_paciente_destino.municipio_id', request()->municipio_id)
|
||||
->where('transporte_paciente_agendar_transporte.data_saida', $data_saida)
|
||||
->where('transporte_paciente_destino.bloqueado', false)
|
||||
->select('transporte_paciente_destino.id','transporte_paciente_destino.descricao_destino as descricao')
|
||||
->distinct()
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getModelData($destino = null)
|
||||
{
|
||||
$destino = [
|
||||
'id' => $destino->id ?? null,
|
||||
'municipio_id' => $destino->municipio_id ?? null,
|
||||
'destino_id' => $destino->destino_id ?? null,
|
||||
'data_saida' => $destino->data_saida ?? null,
|
||||
'horario_saida' => $destino->horario_saida ?? null,
|
||||
'jornada_id' => $destino->jornada_id ?? null,
|
||||
'veiculo_id' => $destino->veiculo_id ?? null,
|
||||
'ordenacao' => $destino->ordenacao ?? null,
|
||||
'total_agendados' => $destino->total_agendados ?? null,
|
||||
'capacidade' => $destino->capacidade ?? null,
|
||||
'tipo_veiculo_id' => $destino->tipo_veiculo_id ?? null,
|
||||
'tipo_passageiro_id' => $destino->tipo_passageiro_id ?? null,
|
||||
'supervisor_id' => $destino->supervisor_id ?? null,
|
||||
'total_agendados' => $destino->total_agendados ?? null,
|
||||
'capacidade' => $destino->capacidade ?? null,
|
||||
];
|
||||
|
||||
return $destino;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
foreach (request()->all() as $params) {
|
||||
|
||||
if ($params['supervisor_id'] === null && $params['veiculo_id'] !== null) {
|
||||
|
||||
$capacidade = intval($params['capacidade']) ?? 0;
|
||||
$agendados = intval($params['total_agendados']) ?? 0;
|
||||
|
||||
if ($agendados > $capacidade ) {
|
||||
|
||||
throw new ExceededCapacidadeVeiculoException;
|
||||
}
|
||||
}
|
||||
|
||||
$escolher = Agendar::where('id', $params['id'])->first();
|
||||
|
||||
$escolher->veiculo_id = $params['veiculo_id'];
|
||||
$escolher->horario_saida = $params['horario_saida'];
|
||||
$escolher->supervisor_id = $params['supervisor_id'];
|
||||
$escolher->jornada_id = $params['jornada_id'];
|
||||
$escolher->veiculo_edited_by = self::getCurrentLotacao()->usuario->id;
|
||||
$escolher->veiculo_edited_at = Carbon::now();
|
||||
$escolher->funcionalidade_origem = Funcionalidade::ESCOLHER_VEICULO;
|
||||
$escolher->save();
|
||||
|
||||
HistoricoService::create($escolher, Status::MODIFICADO, $escolher->updated_lotacao_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
600
api/app/Services/TransportePaciente/FechamentoService.php
Normal file
600
api/app/Services/TransportePaciente/FechamentoService.php
Normal file
@@ -0,0 +1,600 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente;
|
||||
|
||||
use App\Enums\Sigtap\Procedimento;
|
||||
use App\Enums\TransportePaciente\Status as EnumStatus;
|
||||
use App\Enums\TransportePaciente\ViagemStatus as EnumViagemStatus;
|
||||
use App\Models\Sigtap\Procedimento as ProcedimentoSigtap;
|
||||
use App\Models\TransportePaciente\Agendar\Agendar;
|
||||
use App\Models\TransportePaciente\Faturamento\Faturamento;
|
||||
use App\Models\TransportePaciente\Parametrizacao\Faturamento as FaturamentoParametrizacao;
|
||||
use App\Models\TransportePaciente\Parametrizacao\Parametrizacao;
|
||||
use App\Models\TransportePaciente\Status\Status;
|
||||
use App\Models\TransportePaciente\Viagem;
|
||||
use App\Models\TransportePaciente\ViagemStatus;
|
||||
use App\Services\Service;
|
||||
use App\Services\TransportePaciente\Agendar\HistoricoService;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class FechamentoService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData()
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('d/m/Y');
|
||||
|
||||
return [
|
||||
'data_atual' => $currentDate,
|
||||
'status' => ViagemStatus::find([
|
||||
EnumViagemStatus::ABERTO,
|
||||
EnumViagemStatus::FINALIZADO,
|
||||
]),
|
||||
'veiculos' => [],
|
||||
'motoristas' => [],
|
||||
'horarios' => [],
|
||||
'situacao' => Status::where('id', EnumStatus::TRANSPORTADO)->orWhere('id', EnumStatus::FALTOU)->get(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModelData()
|
||||
{
|
||||
return [
|
||||
'id' => null,
|
||||
'status' => 1,
|
||||
'data' => null,
|
||||
'veiculoId' => null,
|
||||
'motoristaId' => null,
|
||||
'horario' => null,
|
||||
'horarioSaida' => null,
|
||||
'horarioChegadaDestino' => null,
|
||||
'horarioSaidaDestino' => null,
|
||||
'dataChegada' => null,
|
||||
'horarioChegada' => null,
|
||||
'kmSaida' => null,
|
||||
'kmChegada' => null,
|
||||
'diaria' => null,
|
||||
'refeicao' => null,
|
||||
'pernoite' => null,
|
||||
'pedagio' => null,
|
||||
'combustivel' => null,
|
||||
'outrasDespesas' => null,
|
||||
'descricaoOutrasDespesas' => null,
|
||||
'totalDespesas' => null,
|
||||
];
|
||||
}
|
||||
|
||||
public static function update($id, $request)
|
||||
{
|
||||
$viagem = $request->all()['viagem'];
|
||||
|
||||
$pacientes = $request->all()['pacientes'];
|
||||
|
||||
if(empty($pacientes)){
|
||||
Viagem::where('id', $id)->update($viagem);
|
||||
}
|
||||
|
||||
foreach ($pacientes as $key => $paciente) {
|
||||
|
||||
Viagem::where('id', $paciente['viagem_id'])->update($viagem);
|
||||
|
||||
$agenda = Agendar::find($paciente['id']);
|
||||
$agenda->status_id = $paciente['status_id'];
|
||||
$agenda->save();
|
||||
|
||||
HistoricoService::create($agenda, $paciente['status_id'], $agenda->updated_lotacao_id);
|
||||
|
||||
$distancia = $paciente['distancia'];
|
||||
$qtdeAcompanhante = $paciente['quantidade_acompanhante'];
|
||||
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
|
||||
if(isset($parametrizacao->faturamento) && $parametrizacao->faturamento == true) {
|
||||
|
||||
$faturamentoParametrizado = FaturamentoParametrizacao::first();
|
||||
|
||||
if (isset($faturamentoParametrizado->id)) {
|
||||
|
||||
$unidadeFaturamento = $faturamentoParametrizado->unidade_id;
|
||||
$ocupacaoFaturamento = $faturamentoParametrizado->ocupacao_id;
|
||||
$usuarioFaturamento = $faturamentoParametrizado->usuario_id;
|
||||
|
||||
if (isset($distancia) && $distancia != '') {
|
||||
|
||||
$qtdeProcedimento = (int) ceil($distancia / 50);
|
||||
$qtdeProcAcompanhante = $qtdeProcedimento * $qtdeAcompanhante;
|
||||
|
||||
if ($qtdeProcedimento >= 1 && $qtdeProcAcompanhante >= 1) {
|
||||
|
||||
if ($agenda->status_id == EnumStatus::TRANSPORTADO) {
|
||||
|
||||
$verificaFaturamento = Faturamento::where('agendamento_id', $paciente['id'])
|
||||
->first();
|
||||
|
||||
if (!$verificaFaturamento) {
|
||||
|
||||
$procedimentoPorPaciente = ProcedimentoSigtap::where('codigo',
|
||||
Procedimento::UNIDADE_DE_REMUNERACAO_PARA_DESLOCAMENTO_DE_PACIENTE_POR_TRANSPORTE_TERRESTRE
|
||||
)
|
||||
->orderByDesc('competencia_id')
|
||||
->first();
|
||||
|
||||
$procedimentoPorAcompanhante = ProcedimentoSigtap::where('codigo',
|
||||
Procedimento::UNIDADE_DE_REMUNERACAO_PARA_DESLOCAMENTO_DE_ACOMPANHANTE_POR_TRANSPORTE_TERRESTRE
|
||||
)
|
||||
->orderByDesc('competencia_id')
|
||||
->first();
|
||||
|
||||
for ($i = 0; $i < $qtdeProcedimento; $i++) {
|
||||
|
||||
$faturamento = new Faturamento;
|
||||
$faturamento->agendamento_id = $paciente['id'];
|
||||
$faturamento->paciente_id = $paciente['paciente_id'];
|
||||
$faturamento->lotacao_id = $unidadeFaturamento;
|
||||
$faturamento->ocupacao_id = $ocupacaoFaturamento;
|
||||
$faturamento->distancia = $paciente['distancia'];
|
||||
$faturamento->motivo_id = $paciente['motivo_id'];
|
||||
$faturamento->destino_id = $paciente['destino_id'];
|
||||
$faturamento->usuario_id = $usuarioFaturamento;
|
||||
$faturamento->procedimento_id = $procedimentoPorPaciente->id;
|
||||
$faturamento->quantidade = 1;
|
||||
$faturamento->save();
|
||||
}
|
||||
|
||||
if ($parametrizacao->auxilio_alimentacao == 1) {
|
||||
|
||||
$procedimentoAlimentacaoPorPaciente = ProcedimentoSigtap::where('codigo',
|
||||
Procedimento::AJUDA_DE_CUSTO_PARA_ALIMENTACAO_DE_PACIENTE_SEM_PERNOITE
|
||||
)
|
||||
->orderByDesc('competencia_id')
|
||||
->first();
|
||||
|
||||
$faturamento = new Faturamento;
|
||||
$faturamento->agendamento_id = $paciente['id'];
|
||||
$faturamento->paciente_id = $paciente['paciente_id'];
|
||||
$faturamento->lotacao_id = $unidadeFaturamento;
|
||||
$faturamento->ocupacao_id = $ocupacaoFaturamento;
|
||||
$faturamento->distancia = $paciente['distancia'];
|
||||
$faturamento->motivo_id = $paciente['motivo_id'];
|
||||
$faturamento->destino_id = $paciente['destino_id'];
|
||||
$faturamento->usuario_id = $usuarioFaturamento;
|
||||
$faturamento->procedimento_id = $procedimentoAlimentacaoPorPaciente->id;
|
||||
$faturamento->quantidade = 1;
|
||||
$faturamento->save();
|
||||
}
|
||||
|
||||
$qtdeInsercaoAcompanhante = $qtdeProcAcompanhante / $qtdeAcompanhante;
|
||||
|
||||
for ($q = 0; $q < $qtdeInsercaoAcompanhante; $q++) {
|
||||
|
||||
if ($paciente['idade'] >= 18 && $paciente['idade'] <= 80) {
|
||||
|
||||
if ($paciente['acompanhante_id_1']) {
|
||||
|
||||
$faturamento = new Faturamento;
|
||||
$faturamento->agendamento_id = $paciente['id'];
|
||||
$faturamento->paciente_id = $paciente['paciente_id'];
|
||||
$faturamento->lotacao_id = $unidadeFaturamento;
|
||||
$faturamento->ocupacao_id = $ocupacaoFaturamento;
|
||||
$faturamento->distancia = $paciente['distancia'];
|
||||
$faturamento->motivo_id = $paciente['motivo_id'];
|
||||
$faturamento->destino_id = $paciente['destino_id'];
|
||||
$faturamento->usuario_id = $usuarioFaturamento;
|
||||
$faturamento->procedimento_id = $procedimentoPorAcompanhante->id;
|
||||
$faturamento->quantidade = 1;
|
||||
$faturamento->save();
|
||||
}
|
||||
|
||||
if ($paciente['acompanhante_id_2']) {
|
||||
|
||||
$faturamento = new Faturamento;
|
||||
$faturamento->agendamento_id = $paciente['id'];
|
||||
$faturamento->paciente_id = $paciente['paciente_id'];
|
||||
$faturamento->lotacao_id = $unidadeFaturamento;
|
||||
$faturamento->ocupacao_id = $ocupacaoFaturamento;
|
||||
$faturamento->distancia = $paciente['distancia'];
|
||||
$faturamento->motivo_id = $paciente['motivo_id'];
|
||||
$faturamento->destino_id = $paciente['destino_id'];
|
||||
$faturamento->usuario_id = $usuarioFaturamento;
|
||||
$faturamento->procedimento_id = $procedimentoPorAcompanhante->id;
|
||||
$faturamento->quantidade = 1;
|
||||
$faturamento->save();
|
||||
}
|
||||
} else {
|
||||
|
||||
if($parametrizacao->dados_acompanhante && !$parametrizacao->campo_livre){
|
||||
|
||||
if ($paciente['acompanhante_1']) {
|
||||
|
||||
$faturamento = new Faturamento;
|
||||
$faturamento->agendamento_id = $paciente['id'];
|
||||
$faturamento->paciente_id = $paciente['acompanhante_1'];
|
||||
$faturamento->lotacao_id = $unidadeFaturamento;
|
||||
$faturamento->ocupacao_id = $ocupacaoFaturamento;
|
||||
$faturamento->distancia = $paciente['distancia'];
|
||||
$faturamento->motivo_id = $paciente['motivo_id'];
|
||||
$faturamento->destino_id = $paciente['destino_id'];
|
||||
$faturamento->usuario_id = $usuarioFaturamento;
|
||||
$faturamento->procedimento_id = $procedimentoPorAcompanhante->id;
|
||||
$faturamento->quantidade = 1;
|
||||
$faturamento->save();
|
||||
}
|
||||
|
||||
if ($paciente['acompanhante_2']) {
|
||||
|
||||
$faturamento = new Faturamento;
|
||||
$faturamento->agendamento_id = $paciente['id'];
|
||||
$faturamento->paciente_id = $paciente['acompanhante_2'];
|
||||
$faturamento->lotacao_id = $unidadeFaturamento;
|
||||
$faturamento->ocupacao_id = $ocupacaoFaturamento;
|
||||
$faturamento->distancia = $paciente['distancia'];
|
||||
$faturamento->motivo_id = $paciente['motivo_id'];
|
||||
$faturamento->destino_id = $paciente['destino_id'];
|
||||
$faturamento->usuario_id = $usuarioFaturamento;
|
||||
$faturamento->procedimento_id = $procedimentoPorAcompanhante->id;
|
||||
$faturamento->quantidade = 1;
|
||||
$faturamento->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($parametrizacao->auxilio_alimentacao == 1) {
|
||||
|
||||
$procedimentoAlimentacaoAcompanhante = ProcedimentoSigtap::where('codigo',
|
||||
Procedimento::AJUDA_DE_CUSTO_PARA_ALIMENTACAO_DE_ACOMPANHANTE_SEM_PERNOITE
|
||||
)
|
||||
->orderByDesc('competencia_id')
|
||||
->first();
|
||||
|
||||
if ($paciente['idade'] >= 18 && $paciente['idade'] <= 80) {
|
||||
|
||||
if ($paciente['acompanhante_1']) {
|
||||
|
||||
$faturamento = new Faturamento;
|
||||
$faturamento->agendamento_id = $paciente['id'];
|
||||
$faturamento->paciente_id = $paciente['paciente_id'];
|
||||
$faturamento->lotacao_id = $unidadeFaturamento;
|
||||
$faturamento->ocupacao_id = $ocupacaoFaturamento;
|
||||
$faturamento->distancia = $paciente['distancia'];
|
||||
$faturamento->motivo_id = $paciente['motivo_id'];
|
||||
$faturamento->destino_id = $paciente['destino_id'];
|
||||
$faturamento->usuario_id = $usuarioFaturamento;
|
||||
$faturamento->procedimento_id = $procedimentoAlimentacaoAcompanhante->id;
|
||||
$faturamento->quantidade = 1;
|
||||
$faturamento->save();
|
||||
}
|
||||
|
||||
if ($paciente['acompanhante_2']) {
|
||||
|
||||
$faturamento = new Faturamento;
|
||||
$faturamento->agendamento_id = $paciente['id'];
|
||||
$faturamento->paciente_id = $paciente['paciente_id'];
|
||||
$faturamento->lotacao_id = $unidadeFaturamento;
|
||||
$faturamento->ocupacao_id = $ocupacaoFaturamento;
|
||||
$faturamento->distancia = $paciente['distancia'];
|
||||
$faturamento->motivo_id = $paciente['motivo_id'];
|
||||
$faturamento->destino_id = $paciente['destino_id'];
|
||||
$faturamento->usuario_id = $usuarioFaturamento;
|
||||
$faturamento->procedimento_id = $procedimentoAlimentacaoAcompanhante->id;
|
||||
$faturamento->quantidade = 1;
|
||||
$faturamento->save();
|
||||
}
|
||||
} else {
|
||||
|
||||
if($parametrizacao->dados_acompanhante && !$parametrizacao->campo_livre){
|
||||
|
||||
if ($paciente['acompanhante_1']) {
|
||||
|
||||
$faturamento = new Faturamento;
|
||||
$faturamento->agendamento_id = $paciente['id'];
|
||||
$faturamento->paciente_id = $paciente['acompanhante_1'];
|
||||
$faturamento->lotacao_id = $unidadeFaturamento;
|
||||
$faturamento->ocupacao_id = $ocupacaoFaturamento;
|
||||
$faturamento->distancia = $paciente['distancia'];
|
||||
$faturamento->motivo_id = $paciente['motivo_id'];
|
||||
$faturamento->destino_id = $paciente['destino_id'];
|
||||
$faturamento->usuario_id = $usuarioFaturamento;
|
||||
$faturamento->procedimento_id = $procedimentoAlimentacaoAcompanhante->id;
|
||||
$faturamento->quantidade = 1;
|
||||
$faturamento->save();
|
||||
}
|
||||
|
||||
if ($paciente['acompanhante_2']) {
|
||||
|
||||
$faturamento = new Faturamento;
|
||||
$faturamento->agendamento_id = $paciente['id'];
|
||||
$faturamento->paciente_id = $paciente['acompanhante_2'];
|
||||
$faturamento->lotacao_id = $unidadeFaturamento;
|
||||
$faturamento->ocupacao_id = $ocupacaoFaturamento;
|
||||
$faturamento->distancia = $paciente['distancia'];
|
||||
$faturamento->motivo_id = $paciente['motivo_id'];
|
||||
$faturamento->destino_id = $paciente['destino_id'];
|
||||
$faturamento->usuario_id = $usuarioFaturamento;
|
||||
$faturamento->procedimento_id = $procedimentoAlimentacaoAcompanhante->id;
|
||||
$faturamento->quantidade = 1;
|
||||
$faturamento->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
Faturamento::destroy(Faturamento::where('agendamento_id', $paciente['id'])->pluck('id'));
|
||||
}
|
||||
} else if ($qtdeProcedimento >= 1) {
|
||||
|
||||
if ($agenda->status_id == EnumStatus::TRANSPORTADO) {
|
||||
|
||||
if ($paciente['idade'] >= 18 && $paciente['idade'] <= 80) {
|
||||
|
||||
$verificaFaturamento = Faturamento::where('agendamento_id', $paciente['id'])->first();
|
||||
|
||||
$procedimentoPorPaciente = ProcedimentoSigtap::where('codigo',
|
||||
Procedimento::UNIDADE_DE_REMUNERACAO_PARA_DESLOCAMENTO_DE_PACIENTE_POR_TRANSPORTE_TERRESTRE
|
||||
)
|
||||
->orderByDesc('competencia_id')
|
||||
->first();
|
||||
|
||||
if (!$verificaFaturamento) {
|
||||
|
||||
for ($i = 0; $i < $qtdeProcedimento; $i++) {
|
||||
|
||||
$faturamento = new Faturamento;
|
||||
$faturamento->agendamento_id = $paciente['id'];
|
||||
$faturamento->paciente_id = $paciente['paciente_id'];
|
||||
$faturamento->lotacao_id = $unidadeFaturamento;
|
||||
$faturamento->ocupacao_id = $ocupacaoFaturamento;
|
||||
$faturamento->distancia = $paciente['distancia'];
|
||||
$faturamento->motivo_id = $paciente['motivo_id'];
|
||||
$faturamento->destino_id = $paciente['destino_id'];
|
||||
$faturamento->usuario_id = $usuarioFaturamento;
|
||||
$faturamento->procedimento_id = $procedimentoPorPaciente->id;
|
||||
$faturamento->quantidade = 1;
|
||||
$faturamento->save();
|
||||
}
|
||||
|
||||
if ($parametrizacao->auxilio_alimentacao == 1) {
|
||||
|
||||
$procedimentoAlimentacao = ProcedimentoSigtap::where('codigo',
|
||||
Procedimento::AJUDA_DE_CUSTO_PARA_ALIMENTACAO_DE_PACIENTE_SEM_PERNOITE
|
||||
)
|
||||
->orderByDesc('competencia_id')
|
||||
->first();
|
||||
|
||||
$faturamento = new Faturamento;
|
||||
$faturamento->agendamento_id = $paciente['id'];
|
||||
$faturamento->paciente_id = $paciente['paciente_id'];
|
||||
$faturamento->lotacao_id = $unidadeFaturamento;
|
||||
$faturamento->ocupacao_id = $ocupacaoFaturamento;
|
||||
$faturamento->distancia = $paciente['distancia'];
|
||||
$faturamento->motivo_id = $paciente['motivo_id'];
|
||||
$faturamento->destino_id = $paciente['destino_id'];
|
||||
$faturamento->usuario_id = $usuarioFaturamento;
|
||||
$faturamento->procedimento_id = $procedimentoAlimentacao->id;
|
||||
$faturamento->quantidade = 1;
|
||||
$faturamento->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
Faturamento::destroy(Faturamento::where('agendamento_id', $paciente['id'])->pluck('id'));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function getVeiculos()
|
||||
{
|
||||
$veiculos = DB::table('transporte_paciente_viagem as viagem')
|
||||
->select(
|
||||
'viagem.status_id',
|
||||
'viagem.id as id_viagem',
|
||||
'viagem.data',
|
||||
'veiculo.id',
|
||||
DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) AS descricao'),
|
||||
'agendar.id as agendar_id',
|
||||
)
|
||||
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'viagem.veiculo_id')
|
||||
->leftJoin('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->where('viagem.status_id', request()->status)
|
||||
->where('agendar.data', request()->data)
|
||||
->orderBy('veiculo.numero_placa')
|
||||
->groupBy('veiculo.id')
|
||||
->where('veiculo.bloqueado', false)
|
||||
->whereNotNull('agendar.id')
|
||||
->where('viagem.status_id', '<>', EnumViagemStatus::CANCELADO)
|
||||
->get();
|
||||
|
||||
return $veiculos;
|
||||
}
|
||||
|
||||
public static function getMotoristas()
|
||||
{
|
||||
|
||||
$motoristas = DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->join('transporte_paciente_condutor as condutor', 'condutor.id', 'viagem.condutor_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->select('viagem.condutor_id', 'cidadao.nome', 'condutor.id')
|
||||
->where('agendar.data', request()->data)
|
||||
->where('viagem.veiculo_id', request()->veiculo_id)
|
||||
->orderBy('cidadao.nome')
|
||||
->groupBy('condutor.id')
|
||||
->get();
|
||||
|
||||
return $motoristas;
|
||||
}
|
||||
|
||||
public static function getHorarios()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->select(
|
||||
DB::raw('
|
||||
IF(
|
||||
(
|
||||
SELECT
|
||||
agendar_transporte_jornada
|
||||
FROM
|
||||
transporte_paciente_parametrizacao
|
||||
) = 1,
|
||||
viagem.jornada_id,
|
||||
viagem.id
|
||||
) as id
|
||||
'),
|
||||
DB::raw('
|
||||
IF(
|
||||
(
|
||||
SELECT
|
||||
agendar_transporte_jornada
|
||||
FROM
|
||||
transporte_paciente_parametrizacao
|
||||
) = 1,
|
||||
DATE_FORMAT(jornada.data_inicial, "%H:%i"),
|
||||
DATE_FORMAT(viagem.horario_saida_temp, "%H:%i")
|
||||
) as horario_saida_temp
|
||||
')
|
||||
)
|
||||
->leftJoin('transporte_paciente_jornada as jornada', 'viagem.jornada_id', 'jornada.id')
|
||||
->where('viagem.data', request()->data)
|
||||
->where('viagem.veiculo_id', request()->veiculo_id)
|
||||
->where('viagem.condutor_id', request()->motorista_id)
|
||||
->where('viagem.status_id', request()->status)
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function search()
|
||||
{
|
||||
return [
|
||||
'viagem' => self::getViagem(),
|
||||
'pacientes' => self::getPacientes(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getPacientes()
|
||||
{
|
||||
$pacientes = DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->join('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id')
|
||||
->join('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->join('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->leftJoin('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id')
|
||||
->leftJoin('transporte_paciente_viagem_status as viagem_status', 'viagem_status.id', 'viagem.status_id')
|
||||
->leftJoin('transporte_paciente_acompanhante as paciente_acompanhante_1', 'paciente_acompanhante_1.id', 'agendar.acompanhante_1_id')
|
||||
->leftJoin('transporte_paciente_acompanhante as paciente_acompanhante_2', 'paciente_acompanhante_2.id', 'agendar.acompanhante_2_id')
|
||||
->select(
|
||||
'agendar.id as id',
|
||||
'agendar.lotacao_id as lotacao_id',
|
||||
'agendar.ocupacao_id as ocupacao_id',
|
||||
'agendar.paciente_id as paciente_id',
|
||||
'agendar.usuario_id as usuario_id',
|
||||
'agendar.acompanhante as quantidade_acompanhante',
|
||||
'cidadao.nome as nome',
|
||||
'cidadao.id as cidadao_id',
|
||||
'destino.descricao_destino as localConsulta',
|
||||
'destino.id as destino_id',
|
||||
'destino.distancia as distancia',
|
||||
'motivo.descricao as motivo',
|
||||
'motivo.id as motivo_id',
|
||||
'agendar.viagem_id as viagem_id',
|
||||
'viagem.status_id as viagem_status_id',
|
||||
'viagem_status.descricao as nome_status',
|
||||
'viagem.condutor_id',
|
||||
DB::raw("DATE_FORMAT(cidadao.data_nascimento, '%d/%m/%Y') as dataNasc"),
|
||||
DB::raw('TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) AS idade'),
|
||||
DB::raw('IF(agendar.status_id = ' . EnumStatus::FALTOU . ', ' . EnumStatus::FALTOU . ', ' . EnumStatus::TRANSPORTADO . ') as situacao'),
|
||||
'paciente_acompanhante_1.usuario_id as acompanhante_usuarioId1',
|
||||
'paciente_acompanhante_2.usuario_id as acompanhante_usuarioId2',
|
||||
'agendar.acompanhante_1_id as acompanhante_id1',
|
||||
'agendar.acompanhante_2_id as acompanhante_id2',
|
||||
)
|
||||
->where('viagem.status_id', '<>', EnumViagemStatus::CANCELADO);
|
||||
|
||||
if (Parametrizacao::exists()) {
|
||||
if (Parametrizacao::first()->agendar_transporte_jornada === true && request()->horario !== null) {
|
||||
$pacientes = $pacientes->where('viagem.jornada_id', request()->horario);
|
||||
} else if (request()->horario !== null) {
|
||||
$pacientes = $pacientes->where('viagem.id', request()->horario);
|
||||
}
|
||||
}
|
||||
|
||||
$pacientes = $pacientes
|
||||
->where('agendar.data', request()->data)
|
||||
->where('agendar.status_id', '<>', EnumStatus::CANCELADO)
|
||||
->where('viagem.veiculo_id', request()->veiculo_id)
|
||||
->where('viagem.status_id', request()->status)
|
||||
->where('viagem.condutor_id', request()->motorista_id)
|
||||
->get();
|
||||
|
||||
return $pacientes;
|
||||
}
|
||||
|
||||
private static function getViagem()
|
||||
{
|
||||
$consulta = DB::table('transporte_paciente_viagem as viagem')
|
||||
->select(
|
||||
'viagem.id',
|
||||
'viagem.condutor_id',
|
||||
'viagem.veiculo_id',
|
||||
'viagem.data',
|
||||
'viagem.horario_saida_temp as horarioSaida',
|
||||
'viagem.horario_saida_real',
|
||||
'viagem.horario_chegada_destino',
|
||||
'viagem.horario_saida_destino',
|
||||
'viagem.data_chegada',
|
||||
'viagem.horario_chegada',
|
||||
'viagem.km_saida',
|
||||
'viagem.km_chegada',
|
||||
'viagem.diaria',
|
||||
'viagem.refeicao',
|
||||
'viagem.pernoite',
|
||||
'viagem.pedagio',
|
||||
'viagem.combustivel',
|
||||
'viagem.outras_despesas',
|
||||
'viagem.descricao_outras_despesas',
|
||||
'viagem.total_despesa',
|
||||
'viagem.status_id as viagem_status_id',
|
||||
'viagem.jornada_id',
|
||||
'viagem.destino_id',
|
||||
'cidadao.nome as motorista',
|
||||
'status.descricao as nome_status',
|
||||
'condutor.usuario_id as condutor_usuario_id'
|
||||
)
|
||||
->leftJoin('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id')
|
||||
->leftJoin('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->leftJoin('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->leftJoin('transporte_paciente_viagem_status as status', 'status.id', 'viagem.status_id')
|
||||
->where('viagem.status_id', '<>', EnumViagemStatus::CANCELADO);
|
||||
|
||||
if (Parametrizacao::exists() && Parametrizacao::first()->agendar_transporte_jornada === true && request()->horario !== null) {
|
||||
$consulta = $consulta->where('viagem.jornada_id', request()->horario);
|
||||
} else if (Parametrizacao::exists() && request()->horario !== null) {
|
||||
$consulta = $consulta->where('viagem.id', request()->horario);
|
||||
}
|
||||
|
||||
$consulta = $consulta
|
||||
->where('agendar.data', request()->data)
|
||||
->where('viagem.veiculo_id', request()->veiculo_id)
|
||||
->where('viagem.condutor_id', request()->motorista_id)
|
||||
->where('viagem.status_id', request()->status)
|
||||
->first();
|
||||
|
||||
return $consulta;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,914 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Gerenciamento;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Subclassificacao;
|
||||
use App\Enums\TransportePaciente\Funcionalidade;
|
||||
use App\Enums\TransportePaciente\Status;
|
||||
use App\Models\Cadastro\Parametrizacao\Parametrizacao as ParametrizacaoCadastro;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Intranet\Cliente;
|
||||
use App\Models\TransportePaciente\Acompanhante;
|
||||
use App\Models\TransportePaciente\Agendar\Agendar;
|
||||
use App\Models\TransportePaciente\Destino\Destino;
|
||||
use App\Models\TransportePaciente\Parametrizacao\Parametrizacao;
|
||||
use App\Services\Service;
|
||||
use App\Services\TransportePaciente\Agendar\AgendarService;
|
||||
use App\Services\TransportePaciente\Agendar\HistoricoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class GerenciamentoService extends Service
|
||||
{
|
||||
private static function getFormData($id)
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
|
||||
$paciente = Paciente::with([
|
||||
'unidade:id,nome_fantasia',
|
||||
'cidadao' => function ($query) {
|
||||
$query->select('id', 'nome', 'nome_social', 'preferencia_nome_id', 'data_nascimento', 'cpf', 'sexo_id', 'domicilio_id', 'raca_cor_id', 'nacionalidade_id', 'cns')
|
||||
->with([
|
||||
'carteiraIdentidade:id,cidadao_id,numero',
|
||||
'conveniosMedico:id,nome',
|
||||
'situacaoFamiliarConjugal:id,descricao',
|
||||
'telefones:id,cidadao_id,numero'
|
||||
]);
|
||||
},
|
||||
'classificacao:id,descricao'
|
||||
])->findOrFail($id);
|
||||
|
||||
$cidadao = $paciente->cidadao;
|
||||
|
||||
$endereco = $paciente->cidadao->domicilio->endereco ?? null;
|
||||
|
||||
$cliente = Cliente::where('link', app('config')->get('database.default'))->firstOrFail();
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
|
||||
$tipoPassageiro = DB::table('transporte_paciente_veiculo_tipo_passageiro')
|
||||
->orderBy('descricao')
|
||||
->get();
|
||||
|
||||
$tipo = DB::table('transporte_paciente_veiculo_tipo')
|
||||
->orderBy('descricao')
|
||||
->get();
|
||||
|
||||
$relacoes = DB::table('transporte_paciente_acompanhante_relacao')
|
||||
->get();
|
||||
|
||||
$telefones = DB::table('cadastro_cidadao_telefone')
|
||||
->select(DB::raw("CONCAT(SUBSTR(numero, 1, 2), ' ', SUBSTR(numero, 3)) as numero_formatado"))
|
||||
->where('cidadao_id', $paciente->cidadao->id)
|
||||
->get();
|
||||
|
||||
return [
|
||||
'data_atual' => $now->format('d/m/Y'),
|
||||
'periodo' => [
|
||||
'start' => $currentDate,
|
||||
'end' => $currentDate,
|
||||
],
|
||||
'municipios' => self::getMunicipios(),
|
||||
'destinos' => self::getDestinos(),
|
||||
'municipios_destinos' => Cache::remember('municipios_destinos', 60, function () {
|
||||
return DB::table('transporte_paciente_destino as destino')
|
||||
->select('municipio.id', 'municipio.nome')
|
||||
->join('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
||||
->where('bloqueado', false)
|
||||
->groupBy('destino.municipio_id')
|
||||
->get();
|
||||
}),
|
||||
'pontos' => AgendarService::getPontos(),
|
||||
'horariosSaida' => self::getHorariosSaida(),
|
||||
'tipos_passageiro' => $tipoPassageiro,
|
||||
'veiculo_obrigatorio' => $parametrizacao->veiculo ?? null,
|
||||
'tipos_veiculo' => $tipo,
|
||||
'horario_saida' => $parametrizacao->horario_saida ?? null,
|
||||
'mensagem_protocolo' => $parametrizacao->mensagem_protocolo ?? null,
|
||||
'agendar_transporte_jornada' => $parametrizacao->agendar_transporte_jornada ?? null,
|
||||
'comprovante_acompanhante' => $parametrizacao->comprovante_acompanhante ?? null,
|
||||
'relacoes' => $relacoes,
|
||||
'paciente' => [
|
||||
'id' => $paciente->id ?? null,
|
||||
'nome' => $cidadao->nome ?? null,
|
||||
'nome_social' => $cidadao->nome_social,
|
||||
'prefere_nome_social' => $paciente->cidadao
|
||||
->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'data_nascimento' => $cidadao->data_nascimento
|
||||
? $cidadao->data_nascimento->format('d/m/Y')
|
||||
: '',
|
||||
'cpf' => $cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'rg' => $cidadao->carteiraIdentidade->numero ?? null,
|
||||
'convenio_medico_nome' => $cidadao->conveniosMedico->first()->nome ?? null,
|
||||
'situacao_familiar' => $cidadao->situacaoFamiliarConjugal->descricao ?? null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'unidade' => $paciente->unidade->nome_fantasia ?? null,
|
||||
'sexo' => $cidadao->sexo ?? '-',
|
||||
'domicilio_id' => $cidadao->domicilio_id ?? null,
|
||||
'raca_cor_id' => $cidadao->raca_cor_id ?? null,
|
||||
'nacionalidade_id' => $cidadao->nacionalidade_id ?? null,
|
||||
'classificacao_id' => $paciente->classificacao_id ?? '-',
|
||||
'classificacao_nome' => $paciente->classificacao->descricao ?? '-',
|
||||
'cns' => $cidadao->cns ? MaskUtil::getCnsMasked($cidadao->cns) : '',
|
||||
'idade' => $cidadao->data_nascimento
|
||||
? "{$cidadao->idade['anos']} ano(s), "
|
||||
. "{$cidadao->idade['meses']} mês(es) e "
|
||||
. "{$cidadao->idade['dias']} dia(s) "
|
||||
: 'NÃO INFORMADA',
|
||||
'telefones' => $telefones
|
||||
],
|
||||
'endereco' => [
|
||||
'estado_id' => $endereco ? $endereco->logradouro->municipio->estado->id : null,
|
||||
'municipio' => $endereco ? $endereco->logradouro->municipio : null,
|
||||
'logradouro' => $endereco ? $endereco->logradouro : null,
|
||||
'cep' => $endereco ? MaskUtil::getCepMasked($endereco->logradouro->cep) : null,
|
||||
'numero' => $endereco ? $endereco->numero : null,
|
||||
'sem_numero' => $endereco ? $endereco->sem_numero : null,
|
||||
'complemento' => $endereco ? $endereco->complemento ?? '' : null,
|
||||
'zona_id' => $endereco ? $endereco->zona_id : 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,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModelData($id)
|
||||
{
|
||||
$destino = [
|
||||
'agendamentos' => self::getAgendamentos($id)
|
||||
];
|
||||
|
||||
return $destino;
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData($id),
|
||||
'model' => self::getModelData($id),
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
$ids = [];
|
||||
|
||||
foreach (request()->agendar as $params) {
|
||||
|
||||
$escolher = Agendar::where('id', $params['id'])->first();
|
||||
$status = $params["data_saida"] === $escolher->data_saida ? Status::MODIFICADO : Status::REAGENDADO;
|
||||
|
||||
if($params['veiculo_id'] != $escolher->veiculo_id) {
|
||||
$escolher->veiculo_edited_by = self::getCurrentLotacao()->usuario->id;
|
||||
$escolher->veiculo_edited_at = Carbon::now();
|
||||
$escolher->funcionalidade_origem = Funcionalidade::GERENCIAMENTO_VIAGEM;
|
||||
}
|
||||
$escolher->fill($params);
|
||||
$escolher->acompanhante_1_id = $params['acompanhante1_id'];
|
||||
$escolher->acompanhante_2_id = $params['acompanhante2_id'];
|
||||
$escolher->save();
|
||||
|
||||
HistoricoService::create($escolher, $status, $escolher->updated_lotacao_id);
|
||||
|
||||
if (isset($params['acompanhante1'])) {
|
||||
|
||||
$acompanhante1 = Acompanhante::where('id', $params['acompanhante1']['id'])->first() ?? new Acompanhante;
|
||||
$acompanhante1->relacao_id = $params['acompanhante1']['relacao_id'] ?? null;
|
||||
$acompanhante1->usuario_id = $params['acompanhante1']['usuario_id'] ?? null;
|
||||
|
||||
if (!$acompanhante1->usuario_id) {
|
||||
|
||||
if (isset($params['acompanhante1']['nome'])) {
|
||||
if (is_array($params['acompanhante1']['nome'])) {
|
||||
|
||||
$acompanhante1->nome = $params['acompanhante1']['nome']['cidadao']['nome'] ?? null;
|
||||
} else {
|
||||
|
||||
$acompanhante1->nome = $params['acompanhante1']['nome'];
|
||||
}
|
||||
} else {
|
||||
$acompanhante1->nome = null;
|
||||
}
|
||||
|
||||
$acompanhante1->telefone = isset($params['acompanhante1']['telefone'])
|
||||
? preg_replace('/\D/', '', $params['acompanhante1']['telefone'])
|
||||
: null;
|
||||
}
|
||||
|
||||
$acompanhante1->save();
|
||||
|
||||
$agendar = Agendar::where('id', $params['id'])->first();
|
||||
$agendar->acompanhante_1_id = $acompanhante1->id;
|
||||
$agendar->save();
|
||||
HistoricoService::create($agendar, Status::MODIFICADO, $agendar->updated_lotacao_id);
|
||||
}
|
||||
|
||||
if (isset($params['acompanhante2'])) {
|
||||
|
||||
$acompanhante2 = Acompanhante::where('id', $params['acompanhante2']['id'])->first() ?? new Acompanhante;
|
||||
$acompanhante2->relacao_id = $params['acompanhante2']['relacao_id'] ?? null;
|
||||
$acompanhante2->usuario_id = $params['acompanhante2']['usuario_id'] ?? null;
|
||||
|
||||
if (!$acompanhante2->usuario_id) {
|
||||
|
||||
if (isset($params['acompanhante2']['nome'])) {
|
||||
|
||||
if (is_array($params['acompanhante2']['nome'])) {
|
||||
|
||||
$acompanhante2->nome = $params['acompanhante2']['nome']['cidadao']['nome'] ?? null;
|
||||
} else {
|
||||
|
||||
$acompanhante2->nome = $params['acompanhante2']['nome'];
|
||||
}
|
||||
} else {
|
||||
$acompanhante2->nome = null;
|
||||
}
|
||||
|
||||
$acompanhante2->telefone = isset($params['acompanhante2']['telefone'])
|
||||
? preg_replace('/\D/', '', $params['acompanhante2']['telefone'])
|
||||
: null;
|
||||
}
|
||||
|
||||
$acompanhante2->save();
|
||||
|
||||
$agendar = Agendar::where('id', $params['id'])->first();
|
||||
$agendar->acompanhante_2_id = $acompanhante2->id;
|
||||
$agendar->save();
|
||||
HistoricoService::create($agendar, Status::MODIFICADO, $agendar->updated_lotacao_id);
|
||||
}
|
||||
|
||||
|
||||
$ids[] = $escolher->id;
|
||||
}
|
||||
|
||||
if(!isset(request()->ids_cancelado)){
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$agendar = Agendar::where('paciente_id', request()->paciente_id)
|
||||
->whereIn('id', request()->ids_cancelado);
|
||||
|
||||
$transportes = $agendar->get();
|
||||
|
||||
if($transportes->isNotEmpty()){
|
||||
$agendar->update(['status_id' => Status::CANCELADO]);
|
||||
|
||||
foreach($transportes as $transporte) {
|
||||
HistoricoService::create($transporte, Status::CANCELADO, $transporte->updated_lotacao_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function update()
|
||||
{
|
||||
foreach (request()->agendar as $params) {
|
||||
|
||||
$update = Agendar::find($params['id']);
|
||||
|
||||
if (isset($update)) {
|
||||
|
||||
$status = $params["data_saida"] === $update->data_saida ? Status::MODIFICADO : Status::REAGENDADO;
|
||||
|
||||
if($params['veiculo_id'] != $update->veiculo_id) {
|
||||
$update->veiculo_edited_by = self::getCurrentLotacao()->usuario->id;
|
||||
$update->veiculo_edited_at = Carbon::now();
|
||||
$update->funcionalidade_origem = Funcionalidade::GERENCIAMENTO_VIAGEM;
|
||||
}
|
||||
|
||||
$update->motivo_id = $params['motivo'];
|
||||
$update->horario = $params['horario'];
|
||||
$update->municipio_id = $params['municipio'];
|
||||
$update->destino_id = $params['destino'];
|
||||
$update->consulta_observacao = $params['consulta_observacao'];
|
||||
$update->observacao = $params['observacao'];
|
||||
$update->acompanhante = $params['acompanhante'];
|
||||
$update->ponto_id = $params['ponto'];
|
||||
$update->horario_saida = $params['horario_saida'];
|
||||
$update->tipo_passageiro_id = $params['tipo_passageiro'];
|
||||
$update->veiculo_id = $params['veiculo_id'];
|
||||
$update->jornada_id = (isset($params['jornada_id']) && !empty($params['jornada_id'])) ? $params['jornada_id'] : null;
|
||||
$update->acompanhante_1_id = $params['acompanhante'] >= 1 ? $params['acompanhante1_id'] : null;
|
||||
$update->acompanhante_2_id = $params['acompanhante'] == 2 ? $params['acompanhante2_id'] : null;
|
||||
$update->status_id = $status;
|
||||
$update->updated_lotacao_id = self::getCurrentLotacao()->usuario->id;
|
||||
|
||||
if (!$params['items_selecionados']) {
|
||||
|
||||
$update->data = $params['data'];
|
||||
$update->data_saida = $params['data_saida'];
|
||||
}
|
||||
|
||||
$update->save();
|
||||
|
||||
HistoricoService::create($update, $status, $update->updated_lotacao_id);
|
||||
|
||||
if(isset($params['acompanhante1']) && $params['acompanhante'] >= 1) {
|
||||
|
||||
$acompanhante1 = Acompanhante::where('id', $params['acompanhante1']['id'])->first() ?? new Acompanhante;
|
||||
$acompanhante1->relacao_id = $params['acompanhante1']['relacao_id'] ?? null;
|
||||
$acompanhante1->usuario_id = $params['acompanhante1']['usuario_id'] ?? null;
|
||||
|
||||
if(!$acompanhante1->usuario_id) {
|
||||
|
||||
if (isset($params['acompanhante1']['nome'])) {
|
||||
if (is_array($params['acompanhante1']['nome'])) {
|
||||
|
||||
$acompanhante1->nome = $params['acompanhante1']['nome']['cidadao']['nome'] ?? null;
|
||||
} else {
|
||||
|
||||
$acompanhante1->nome = $params['acompanhante1']['nome'];
|
||||
}
|
||||
} else {
|
||||
$acompanhante1->nome = null;
|
||||
}
|
||||
|
||||
$acompanhante1->telefone = isset($params['acompanhante1']['telefone'])
|
||||
? preg_replace('/\D/', '', $params['acompanhante1']['telefone'])
|
||||
: null;
|
||||
}
|
||||
|
||||
$acompanhante1->save();
|
||||
|
||||
$agendar = Agendar::where('id', $params['id'])->first();
|
||||
$agendar->acompanhante_1_id = $acompanhante1->id;
|
||||
$agendar->save();
|
||||
}
|
||||
|
||||
if(isset($params['acompanhante2']) && $params['acompanhante'] == 2) {
|
||||
|
||||
$acompanhante2 = Acompanhante::where('id', $params['acompanhante2']['id'])->first() ?? new Acompanhante;
|
||||
$acompanhante2->relacao_id = $params['acompanhante2']['relacao_id'] ?? null;
|
||||
$acompanhante2->usuario_id = $params['acompanhante2']['usuario_id'] ?? null;
|
||||
|
||||
if(!$acompanhante2->usuario_id) {
|
||||
|
||||
if (isset($params['acompanhante2']['nome'])) {
|
||||
if (is_array($params['acompanhante2']['nome'])) {
|
||||
|
||||
$acompanhante2->nome = $params['acompanhante2']['nome']['cidadao']['nome'] ?? null;
|
||||
} else {
|
||||
|
||||
$acompanhante2->nome = $params['acompanhante2']['nome'];
|
||||
}
|
||||
} else {
|
||||
$acompanhante2->nome = null;
|
||||
}
|
||||
|
||||
$acompanhante2->telefone = isset($params['acompanhante2']['telefone'])
|
||||
? preg_replace('/\D/', '', $params['acompanhante2']['telefone'])
|
||||
: null;
|
||||
}
|
||||
|
||||
$acompanhante2->save();
|
||||
|
||||
$agendar = Agendar::where('id', $params['id'])->first();
|
||||
$agendar->acompanhante_2_id = $acompanhante2->id;
|
||||
$agendar->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function getHorariosSaida()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$data_saida = request()->data_saida ?? $currentDate;
|
||||
|
||||
return Agendar::where('data_saida', $data_saida)
|
||||
->whereNotNull('horario_saida')
|
||||
->whereNull('veiculo_id')
|
||||
->when(request()->municipio_id, function ($query) {
|
||||
|
||||
$query->where('municipio_id', request()->municipio_id);
|
||||
})
|
||||
->when(request()->destino_id, function ($query) {
|
||||
|
||||
$query->where('destino_id', request()->destino_id);
|
||||
})
|
||||
->select(DB::raw("TIME_FORMAT(horario_saida, '%H:%i') as horario_saida"))
|
||||
->distinct()
|
||||
->orderBy('horario_saida')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getMunicipios()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$data_saida = request()->data_saida ?? $currentDate;
|
||||
|
||||
return Agendar::join('intranet.cadastro_municipio', 'intranet.cadastro_municipio.id', '=', 'transporte_paciente_agendar_transporte.municipio_id')
|
||||
->where('transporte_paciente_agendar_transporte.data_saida', $data_saida)
|
||||
->whereNull('transporte_paciente_agendar_transporte.veiculo_id')
|
||||
->select('intranet.cadastro_municipio.id','intranet.cadastro_municipio.nome')
|
||||
->distinct()
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getDestinos()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$data_saida = request()->data_saida ?? $currentDate;
|
||||
|
||||
return Destino::join('transporte_paciente_agendar_transporte', 'transporte_paciente_agendar_transporte.destino_id', '=', 'transporte_paciente_destino.id')
|
||||
->whereNull('transporte_paciente_agendar_transporte.veiculo_id')
|
||||
->where('transporte_paciente_destino.municipio_id', request()->municipio_id)
|
||||
->where('transporte_paciente_agendar_transporte.data_saida', $data_saida)
|
||||
->where('transporte_paciente_destino.bloqueado', false)
|
||||
->select('transporte_paciente_destino.id','transporte_paciente_destino.descricao_destino as descricao')
|
||||
->distinct()
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getAgendamentos($id)
|
||||
{
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
|
||||
if(!$parametrizacao->campo_livre){
|
||||
|
||||
return DB::table('transporte_paciente_agendar_transporte')
|
||||
->leftJoin('transporte_paciente_jornada as jornadas', 'transporte_paciente_agendar_transporte.jornada_id', 'jornadas.id')
|
||||
->leftJoin('intranet.cadastro_municipio as municipios', 'transporte_paciente_agendar_transporte.municipio_id', 'municipios.id')
|
||||
->leftJoin('intranet.cadastro_estado as estados', 'municipios.estado_id', 'estados.id')
|
||||
->leftJoin('transporte_paciente_veiculo as veiculos', 'transporte_paciente_agendar_transporte.veiculo_id', 'veiculos.id')
|
||||
->leftJoin('transporte_paciente_motivo_viagem_procedimento as motivos', 'transporte_paciente_agendar_transporte.motivo_id', '=', 'motivos.id')
|
||||
->leftJoin('transporte_paciente_ponto as pontos', 'transporte_paciente_agendar_transporte.ponto_id', 'pontos.id')
|
||||
->leftJoin('transporte_paciente_viagem as viagens', 'transporte_paciente_agendar_transporte.viagem_id', 'viagens.id')
|
||||
->leftJoin('cadastro_lotacao as lotacoes', 'transporte_paciente_agendar_transporte.created_lotacao_id', 'lotacoes.id')
|
||||
->leftJoin('cadastro_usuario as agendadores', 'lotacoes.usuario_id', 'agendadores.id')
|
||||
->leftJoin('cadastro_cidadao as agendador_cidadaos', 'agendadores.cidadao_id', 'agendador_cidadaos.id')
|
||||
->leftJoin('cadastro_infraestrutura as infraestruturas', 'lotacoes.infraestrutura_id', 'infraestruturas.id')
|
||||
->leftJoin('cadastro_unidade as unidades', 'infraestruturas.unidade_id', 'unidades.id')
|
||||
->leftJoin('transporte_paciente_veiculo_tipo_passageiro as tipo_passageiro', 'tipo_passageiro.id', 'transporte_paciente_agendar_transporte.tipo_passageiro_id')
|
||||
->leftJoin('transporte_paciente_destino as paciente_destino', 'paciente_destino.id', 'transporte_paciente_agendar_transporte.destino_id')
|
||||
->leftJoin('transporte_paciente_acompanhante as paciente_acompanhante_1', 'paciente_acompanhante_1.id', 'transporte_paciente_agendar_transporte.acompanhante_1_id')
|
||||
->leftJoin('cadastro_paciente as cadastro_paciente_acompanhante_1', 'cadastro_paciente_acompanhante_1.id', 'paciente_acompanhante_1.usuario_id')
|
||||
->leftJoin('cadastro_cidadao as cadastro_cidadao_acompanhante_1', 'cadastro_paciente_acompanhante_1.cidadao_id', 'cadastro_cidadao_acompanhante_1.id')
|
||||
->leftJoin('cadastro_cidadao_telefone as telefone_acompanhante_1', function ($join) {
|
||||
|
||||
$join->on('cadastro_cidadao_acompanhante_1.id', '=', 'telefone_acompanhante_1.cidadao_id')
|
||||
->whereNull('telefone_acompanhante_1.deleted_at')
|
||||
->where('telefone_acompanhante_1.principal', true);
|
||||
})
|
||||
->leftJoin('transporte_paciente_acompanhante as paciente_acompanhante_2', 'paciente_acompanhante_2.id', 'transporte_paciente_agendar_transporte.acompanhante_2_id')
|
||||
->leftJoin('cadastro_paciente as cadastro_paciente_acompanhante_2', 'cadastro_paciente_acompanhante_2.id', 'paciente_acompanhante_2.usuario_id')
|
||||
->leftJoin('cadastro_cidadao as cadastro_cidadao_acompanhante_2', 'cadastro_paciente_acompanhante_2.cidadao_id', 'cadastro_cidadao_acompanhante_2.id')
|
||||
->leftJoin('cadastro_cidadao_telefone as telefone_acompanhante_2', function ($join) {
|
||||
|
||||
$join->on('cadastro_cidadao_acompanhante_2.id', '=', 'telefone_acompanhante_2.cidadao_id')
|
||||
->whereNull('telefone_acompanhante_2.deleted_at')
|
||||
->where('telefone_acompanhante_2.principal', true);
|
||||
})
|
||||
->where('transporte_paciente_agendar_transporte.paciente_id', $id)
|
||||
->where(function ($query) {
|
||||
$query->whereNotIn('transporte_paciente_agendar_transporte.status_id', [Status::CANCELADO])
|
||||
->orWhereNull('transporte_paciente_agendar_transporte.status_id');
|
||||
})
|
||||
->select(
|
||||
'transporte_paciente_agendar_transporte.*',
|
||||
'jornadas.data_inicial',
|
||||
'jornadas.data_final',
|
||||
'municipios.nome as municipio_nome',
|
||||
'estados.uf as estado_uf',
|
||||
'veiculos.numero_placa',
|
||||
'veiculos.descricao_modelo',
|
||||
'motivos.descricao as motivo_descricao',
|
||||
'pontos.casa_paciente',
|
||||
'pontos.descricao as ponto_descricao',
|
||||
'viagens.protocolo',
|
||||
'agendador_cidadaos.nome as agendador_nome',
|
||||
'unidades.nome_fantasia as unidade_agendadora',
|
||||
'tipo_passageiro.descricao as tipo_passageiro_descricao',
|
||||
'paciente_destino.descricao_destino as destino_descricao',
|
||||
'paciente_acompanhante_1.id as acompanhante_1_id',
|
||||
'paciente_acompanhante_1.usuario_id as acompanhante_1_usuario_id',
|
||||
'cadastro_cidadao_acompanhante_1.nome as acompanhante_1_nome',
|
||||
'cadastro_cidadao_acompanhante_1.cns as acompanhante_1_cns',
|
||||
'telefone_acompanhante_1.numero as acompanhante_1_telefone',
|
||||
'paciente_acompanhante_1.relacao_id as acompanhante_1_relacao_id',
|
||||
'paciente_acompanhante_2.id as acompanhante_2_id',
|
||||
'paciente_acompanhante_2.usuario_id as acompanhante_2_usuario_id',
|
||||
'cadastro_cidadao_acompanhante_2.nome as acompanhante_2_nome',
|
||||
'cadastro_cidadao_acompanhante_2.cns as acompanhante_2_cns',
|
||||
'telefone_acompanhante_2.numero as acompanhante_2_telefone',
|
||||
'paciente_acompanhante_2.relacao_id as acompanhante_2_relacao_id',
|
||||
)
|
||||
->get()
|
||||
->map(function ($query) {
|
||||
return [
|
||||
'id' => $query->id ?? null,
|
||||
'selecionado' => false,
|
||||
'alterado' => false,
|
||||
'jornada_id' => $query->jornada_id ?? null,
|
||||
'paciente_id' => $query->paciente_id ?? null,
|
||||
'acompanhante1_id' => $query->acompanhante_1_id ?? null,
|
||||
'acompanhante2_id' => $query->acompanhante_2_id ?? null,
|
||||
'paciente_nome' => $query->paciente_nome ?? null,
|
||||
'numero_placa' => $query->numero_placa ?? null,
|
||||
'descricao_modelo' => $query->descricao_modelo ?? null,
|
||||
'consulta_observacao' => $query->consulta_observacao ?? null,
|
||||
'observacao' => $query->observacao ?? null,
|
||||
'supervisor_id' => $query->supervisor_id ?? null,
|
||||
'data' => $query->data ?? null,
|
||||
'data_saida' => $query->data_saida ?? null,
|
||||
'acompanhante' => $query->acompanhante ?? null,
|
||||
'horario' => (new Carbon($query->horario))->format('H:i') ?? null,
|
||||
'horario_saida' => $query->horario_saida ? (new Carbon($query->horario_saida))->format('H:i') : null,
|
||||
'uf' => $query->estado_uf ?? null,
|
||||
'municipio' => [
|
||||
'id' => $query->municipio_id,
|
||||
'nome' => $query->municipio_nome ?? null,
|
||||
],
|
||||
'acompanhante1' => [
|
||||
'nome' => [
|
||||
'cidadao' => [
|
||||
'nome' => $query->acompanhante_1_nome ?? null,
|
||||
]
|
||||
],
|
||||
'id' => $query->acompanhante_1_id ?? null,
|
||||
'usuario_id' => $query->acompanhante_1_usuario_id ?? null,
|
||||
'cns' => $query->acompanhante_1_cns ?? null,
|
||||
'telefone' => $query->acompanhante_1_telefone ?? null,
|
||||
'relacao_id' => $query->acompanhante_1_relacao_id ?? null,
|
||||
|
||||
],
|
||||
'acompanhante2' => [
|
||||
'nome' => [
|
||||
'cidadao' => [
|
||||
'nome' => $query->acompanhante_2_nome ?? null,
|
||||
]
|
||||
],
|
||||
'id' => $query->acompanhante_2_id ?? null,
|
||||
'usuario_id' => $query->acompanhante_2_usuario_id ?? null,
|
||||
'cns' => $query->acompanhante_2_cns ?? null,
|
||||
'telefone' => $query->acompanhante_2_telefone ?? null,
|
||||
'relacao_id' => $query->acompanhante_2_relacao_id ?? null,
|
||||
],
|
||||
'destino_id' => $query->destino_id ?? null,
|
||||
'veiculo_id' => $query->veiculo_id ?? null,
|
||||
'veiculo' => [
|
||||
'descricao' => $query->numero_placa . ' - ' . $query->descricao_modelo,
|
||||
],
|
||||
'jornada_id' => $query->jornada_id ?? null,
|
||||
'jornada' => [
|
||||
'descricao' => $query->data_inicial . ' - ' . $query->data_final,
|
||||
],
|
||||
'ponto_id' => $query->ponto_id ?? null,
|
||||
'tipo_passageiro_id' => $query->tipo_passageiro_id ?? null,
|
||||
'tipo_passageiro' => [
|
||||
'descricao' => strtoupper($query->tipo_passageiro_descricao ?? null),
|
||||
],
|
||||
'status_id' => $query->status_id ?? null,
|
||||
'destino' => $query->destino_descricao ?? null,
|
||||
'ponto' => $query->ponto_descricao ?? null,
|
||||
'motivo' => [
|
||||
'id' => $query->motivo_id ?? null,
|
||||
'descricao' => $query->motivo_descricao ?? null,
|
||||
],
|
||||
'protocolo' => $query->protocolo ?? '-',
|
||||
'data_agendamento' => (new Carbon($query->created_at))->format('d/m/Y'),
|
||||
'agendador' => $query->agendador_nome ?? null,
|
||||
'unidade_agendadora' => $query->unidade_agendadora ?? null,
|
||||
];
|
||||
});
|
||||
|
||||
} else {
|
||||
|
||||
return DB::table('transporte_paciente_agendar_transporte')
|
||||
->leftJoin('transporte_paciente_jornada as jornadas', 'transporte_paciente_agendar_transporte.jornada_id', 'jornadas.id')
|
||||
->leftJoin('intranet.cadastro_municipio as municipios', 'transporte_paciente_agendar_transporte.municipio_id', 'municipios.id')
|
||||
->leftJoin('intranet.cadastro_estado as estados', 'municipios.estado_id', 'estados.id')
|
||||
->leftJoin('transporte_paciente_veiculo as veiculos', 'transporte_paciente_agendar_transporte.veiculo_id', 'veiculos.id')
|
||||
->leftJoin('transporte_paciente_motivo_viagem_procedimento as motivos', 'transporte_paciente_agendar_transporte.motivo_id', '=', 'motivos.id')
|
||||
->leftJoin('transporte_paciente_ponto as pontos', 'transporte_paciente_agendar_transporte.ponto_id', 'pontos.id')
|
||||
->leftJoin('transporte_paciente_viagem as viagens', 'transporte_paciente_agendar_transporte.viagem_id', 'viagens.id')
|
||||
->leftJoin('cadastro_lotacao as lotacoes', 'transporte_paciente_agendar_transporte.created_lotacao_id', 'lotacoes.id')
|
||||
->leftJoin('cadastro_usuario as agendadores', 'lotacoes.usuario_id', 'agendadores.id')
|
||||
->leftJoin('cadastro_cidadao as agendador_cidadaos', 'agendadores.cidadao_id', 'agendador_cidadaos.id')
|
||||
->leftJoin('cadastro_infraestrutura as infraestruturas', 'lotacoes.infraestrutura_id', 'infraestruturas.id')
|
||||
->leftJoin('cadastro_unidade as unidades', 'infraestruturas.unidade_id', 'unidades.id')
|
||||
->leftJoin('transporte_paciente_veiculo_tipo_passageiro as tipo_passageiro', 'tipo_passageiro.id', 'transporte_paciente_agendar_transporte.tipo_passageiro_id')
|
||||
->leftJoin('transporte_paciente_destino as paciente_destino', 'paciente_destino.id', 'transporte_paciente_agendar_transporte.destino_id')
|
||||
->leftJoin('transporte_paciente_acompanhante as paciente_acompanhante_1', 'paciente_acompanhante_1.id', 'transporte_paciente_agendar_transporte.acompanhante_1_id')
|
||||
->leftJoin('transporte_paciente_acompanhante as paciente_acompanhante_2', 'paciente_acompanhante_2.id', 'transporte_paciente_agendar_transporte.acompanhante_2_id')
|
||||
->leftJoin('cadastro_paciente as cadastro_paciente_acompanhante_2', 'cadastro_paciente_acompanhante_2.id', 'paciente_acompanhante_2.usuario_id')
|
||||
->where('transporte_paciente_agendar_transporte.paciente_id', $id)
|
||||
->where(function ($query) {
|
||||
$query->whereNotIn('transporte_paciente_agendar_transporte.status_id', [Status::CANCELADO])
|
||||
->orWhereNull('transporte_paciente_agendar_transporte.status_id');
|
||||
})
|
||||
->select(
|
||||
'transporte_paciente_agendar_transporte.*',
|
||||
'jornadas.data_inicial',
|
||||
'jornadas.data_final',
|
||||
'municipios.nome as municipio_nome',
|
||||
'estados.uf as estado_uf',
|
||||
'veiculos.numero_placa',
|
||||
'veiculos.descricao_modelo',
|
||||
'motivos.descricao as motivo_descricao',
|
||||
'pontos.casa_paciente',
|
||||
'pontos.descricao as ponto_descricao',
|
||||
'viagens.protocolo',
|
||||
'agendador_cidadaos.nome as agendador_nome',
|
||||
'unidades.nome_fantasia as unidade_agendadora',
|
||||
'tipo_passageiro.descricao as tipo_passageiro_descricao',
|
||||
'paciente_destino.descricao_destino as destino_descricao',
|
||||
'paciente_acompanhante_1.id as acompanhante_1_id',
|
||||
'paciente_acompanhante_1.nome as acompanhante_1_nome',
|
||||
'paciente_acompanhante_1.telefone as acompanhante_1_telefone',
|
||||
'paciente_acompanhante_1.relacao_id as acompanhante_1_relacao_id',
|
||||
'paciente_acompanhante_2.id as acompanhante_2_id',
|
||||
'paciente_acompanhante_2.nome as acompanhante_2_nome',
|
||||
'paciente_acompanhante_2.telefone as acompanhante_2_telefone',
|
||||
'paciente_acompanhante_2.relacao_id as acompanhante_2_relacao_id',
|
||||
)
|
||||
->get()
|
||||
->map(function ($query) {
|
||||
return [
|
||||
'id' => $query->id ?? null,
|
||||
'selecionado' => false,
|
||||
'alterado' => false,
|
||||
'jornada_id' => $query->jornada_id ?? null,
|
||||
'paciente_id' => $query->paciente_id ?? null,
|
||||
'acompanhante1_id' => $query->acompanhante_1_id ?? null,
|
||||
'acompanhante2_id' => $query->acompanhante_2_id ?? null,
|
||||
'paciente_nome' => $query->paciente_nome ?? null,
|
||||
'numero_placa' => $query->numero_placa ?? null,
|
||||
'descricao_modelo' => $query->descricao_modelo ?? null,
|
||||
'consulta_observacao' => $query->consulta_observacao ?? null,
|
||||
'observacao' => $query->observacao ?? null,
|
||||
'supervisor_id' => $query->supervisor_id ?? null,
|
||||
'data' => $query->data ?? null,
|
||||
'data_saida' => $query->data_saida ?? null,
|
||||
'acompanhante' => $query->acompanhante ?? null,
|
||||
'horario' => (new Carbon($query->horario))->format('H:i') ?? null,
|
||||
'horario_saida' => $query->horario_saida ? (new Carbon($query->horario_saida))->format('H:i') : null,
|
||||
'uf' => $query->estado_uf ?? null,
|
||||
'municipio' => [
|
||||
'id' => $query->municipio_id,
|
||||
'nome' => $query->municipio_nome ?? null,
|
||||
],
|
||||
'acompanhante1' => [
|
||||
'id' => $query->acompanhante_1_id ?? null,
|
||||
'usuario_id' => $query->acompanhante_1_usuario_id ?? null,
|
||||
'nome' => $query->acompanhante_1_nome ?? null,
|
||||
'cns' => $query->acompanhante_1_cns ?? null,
|
||||
'telefone' => $query->acompanhante_1_telefone ?? null,
|
||||
'relacao_id' => $query->acompanhante_1_relacao_id ?? null,
|
||||
],
|
||||
'acompanhante2' => [
|
||||
'id' => $query->acompanhante_2_id ?? null,
|
||||
'usuario_id' => $query->acompanhante_2_usuario_id ?? null,
|
||||
'nome' => $query->acompanhante_2_nome ?? null,
|
||||
'cns' => $query->acompanhante_2_cns ?? null,
|
||||
'telefone' => $query->acompanhante_2_telefone ?? null,
|
||||
'relacao_id' => $query->acompanhante_2_relacao_id ?? null,
|
||||
],
|
||||
'destino_id' => $query->destino_id ?? null,
|
||||
'veiculo_id' => $query->veiculo_id ?? null,
|
||||
'veiculo' => [
|
||||
'descricao' => $query->numero_placa . ' - ' . $query->descricao_modelo,
|
||||
],
|
||||
'jornada_id' => $query->jornada_id ?? null,
|
||||
'jornada' => [
|
||||
'descricao' => $query->data_inicial . ' - ' . $query->data_final,
|
||||
],
|
||||
'ponto_id' => $query->ponto_id ?? null,
|
||||
'tipo_passageiro_id' => $query->tipo_passageiro_id ?? null,
|
||||
'tipo_passageiro' => [
|
||||
'descricao' => strtoupper($query->tipo_passageiro_descricao ?? null),
|
||||
],
|
||||
'status_id' => $query->status_id ?? null,
|
||||
'destino' => $query->destino_descricao ?? null,
|
||||
'ponto' => $query->ponto_descricao ?? null,
|
||||
'motivo' => [
|
||||
'id' => $query->motivo_id ?? null,
|
||||
'descricao' => $query->motivo_descricao ?? null,
|
||||
],
|
||||
'protocolo' => $query->protocolo ?? '-',
|
||||
'data_agendamento' => (new Carbon($query->created_at))->format('d/m/Y'),
|
||||
'agendador' => $query->agendador_nome ?? null,
|
||||
'unidade_agendadora' => $query->unidade_agendadora ?? null,
|
||||
];
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
$parametrizacao = ParametrizacaoCadastro::first();
|
||||
|
||||
$quantidadeDias = $parametrizacao->cadastro_paciente_desatualizado_quantidade_dias ?? 0;
|
||||
$provisorioBloqueado = $parametrizacao->cadastro_paciente_provisorio_bloqueado ?? false;
|
||||
$provisorioQuantidadeDias = $parametrizacao->cadastro_paciente_provisorio_quantidade_dias ?? 0;
|
||||
|
||||
$pacientes = DB::table('cadastro_paciente')
|
||||
->distinct()
|
||||
->join('transporte_paciente_agendar_transporte', 'transporte_paciente_agendar_transporte.paciente_id', 'cadastro_paciente.id')
|
||||
->leftJoin('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->leftJoin(
|
||||
'cadastro_carteira_identidade',
|
||||
function ($leftJoin) {
|
||||
|
||||
$leftJoin->on('cadastro_carteira_identidade.cidadao_id', 'cadastro_cidadao.id')
|
||||
->whereNull('cadastro_carteira_identidade.deleted_at')
|
||||
->whereRaw('cadastro_carteira_identidade.id = (
|
||||
SELECT id
|
||||
FROM cadastro_carteira_identidade
|
||||
WHERE cadastro_carteira_identidade.cidadao_id = cadastro_cidadao.id
|
||||
ORDER BY cadastro_carteira_identidade.id
|
||||
LIMIT 1
|
||||
)');
|
||||
}
|
||||
)
|
||||
->leftJoin('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao.domicilio_id')
|
||||
->leftJoin('cadastro_endereco', 'cadastro_endereco.id', 'cadastro_domicilio.endereco_id')
|
||||
->leftJoin('cadastro_logradouro', 'cadastro_logradouro.id', 'cadastro_endereco.logradouro_id')
|
||||
->leftJoin('intranet.cadastro_municipio', 'cadastro_municipio.id', 'cadastro_logradouro.municipio_id')
|
||||
->leftJoin('intranet.cadastro_estado', 'cadastro_estado.id', 'cadastro_municipio.estado_id')
|
||||
->leftJoin('cadastro_obito', function ($join) {
|
||||
|
||||
$join->on('cadastro_cidadao.id', '=', 'cadastro_obito.cidadao_id')
|
||||
->whereNull('cadastro_obito.deleted_at');
|
||||
})
|
||||
->whereNull('cadastro_paciente.deleted_at')
|
||||
->whereNull('cadastro_paciente.sequencial_desconhecido_em')
|
||||
->whereIn('transporte_paciente_agendar_transporte.status_id', [1, 5, 6])
|
||||
->select(
|
||||
'cadastro_paciente.id',
|
||||
'cadastro_paciente.bloqueado',
|
||||
'cadastro_paciente.classificacao_id',
|
||||
'cadastro_paciente.subclassificacao_id',
|
||||
'cadastro_cidadao.nome',
|
||||
'cadastro_cidadao.nome_social',
|
||||
'cadastro_cidadao.preferencia_nome_id',
|
||||
'cadastro_cidadao.data_nascimento',
|
||||
'cadastro_cidadao.nome_mae',
|
||||
'cadastro_cidadao.cpf',
|
||||
'cadastro_cidadao.cns',
|
||||
'cadastro_carteira_identidade.numero AS rg',
|
||||
'cadastro_obito.obito_em',
|
||||
DB::raw('LPAD(cadastro_paciente.prontuario,7,0) as prontuario'),
|
||||
'cadastro_municipio.nome as municipio_nome',
|
||||
'cadastro_estado.uf as uf',
|
||||
DB::raw('GREATEST(cadastro_paciente.updated_at, cadastro_cidadao.updated_at) AS updated_at'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN cadastro_paciente.updated_at IS NULL AND cadastro_cidadao.updated_at IS NULL THEN 1
|
||||
WHEN cadastro_paciente.updated_at IS NOT NULL AND (cadastro_cidadao.updated_at IS NULL OR cadastro_paciente.updated_at > cadastro_cidadao.updated_at) THEN
|
||||
CASE
|
||||
WHEN ' . ($quantidadeDias > 0
|
||||
? 'DATE_ADD(cadastro_paciente.updated_at, INTERVAL ' . $quantidadeDias . ' DAY) < NOW()'
|
||||
: 'false') . '
|
||||
THEN DATEDIFF(NOW(), DATE_ADD(cadastro_paciente.updated_at, INTERVAL ' . $quantidadeDias . ' DAY))
|
||||
ELSE 0
|
||||
END
|
||||
WHEN cadastro_cidadao.updated_at IS NOT NULL AND (cadastro_paciente.updated_at IS NULL OR cadastro_cidadao.updated_at > cadastro_paciente.updated_at) THEN
|
||||
CASE
|
||||
WHEN ' . ($quantidadeDias > 0
|
||||
? 'DATE_ADD(cadastro_cidadao.updated_at, INTERVAL ' . $quantidadeDias . ' DAY) < NOW()'
|
||||
: 'false') . '
|
||||
THEN DATEDIFF(NOW(), DATE_ADD(cadastro_cidadao.updated_at, INTERVAL ' . $quantidadeDias . ' DAY))
|
||||
ELSE 0
|
||||
END
|
||||
ELSE 0
|
||||
END as dias_cadastro_desatualizado
|
||||
')
|
||||
);
|
||||
|
||||
if (DataUtil::isStringTrue(request()->with_prontuario_unidade)) {
|
||||
|
||||
$pacientes->addSelect([
|
||||
'prontuario_unidade' => function ($query) {
|
||||
|
||||
$query->select('cadastro_prontuario_unidade.prontuario')
|
||||
->from('cadastro_prontuario_unidade')
|
||||
->whereColumn('cadastro_prontuario_unidade.paciente_id', 'cadastro_paciente.id')
|
||||
->where(
|
||||
'cadastro_prontuario_unidade.unidade_id',
|
||||
self::getCurrentCentroCusto()->infraestrutura->unidade_id
|
||||
);
|
||||
}
|
||||
]);
|
||||
}
|
||||
|
||||
if (!DataUtil::isStringTrue(request()->with_paciente_bloqueado)) {
|
||||
|
||||
$pacientes->where(function ($query) {
|
||||
|
||||
$query
|
||||
->where('cadastro_paciente.bloqueado', false)
|
||||
->orWhereNull('cadastro_paciente.bloqueado');
|
||||
});
|
||||
}
|
||||
|
||||
if (!DataUtil::isStringTrue(request()->with_paciente_provisorio) && $provisorioBloqueado) {
|
||||
|
||||
$pacientes->where(function ($query) use ($provisorioQuantidadeDias) {
|
||||
$query->where('cadastro_paciente.subclassificacao_id', '!=', Subclassificacao::TEMPORARIO)
|
||||
->orWhere(function ($query) use ($provisorioQuantidadeDias) {
|
||||
$query->where('cadastro_paciente.subclassificacao_id', Subclassificacao::TEMPORARIO)
|
||||
->where(function ($query) use ($provisorioQuantidadeDias) {
|
||||
|
||||
$query->where(function ($query) {
|
||||
$query->whereNull('cadastro_paciente.validade_inicio')
|
||||
->orWhereDate('cadastro_paciente.validade_inicio', '<=', Carbon::now()->format('Y-m-d'));
|
||||
});
|
||||
|
||||
$query->where(function ($query) use ($provisorioQuantidadeDias) {
|
||||
$query->whereNull('cadastro_paciente.validade_fim')
|
||||
->orWhere(function ($query) use ($provisorioQuantidadeDias) {
|
||||
if (!is_null($provisorioQuantidadeDias) && $provisorioQuantidadeDias > 0) {
|
||||
$query->whereDate('cadastro_paciente.validade_fim', '>=', Carbon::now()->format('Y-m-d'))
|
||||
->orWhereDate('cadastro_paciente.validade_fim', '>=', Carbon::now()->subDays($provisorioQuantidadeDias)->format('Y-m-d'));
|
||||
} else {
|
||||
$query->whereDate('cadastro_paciente.validade_fim', '>=', Carbon::now()->format('Y-m-d'));
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
})
|
||||
->orWhereNull('cadastro_paciente.subclassificacao_id');
|
||||
});
|
||||
}
|
||||
|
||||
return datatables()
|
||||
->of($pacientes)
|
||||
->filterColumn('cadastro_paciente.prontuario', function ($query, $keyword) {
|
||||
|
||||
$query->whereRaw('LPAD(cadastro_paciente.prontuario,7,0) like ?', ["%{$keyword}%"]);
|
||||
})
|
||||
->filterColumn('cadastro_prontuario_unidade.prontuario', function ($query, $keyword) {
|
||||
|
||||
$query->whereRaw('(
|
||||
SELECT cadastro_prontuario_unidade.prontuario
|
||||
FROM cadastro_prontuario_unidade
|
||||
WHERE cadastro_prontuario_unidade.paciente_id = cadastro_paciente.id
|
||||
AND cadastro_prontuario_unidade.unidade_id = '
|
||||
. self::getCurrentCentroCusto()->infraestrutura->unidade_id . '
|
||||
) like ?', ["%{$keyword}%"]);
|
||||
})
|
||||
->filterColumn('cadastro_cidadao.cpf', function ($query, $keyword) {
|
||||
|
||||
$query
|
||||
->whereRaw("cadastro_cidadao.cpf like ?", ["%{$keyword}%"])
|
||||
->orWhereRaw(
|
||||
"CONCAT(
|
||||
SUBSTR(cadastro_cidadao.cpf,1,3),
|
||||
'.',
|
||||
SUBSTR(cadastro_cidadao.cpf,4,3),
|
||||
'.',
|
||||
SUBSTR(cadastro_cidadao.cpf,7,3),
|
||||
'-',
|
||||
SUBSTR(cadastro_cidadao.cpf,10,2)
|
||||
) like ?",
|
||||
["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->filterColumn('cadastro_cidadao.data_nascimento', function ($query, $keyword) {
|
||||
|
||||
$query
|
||||
->whereRaw("DATE_FORMAT(cadastro_cidadao.data_nascimento, '%d/%m/%Y') like ?", ["%{$keyword}%"])
|
||||
->orWhereRaw(
|
||||
"CONCAT(
|
||||
SUBSTR(cadastro_cidadao.data_nascimento,9,2),
|
||||
SUBSTR(cadastro_cidadao.data_nascimento,6,2),
|
||||
SUBSTR(cadastro_cidadao.data_nascimento,1,4)
|
||||
) like ?",
|
||||
["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->skipTotalRecords()
|
||||
->toJson();
|
||||
}
|
||||
}
|
||||
138
api/app/Services/TransportePaciente/Grupo/GrupoService.php
Normal file
138
api/app/Services/TransportePaciente/Grupo/GrupoService.php
Normal file
@@ -0,0 +1,138 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Grupo;
|
||||
|
||||
use App\Exceptions\Model\DeletingModelException;
|
||||
use App\Models\TransportePaciente\Grupo\Grupo;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class GrupoService extends Service
|
||||
{
|
||||
|
||||
private static function getModelData($grupo = null)
|
||||
{
|
||||
|
||||
$grupo = [
|
||||
'id' => $grupo->id ?? null,
|
||||
'descricao' => $grupo->descricao ?? null,
|
||||
'bloqueado' => $grupo->bloqueado ?? null,
|
||||
];
|
||||
|
||||
return $grupo;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
return Grupo::find($id);
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return Grupo::where('id', $id)->update(request()->all());
|
||||
}
|
||||
|
||||
public static function bloquear($id)
|
||||
{
|
||||
$grupo = self::show($id);
|
||||
|
||||
return Grupo::where('id', $id)->update(['bloqueado' => $grupo->bloqueado == 1 ? 0 : 1]);
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
return [
|
||||
'model' => self::getModelData(self::show($id)),
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return Grupo::create(request()->all())->fresh();
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
try {
|
||||
return self::show($id)->delete();
|
||||
} catch (\Throwable $th) {
|
||||
throw new DeletingModelException();
|
||||
}
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
|
||||
$grupos = DB::table('transporte_paciente_grupo')
|
||||
->select(
|
||||
'transporte_paciente_grupo.id',
|
||||
'transporte_paciente_grupo.descricao',
|
||||
'transporte_paciente_grupo.bloqueado',
|
||||
DB::raw('
|
||||
(
|
||||
CASE WHEN transporte_paciente_motivo_viagem_procedimento.grupo_id IS NULL THEN
|
||||
true
|
||||
ELSE
|
||||
false
|
||||
END
|
||||
) AS delete_grupo'
|
||||
),
|
||||
DB::raw("
|
||||
CASE WHEN transporte_paciente_grupo.bloqueado THEN
|
||||
'INATIVO'
|
||||
ELSE
|
||||
'ATIVO'
|
||||
END AS status
|
||||
"),
|
||||
)
|
||||
->leftJoin(
|
||||
'transporte_paciente_motivo_viagem_procedimento',
|
||||
'transporte_paciente_motivo_viagem_procedimento.grupo_id',
|
||||
'transporte_paciente_grupo.id'
|
||||
)
|
||||
->distinct();
|
||||
|
||||
return datatables()
|
||||
->of($grupos)
|
||||
->filterColumn('transporte_paciente_grupo.bloqueado', function ($query, $keyword) {
|
||||
|
||||
$query->whereRaw("
|
||||
CASE WHEN transporte_paciente_grupo.bloqueado THEN
|
||||
'INATIVO'
|
||||
ELSE
|
||||
'ATIVO'
|
||||
END LIKE ?", ["%{$keyword}%"]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
return request()->validate(
|
||||
[
|
||||
'descricao' => [
|
||||
'required',
|
||||
'min:5',
|
||||
'max:100',
|
||||
Rule::unique('transporte_paciente_grupo')
|
||||
->ignore(request()->grupo)
|
||||
],
|
||||
],
|
||||
[
|
||||
'descricao.unique' => 'O grupo já foi inserido anteriormente.',
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
275
api/app/Services/TransportePaciente/Jornada/JornadaService.php
Normal file
275
api/app/Services/TransportePaciente/Jornada/JornadaService.php
Normal file
@@ -0,0 +1,275 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Jornada;
|
||||
|
||||
use App\Enums\TransportePaciente\Status;
|
||||
use App\Enums\Administracao\Modulo;
|
||||
use App\Exceptions\Model\DeletingModelException;
|
||||
use App\Models\Cadastro\Feriado\Feriado;
|
||||
use App\Models\Geral\DiaSemana;
|
||||
use App\Models\TransportePaciente\Agendar\Agendar;
|
||||
use App\Models\TransportePaciente\Jornada\Jornada;
|
||||
use App\Models\TransportePaciente\Viagem;
|
||||
use App\Services\Service;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class JornadaService extends Service
|
||||
{
|
||||
private static function obterInformacoesVeiculo($idVeiculo)
|
||||
{
|
||||
$veiculo = DB::table('transporte_paciente_veiculo as veiculo')
|
||||
->join(
|
||||
'transporte_paciente_veiculo_tipo_passageiro as tipo_passageiro',
|
||||
'veiculo.tipo_passageiro_id',
|
||||
'tipo_passageiro.id'
|
||||
)
|
||||
->join(
|
||||
'transporte_paciente_veiculo_cor as cor',
|
||||
'veiculo.cor_id',
|
||||
'cor.id'
|
||||
)
|
||||
->join(
|
||||
'transporte_paciente_veiculo_marca as marca',
|
||||
'veiculo.marca_id',
|
||||
'marca.id'
|
||||
)
|
||||
->join(
|
||||
'transporte_paciente_veiculo_tipo as tipo',
|
||||
'veiculo.tipo_id',
|
||||
'tipo.id'
|
||||
)
|
||||
->where('veiculo.id', $idVeiculo)
|
||||
->select(
|
||||
'veiculo.id',
|
||||
'veiculo.numero_placa',
|
||||
'veiculo.descricao_modelo',
|
||||
'veiculo.ano_fabricacao',
|
||||
'veiculo.numero_capacidade',
|
||||
'marca.descricao as descricao_marca',
|
||||
'tipo.descricao as descricao_tipo',
|
||||
'tipo_passageiro.descricao as passageiro_descricao_tipo',
|
||||
'cor.descricao as descricao_cor',
|
||||
)
|
||||
->first(1);
|
||||
|
||||
$veiculo->numero_placa = MaskUtil::getPlacaMasked($veiculo->numero_placa);
|
||||
|
||||
return $veiculo;
|
||||
}
|
||||
|
||||
private static function obterJornadas($idVeiculo)
|
||||
{
|
||||
$jornadas = DB::table('transporte_paciente_jornada as jornada')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'jornada.veiculo_id', 'veiculo.id')
|
||||
->join('geral_dia_semana as dia_semana', 'jornada.geral_dia_semana_id', 'dia_semana.id')
|
||||
->where('jornada.veiculo_id', $idVeiculo)
|
||||
->select(
|
||||
'jornada.id',
|
||||
'jornada.data_inicial',
|
||||
'jornada.data_final',
|
||||
'veiculo.numero_placa',
|
||||
'dia_semana.id as geral_dia_semana_id',
|
||||
'dia_semana.descricao as geral_dia_semana_descricao',
|
||||
DB::raw('false AS selecionado'),
|
||||
DB::raw('(SELECT agendar.id FROM transporte_paciente_agendar_transporte as agendar
|
||||
WHERE agendar.jornada_id = jornada.id AND (agendar.status_id != "' . Status::CANCELADO . '"
|
||||
OR agendar.status_id IS NULL) LIMIT 1) as vinculo'
|
||||
)
|
||||
)
|
||||
->orderBy('jornada.data_inicial')
|
||||
->get();
|
||||
|
||||
return $jornadas;
|
||||
}
|
||||
|
||||
private static function getFormData($idVeiculo = null)
|
||||
{
|
||||
return [
|
||||
'veiculo' => self::obterInformacoesVeiculo($idVeiculo),
|
||||
'dias_semana' => self::obterDiasSemana(),
|
||||
'data_atual' => Carbon::now()->format('Y-m-d'),
|
||||
'feriados' => self::getFeriados(),
|
||||
'tipo_jornada' => [
|
||||
['value' => 'unica', 'text' => 'Única'],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFeriados()
|
||||
{
|
||||
return Feriado::whereHas('modulos', fn ($q) => $q
|
||||
->where('identificador', Modulo::TRANSPORTE_PACIENTE)
|
||||
)
|
||||
->orderBy('id')
|
||||
->get()
|
||||
->map(fn ($feriado) => (object) [
|
||||
'id' => $feriado->id,
|
||||
'data' => (new Carbon($feriado->data))->format('d/m/Y') ?? null,
|
||||
'tipo_nome' => $feriado->tipo->descricao,
|
||||
'observacao' => $feriado->observacao,
|
||||
'modulos' => $feriado->modulos->pluck('id'),
|
||||
]);
|
||||
}
|
||||
|
||||
private static function obterDiasSemana()
|
||||
{
|
||||
|
||||
return DiaSemana::get()
|
||||
->map(fn ($feriado) => [
|
||||
'id' => $feriado->id,
|
||||
'descricao' => $feriado->descricao,
|
||||
'disabled' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
private static function getModelData($idVeiculo = null)
|
||||
{
|
||||
return [
|
||||
'jornadas' => self::obterJornadas($idVeiculo),
|
||||
'jornadasNotSave' => null,
|
||||
];
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function edit($idVeiculo)
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData($idVeiculo),
|
||||
'model' => self::getModelData($idVeiculo),
|
||||
];
|
||||
}
|
||||
|
||||
public static function destroySelected()
|
||||
{
|
||||
try {
|
||||
$ids = request()->ids;
|
||||
|
||||
$deletarVariasJornadas = Agendar::where('jornada_id', $ids)
|
||||
->where(function ($query) {
|
||||
$query->whereNotIn('status_id', [Status::CANCELADO])
|
||||
->orWhereNull('status_id');
|
||||
})->get();
|
||||
|
||||
if ($deletarVariasJornadas) {
|
||||
Agendar::where('jornada_id', $ids)->update(['jornada_id' => null]);
|
||||
}
|
||||
|
||||
DB::transaction(function () use ($ids) {
|
||||
Viagem::whereIn('jornada_id', $ids)->delete();
|
||||
Jornada::whereIn('id', $ids)->delete();
|
||||
});
|
||||
|
||||
|
||||
} catch (\Throwable $th) {
|
||||
throw new DeletingModelException;
|
||||
}
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
try {
|
||||
|
||||
$deletarJornada = Agendar::where('jornada_id', $id)
|
||||
->where(function ($query) {
|
||||
$query->whereNotIn('status_id', [Status::CANCELADO])
|
||||
->orWhereNull('status_id');
|
||||
})->get();
|
||||
|
||||
if ($deletarJornada) {
|
||||
Agendar::where('jornada_id', $id)->update(['jornada_id' => null]);
|
||||
}
|
||||
|
||||
DB::transaction(function () use ($id) {
|
||||
Viagem::where('jornada_id', $id)->delete();
|
||||
Jornada::destroy($id);
|
||||
});
|
||||
|
||||
} catch (\Throwable $th) {
|
||||
|
||||
throw new DeletingModelException;
|
||||
}
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
DB::transaction(function () {
|
||||
|
||||
foreach (request()->jornadas as $jornada) {
|
||||
|
||||
if (is_numeric($jornada['id'])) {
|
||||
|
||||
$existingJornada = Jornada::find($jornada['id']);
|
||||
|
||||
if ($existingJornada) {
|
||||
|
||||
$existingJornada->update($jornada);
|
||||
}
|
||||
} else {
|
||||
|
||||
unset($jornada['id']);
|
||||
Jornada::create($jornada);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return response()->json(null, Response::HTTP_NO_CONTENT);
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
|
||||
$veiculos = DB::table('transporte_paciente_veiculo as veiculo')
|
||||
->join(
|
||||
'transporte_paciente_veiculo_cor as cor',
|
||||
'veiculo.cor_id',
|
||||
'cor.id'
|
||||
)
|
||||
->join(
|
||||
'transporte_paciente_veiculo_marca as marca',
|
||||
'veiculo.marca_id',
|
||||
'marca.id'
|
||||
)
|
||||
->join(
|
||||
'transporte_paciente_veiculo_tipo as tipo',
|
||||
'veiculo.tipo_id',
|
||||
'tipo.id'
|
||||
)
|
||||
->where('veiculo.bloqueado', false)
|
||||
->select(
|
||||
'veiculo.id',
|
||||
'veiculo.numero_placa',
|
||||
'veiculo.descricao_modelo',
|
||||
'veiculo.descricao_modelo',
|
||||
'marca.descricao as descricao_marca',
|
||||
'tipo.descricao as descricao_tipo',
|
||||
'veiculo.ano_fabricacao',
|
||||
'cor.descricao as descricao_cor',
|
||||
);
|
||||
|
||||
return $veiculos;
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
return request()->validate(
|
||||
[
|
||||
'jornadas.*.veiculo_id' => ['required',],
|
||||
'jornadas.*.data_inicial' => ['required',],
|
||||
'jornadas.*.data_final' => ['required',],
|
||||
'jornadas.*.geral_dia_semana_id' => ['required',],
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
228
api/app/Services/TransportePaciente/Motivo/MotivoService.php
Normal file
228
api/app/Services/TransportePaciente/Motivo/MotivoService.php
Normal file
@@ -0,0 +1,228 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Motivo;
|
||||
|
||||
use App\Exceptions\Model\DeletingModelException;
|
||||
use App\Models\TransportePaciente\Grupo\Grupo;
|
||||
use App\Models\TransportePaciente\Motivo\Modulo;
|
||||
use App\Models\TransportePaciente\Motivo\Motivo;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
use App\Models\Sigtap\Procedimento;
|
||||
|
||||
class MotivoService extends Service
|
||||
{
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
|
||||
return [
|
||||
'data_atual' => $now->format('d/m/Y'),
|
||||
'grupos' => Grupo::orderBy('descricao')->get()->map(fn ($tipo) => [
|
||||
'id' => $tipo->id,
|
||||
'descricao' => $tipo->descricao,
|
||||
]),
|
||||
'modulos' => Modulo::orderBy('descricao')->get()->map(fn ($tipo) => [
|
||||
'id' => $tipo->id,
|
||||
'descricao' => $tipo->descricao,
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModelData($motivo = null)
|
||||
{
|
||||
if($motivo) {
|
||||
$procedimento = Procedimento::where('codigo', $motivo->codigo_procedimento)->first();
|
||||
}
|
||||
$motivo = [
|
||||
'id' => $motivo->id ?? null,
|
||||
'descricao' => $motivo->descricao ?? null,
|
||||
'grupo_id' => $motivo->grupo_id ?? null,
|
||||
'modulo_id' => $motivo->modulo_id ?? null,
|
||||
'regulada' => $motivo->regulada ?? null,
|
||||
'bloqueado' => $motivo->bloqueado ?? null,
|
||||
'codigo_procedimento' => $motivo->codigo_procedimento ?? null,
|
||||
'procedimento' => $procedimento ?? null,
|
||||
];
|
||||
|
||||
return $motivo;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
return Motivo::find($id);
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return Motivo::where('id', $id)->update(request()->all());
|
||||
}
|
||||
|
||||
public static function bloquear($id)
|
||||
{
|
||||
$motivo = self::show($id);
|
||||
|
||||
return Motivo::where('id', $id)->update(['bloqueado' => $motivo->bloqueado == 1 ? 0 : 1]);
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(self::show($id)),
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return Motivo::create(request()->all())->fresh();
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
try {
|
||||
return self::show($id)->delete();
|
||||
} catch (\Throwable $th) {
|
||||
throw new DeletingModelException();
|
||||
}
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
|
||||
$motivos = DB::table('transporte_paciente_motivo_viagem_procedimento')
|
||||
->leftJoin(
|
||||
'transporte_paciente_grupo',
|
||||
'transporte_paciente_grupo.id',
|
||||
'=',
|
||||
'transporte_paciente_motivo_viagem_procedimento.grupo_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'transporte_paciente_motivo_modulo',
|
||||
'transporte_paciente_motivo_modulo.id',
|
||||
'=',
|
||||
'transporte_paciente_motivo_viagem_procedimento.modulo_id'
|
||||
)
|
||||
->leftJoin('sigtap.procedimento', function ($join) {
|
||||
|
||||
$join->on('sigtap.procedimento.codigo', 'transporte_paciente_motivo_viagem_procedimento.codigo_procedimento')
|
||||
->where('sigtap.procedimento.competencia_id', '=', function ($query) {
|
||||
|
||||
$query->select('sigtap.competencia.id')
|
||||
->from('sigtap.competencia')
|
||||
->orderByDesc('sigtap.competencia.valor')
|
||||
->limit(1);
|
||||
});
|
||||
})
|
||||
->select(
|
||||
'transporte_paciente_motivo_viagem_procedimento.id',
|
||||
'transporte_paciente_motivo_viagem_procedimento.descricao',
|
||||
'transporte_paciente_grupo.descricao AS grupo',
|
||||
'transporte_paciente_motivo_viagem_procedimento.bloqueado',
|
||||
DB::raw('CONCAT(sigtap.procedimento.codigo, " - ", sigtap.procedimento.nome) AS procedimento'),
|
||||
DB::raw('
|
||||
CASE WHEN transporte_paciente_motivo_viagem_procedimento.modulo_id THEN
|
||||
UPPER(transporte_paciente_motivo_modulo.descricao)
|
||||
ELSE
|
||||
"TODOS"
|
||||
END as modulo'
|
||||
),
|
||||
DB::raw('
|
||||
CASE WHEN transporte_paciente_motivo_viagem_procedimento.regulada THEN
|
||||
"SIM"
|
||||
ELSE
|
||||
"NÃO"
|
||||
END as regulada'
|
||||
),
|
||||
DB::raw("
|
||||
CASE WHEN transporte_paciente_motivo_viagem_procedimento.bloqueado THEN
|
||||
'INATIVO'
|
||||
ELSE
|
||||
'ATIVO'
|
||||
END AS status
|
||||
"),
|
||||
);
|
||||
|
||||
return datatables()
|
||||
->of($motivos)
|
||||
->filterColumn('transporte_paciente_motivo_viagem_procedimento.bloqueado', function ($query, $keyword) {
|
||||
|
||||
$query->whereRaw("
|
||||
CASE WHEN transporte_paciente_motivo_viagem_procedimento.bloqueado THEN
|
||||
'INATIVO'
|
||||
ELSE
|
||||
'ATIVO'
|
||||
END LIKE ?", ["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->filterColumn('transporte_paciente_motivo_viagem_procedimento.regulada', function ($query, $keyword) {
|
||||
|
||||
$query->whereRaw("
|
||||
CASE WHEN transporte_paciente_motivo_viagem_procedimento.regulada THEN
|
||||
'SIM'
|
||||
ELSE
|
||||
'NÃO'
|
||||
END LIKE ?", ["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->filterColumn('transporte_paciente_motivo_modulo.descricao', function ($query, $keyword) {
|
||||
|
||||
$query->whereRaw("
|
||||
CASE WHEN transporte_paciente_motivo_viagem_procedimento.modulo_id THEN
|
||||
UPPER(transporte_paciente_motivo_modulo.descricao)
|
||||
ELSE
|
||||
'TODOS'
|
||||
END LIKE ?", ["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->filterColumn('sigtap.procedimento.codigo', function ($query, $keyword) {
|
||||
|
||||
$query->whereRaw("
|
||||
CONCAT(sigtap.procedimento.codigo, ' - ', sigtap.procedimento.nome) LIKE ?", ["%{$keyword}%"]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
return request()->validate(
|
||||
[
|
||||
'descricao' => [
|
||||
'required',
|
||||
'min:5',
|
||||
'max:100',
|
||||
Rule::unique('transporte_paciente_motivo_viagem_procedimento')
|
||||
->ignore(request()->motivo_viagem_procedimento)
|
||||
],
|
||||
],
|
||||
[
|
||||
'descricao.unique' => 'O motivo já foi inserido anteriormente.',
|
||||
'descricao.min' => 'O campo descrição precisa ter no mínimo 5 caracteres.',
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public static function autocomplete()
|
||||
{
|
||||
return DB::table('transporte_paciente_motivo_viagem_procedimento')
|
||||
->select([
|
||||
'id',
|
||||
'descricao',
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,257 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Parametrizacao;
|
||||
|
||||
use App\Enums\Sigtap\Procedimento;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\TransportePaciente\Faturamento\Faturamento as FaturamentoBpa;
|
||||
use App\Models\TransportePaciente\Parametrizacao\Faturamento;
|
||||
use App\Models\TransportePaciente\Parametrizacao\Parametrizacao;
|
||||
use App\Services\Service;
|
||||
use App\Utils\DataUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ParametrizacaoService extends Service
|
||||
{
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
|
||||
return [
|
||||
'data_atual' => $now->format('d/m/Y'),
|
||||
'unidades' => Unidade::whereRaw('LENGTH(cnes) = 7')
|
||||
->orderBy('nome_fantasia')
|
||||
->get()
|
||||
->map(fn ($query) => [
|
||||
'id' => $query->id,
|
||||
'nome_fantasia' => $query->cnes . ' - ' . $query->nome_fantasia,
|
||||
'infraestruturas' => $query->infraestruturas->sortBy('nome')->map(fn ($infraestrutura) => [
|
||||
'id' => $infraestrutura->id,
|
||||
'nome' => $infraestrutura->nome,
|
||||
'principal' => $infraestrutura->principal,
|
||||
])->values()
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModelData($parametrizacao = null)
|
||||
{
|
||||
$parametrizacao = [
|
||||
'id' => $parametrizacao->id ?? null,
|
||||
'faltas' => $parametrizacao->faltas ?? null,
|
||||
'periodo' => $parametrizacao->periodo ?? null,
|
||||
'agendar_transporte_jornada' => $parametrizacao->agendar_transporte_jornada ?? null,
|
||||
'veiculo' => $parametrizacao->veiculo ?? null,
|
||||
'comprovante_acompanhante' => $parametrizacao->comprovante_acompanhante ?? null,
|
||||
'dados_acompanhante' => $parametrizacao->dados_acompanhante ?? null,
|
||||
'campo_livre' => $parametrizacao->campo_livre ?? null,
|
||||
'exibir_observacao_paciente' => $parametrizacao->exibir_observacao_paciente ?? null,
|
||||
'exibir_observacao_transporte' => $parametrizacao->exibir_observacao_transporte ?? null,
|
||||
'horario_saida' => $parametrizacao->horario_saida ?? null,
|
||||
'mensagem_protocolo' => $parametrizacao->mensagem_protocolo ?? null,
|
||||
'faturamento' => $parametrizacao->faturamento ?? null,
|
||||
'auxilio_alimentacao' => $parametrizacao->auxilio_alimentacao ?? null,
|
||||
'faturamentos' => Faturamento::get()
|
||||
->map(fn ($query) => [
|
||||
'id' => $query->id,
|
||||
'unidade_id' => $query->unidade_id,
|
||||
'unidade_nome' => $query->unidade->cnes . ' - ' . $query->unidade->nome_fantasia,
|
||||
'infraestrutura_id' => $query->infraestrutura_id,
|
||||
'infraestrutura_nome' => $query->infraestrutura->nome,
|
||||
'usuario_id' => $query->usuario_id,
|
||||
'usuario_nome' => $query->usuario->cidadao->cns . ' - ' . $query->usuario->nome,
|
||||
'ocupacao_id' => $query->ocupacao_id,
|
||||
'ocupacao_codigo_nome' => $query->ocupacao->codigo_nome,
|
||||
]),
|
||||
'bpa_faturamento' => FaturamentoBpa::get()
|
||||
->map(fn ($bpa) =>[
|
||||
'id' => $bpa->id,
|
||||
'unidade_id' =>$bpa->lotacao_id,
|
||||
])
|
||||
];
|
||||
|
||||
return $parametrizacao;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(self::show()),
|
||||
];
|
||||
}
|
||||
|
||||
public static function show()
|
||||
{
|
||||
return Parametrizacao::first();
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
DB::transaction(function () {
|
||||
|
||||
self::saveGeral();
|
||||
self::saveFaturamento();
|
||||
});
|
||||
|
||||
return response()->json(null, Response::HTTP_OK);
|
||||
}
|
||||
|
||||
private static function saveGeral()
|
||||
{
|
||||
$geral = Parametrizacao::first() ?? new Parametrizacao();
|
||||
|
||||
$data = request()->geral;
|
||||
|
||||
$data['exibir_observacao_transporte'] = $data['exibir_observacao_transporte'] ?? 0;
|
||||
|
||||
$geral->fill($data);
|
||||
|
||||
$geral->save();
|
||||
}
|
||||
|
||||
private static function saveFaturamento()
|
||||
{
|
||||
$ids = [];
|
||||
|
||||
foreach (request()->faturamento as $params) {
|
||||
|
||||
$faturamento = Faturamento::where('unidade_id', $params['unidade_id'])
|
||||
->where('infraestrutura_id', $params['infraestrutura_id'])
|
||||
->where('usuario_id', $params['usuario_id'])
|
||||
->first() ?? new Faturamento();
|
||||
|
||||
$faturamento->fill($params);
|
||||
$faturamento->save();
|
||||
|
||||
$ids[] = $faturamento->id;
|
||||
}
|
||||
|
||||
Faturamento::destroy(Faturamento::whereNotIn('id', $ids)->pluck('id'));
|
||||
}
|
||||
|
||||
public static function lotacoes()
|
||||
{
|
||||
$usuario = Usuario::findOrFail(request()->usuario_id);
|
||||
|
||||
$lotacoes = $usuario->lotacoesAtivas()
|
||||
->where('cadastro_lotacao.infraestrutura_id', request()->query('infraestrutura_id'))
|
||||
->whereExists(function ($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('sigtap.procedimento_ocupacao')
|
||||
->join('sigtap.procedimento', 'sigtap.procedimento.id', 'sigtap.procedimento_ocupacao.procedimento_id')
|
||||
->whereColumn('sigtap.procedimento_ocupacao.ocupacao_id', 'cadastro_lotacao.ocupacao_id')
|
||||
->where('sigtap.procedimento_ocupacao.competencia_id', function ($query) {
|
||||
|
||||
$query->select('sigtap.competencia.id')
|
||||
->from('sigtap.competencia')
|
||||
->orderBy('id')
|
||||
->limit(1);
|
||||
})
|
||||
->where(function ($query) {
|
||||
|
||||
if (request()->auxilio_alimentar) {
|
||||
|
||||
$query->whereIn(
|
||||
'sigtap.procedimento.codigo',
|
||||
[
|
||||
Procedimento::AJUDA_DE_CUSTO_PARA_ALIMENTACAO_DE_PACIENTE_SEM_PERNOITE,
|
||||
Procedimento::AJUDA_DE_CUSTO_PARA_ALIMENTACAO_DE_PACIENTE_SEM_PERNOITE
|
||||
]
|
||||
);
|
||||
} else {
|
||||
$query->whereIn(
|
||||
'sigtap.procedimento.codigo',
|
||||
[
|
||||
Procedimento::UNIDADE_DE_REMUNERACAO_PARA_DESLOCAMENTO_DE_PACIENTE_POR_TRANSPORTE_TERRESTRE,
|
||||
Procedimento::UNIDADE_DE_REMUNERACAO_PARA_DESLOCAMENTO_DE_ACOMPANHANTE_POR_TRANSPORTE_TERRESTRE
|
||||
]
|
||||
);
|
||||
}
|
||||
});
|
||||
})
|
||||
->with(['infraestrutura.unidade'])
|
||||
->get();
|
||||
|
||||
return [
|
||||
'lotacoes' => $lotacoes->map(fn ($lotacao) => [
|
||||
'id' => $lotacao->id,
|
||||
'unidade_id' => $lotacao->infraestrutura->unidade_id,
|
||||
'unidade_nome' => $lotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'infraestrutura_id' => $lotacao->infraestrutura_id,
|
||||
'infraestrutura_nome' => $lotacao->infraestrutura->nome,
|
||||
'ocupacao' => $lotacao->ocupacao,
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
public static function autocomplete()
|
||||
{
|
||||
$usuarios = DB::table('cadastro_usuario')
|
||||
->select([
|
||||
'cadastro_usuario.id',
|
||||
DB::raw('CONCAT(cadastro_cidadao.cns, " - " ,cadastro_cidadao.nome) as cidadao_nome'),
|
||||
'cadastro_cidadao.cns AS cidadao_cns',
|
||||
'cadastro_cidadao.cpf AS cidadao_cpf',
|
||||
'cadastro_usuario.registro_numero',
|
||||
])
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
||||
->when(request()->query('infraestrutura_id'), function($query) {
|
||||
$query->whereExists(function ($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('cadastro_lotacao')
|
||||
->where('cadastro_lotacao.infraestrutura_id', request()->query('infraestrutura_id'))
|
||||
->whereExists(function ($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('sigtap.procedimento_ocupacao')
|
||||
->join('sigtap.procedimento', 'sigtap.procedimento.id', 'sigtap.procedimento_ocupacao.procedimento_id')
|
||||
->whereColumn('sigtap.procedimento_ocupacao.ocupacao_id', 'cadastro_lotacao.ocupacao_id')
|
||||
->where('sigtap.procedimento_ocupacao.competencia_id', function ($query) {
|
||||
|
||||
$query->select('sigtap.competencia.id')
|
||||
->from('sigtap.competencia')
|
||||
->orderBy('id')
|
||||
->limit(1);
|
||||
})
|
||||
->where(function ($query) {
|
||||
|
||||
if (request()->auxilio_alimentar) {
|
||||
|
||||
$query->whereExists(function ($subquery) {
|
||||
$subquery->select(DB::raw(1))
|
||||
->from('sigtap.procedimento')
|
||||
->whereIn('sigtap.procedimento.codigo', [
|
||||
Procedimento::AJUDA_DE_CUSTO_PARA_ALIMENTACAO_DE_PACIENTE_SEM_PERNOITE,
|
||||
Procedimento::AJUDA_DE_CUSTO_PARA_ALIMENTACAO_DE_ACOMPANHANTE_SEM_PERNOITE
|
||||
]);
|
||||
});
|
||||
} else {
|
||||
|
||||
$query->whereExists(function ($subquery) {
|
||||
$subquery->select(DB::raw(1))
|
||||
->from('sigtap.procedimento')
|
||||
->whereIn('sigtap.procedimento.codigo', [
|
||||
Procedimento::UNIDADE_DE_REMUNERACAO_PARA_DESLOCAMENTO_DE_PACIENTE_POR_TRANSPORTE_TERRESTRE,
|
||||
Procedimento::UNIDADE_DE_REMUNERACAO_PARA_DESLOCAMENTO_DE_ACOMPANHANTE_POR_TRANSPORTE_TERRESTRE
|
||||
]);
|
||||
});
|
||||
}
|
||||
});
|
||||
})
|
||||
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id');
|
||||
});
|
||||
})
|
||||
->whereNull('cadastro_usuario.deleted_at')
|
||||
->where('cadastro_usuario.bloqueado', '=', '0');
|
||||
|
||||
if (!DataUtil::isStringTrue(request()->query('with_not_regularized'))) {
|
||||
$usuarios->whereNotNull('cadastro_cidadao.cns');
|
||||
}
|
||||
|
||||
return $usuarios;
|
||||
}
|
||||
}
|
||||
217
api/app/Services/TransportePaciente/Ponto/PontoService.php
Normal file
217
api/app/Services/TransportePaciente/Ponto/PontoService.php
Normal file
@@ -0,0 +1,217 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Ponto;
|
||||
|
||||
use App\Exceptions\Model\DeletingModelException;
|
||||
use App\Models\Cadastro\Localizacao\LogradouroTipo;
|
||||
use App\Models\TransportePaciente\Ponto\Ponto;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class PontoService extends Service
|
||||
{
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
|
||||
return [
|
||||
'data_atual' => $now->format('d/m/Y'),
|
||||
'tiposLogradouro' => LogradouroTipo::orderBy('descricao')->get()->map(fn ($tipo) => [
|
||||
'id' => $tipo->id,
|
||||
'descricao' => $tipo->descricao,
|
||||
]),
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModelData($ponto = null)
|
||||
{
|
||||
|
||||
$ponto = [
|
||||
'id' => $ponto->id ?? null,
|
||||
'descricao' => $ponto->descricao ?? null,
|
||||
'logradouro' => $ponto->logradouro ?? null,
|
||||
'numero' => $ponto->numero ?? null,
|
||||
'bloqueado' => $ponto->bloqueado ?? null,
|
||||
'sem_numero' => $ponto && $ponto->numero == null ?? false,
|
||||
'casa_paciente' => $ponto->casa_paciente ?? null
|
||||
];
|
||||
|
||||
return $ponto;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
return Ponto::find($id);
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
|
||||
if (!request()->casa_paciente) {
|
||||
self::validate();
|
||||
}
|
||||
|
||||
return Ponto::where('id', $id)->update(request()->all());
|
||||
}
|
||||
|
||||
public static function bloquear($id)
|
||||
{
|
||||
$ponto = self::show($id);
|
||||
|
||||
return Ponto::where('id', $id)->update(['bloqueado' => $ponto->bloqueado == 1 ? 0 : 1]);
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(self::show($id)),
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
if (!request()->casa_paciente) {
|
||||
self::validate();
|
||||
}
|
||||
|
||||
return Ponto::create(request()->all())->fresh();
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
try {
|
||||
return self::show($id)->delete();
|
||||
} catch (\Throwable $th) {
|
||||
throw new DeletingModelException();
|
||||
}
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
|
||||
$pontos = DB::table('transporte_paciente_ponto')
|
||||
->leftJoin(
|
||||
'cadastro_logradouro',
|
||||
'cadastro_logradouro.id',
|
||||
'=',
|
||||
'transporte_paciente_ponto.logradouro_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'intranet.cadastro_municipio',
|
||||
'intranet.cadastro_municipio.id',
|
||||
'=',
|
||||
'cadastro_logradouro.municipio_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'intranet.cadastro_estado',
|
||||
'intranet.cadastro_estado.id',
|
||||
'=',
|
||||
'cadastro_municipio.estado_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_bairro',
|
||||
'cadastro_bairro.id',
|
||||
'=',
|
||||
'cadastro_logradouro.bairro_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_logradouro_tipo',
|
||||
'cadastro_logradouro_tipo.id',
|
||||
'=',
|
||||
'cadastro_logradouro.tipo_id'
|
||||
)
|
||||
->select(
|
||||
'transporte_paciente_ponto.id',
|
||||
DB::raw("
|
||||
CASE WHEN transporte_paciente_ponto.casa_paciente THEN
|
||||
'CASA DO PACIENTE'
|
||||
ELSE
|
||||
transporte_paciente_ponto.descricao
|
||||
END AS descricao
|
||||
"),
|
||||
DB::raw("COALESCE(cadastro_logradouro.nome, '-') AS logradouro"),
|
||||
DB::raw("
|
||||
CASE WHEN transporte_paciente_ponto.casa_paciente THEN
|
||||
'-'
|
||||
ELSE
|
||||
COALESCE(transporte_paciente_ponto.numero, 'SEM NÚMERO')
|
||||
END AS numero
|
||||
"),
|
||||
'transporte_paciente_ponto.casa_paciente',
|
||||
'transporte_paciente_ponto.bloqueado',
|
||||
DB::raw("COALESCE(cadastro_bairro.nome, '-') AS bairro"),
|
||||
DB::raw("COALESCE(intranet.cadastro_municipio.nome, '-') AS municipio"),
|
||||
DB::raw("COALESCE(intranet.cadastro_estado.nome, '-') AS estado"),
|
||||
DB::raw("COALESCE(cadastro_logradouro_tipo.descricao, '-') AS tipo"),
|
||||
DB::raw("
|
||||
CASE WHEN transporte_paciente_ponto.bloqueado THEN
|
||||
'INATIVO'
|
||||
ELSE
|
||||
'ATIVO'
|
||||
END AS status
|
||||
"),
|
||||
);
|
||||
|
||||
return datatables()
|
||||
->of($pontos)
|
||||
->filterColumn('transporte_paciente_ponto.bloqueado', function ($query, $keyword) {
|
||||
|
||||
$query->whereRaw("
|
||||
CASE WHEN transporte_paciente_ponto.bloqueado THEN
|
||||
'INATIVO'
|
||||
ELSE
|
||||
'ATIVO'
|
||||
END LIKE ?", ["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->filterColumn('transporte_paciente_ponto.numero', function ($query, $keyword) {
|
||||
|
||||
$query
|
||||
->WhereRaw(
|
||||
"CASE WHEN transporte_paciente_ponto.casa_paciente THEN
|
||||
'-'
|
||||
ELSE
|
||||
COALESCE(transporte_paciente_ponto.numero, 'SEM NÚMERO')
|
||||
END like ?",
|
||||
["%{$keyword}%"]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
return request()->validate(
|
||||
[
|
||||
'descricao' => [
|
||||
'required',
|
||||
'min:5',
|
||||
'max:100',
|
||||
Rule::unique('transporte_paciente_ponto')
|
||||
->ignore(request()->ponto)
|
||||
],
|
||||
'logradouro_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
],
|
||||
],
|
||||
[
|
||||
'descricao.unique' => 'O ponto já foi inserido anteriormente.',
|
||||
'logradouro_id.required' => 'O logradouro é obrigatório.',
|
||||
'descricao.required' => 'A descrição é obrigatória.',
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,576 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente;
|
||||
|
||||
use App\Enums\TransportePaciente\Status;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Geral\DiaSemana;
|
||||
use App\Models\Intranet\Cliente;
|
||||
use App\Models\TransportePaciente\Acompanhante;
|
||||
use App\Models\TransportePaciente\Agendar\Agendar;
|
||||
use App\Models\TransportePaciente\Parametrizacao\Parametrizacao;
|
||||
use App\Models\TransportePaciente\PreAgendamentoTransporte;
|
||||
use App\Models\TransportePaciente\Relacao;
|
||||
use App\Models\TransportePaciente\Veiculo\TipoPassageiro;
|
||||
use App\Models\TransportePaciente\Agendar\Historico;
|
||||
use App\Services\Integracao\CnsService;
|
||||
use App\Services\Service;
|
||||
use App\Services\TransportePaciente\Agendar\AgendarService;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class PreAgendamentoTransporteService extends Service
|
||||
{
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
$agendamentos = [];
|
||||
|
||||
DB::transaction(function () use (&$agendamentos) {
|
||||
foreach(request()->agendamentos as $agendamento)
|
||||
{
|
||||
$agendar = null;
|
||||
if($agendamento['acompanhante_1_id'] || $agendamento['nome1']) {
|
||||
$agendamento['acompanhante_1_id'] = Acompanhante::create([
|
||||
'usuario_id' => $agendamento['acompanhante_1_id'] ?? null,
|
||||
'relacao_id' => $agendamento['acompanhante_1_relacao'],
|
||||
'nome' =>$agendamento['nome1'] ?? null,
|
||||
'telefone' =>$agendamento['telefone1'] ?? null
|
||||
])->fresh()->id;
|
||||
}
|
||||
if($agendamento['acompanhante_2_id'] || $agendamento['nome2']) {
|
||||
$agendamento['acompanhante_2_id'] = Acompanhante::create([
|
||||
'usuario_id' => $agendamento['acompanhante_2_id'] ?? null,
|
||||
'relacao_id' => $agendamento['acompanhante_2_relacao'],
|
||||
'nome' => $agendamento['nome2'] ?? null,
|
||||
'telefone' =>$agendamento['telefone2'] ?? null
|
||||
])->fresh()->id;
|
||||
}
|
||||
$pre_agendamento = PreAgendamentoTransporte::create($agendamento)->fresh();
|
||||
if($agendamento['agendar']) {
|
||||
$agendamento['consulta_observacao'] = $agendamento['observacao'] ?? null;
|
||||
$agendamento['observacao'] = null;
|
||||
foreach($agendamento as $key => $value) {
|
||||
request()->merge([$key => $value]);
|
||||
}
|
||||
request()->merge(['pre_agendamento_id' => $pre_agendamento->id]);
|
||||
$agendar = AgendarService::store();
|
||||
}
|
||||
|
||||
$jornadaIdAgendado = $agendar ? $agendar->jornada_id : null;
|
||||
$horarioSaida = $pre_agendamento->horario_saida ? Carbon::createFromFormat('H:i:s', $pre_agendamento->horario_saida)->format('H:i') : null;
|
||||
|
||||
if (is_null($jornadaIdAgendado)) {
|
||||
array_push($agendamentos, [
|
||||
'id' => $pre_agendamento->id,
|
||||
'paciente_id' => $pre_agendamento->paciente_id,
|
||||
'municipio' => $pre_agendamento->municipio->nome,
|
||||
'municipio_id' => $pre_agendamento->municipio_id,
|
||||
'transporte_paciente_destino' => $pre_agendamento->destino->descricao_destino,
|
||||
'destino_id' => $pre_agendamento->destino_id,
|
||||
'transporte_paciente_motivo' => $pre_agendamento->motivo->descricao,
|
||||
'motivo_id' => $pre_agendamento->motivo_id,
|
||||
'pre_agendamento_data' => $pre_agendamento->data,
|
||||
'pre_agendamento_horario' => $pre_agendamento->horario,
|
||||
'acompanhante' => $pre_agendamento->acompanhante,
|
||||
'ponto_id' => $pre_agendamento->ponto->id,
|
||||
'observacao' => $pre_agendamento->observacao,
|
||||
'data_saida' => $pre_agendamento->data_saida,
|
||||
'horario_saida' => $pre_agendamento->horario_saida,
|
||||
'veiculo_id' => $pre_agendamento->veiculo_id,
|
||||
'veiculos' => AgendarService::getVeiculos(true, $pre_agendamento->data_saida, $pre_agendamento->horario_saida),
|
||||
'agendar_id' => $agendar->id ?? null,
|
||||
'veiculo_descricao' => $pre_agendamento->veiculo_descricao,
|
||||
'jornada_id' => $pre_agendamento->jornada_id,
|
||||
'jornadas' => $pre_agendamento->veiculo_id ? AgendarService::getJornadas($pre_agendamento->veiculo_id, "{$pre_agendamento->data_saida} {$horarioSaida}") : [],
|
||||
'jornada_descricao' => $pre_agendamento->jornada_descricao,
|
||||
'tipo_passageiro_id' => $pre_agendamento->tipo_passageiro_id,
|
||||
'selecionado' => false
|
||||
]);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return $agendamentos;
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
return [
|
||||
'additionals' => [
|
||||
'permissoes_atualizacao_cadastro_paciente' => self::getPermissoesAtualizacaoCadastroPaciente(),
|
||||
],
|
||||
'form' => self::getFormData($id),
|
||||
'model' => self::getModelData($id),
|
||||
'paciente' => self::getPacienteData($id),
|
||||
'agendamentos' => self::getAgendamentos($id),
|
||||
'agendados' => self::getAgendados($id),
|
||||
'items' => []
|
||||
];
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
DB::transaction(function() use($id) {
|
||||
|
||||
Agendar::where('pre_agendamento_id', $id)->update([
|
||||
'pre_agendamento_id' => null,
|
||||
'status_id' => 2,
|
||||
'acompanhante_1_id' => null,
|
||||
'acompanhante_2_id' => null
|
||||
]);
|
||||
|
||||
$preAgendamento = PreAgendamentoTransporte::find($id);
|
||||
|
||||
$preAgendamento->delete();
|
||||
|
||||
if($preAgendamento->acompanhante1) {
|
||||
|
||||
$preAgendamento->acompanhante1->delete();
|
||||
}
|
||||
if($preAgendamento->acompanhante2) {
|
||||
|
||||
$preAgendamento->acompanhante2->delete();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static function destroyAll()
|
||||
{
|
||||
foreach(request()->all() as $id) {
|
||||
self::destroy($id);
|
||||
}
|
||||
}
|
||||
|
||||
private static function getMunicipios()
|
||||
{
|
||||
return DB::table('transporte_paciente_destino as destino')
|
||||
->select('municipio.id', 'municipio.nome')
|
||||
->join('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
||||
->where('bloqueado', false)
|
||||
->groupBy('destino.municipio_id')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
$cliente = Cliente::where('link', app('config')->get('database.default'))->firstOrFail();
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
return [
|
||||
'municipios' => self::getMunicipios(),
|
||||
'pontos' => AgendarService::getPontos(),
|
||||
'destinos' => [],
|
||||
'veiculos' => [],
|
||||
'jornadas' => [],
|
||||
'agendar_transporte_jornada' => $parametrizacao->agendar_transporte_jornada ?? null,
|
||||
'dados_acompanhante' => $parametrizacao->dados_acompanhante ?? null,
|
||||
'campo_livre' => $parametrizacao->campo_livre ?? null,
|
||||
'comprovante_acompanhante' => $parametrizacao->comprovante_acompanhante ?? null,
|
||||
'veiculo_obrigatorio' => $parametrizacao->veiculo ?? null,
|
||||
'mensagem_protocolo' => $parametrizacao->mensagem_protocolo ?? null,
|
||||
'dias_semana' => DiaSemana::get()->map(fn($dia) => [
|
||||
'id' => $dia->id,
|
||||
'descricao' => $dia->descricao,
|
||||
'disabled' => true,
|
||||
]),
|
||||
'tipos_passageiro' => TipoPassageiro::get(),
|
||||
'acompanhante' => [
|
||||
['value' => 0, 'text' => 'Nenhum'],
|
||||
['value' => 1, 'text' => '1'],
|
||||
['value' => 2, 'text' => '2'],
|
||||
],
|
||||
'relacoes' => Relacao::get(),
|
||||
'status' => [
|
||||
['value' => true, 'text' => 'Agendados'],
|
||||
['value' => false, 'text' => 'Não agendados'],
|
||||
],
|
||||
'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,
|
||||
'unidade' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'unidadeTelefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone)
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModelData($id)
|
||||
{
|
||||
return [
|
||||
'id' => null,
|
||||
'paciente_id' => $id,
|
||||
'motivo' => null,
|
||||
'horario' => null,
|
||||
'diasSemana' => [],
|
||||
'tipo_passageiro_id' => null,
|
||||
'periodo' => [
|
||||
'start' => null,
|
||||
'end' => null,
|
||||
],
|
||||
'busca' => [
|
||||
'start' => null,
|
||||
'end' => null,
|
||||
],
|
||||
'status' => null,
|
||||
'data_inicial' => null,
|
||||
'data_final' => null,
|
||||
'municipio' => null,
|
||||
'destino_id' => null,
|
||||
'acompanhante' => 0,
|
||||
'acompanhante1' => null,
|
||||
'nome1' => null,
|
||||
'relacao1' => null,
|
||||
'acompanhante2' => null,
|
||||
'nome2' => null,
|
||||
'relacao2' => null,
|
||||
'ponto_id' => null,
|
||||
'observacao' => null,
|
||||
'hora_saida' => null,
|
||||
'veiculo_id' => null,
|
||||
'jornada_id' => null,
|
||||
'min_date' => Carbon::now()->format('d/m/Y'),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getPacienteData($id)
|
||||
{
|
||||
$paciente = Paciente::find($id);
|
||||
$responsavel = Lotacao::find($paciente->created_lotacao_id);
|
||||
return [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'telefones' => $paciente->cidadao->telefones ? join(', ', $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all()) : null,
|
||||
'sexo' => $paciente->cidadao->sexo,
|
||||
'cpf' => $paciente->cidadao->cpf,
|
||||
'data_nascimento' => $paciente->cidadao->data_nascimento,
|
||||
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? null,
|
||||
'cns' => $paciente->cidadao->cns,
|
||||
'idade' => $paciente->cidadao->idade,
|
||||
'classificacao' => $paciente->classificacao->nome,
|
||||
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
|
||||
'endereco' => $paciente->cidadao->domicilio->endereco ?? null,
|
||||
'classificacao' => $paciente->classificacao->descricao,
|
||||
'responsavel_cadastro' => $responsavel->usuario->cidadao->nome ?? null
|
||||
];
|
||||
}
|
||||
|
||||
private static function getAgendados($id)
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte')
|
||||
->join(
|
||||
'transporte_paciente_motivo_viagem_procedimento',
|
||||
'transporte_paciente_agendar_transporte.motivo_id',
|
||||
'transporte_paciente_motivo_viagem_procedimento.id'
|
||||
)
|
||||
->leftJoin(
|
||||
'intranet.cadastro_municipio',
|
||||
'transporte_paciente_agendar_transporte.municipio_id',
|
||||
'intranet.cadastro_municipio.id'
|
||||
)
|
||||
->leftJoin(
|
||||
'transporte_paciente_destino',
|
||||
'transporte_paciente_agendar_transporte.destino_id',
|
||||
'transporte_paciente_destino.id'
|
||||
)
|
||||
->leftJoin(
|
||||
'transporte_paciente_veiculo',
|
||||
'transporte_paciente_agendar_transporte.veiculo_id',
|
||||
'transporte_paciente_veiculo.id'
|
||||
)
|
||||
->leftJoin(
|
||||
'transporte_paciente_jornada',
|
||||
'transporte_paciente_agendar_transporte.jornada_id',
|
||||
'transporte_paciente_jornada.id'
|
||||
)
|
||||
->select(
|
||||
'transporte_paciente_agendar_transporte.data',
|
||||
'transporte_paciente_agendar_transporte.motivo_id',
|
||||
'transporte_paciente_motivo_viagem_procedimento.descricao as motivo_descricao',
|
||||
'transporte_paciente_agendar_transporte.veiculo_id',
|
||||
DB::raw("CONCAT(transporte_paciente_veiculo.numero_placa, ' - ', transporte_paciente_veiculo.descricao_modelo) as veiculo_descricao"),
|
||||
'cadastro_municipio.nome as municipio',
|
||||
'transporte_paciente_destino.descricao_destino as destino',
|
||||
DB::raw("DATE_FORMAT(transporte_paciente_agendar_transporte.horario, '%H:%i') as horario"),
|
||||
'transporte_paciente_agendar_transporte.observacao',
|
||||
DB::raw("CONCAT(
|
||||
DATE_FORMAT(transporte_paciente_jornada.data_inicial, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
DATE_FORMAT(transporte_paciente_jornada.data_final, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
transporte_paciente_jornada.id
|
||||
) as jornada_descricao")
|
||||
)
|
||||
->where('transporte_paciente_agendar_transporte.paciente_id', $id)
|
||||
->where('transporte_paciente_agendar_transporte.data', '>=', Carbon::now()->format('Y-m-d'))
|
||||
->whereNull('transporte_paciente_agendar_transporte.jornada_id')
|
||||
->whereNotIn('status_id', [Status::CANCELADO, Status::TRANSPORTADO])
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getAgendamentos($id)
|
||||
{
|
||||
$agendamentos = DB::table('transporte_paciente_pre_agendamento_transporte as agendamento')
|
||||
->select(
|
||||
'agendamento.id',
|
||||
'agendar.status_id',
|
||||
'agendamento.paciente_id',
|
||||
'municipio.nome as municipio',
|
||||
'municipio.id as municipio_id',
|
||||
'destino.descricao_destino as transporte_paciente_destino',
|
||||
'destino.id as destino_id',
|
||||
'motivo.descricao as transporte_paciente_motivo',
|
||||
'motivo.id as motivo_id',
|
||||
'agendamento.data as pre_agendamento_data',
|
||||
'agendamento.horario as pre_agendamento_horario',
|
||||
'agendamento.acompanhante',
|
||||
'acompanhante1.usuario_id as acompanhante1',
|
||||
'acompanhante1.relacao_id as relacao1',
|
||||
'acompanhante2.usuario_id as acompanhante2',
|
||||
'acompanhante2.relacao_id as relacao2',
|
||||
'agendamento.ponto_id',
|
||||
'agendamento.observacao',
|
||||
'agendamento.data_saida',
|
||||
'agendamento.horario_saida',
|
||||
'agendamento.tipo_passageiro_id',
|
||||
'agendamento.veiculo_id',
|
||||
'agendar.id as agendar_id',
|
||||
DB::raw("CONCAT(veiculo.numero_placa, ' - ', veiculo.descricao_modelo) as veiculo_descricao"),
|
||||
'agendamento.jornada_id',
|
||||
DB::raw("CONCAT(DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'), ' - ', DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i'), ' - ', jornada.id) as jornada_descricao"),
|
||||
)
|
||||
->leftJoin('intranet.cadastro_municipio as municipio', 'agendamento.municipio_id', 'municipio.id')
|
||||
->leftJoin('transporte_paciente_destino as destino', 'agendamento.destino_id', 'destino.id')
|
||||
->leftJoin('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendamento.motivo_id', 'motivo.id')
|
||||
->leftJoin('transporte_paciente_veiculo as veiculo', 'agendamento.veiculo_id', 'veiculo.id')
|
||||
->leftJoin('transporte_paciente_jornada as jornada', 'agendamento.jornada_id', 'jornada.id')
|
||||
->leftJoin('transporte_paciente_acompanhante as acompanhante1','acompanhante1.id', 'agendamento.acompanhante_1_id')
|
||||
->leftJoin('transporte_paciente_acompanhante as acompanhante2','acompanhante2.id', 'agendamento.acompanhante_2_id')
|
||||
->leftJoin('transporte_paciente_agendar_transporte as agendar', 'agendar.pre_agendamento_id', 'agendamento.id')
|
||||
->where('agendamento.paciente_id', $id)
|
||||
->where('agendamento.data', '>=', Carbon::now()->format('Y-m-d'))
|
||||
->whereNull('agendar.jornada_id')
|
||||
->when(request()->query('status'), function ($query) {
|
||||
|
||||
if (request()->query('status') == 'true') {
|
||||
$query->whereNotNull('agendar.id');
|
||||
} else {
|
||||
$query->whereNull('agendar.id');
|
||||
}
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->whereNotIn('agendar.status_id', [Status::CANCELADO, Status::TRANSPORTADO])
|
||||
->orWhereNull('agendar.status_id');
|
||||
})
|
||||
->orderBy('agendamento.data')
|
||||
->orderBy('agendamento.horario')
|
||||
->get();
|
||||
|
||||
$agendamentos->transform(function ($agendamento) {
|
||||
|
||||
if (!is_null($agendamento->horario_saida)) {
|
||||
|
||||
$preAgendado = true;
|
||||
$data_saida = $agendamento->data_saida;
|
||||
$horario_saida = $agendamento->horario_saida;
|
||||
|
||||
$agendamento->veiculos = AgendarService::getVeiculos($preAgendado, $data_saida, $horario_saida);
|
||||
|
||||
if (!is_null($agendamento->veiculo_id)) {
|
||||
|
||||
$data_saida = $agendamento->data_saida;
|
||||
$horarioSaida = Carbon::createFromFormat('H:i:s', $agendamento->horario_saida)->format('H:i');
|
||||
$idVeiculo = $agendamento->veiculo_id;
|
||||
|
||||
$agendamento->jornadas = AgendarService::getJornadas($idVeiculo, "{$data_saida} {$horarioSaida}");
|
||||
}
|
||||
}
|
||||
|
||||
return $agendamento;
|
||||
});
|
||||
|
||||
return $agendamentos;
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
$validations = [
|
||||
'agendamentos.*.paciente_id' => [
|
||||
'required',
|
||||
'exists:cadastro_paciente,id'
|
||||
],
|
||||
'agendamentos.*.motivo_id' => [
|
||||
'required',
|
||||
'exists:transporte_paciente_motivo_viagem_procedimento,id'
|
||||
],
|
||||
'agendamentos.*.horario' => [
|
||||
'required',
|
||||
],
|
||||
'agendamentos.*.data' => [
|
||||
'required',
|
||||
'date',
|
||||
],
|
||||
'agendamentos.*.municipio_id' => [
|
||||
'required',
|
||||
'exists:intranet.cadastro_municipio,id'
|
||||
],
|
||||
'agendamentos.*.destino_id' => [
|
||||
'required',
|
||||
'exists:transporte_paciente_destino,id'
|
||||
],
|
||||
'agendamentos.*.acompanhante' => [
|
||||
'required',
|
||||
'integer',
|
||||
],
|
||||
'agendamentos.*.ponto_id' => [
|
||||
'required',
|
||||
'exists:transporte_paciente_ponto,id'
|
||||
],
|
||||
'agendamentos.*.observacao' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:200',
|
||||
],
|
||||
];
|
||||
|
||||
$messages = [
|
||||
'agendamentos.*.paciente_id.required' => 'O paciente selecionado é inválido.',
|
||||
'agendamentos.*.paciente_id.exists' => 'O paciente selecionado é inválido',
|
||||
'agendamentos.*.motivo_id.required' => 'O campo motivo é obrigatório.',
|
||||
'agendamentos.*.motivo_id.exists' => 'O campo motivo selecionado é inválido.',
|
||||
'agendamentos.*.horario.required' => 'O campo horario é obrigatório.',
|
||||
'agendamentos.*.data.required' => 'O campo data é obrigatório.',
|
||||
'agendamentos.*.data.date' => 'O campo data não é válido.',
|
||||
'agendamentos.*.municipio_id.required' =>'O campo municipio é obrigatório.',
|
||||
'agendamentos.*.municipio_id.exists' =>'O campo municipio selecionado é inválido.',
|
||||
'agendamentos.*.destino_id.required' => 'O campo destino é obrigatório.',
|
||||
'agendamentos.*.destino_id.exists' => 'O campo destino selecionado é inválido.',
|
||||
'agendamentos.*.acompanhante.required' => 'O campo acompanhante é obrigatório.',
|
||||
'agendamentos.*.ponto_id.required' => 'O campo ponto referencia é obrigatório.',
|
||||
'agendamentos.*.ponto_id.exists' => 'O campo ponto referencia selecionado é inválido.',
|
||||
'agendamentos.*.observacao.max' => 'O campo observação não pode ser superior a :max caracteres.',
|
||||
'agendamentos.*.hora_saida.required' => 'O campo hora saida é obrigatório.',
|
||||
'agendamentos.*.veiculo_id.required' => 'O campo veiculo é obrigatório.',
|
||||
'agendamentos.*.veiculo_id.exists' => 'O campo veiculo selecionado é inválido.',
|
||||
'agendamentos.*.jornada_id.required' => 'O campo jornada é obrigatório.',
|
||||
'agendamentos.*.jornada_id.exists' => 'O campo jornada selecionado é inválido.',
|
||||
'agendamentos.*.horario_saida.required' => 'O campo hora saida é obrigatório.',
|
||||
'agendamentos.*.veiculo_id.required' => 'O campo veiculo é obrigatório.',
|
||||
'agendamentos.*.veiculo_id.exists' => 'O campo veiculo selecionado é inválido.',
|
||||
'agendamentos.*.jornada_id.required' => 'O campo jornada é obrigatório.',
|
||||
'agendamentos.*.jornada_id.exists' => 'O campo jornada selecionado é inválido.',
|
||||
];
|
||||
|
||||
return request()->validate($validations, $messages);
|
||||
}
|
||||
|
||||
public static function search()
|
||||
{
|
||||
return DB::table('transporte_paciente_pre_agendamento_transporte as agendamento')
|
||||
->select(
|
||||
'agendamento.id',
|
||||
'agendar.status_id',
|
||||
'agendamento.paciente_id',
|
||||
'municipio.nome as municipio',
|
||||
'municipio.id as municipio_id',
|
||||
'destino.descricao_destino as transporte_paciente_destino',
|
||||
'destino.id as destino_id',
|
||||
'motivo.descricao as transporte_paciente_motivo',
|
||||
'motivo.id as motivo_id',
|
||||
'agendamento.data as pre_agendamento_data',
|
||||
'agendamento.horario as pre_agendamento_horario',
|
||||
'agendamento.acompanhante',
|
||||
'acompanhante1.usuario_id as acompanhante1',
|
||||
'acompanhante1.relacao_id as relacao1',
|
||||
'acompanhante2.usuario_id as acompanhante2',
|
||||
'acompanhante2.relacao_id as relacao2',
|
||||
'agendamento.ponto_id',
|
||||
'agendamento.observacao',
|
||||
'agendamento.data_saida',
|
||||
'agendamento.horario_saida',
|
||||
'agendamento.tipo_passageiro_id',
|
||||
'agendamento.veiculo_id',
|
||||
'agendar.id as agendar_id',
|
||||
DB::raw("CONCAT(veiculo.numero_placa, ' - ', veiculo.descricao_modelo) as veiculo_descricao"),
|
||||
'agendamento.jornada_id',
|
||||
DB::raw("CONCAT(DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'), ' - ', DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i'), ' - ', jornada.id) as jornada_descricao"),
|
||||
)
|
||||
->leftJoin('intranet.cadastro_municipio as municipio', 'agendamento.municipio_id', 'municipio.id')
|
||||
->leftJoin('transporte_paciente_destino as destino', 'agendamento.destino_id', 'destino.id')
|
||||
->leftJoin('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendamento.motivo_id', 'motivo.id')
|
||||
->leftJoin('transporte_paciente_veiculo as veiculo', 'agendamento.veiculo_id', 'veiculo.id')
|
||||
->leftJoin('transporte_paciente_jornada as jornada', 'agendamento.jornada_id', 'jornada.id')
|
||||
->leftJoin('transporte_paciente_acompanhante as acompanhante1','acompanhante1.id', 'agendamento.acompanhante_1_id')
|
||||
->leftJoin('transporte_paciente_acompanhante as acompanhante2','acompanhante2.id', 'agendamento.acompanhante_2_id')
|
||||
->leftJoin('transporte_paciente_agendar_transporte as agendar', 'agendar.pre_agendamento_id', 'agendamento.id')
|
||||
->where('agendamento.paciente_id', request()->paciente_id)
|
||||
->where('agendamento.data', '>=', request()->data_inicial)
|
||||
->where('agendamento.data', '<=', request()->data_final)
|
||||
->whereNull('agendar.jornada_id')
|
||||
->when(request()->query('status'), function ($query) {
|
||||
|
||||
if (request()->query('status') == 'true') {
|
||||
$query->whereNotNull('agendar.id');
|
||||
} else {
|
||||
$query->whereNull('agendar.id');
|
||||
}
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->whereNotIn('agendar.status_id', [Status::CANCELADO])
|
||||
->orWhereNull('agendar.status_id');
|
||||
})
|
||||
->orderBy('agendamento.data')
|
||||
->orderBy('agendamento.horario')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function update()
|
||||
{
|
||||
foreach(request()->all() as $value){
|
||||
$pre_agendamento = PreAgendamentoTransporte::find($value['id']);
|
||||
$pre_agendamento->horario_saida = $value['horario_saida'];
|
||||
$pre_agendamento->data_saida = $value['data_saida'];
|
||||
$pre_agendamento->save();
|
||||
}
|
||||
}
|
||||
|
||||
private static function getPermissoesAtualizacaoCadastroPaciente()
|
||||
{
|
||||
$parametrizacao = CnsService::getParametrizacao();
|
||||
|
||||
if (!is_null($parametrizacao)) {
|
||||
$lotacao = self::getCurrentLotacao();
|
||||
|
||||
return DB::table('cadastro_parametrizacao_permissao_usuario')
|
||||
->select([
|
||||
'municipe',
|
||||
'provisorio',
|
||||
'outro_municipio',
|
||||
])
|
||||
->where('infraestrutura_id', $lotacao->infraestrutura_id)
|
||||
->where('usuario_id', $lotacao->usuario_id)
|
||||
->get()
|
||||
->first();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
154
api/app/Services/TransportePaciente/PrestacaoContaService.php
Normal file
154
api/app/Services/TransportePaciente/PrestacaoContaService.php
Normal file
@@ -0,0 +1,154 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente;
|
||||
|
||||
use App\Enums\TransportePaciente\ViagemStatus;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class PrestacaoContaService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
return [
|
||||
'model' => [
|
||||
'data_inicial' => null,
|
||||
'data_final' => null,
|
||||
'motorista' => null,
|
||||
'destino' => null,
|
||||
'veiculo' => null,
|
||||
],
|
||||
'form' => [
|
||||
'veiculos' => null,
|
||||
'motoristas' => null,
|
||||
'destinos' => null,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function getVeiculos()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'agendar.veiculo_id')
|
||||
->select(
|
||||
'veiculo.id',
|
||||
DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) as identificacao_veiculo'),
|
||||
)
|
||||
->join('transporte_paciente_viagem as viagem','viagem.id', 'agendar.viagem_id')
|
||||
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
||||
->where('viagem.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('viagem.data_chegada', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->where('veiculo.bloqueado', false)
|
||||
->orderBy('identificacao_veiculo')
|
||||
->groupBy('veiculo.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getMotoristas()
|
||||
{
|
||||
return DB::table('transporte_paciente_condutor as condutor')
|
||||
->select('condutor.id', 'cidadao.nome')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('transporte_paciente_viagem as viagem', 'condutor.id', 'viagem.condutor_id')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
||||
->where('viagem.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('viagem.data_chegada', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->when(request()->veiculo, function($query) {
|
||||
$query->where('viagem.veiculo_id', request()->veiculo);
|
||||
})
|
||||
->orderBy('cidadao.nome')
|
||||
->groupBy('condutor.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getDestinos()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->join('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id')
|
||||
->select('destino.id', 'destino.descricao_destino as descricao')
|
||||
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
||||
->where('viagem.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('viagem.data_chegada', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->when(request()->veiculo, function($query) {
|
||||
$query->where('viagem.veiculo_id', request()->veiculo);
|
||||
})
|
||||
->when(request()->motorista, function($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->groupBy('destino.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$consulta = DB::table('transporte_paciente_viagem as viagem')
|
||||
->select(
|
||||
'viagem.id',
|
||||
'viagem.km_saida',
|
||||
'viagem.km_chegada',
|
||||
DB::raw('viagem.km_chegada - viagem.km_saida as km_percorrido'),
|
||||
'diaria',
|
||||
'refeicao',
|
||||
'pernoite',
|
||||
'pedagio',
|
||||
'combustivel',
|
||||
'outras_despesas',
|
||||
'descricao_outras_despesas',
|
||||
'cidadao.id', 'cidadao.nome as motorista',
|
||||
'viagem.total_despesa',
|
||||
'agendar.destino_id', 'destino.descricao_destino as destino',
|
||||
'condutor.id as id_condutor',
|
||||
'viagem.id as id_viagem',
|
||||
'veiculo.id',
|
||||
DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) as identificacao_veiculo'),
|
||||
DB::raw('CONCAT(
|
||||
COALESCE(DATE_FORMAT(viagem.data, "%d/%m/%Y"), "-"),
|
||||
" ",
|
||||
COALESCE(DATE_FORMAT(viagem.horario_saida_real, "%H:%i"), "")
|
||||
) AS data_horario_partida'),
|
||||
DB::raw('CONCAT(
|
||||
COALESCE(DATE_FORMAT(viagem.data_chegada, "%d/%m/%Y"), "-"),
|
||||
" ",
|
||||
COALESCE(DATE_FORMAT(viagem.horario_chegada, "%H:%i"), "")
|
||||
) AS data_horario_chegada')
|
||||
)
|
||||
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'viagem.veiculo_id')
|
||||
->join('transporte_paciente_condutor as condutor', 'condutor.id', 'viagem.condutor_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
||||
->where('viagem.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('viagem.data', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->when(request()->veiculo, function($query) {
|
||||
$query->where('viagem.veiculo_id', request()->veiculo);
|
||||
})
|
||||
->when(request()->motorista, function($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->when(request()->destino, function($query) {
|
||||
$query->where('destino.id', request()->destino);
|
||||
})
|
||||
->orderByDesc('viagem.data')
|
||||
->groupBy('viagem.id')
|
||||
->get();
|
||||
|
||||
$totalizadores = [
|
||||
'total_diaria' => $consulta->sum('diaria'),
|
||||
'total_refeicao' => $consulta->sum('refeicao'),
|
||||
'total_pernoite' => $consulta->sum('pernoite'),
|
||||
'total_pedagio' => $consulta->sum('pedagio'),
|
||||
'total_combustivel' => $consulta->sum('combustivel'),
|
||||
'total_outras_despesas' => $consulta->sum('outras_despesas'),
|
||||
'total_despesa' => $consulta->sum('total_despesa'),
|
||||
'total_km_percorrido' => $consulta->sum('km_percorrido'),
|
||||
];
|
||||
|
||||
return ['consulta' => $consulta, 'totalizadores' => $totalizadores];
|
||||
}
|
||||
}
|
||||
287
api/app/Services/TransportePaciente/QuantitativoService.php
Normal file
287
api/app/Services/TransportePaciente/QuantitativoService.php
Normal file
@@ -0,0 +1,287 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente;
|
||||
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class QuantitativoService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('d/m/Y');
|
||||
|
||||
return [
|
||||
'model' => [
|
||||
'periodo' => [
|
||||
'start' => null,
|
||||
'end' => null,
|
||||
],
|
||||
'veiculo' => null,
|
||||
'municipio' => null,
|
||||
'destino' => null,
|
||||
'motivo' => null,
|
||||
'protocolo' => null
|
||||
],
|
||||
'form' => [
|
||||
'periodo' => [
|
||||
'start' => null,
|
||||
'end' => null,
|
||||
],
|
||||
'veiculos' => null,
|
||||
'municipios' => null,
|
||||
'destinos' => null,
|
||||
'motivos' => null,
|
||||
],
|
||||
'additionals' => [
|
||||
'periodo_min_date' => $now->copy()->subYears(130)->format('d/m/Y'),
|
||||
'current_date' => $now->format('d/m/Y')
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function getLoadFields(Request $request)
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$veiculos = DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'veiculo.id',
|
||||
DB::raw("CONCAT(veiculo.numero_placa, ' - ', veiculo.descricao_modelo) AS descricao_veiculo")
|
||||
)
|
||||
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'agendar.veiculo_id')
|
||||
->leftJoin('transporte_paciente_veiculo_marca as marca', 'marca.id', 'veiculo.marca_id')
|
||||
->where('veiculo.bloqueado', false)
|
||||
->orderBy('veiculo.numero_placa')
|
||||
->groupBy(['veiculo.id',]);
|
||||
|
||||
if ($request->periodo) {
|
||||
|
||||
$veiculos->where('data', '>=', $request->periodo['start']);
|
||||
$veiculos->where('data', '<=', $request->periodo['end']);
|
||||
} else {
|
||||
|
||||
$veiculos->where('data', $currentDate);
|
||||
}
|
||||
|
||||
$veiculos = $veiculos->get();
|
||||
|
||||
$municipios = DB::table('intranet.cadastro_municipio as municipio')
|
||||
->select([
|
||||
'municipio.id',
|
||||
'municipio.nome',
|
||||
'agendar.veiculo_id'
|
||||
])
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.municipio_id', 'municipio.id')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'agendar.veiculo_id')
|
||||
->orderBy('municipio.nome')
|
||||
->groupBy([
|
||||
'municipio.id',
|
||||
]);
|
||||
|
||||
if ($request->periodo) {
|
||||
|
||||
$municipios->where('data', '>=', $request->periodo['start']);
|
||||
$municipios->where('data', '<=', $request->periodo['end']);
|
||||
} else {
|
||||
|
||||
$municipios->where('data', $currentDate);
|
||||
}
|
||||
|
||||
if ($request->veiculo) {
|
||||
|
||||
$municipios->where('agendar.veiculo_id', $request->veiculo);
|
||||
}
|
||||
|
||||
$municipios = $municipios->get();
|
||||
|
||||
$destinos = DB::table('transporte_paciente_destino as destino')
|
||||
->select([
|
||||
'destino.id',
|
||||
'destino.descricao_destino as descricao',
|
||||
'agendar.veiculo_id',
|
||||
'agendar.municipio_id',
|
||||
])
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.destino_id', 'destino.id')
|
||||
->join('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id')
|
||||
->orderBy('destino.descricao_destino')
|
||||
->groupBy(['destino.id']);
|
||||
|
||||
if ($request->periodo) {
|
||||
|
||||
$destinos->where('agendar.data', '>=', $request->periodo['start']);
|
||||
$destinos->where('agendar.data', '<=', $request->periodo['end']);
|
||||
} else {
|
||||
|
||||
$destinos->where('agendar.data', $currentDate);
|
||||
}
|
||||
|
||||
if ($request->veiculo) {
|
||||
|
||||
$destinos->where('agendar.veiculo_id', $request->veiculo);
|
||||
}
|
||||
|
||||
if ($request->municipio) {
|
||||
|
||||
$destinos->where('agendar.municipio_id', $request->municipio);
|
||||
}
|
||||
|
||||
$destinos = $destinos->get();
|
||||
|
||||
$motivos = DB::table('transporte_paciente_motivo_viagem_procedimento as motivo')
|
||||
->select([
|
||||
'motivo.id',
|
||||
'motivo.descricao',
|
||||
'agendar.motivo_id',
|
||||
'agendar.veiculo_id',
|
||||
'agendar.municipio_id',
|
||||
'agendar.destino_id',
|
||||
])
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.motivo_id', 'motivo.id')
|
||||
->join('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id')
|
||||
->orderBy('motivo.descricao')
|
||||
->groupBy(['motivo.id']);
|
||||
|
||||
if ($request->periodo) {
|
||||
|
||||
$motivos->where('agendar.data', '>=', $request->periodo['start']);
|
||||
$motivos->where('agendar.data', '<=', $request->periodo['end']);
|
||||
} else {
|
||||
|
||||
$motivos->where('agendar.data', $currentDate);
|
||||
}
|
||||
|
||||
if ($request->veiculo) {
|
||||
|
||||
$motivos->where('agendar.veiculo_id', $request->veiculo);
|
||||
}
|
||||
|
||||
if ($request->municipio) {
|
||||
|
||||
$motivos->where('agendar.municipio_id', $request->municipio);
|
||||
}
|
||||
|
||||
if ($request->destino) {
|
||||
|
||||
$motivos->where('agendar.destino_id', $request->destino);
|
||||
}
|
||||
|
||||
$motivos = $motivos->get();
|
||||
|
||||
return [
|
||||
'form' => [
|
||||
'periodo' => [
|
||||
'start' => $currentDate,
|
||||
'end' => $currentDate,
|
||||
],
|
||||
'data_atual' => Carbon::now()->format('d/m/Y'),
|
||||
],
|
||||
'model' => [
|
||||
'veiculos' => $veiculos->map(fn ($veiculo) => [
|
||||
'id' => $veiculo->id,
|
||||
'descricao_veiculo' => $veiculo->descricao_veiculo
|
||||
]),
|
||||
'municipios' => $municipios->map(fn ($municipio) => [
|
||||
'id' => $municipio->id,
|
||||
'nome' => $municipio->nome,
|
||||
'veiculo_id' => $municipio->veiculo_id,
|
||||
]),
|
||||
'destinos' => $destinos->map(fn ($destino) => [
|
||||
'id' => $destino->id,
|
||||
'descricao' => $destino->descricao,
|
||||
'veiculo_id' => $destino->veiculo_id,
|
||||
'municipio_id' => $destino->municipio_id,
|
||||
]),
|
||||
'motivos' => $motivos->map(fn ($motivo) => [
|
||||
'id' => $motivo->id,
|
||||
'descricao' => $motivo->descricao,
|
||||
'motivo_id' => $motivo->motivo_id,
|
||||
'veiculo_id' => $motivo->veiculo_id,
|
||||
'municipio_id' => $motivo->municipio_id,
|
||||
]),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function list(Request $request)
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$consulta = DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'agendar.acompanhante',
|
||||
'agendar.veiculo_id',
|
||||
'municipio.nome as municipio',
|
||||
'destino.descricao_destino as destino',
|
||||
'motivo.descricao as motivo_descricao',
|
||||
DB::raw("CONCAT(DATE_FORMAT(agendar.data, '%d/%m/%Y'), ' - ', DATE_FORMAT(agendar.horario, '%H:%i')) as hora_agendamento"),
|
||||
DB::raw("CONCAT(veiculo.numero_placa, ' - ', veiculo.descricao_modelo) AS descricao_veiculo"),
|
||||
DB::raw('COUNT(*) as total_paciente'),
|
||||
DB::raw('SUM(IFNULL(agendar.acompanhante, 0)) AS quantidade_acompanhantes'),
|
||||
DB::raw('SUM(IFNULL(agendar.acompanhante, 0) + 1) AS quantidade_paciente_acompanhante'),
|
||||
DB::raw('IF(viagem.protocolo IS NOT NULL, viagem.protocolo, "-") AS protocolo')
|
||||
)
|
||||
->leftJoin('transporte_paciente_veiculo as veiculo', 'agendar.veiculo_id', 'veiculo.id')
|
||||
->leftJoin('transporte_paciente_veiculo_marca as marca', 'marca.id', 'veiculo.marca_id')
|
||||
->leftJoin('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'agendar.municipio_id', 'municipio.id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->join('transporte_paciente_motivo_viagem_procedimento as motivo', 'motivo.id', 'agendar.motivo_id')
|
||||
->groupBy(
|
||||
'agendar.veiculo_id',
|
||||
'municipio.nome',
|
||||
'destino.descricao_destino',
|
||||
'motivo.descricao',
|
||||
DB::raw("CONCAT(DATE_FORMAT(agendar.data, '%d/%m/%Y'), ' - ', DATE_FORMAT(agendar.horario, '%H:%i'))")
|
||||
)
|
||||
->orderBy('agendar.data');
|
||||
|
||||
if ($request->periodo) {
|
||||
|
||||
$consulta->where('agendar.data', '>=', $request->periodo['start']);
|
||||
$consulta->where('agendar.data', '<=', $request->periodo['end']);
|
||||
} else {
|
||||
|
||||
$consulta->where('agendar.data', $currentDate);
|
||||
}
|
||||
|
||||
if ($request->veiculo) {
|
||||
|
||||
$consulta->where('agendar.veiculo_id', $request->veiculo);
|
||||
}
|
||||
|
||||
if ($request->municipio) {
|
||||
|
||||
$consulta->where('agendar.municipio_id', $request->municipio);
|
||||
}
|
||||
|
||||
if ($request->destino) {
|
||||
|
||||
$consulta->where('agendar.destino_id', $request->destino);
|
||||
}
|
||||
|
||||
if ($request->motivo) {
|
||||
|
||||
$consulta->where('agendar.motivo_id', $request->motivo);
|
||||
}
|
||||
|
||||
if(request()->protocolo) {
|
||||
$consulta->where('viagem.protocolo', request()->protocolo);
|
||||
}
|
||||
|
||||
$consulta = $consulta->get();
|
||||
|
||||
$totalizadores = [
|
||||
'total_paciente' => $consulta->sum('total_paciente'),
|
||||
'total_acompanhantes' => $consulta->sum('quantidade_acompanhantes'),
|
||||
'total_paciente_acompanhante' => $consulta->sum('quantidade_paciente_acompanhante'),
|
||||
];
|
||||
|
||||
return ['consulta' => $consulta, 'totalizadores' => $totalizadores];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Reabertura;
|
||||
|
||||
use App\Enums\TransportePaciente\Status;
|
||||
use App\Enums\TransportePaciente\ViagemStatus;
|
||||
use App\Models\TransportePaciente\Agendar\Agendar;
|
||||
use App\Models\TransportePaciente\Faturamento\Faturamento;
|
||||
use App\Models\TransportePaciente\Viagem;
|
||||
use App\Services\Service;
|
||||
use App\Services\TransportePaciente\Agendar\HistoricoService;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ReaberturaViagemService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
return [
|
||||
'model' => [
|
||||
'data_inicial' => null,
|
||||
'data_final' => null,
|
||||
'cidade' => null,
|
||||
'destino' => null
|
||||
],
|
||||
'form' => [
|
||||
'cidades' => [],
|
||||
'destinos' => []
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->leftJoin('transporte_paciente_veiculo as veiculo','viagem.veiculo_id', 'veiculo.id')
|
||||
->leftJoin('transporte_paciente_condutor as condutor', 'condutor.id', 'viagem.condutor_id')
|
||||
->leftJoin('cadastro_usuario as usuario', 'condutor.usuario_id', 'usuario.id')
|
||||
->leftJoin('cadastro_cidadao as cidadao', 'usuario.cidadao_id', 'cidadao.id')
|
||||
->leftJoin('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->leftJoin('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->leftJoin('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.municipio_id')
|
||||
->select(
|
||||
'viagem.id',
|
||||
'viagem.data',
|
||||
DB::raw('GROUP_CONCAT(DISTINCT municipio.nome) as cidade'),
|
||||
DB::raw('GROUP_CONCAT(DISTINCT descricao_destino) as destino'),
|
||||
'viagem.protocolo',
|
||||
'cidadao.nome as motorista',
|
||||
DB::raw('CONCAT(veiculo.numero_placa," - ",veiculo.descricao_modelo) AS veiculo'),
|
||||
)
|
||||
->where('viagem.data' ,'>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('viagem.data', '<=', Carbon::parse(request()->data_final)->format('Y-m-d'))
|
||||
->when(request()->cidade, function($query){
|
||||
$query->where('municipio.id', request()->cidade);
|
||||
})
|
||||
->when(request()->destino, function($query){
|
||||
$query->where('destino.id', request()->destino);
|
||||
})
|
||||
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
||||
->groupBy('viagem.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function reopen($id)
|
||||
{
|
||||
$viagem = Viagem::find($id);
|
||||
$viagem->status_id = ViagemStatus::ABERTO;
|
||||
$viagem->save();
|
||||
|
||||
$agendamentos = Agendar::where('viagem_id', $viagem->id)->get();
|
||||
foreach($agendamentos as $agendamento) {
|
||||
$agendamento->status_id = Status::AGENDADO;
|
||||
$agendamento->save();
|
||||
HistoricoService::create($agendamento, Status::AGENDADO, $agendamento->updated_lotacao_id);
|
||||
Faturamento::where('agendamento_id', $agendamento->id)->delete();
|
||||
}
|
||||
}
|
||||
|
||||
public static function getCidades()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.municipio_id')
|
||||
->select('municipio.id', 'municipio.nome')
|
||||
->where('viagem.data' ,'>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('viagem.data', '<=', Carbon::parse(request()->data_final)->format('Y-m-d'))
|
||||
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
||||
->groupBy('municipio.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getDestinos()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.municipio_id')
|
||||
->select('destino.id', 'destino.descricao_destino as descricao')
|
||||
->where('viagem.data' ,'>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('viagem.data', '<=', Carbon::parse(request()->data_final)->format('Y-m-d'))
|
||||
->where('municipio.id', request()->cidade)
|
||||
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
||||
->groupBy('destino.id')
|
||||
->get();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
<?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();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,295 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Relatorios;
|
||||
|
||||
use App\Enums\TransportePaciente\ViagemStatus as EnumViagemStatus;
|
||||
use App\Models\TransportePaciente\ViagemStatus;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
class EstatisticoService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
return [
|
||||
'model' => [
|
||||
'periodo' => [
|
||||
'start' => null,
|
||||
'end' => null
|
||||
],
|
||||
'motorista' => null,
|
||||
'municipio' => null,
|
||||
'destino' => null,
|
||||
'status' => null,
|
||||
'veiculo' => null,
|
||||
'motivo' => null,
|
||||
'prontuario' => null,
|
||||
'protocolo' => null
|
||||
],
|
||||
'form' => [
|
||||
'motoristas' => null,
|
||||
'municipios' => null,
|
||||
'destinos' => null,
|
||||
'status' => ViagemStatus::find([
|
||||
EnumViagemStatus::ABERTO,
|
||||
EnumViagemStatus::FINALIZADO,
|
||||
]),
|
||||
'veiculos' => null,
|
||||
'motivos' => null
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
private static function getViagens()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id')
|
||||
->join('cadastro_usuario as usuario as usuario', 'condutor.usuario_id', 'usuario.id')
|
||||
->join('cadastro_cidadao as cidadao', 'usuario.cidadao_id', 'cidadao.id')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->join('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->join('cadastro_cidadao as paciente_cidadao', 'paciente.cidadao_id', 'paciente_cidadao.id')
|
||||
->join('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'agendar.veiculo_id', 'veiculo.id')
|
||||
->join('transporte_paciente_viagem_status as viagem_status', 'viagem.status_id', 'viagem_status.id')
|
||||
->select(
|
||||
'viagem.id',
|
||||
'viagem.condutor_id',
|
||||
'cidadao.nome as motorista',
|
||||
'municipio.nome as municipio',
|
||||
'viagem_status.descricao as status',
|
||||
'veiculo.descricao_modelo as veiculo',
|
||||
'veiculo.numero_capacidade as capacidade',
|
||||
'viagem.data as data',
|
||||
'destino.descricao_destino as destino',
|
||||
DB::raw('LPAD(paciente.prontuario, 6, 0) as prontuario'),
|
||||
'agendar.paciente_id',
|
||||
'paciente_cidadao.nome as paciente',
|
||||
'agendar.acompanhante',
|
||||
'motivo.descricao as motivo',
|
||||
DB::raw("TIME_FORMAT(viagem.horario_chegada, '%H:%i') as horario_chegada"),
|
||||
DB::raw("TIME_FORMAT(viagem.horario_saida_real, '%H:%i') as horario_saida"),
|
||||
'viagem.diaria',
|
||||
'viagem.protocolo'
|
||||
)
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->when(request()->motorista , function($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->when(request()->municipio , function($query) {
|
||||
$query->where('destino.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino , function($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->when(request()->veiculo , function($query) {
|
||||
$query->where('viagem.veiculo_id', request()->veiculo);
|
||||
})
|
||||
->when(request()->motivo , function($query) {
|
||||
$query->where('agendar.motivo_id', request()->motivo);
|
||||
})
|
||||
->where('viagem.status_id', '!=', EnumViagemStatus::CANCELADO)
|
||||
->when(request()->status, function($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->when(request()->prontuario, function($query) {
|
||||
$query->where('paciente.prontuario', request()->prontuario);
|
||||
})
|
||||
->when(request()->protocolo, function($query) {
|
||||
$query->where('viagem.protocolo', request()->protocolo);
|
||||
})
|
||||
->orderBy('viagem.data')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getTotalGeral($viagens)
|
||||
{
|
||||
$pacientes = $viagens->count();
|
||||
$acompanhantes = $viagens->reduce(function ($carry, $item) {
|
||||
return $carry + $item->acompanhante;
|
||||
});
|
||||
$passageiros = $pacientes + $acompanhantes;
|
||||
return [
|
||||
'viagens' => $viagens->groupBy('id')->count(),
|
||||
'diarias' => $viagens->unique('id')->sum('diaria'),
|
||||
'pacientes' => $pacientes,
|
||||
'acompanhantes' => $acompanhantes ?? 0,
|
||||
'passageiros' => $passageiros,
|
||||
'porcentagem' => $passageiros != 0 ? round($acompanhantes / $passageiros * 100) : 0
|
||||
];
|
||||
}
|
||||
|
||||
private static function getTotalMotoristas($viagens)
|
||||
{
|
||||
$total = [];
|
||||
$viagens->groupBy('condutor_id')->each(function($item) use(&$total) {
|
||||
array_push($total, [
|
||||
'motorista' => $item[0]->motorista,
|
||||
'passageiros' => $item->sum('acompanhante') + $item->count(),
|
||||
'viagens' => $item->unique('id')->count(),
|
||||
'diarias' => $item->unique('id')->sum('diaria'),
|
||||
]);
|
||||
});
|
||||
return $total;
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$viagens = self::getViagens();
|
||||
$total = self::getTotalGeral($viagens);
|
||||
$motoristas = self::getTotalMotoristas($viagens);
|
||||
return [
|
||||
'viagens' => $viagens,
|
||||
'total' => $total,
|
||||
'motoristas' => $motoristas,
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$items = self::list();
|
||||
|
||||
$agrupados = collect($items['viagens'])->groupBy(function ($item) {
|
||||
return "{$item->motorista}-{$item->municipio}-{$item->status}-{$item->veiculo}-" . ($item->horario_saida ?? 'Sem horário');
|
||||
});
|
||||
|
||||
return [
|
||||
'data_inicial' => Carbon::parse(request()->data_inicial)->format('d/m/Y'),
|
||||
'data_final' => Carbon::parse(request()->data_final)->format('d/m/Y'),
|
||||
'motorista' => request()->filtro_motorista,
|
||||
'municipio' => request()->filtro_municipio,
|
||||
'destino' => request()->filtro_destino,
|
||||
'status' => request()->filtro_status,
|
||||
'veiculo' => request()->filtro_veiculo,
|
||||
'agrupados' => $agrupados,
|
||||
'motivo' => request()->filtro_motivo,
|
||||
'prontuario' => request()->prontuario,
|
||||
'items' => $items['viagens']->each(function($item) {
|
||||
$item->data = Carbon::parse($item->data)->format('d/m/Y');
|
||||
}),
|
||||
'motoristas' => $items['motoristas'],
|
||||
'total' => $items['total'],
|
||||
'colunas' => collect(request()->selectedCols),
|
||||
];
|
||||
}
|
||||
|
||||
public static function getMotoristas()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id')
|
||||
->join('cadastro_usuario as usuario as usuario', 'condutor.usuario_id', 'usuario.id')
|
||||
->join('cadastro_cidadao as cidadao', 'usuario.cidadao_id', 'cidadao.id')
|
||||
->select('condutor.id', 'cidadao.nome')
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->when(request()->status, function($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->orderBy('cidadao.nome')
|
||||
->distinct()
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getMunicipios()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
||||
->select('municipio.id', 'municipio.nome')
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->when(request()->motorista, function($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->when(request()->status, function($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->orderBy('municipio.nome')
|
||||
->distinct()
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getDestinos()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->select('destino.id', 'destino.descricao_destino as descricao')
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->when(request()->motorista, function($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('destino.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->status, function($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->orderBy('descricao')
|
||||
->distinct()
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getVeiculos()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'viagem.veiculo_id', 'veiculo.id')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->select('veiculo.id', DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) AS descricao'))
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->when(request()->motorista, function($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('destino.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function($query) {
|
||||
$query->where('destino.id', request()->destino);
|
||||
})
|
||||
->when(request()->status, function($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->orderBy('descricao')
|
||||
->distinct()
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getMotivos()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->join('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id')
|
||||
->select('motivo.id', 'motivo.descricao')
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->when(request()->motorista, function($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('destino.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function($query) {
|
||||
$query->where('destino.id', request()->destino);
|
||||
})
|
||||
->when(request()->veiculo, function($query) {
|
||||
$query->where('viagem.veiculo_id', request()->veiculo);
|
||||
})
|
||||
->when(request()->status, function($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->orderBy('motivo.descricao')
|
||||
->distinct()
|
||||
->get();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,275 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Relatorios;
|
||||
|
||||
use App\Enums\TransportePaciente\Status as EnumAgendaStatus;
|
||||
use App\Enums\TransportePaciente\ViagemStatus as EnumStatus;
|
||||
use App\Models\Cadastro\Localizacao\Bairro;
|
||||
use App\Models\Intranet\Municipio;
|
||||
use App\Models\TransportePaciente\Jornada\Jornada;
|
||||
use App\Models\TransportePaciente\Parametrizacao\Parametrizacao;
|
||||
use App\Models\TransportePaciente\Status\Status;
|
||||
use App\Models\TransportePaciente\Veiculo\Veiculo;
|
||||
use App\Models\TransportePaciente\ViagemStatus;
|
||||
use App\Services\Service;
|
||||
use App\Utils\MaskUtil;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ListagemService extends Service
|
||||
{
|
||||
|
||||
public static function search()
|
||||
{
|
||||
return [
|
||||
'pacientes' => self::getPacientes(),
|
||||
'viagem' => self::getViagem(),
|
||||
'total' => array_reduce(self::getPacientes()->toArray(), function($carry, $item) {
|
||||
if($item->acompanhante != null) {
|
||||
$carry += $item->acompanhante;
|
||||
}
|
||||
return $carry + 1;
|
||||
}, 0)
|
||||
];
|
||||
}
|
||||
|
||||
private static function getPacientes()
|
||||
{
|
||||
$pacientes = DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->leftJoin('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->leftJoin('transporte_paciente_ponto as ponto', 'agendar.ponto_id', 'ponto.id')
|
||||
->leftJoin('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id')
|
||||
->leftJoin('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->leftJoin('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->leftJoin('cadastro_cidadao_telefone as telefone', 'cidadao.id', 'telefone.cidadao_id')
|
||||
->leftJoin('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
||||
->leftJoin('cadastro_domicilio as domicilio', 'cidadao.domicilio_id', 'domicilio.id')
|
||||
->leftJoin('cadastro_endereco as endereco', 'domicilio.endereco_id', 'endereco.id')
|
||||
->leftJoin('cadastro_logradouro as logradouro', 'endereco.logradouro_id', 'logradouro.id')
|
||||
->leftJoin('cadastro_logradouro_tipo as tipo_logradouro', 'logradouro.tipo_id', 'tipo_logradouro.id')
|
||||
->leftJoin('cadastro_bairro as bairro', 'logradouro.bairro_id', 'bairro.id')
|
||||
->leftJoin('cadastro_logradouro as logradouro_referencia', 'ponto.logradouro_id', 'logradouro_referencia.id')
|
||||
->leftJoin('cadastro_logradouro_tipo as tipo_logradouro_referencia', 'logradouro_referencia.tipo_id', 'tipo_logradouro_referencia.id')
|
||||
->leftJoin('cadastro_bairro as bairro_referencia', 'logradouro_referencia.bairro_id', 'bairro_referencia.id')
|
||||
->leftJoin('transporte_paciente_acompanhante', 'transporte_paciente_acompanhante.id', 'agendar.acompanhante_1_id')
|
||||
->leftJoin('cadastro_paciente as paciente_acompanhante_1', 'transporte_paciente_acompanhante.usuario_id', 'paciente_acompanhante_1.id')
|
||||
->leftJoin('cadastro_cidadao as cidadao_acompanhante_1', 'paciente_acompanhante_1.cidadao_id', 'cidadao_acompanhante_1.id')
|
||||
->leftJoin('cadastro_cidadao_telefone as telefone_acompanhante_1', 'cidadao_acompanhante_1.id', 'telefone_acompanhante_1.cidadao_id')
|
||||
->leftJoin('transporte_paciente_acompanhante AS acompanhante_dois', 'acompanhante_dois.id', 'agendar.acompanhante_2_id')
|
||||
->leftJoin('cadastro_paciente as paciente_acompanhante_2', 'acompanhante_dois.usuario_id', 'paciente_acompanhante_2.id')
|
||||
->leftJoin('cadastro_cidadao as cidadao_acompanhante_2', 'paciente_acompanhante_2.cidadao_id', 'cidadao_acompanhante_2.id')
|
||||
->leftJoin('cadastro_cidadao_telefone as telefone_acompanhante_2', 'cidadao_acompanhante_2.id', 'telefone_acompanhante_2.cidadao_id')
|
||||
->leftJoin('sigtap.procedimento', function ($join) {
|
||||
|
||||
$join->on('sigtap.procedimento.codigo', 'motivo.codigo_procedimento')
|
||||
->where('sigtap.procedimento.competencia_id', '=', function ($query) {
|
||||
|
||||
$query->select('sigtap.competencia.id')
|
||||
->from('sigtap.competencia')
|
||||
->orderByDesc('sigtap.competencia.valor')
|
||||
->limit(1);
|
||||
});
|
||||
})
|
||||
->leftJoin('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id')
|
||||
->leftJoin('transporte_paciente_status as status', 'agendar.status_id', 'status.id')
|
||||
->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id')
|
||||
->leftJoin('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->leftJoin('cadastro_cidadao as motorista', 'motorista.id', 'usuario.cidadao_id')
|
||||
->leftJoin(
|
||||
'cadastro_carteira_identidade',
|
||||
function ($leftJoin) {
|
||||
|
||||
$leftJoin->on('cadastro_carteira_identidade.cidadao_id', 'cidadao.id')
|
||||
->whereNull('cadastro_carteira_identidade.deleted_at')
|
||||
->whereRaw('cadastro_carteira_identidade.id = (
|
||||
SELECT id
|
||||
FROM cadastro_carteira_identidade
|
||||
WHERE cadastro_carteira_identidade.cidadao_id = cidadao.id
|
||||
ORDER BY cadastro_carteira_identidade.id
|
||||
LIMIT 1
|
||||
)');
|
||||
}
|
||||
)
|
||||
->select(
|
||||
'agendar.id',
|
||||
'agendar.viagem_id',
|
||||
'destino.descricao_destino as destino',
|
||||
'municipio.nome as municipio',
|
||||
'cidadao.nome as nome',
|
||||
DB::raw("
|
||||
IFNULL(
|
||||
CONCAT(
|
||||
SUBSTR(cidadao.cpf, 1, 3), '.',
|
||||
SUBSTR(cidadao.cpf, 4, 3), '.',
|
||||
SUBSTR(cidadao.cpf, 7, 3), '-',
|
||||
SUBSTR(cidadao.cpf, 10, 2)
|
||||
),
|
||||
'-'
|
||||
) as cpf
|
||||
"),
|
||||
'cadastro_carteira_identidade.numero AS rg',
|
||||
'cidadao.data_nascimento as cidadao_data_nascimento',
|
||||
DB::raw('TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) AS idade'),
|
||||
DB::raw("CONCAT(logradouro.nome,' - ',IF(endereco.numero, endereco.numero, 'Sem número')) as endereco"),
|
||||
'bairro.nome as bairro',
|
||||
'bairro_referencia.nome as bairro_referencia',
|
||||
DB::raw('GROUP_CONCAT(DISTINCT telefone.numero SEPARATOR "#") as telefones'),
|
||||
'motivo.descricao as motivo',
|
||||
'motivo.codigo_procedimento as codigo_procedimento',
|
||||
'agendar.horario_saida',
|
||||
'agendar.horario as horario_consulta',
|
||||
'agendar.acompanhante',
|
||||
DB::raw('agendar.acompanhante + 1 as total'),
|
||||
'agendar.observacao',
|
||||
'agendar.consulta_observacao',
|
||||
DB::raw("
|
||||
CASE
|
||||
WHEN ponto.descricao IS NULL THEN CONCAT('CASA DO PACIENTE - ', tipo_logradouro.descricao, ' ', logradouro.nome, ' ', 'Nº ', endereco.numero)
|
||||
ELSE ponto.descricao
|
||||
END as ponto
|
||||
"),
|
||||
'endereco.complemento',
|
||||
'agendar.lotacao_id',
|
||||
'agendar.ocupacao_id',
|
||||
'agendar.usuario_id',
|
||||
'sigtap.procedimento.nome as procedimento_nome',
|
||||
'sigtap.procedimento.id as procedimento_id',
|
||||
'motorista.nome as motorista',
|
||||
'status.descricao as status',
|
||||
'transporte_paciente_acompanhante.id as acompanhante_1',
|
||||
'cidadao_acompanhante_1.nome as acompanhante_nome_1',
|
||||
'cidadao_acompanhante_1.cns as acompanhante_cns_1',
|
||||
DB::raw('GROUP_CONCAT(DISTINCT telefone_acompanhante_1.numero) as telefones_acompanhante_1'),
|
||||
'acompanhante_dois.id as acompanhante_2',
|
||||
'cidadao_acompanhante_2.nome as acompanhante_nome_2',
|
||||
'cidadao_acompanhante_2.cns as acompanhante_cns_2',
|
||||
DB::raw('GROUP_CONCAT(DISTINCT telefone_acompanhante_2.numero) as telefones_acompanhante_2'),
|
||||
)
|
||||
->where('agendar.data_saida', request()->data)
|
||||
->where('agendar.veiculo_id', request()->veiculo_id)
|
||||
->when(request()->status_id == EnumStatus::ABERTO, function ($query) {
|
||||
$query->where('agendar.status_id', EnumAgendaStatus::AGENDADO);
|
||||
})
|
||||
->when(request()->status_id == EnumStatus::FINALIZADO, function ($query) {
|
||||
$query->whereIn('agendar.status_id', [EnumAgendaStatus::TRANSPORTADO, EnumAgendaStatus::FALTOU]);
|
||||
})
|
||||
->when(request()->municipio_id, function ($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio_id);
|
||||
})
|
||||
->when(request()->jornada_id, function ($query) {
|
||||
$query->where('agendar.jornada_id', request()->jornada_id);
|
||||
})
|
||||
->when(request()->nome_bairro, function($query) {
|
||||
$query->where('destino.nome_bairro', '=', request()->nome_bairro);
|
||||
})
|
||||
->when(request()->veiculo_id, function ($query) {
|
||||
$query->where('agendar.veiculo_id', request()->veiculo_id);
|
||||
})
|
||||
->when(request()->ordenar, function ($query) {
|
||||
$query->orderBy(request()->ordenar);
|
||||
})
|
||||
->whereNull('telefone.deleted_at')
|
||||
->groupBy('agendar.id')
|
||||
->orderBy('agendar.horario_saida', 'asc')
|
||||
->orderBy('horario_consulta','asc')
|
||||
->get();
|
||||
|
||||
foreach ($pacientes as $paciente) {
|
||||
|
||||
$telefones = '';
|
||||
|
||||
foreach (explode('#', $paciente->telefones) as $value) {
|
||||
|
||||
$telefones .= MaskUtil::getPhoneMasked($value) . ', ';
|
||||
}
|
||||
|
||||
$paciente->telefones = rtrim($telefones, ', ');
|
||||
}
|
||||
|
||||
return $pacientes;
|
||||
}
|
||||
|
||||
private static function getViagem()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->select(
|
||||
'viagem.protocolo',
|
||||
'viagem.diaria',
|
||||
'viagem.condutor_id',
|
||||
'cidadao.nome',
|
||||
'viagem.horario_saida_temp as horarioSaida'
|
||||
)
|
||||
->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id')
|
||||
->leftJoin('cadastro_usuario as usuario', 'usuario.id', 'condutor.id')
|
||||
->leftJoin('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->leftJoin('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->leftJoin('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->where('viagem.veiculo_id', request()->veiculo_id)
|
||||
->where('viagem.data', request()->data)
|
||||
->when(request()->jornada_id, function ($query) {
|
||||
$query->where('viagem.jornada_id', request()->jornada_id);
|
||||
})
|
||||
->when(request()->nome_bairro, function($query) {
|
||||
$query->where('destino.nome_bairro', request()->nome_bairro);
|
||||
})
|
||||
->where('viagem.status_id', request()->status_id)
|
||||
->first();
|
||||
}
|
||||
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$items = self::getPacientes();
|
||||
$viagem = self::getViagem();
|
||||
|
||||
$selectedCols = request()->selectedCols;
|
||||
$orderedCols = self::reorderColumns($selectedCols);
|
||||
$status = ViagemStatus::where('id', request()->status_id)->first();
|
||||
$veiculo = Veiculo::where('id', request()->veiculo_id)->first();
|
||||
$jornada = Jornada::where('id', request()->jornada_id)->first();
|
||||
$municipio = Municipio::where('id', request()->municipio_id)->first();
|
||||
$exibirObservacaoPaciente = Parametrizacao::first()->exibir_observacao_paciente;
|
||||
|
||||
if (!$exibirObservacaoPaciente) {
|
||||
$orderedCols = array_filter($orderedCols, function($item) {
|
||||
return $item['key'] !== 'observacao';
|
||||
});
|
||||
}
|
||||
|
||||
return [
|
||||
'data' => Carbon::parse(request()->data)->format('d/m/Y'),
|
||||
'status' => $status ? $status->descricao : 'Não informado',
|
||||
'veiculo' => $veiculo ? $veiculo->numero_placa . ' - ' . $veiculo->descricao_modelo : 'Não informado',
|
||||
'jornada' => $jornada ? (new Carbon($jornada->data_inicial))->format('d/m/Y H:i') . ' - '
|
||||
. (new Carbon($jornada->data_final))->format('d/m/Y H:i'). ' - ' . $jornada->id : null,
|
||||
'bairro' => request()->nome_bairro ?? 'Todos',
|
||||
'municipio' => $municipio ? $municipio->nome : 'Todos',
|
||||
'items' => $items,
|
||||
'viagem' => $viagem,
|
||||
'colunas' => collect($orderedCols),
|
||||
'total' => array_reduce($items->toArray(), function($carry, $item) {
|
||||
if($item->acompanhante != null) {
|
||||
$carry += $item->acompanhante;
|
||||
}
|
||||
return $carry + 1;
|
||||
}, 0)
|
||||
];
|
||||
}
|
||||
|
||||
private static function reorderColumns($selectedCols)
|
||||
{
|
||||
$order = ['nome', 'rg', 'cpf', 'idade', 'telefones', 'endereco', 'bairro', 'municipio', 'motorista', 'horario_consulta',
|
||||
'horario_saida', 'motivo', 'status', 'destino', 'ponto', 'observacao', 'acompanhante', 'total'];
|
||||
|
||||
usort($selectedCols, function ($a, $b) use ($order) {
|
||||
$pos_a = array_search($a['key'], $order);
|
||||
$pos_b = array_search($b['key'], $order);
|
||||
|
||||
if ($pos_a === false) $pos_a = PHP_INT_MAX;
|
||||
if ($pos_b === false) $pos_b = PHP_INT_MAX;
|
||||
|
||||
return $pos_a - $pos_b;
|
||||
});
|
||||
|
||||
return $selectedCols;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Relatorios;
|
||||
|
||||
use App\Enums\TransportePaciente\ViagemStatus;
|
||||
use App\Models\TransportePaciente\Condutor\Condutor;
|
||||
use App\Models\TransportePaciente\Destino\Destino;
|
||||
use App\Models\TransportePaciente\Veiculo\Veiculo;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class PrestacaoContaService extends Service
|
||||
{
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$items = self::getItems();
|
||||
$veiculo = Veiculo::find(request()->veiculo);
|
||||
$identificacaoVeiculo = request()->veiculo ? $veiculo->numero_placa . ' - ' . $veiculo->descricao_modelo : 'Todos';
|
||||
|
||||
return [
|
||||
'data_inicial' => Carbon::parse(request()->data_inicial)->format('d/m/Y'),
|
||||
'data_final' => Carbon::parse(request()->data_final)->format('d/m/Y'),
|
||||
'veiculo' => $identificacaoVeiculo,
|
||||
'motorista' => request()->motorista ? Condutor::find(request()->motorista)->usuario->cidadao->nome : 'Todos',
|
||||
'destino' => request()->destino ? Destino::find(request()->destino)->descricao_destino : 'Todos',
|
||||
'colunas' => collect(request()->selectedCols),
|
||||
'items' => $items,
|
||||
'total_diaria' => $items->sum('diaria'),
|
||||
'total_km_percorrido' => $items->sum('km_percorrido'),
|
||||
'total_refeicao' => $items->sum('refeicao'),
|
||||
'total_pernoite' => $items->sum('pernoite'),
|
||||
'total_pedagio' => $items->sum('pedagio'),
|
||||
'total_combustivel' => $items->sum('combustivel'),
|
||||
'total_outras_despesas' => $items->sum('outras_despesas'),
|
||||
'total_despesa' => $items->sum('total_despesa'),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getItems()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->select(
|
||||
'viagem.id',
|
||||
'viagem.km_saida',
|
||||
'viagem.km_chegada',
|
||||
DB::raw('viagem.km_chegada - viagem.km_saida as km_percorrido'),
|
||||
'diaria',
|
||||
'refeicao',
|
||||
'pernoite',
|
||||
'pedagio',
|
||||
'combustivel',
|
||||
'outras_despesas',
|
||||
'descricao_outras_despesas',
|
||||
'cidadao.id', 'cidadao.nome as motorista',
|
||||
'viagem.total_despesa',
|
||||
'agendar.destino_id', 'destino.descricao_destino as destino',
|
||||
'condutor.id as id_condutor',
|
||||
'viagem.id as id_viagem',
|
||||
'veiculo.id',
|
||||
DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) as identificacao_veiculo'),
|
||||
DB::raw('CONCAT(
|
||||
COALESCE(DATE_FORMAT(viagem.data, "%d/%m/%Y"), "-"),
|
||||
" ",
|
||||
COALESCE(DATE_FORMAT(viagem.horario_saida_real, "%H:%i"), "")
|
||||
) AS data_horario_partida'),
|
||||
DB::raw('CONCAT(
|
||||
COALESCE(DATE_FORMAT(viagem.data_chegada, "%d/%m/%Y"), "-"),
|
||||
" ",
|
||||
COALESCE(DATE_FORMAT(viagem.horario_chegada, "%H:%i"), "")
|
||||
) AS data_horario_chegada')
|
||||
)
|
||||
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'viagem.veiculo_id')
|
||||
->join('transporte_paciente_condutor as condutor', 'condutor.id', 'viagem.condutor_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
||||
->where('viagem.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('viagem.data', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->when(request()->veiculo, function($query) {
|
||||
$query->where('viagem.veiculo_id', request()->veiculo);
|
||||
})
|
||||
->when(request()->motorista, function($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->when(request()->destino, function($query) {
|
||||
$query->where('destino.id', request()->destino);
|
||||
})
|
||||
->orderByDesc('viagem.data')
|
||||
->groupBy('viagem.id')
|
||||
->get();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Relatorios;
|
||||
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Services\Service;
|
||||
use App\Models\Intranet\Municipio;
|
||||
use App\Models\TransportePaciente\Agendar\Historico;
|
||||
use App\Models\TransportePaciente\Destino\Destino;
|
||||
|
||||
class RelatorioAgendadorCompletoService extends Service
|
||||
{
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$items = self::getItems();
|
||||
|
||||
return [
|
||||
'periodo' => request()->periodo,
|
||||
'municipio' => request()->municipio ? Municipio::find(request()->municipio)->nome : 'Todos',
|
||||
'destino' => request()->destino ? Destino::find(request()->destino)->descricao_destino : 'Todos',
|
||||
'horario' => request()->horario ?? 'Todos',
|
||||
'paciente' => Paciente::firstWhere('id', request()->paciente)->cidadao->nome ?? 'Todos',
|
||||
'colunas' => collect(request()->selectedCols),
|
||||
'items' => $items,
|
||||
'total' => count($items)
|
||||
];
|
||||
}
|
||||
|
||||
private static function getItems(){
|
||||
$agendar = DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'agendar.id as id',
|
||||
'cidadao.nome as paciente',
|
||||
'paciente.prontuario',
|
||||
DB::raw("TRIM('0' FROM DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),cidadao.data_nascimento) + 0), '%Y')) as idade"),
|
||||
'destino.descricao_destino as destino',
|
||||
'municipio.nome as municipio',
|
||||
DB::raw('CONCAT(DATE_FORMAT(agendar.data_saida, "%d/%m/%Y"), " ", DATE_FORMAT(agendar.horario_saida, "%H:%i")) as data_hora_saida'),
|
||||
DB::raw("
|
||||
CASE
|
||||
WHEN ponto.descricao IS NULL THEN CONCAT('CASA DO PACIENTE')
|
||||
ELSE ponto.descricao
|
||||
END as ponto
|
||||
"),
|
||||
'agendar.acompanhante',
|
||||
'cidadao_usuario.nome as usuario',
|
||||
DB::raw("DATE_FORMAT(agendar.created_at, '%d/%m/%Y %H:%i') as hora_agendamento"),
|
||||
'status.descricao as status',
|
||||
)
|
||||
->join('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->join('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->join('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id')
|
||||
->join('transporte_paciente_ponto as ponto','agendar.ponto_id', 'ponto.id')
|
||||
->leftJoin('transporte_paciente_veiculo as veiculo', 'agendar.veiculo_id', 'veiculo.id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
||||
->join('cadastro_lotacao as lotacao', 'lotacao.id', 'agendar.created_lotacao_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'lotacao.usuario_id')
|
||||
->join('transporte_paciente_status as status', 'status.id', 'agendar.status_id')
|
||||
->join('cadastro_cidadao as cidadao_usuario', 'cidadao_usuario.id', 'usuario.cidadao_id')
|
||||
->whereBetween('agendar.data_saida', [request()->periodo['start'], request()->periodo['end']])
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->when(request()->horario, function($query) {
|
||||
$query->where('agendar.horario_saida', request()->horario);
|
||||
})
|
||||
->when(request()->paciente, function($query) {
|
||||
$query->where('agendar.paciente_id', request()->paciente);
|
||||
})
|
||||
->latest('agendar.created_at')
|
||||
->get();
|
||||
|
||||
|
||||
return $agendar->map(fn($item) => [
|
||||
'idade' => $item->idade,
|
||||
'paciente' => $item->paciente,
|
||||
'prontuario' => $item->prontuario,
|
||||
'destino' => $item->destino,
|
||||
'municipio' => $item->municipio,
|
||||
'data_hora_saida' => $item->data_hora_saida,
|
||||
'ponto' => $item->ponto,
|
||||
'acompanhante' => $item->acompanhante,
|
||||
'usuario' => $item->usuario,
|
||||
'hora_agendamento' => $item->hora_agendamento,
|
||||
'status' => $item->status,
|
||||
'historico' => DB::table('transporte_paciente_agendar_transporte_historico as historico')
|
||||
->select(
|
||||
'cidadaoCadastro.nome as usuario_cadastro',
|
||||
'cidadaoEdicao.nome as usuario_edicao',
|
||||
'transporte_paciente_destino.descricao_destino as destino',
|
||||
DB::raw('CONCAT(transporte_paciente_veiculo.descricao_modelo, " / ", transporte_paciente_veiculo.numero_placa) as veiculo'),
|
||||
'historico.acompanhante as acompanhantes',
|
||||
DB::raw('CONCAT(DATE_FORMAT(historico.data_saida, "%d/%m/%Y"), " ", DATE_FORMAT(historico.horario_saida, "%H:%i")) as data_hora_saida'),
|
||||
'transporte_paciente_motivo_viagem_procedimento.descricao as motivo',
|
||||
'status.descricao as status',
|
||||
DB::raw('CONCAT(DATE_FORMAT(historico.created_at, "%d/%m/%Y %H:%i")) as data_hora_modificacao'),
|
||||
)
|
||||
->where('historico.transporte_paciente_agendar_transporte_id', $item->id)
|
||||
->join('cadastro_lotacao as lotacaoUsuarioCadastro', 'lotacaoUsuarioCadastro.id', 'historico.lotacao_anterior_id')
|
||||
->join('cadastro_usuario as usuarioCadastro', 'usuarioCadastro.id', 'lotacaoUsuarioCadastro.usuario_id')
|
||||
->join('cadastro_cidadao as cidadaoCadastro', 'cidadaoCadastro.id', 'usuarioCadastro.cidadao_id')
|
||||
->join('cadastro_lotacao as lotacaoUsuarioEdicao', 'lotacaoUsuarioEdicao.id', 'historico.updated_lotacao_id')
|
||||
->join('cadastro_usuario as usuarioEdicao', 'usuarioEdicao.id', 'lotacaoUsuarioEdicao.usuario_id')
|
||||
->join('cadastro_cidadao as cidadaoEdicao', 'cidadaoEdicao.id', 'usuarioEdicao.cidadao_id')
|
||||
->leftJoin('transporte_paciente_destino', 'transporte_paciente_destino.id', 'historico.destino_id')
|
||||
->leftJoin('transporte_paciente_veiculo', 'transporte_paciente_veiculo.id', 'historico.veiculo_id')
|
||||
->join('transporte_paciente_motivo_viagem_procedimento', 'transporte_paciente_motivo_viagem_procedimento.id', 'historico.motivo_id')
|
||||
->join('transporte_paciente_status as status', 'status.id', 'historico.status_id')
|
||||
->latest('historico.created_at')
|
||||
->get()
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Relatorios;
|
||||
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Services\Service;
|
||||
use App\Models\Intranet\Municipio;
|
||||
use App\Models\TransportePaciente\Destino\Destino;
|
||||
|
||||
class RelatorioAgendadorService extends Service
|
||||
{
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$items = self::getItems();
|
||||
|
||||
return [
|
||||
'periodo' => request()->periodo,
|
||||
'municipio' => request()->municipio ? Municipio::find(request()->municipio)->nome : 'Todos',
|
||||
'destino' => request()->destino ? Destino::find(request()->destino)->descricao_destino : 'Todos',
|
||||
'horario' => request()->horario ?? 'Todos',
|
||||
'paciente' => Paciente::firstWhere('id', request()->paciente)->cidadao->nome ?? 'Todos',
|
||||
'colunas' => collect(request()->selectedCols),
|
||||
'items' => $items,
|
||||
'total' => count($items)
|
||||
];
|
||||
}
|
||||
|
||||
private static function getItems(){
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'cidadao.nome as paciente',
|
||||
'paciente.prontuario',
|
||||
DB::raw("TRIM('0' FROM DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),cidadao.data_nascimento) + 0), '%Y')) as idade"),
|
||||
'destino.descricao_destino as destino',
|
||||
'municipio.nome as municipio',
|
||||
DB::raw('CONCAT(DATE_FORMAT(agendar.data_saida, "%d/%m/%Y"), " ", DATE_FORMAT(agendar.horario_saida, "%H:%i")) as data_hora_saida'),
|
||||
DB::raw("
|
||||
CASE
|
||||
WHEN ponto.descricao IS NULL THEN CONCAT('CASA DO PACIENTE')
|
||||
ELSE ponto.descricao
|
||||
END as ponto
|
||||
"),
|
||||
'agendar.acompanhante',
|
||||
'cidadao_usuario.nome as usuario',
|
||||
DB::raw("DATE_FORMAT(agendar.created_at, '%d/%m/%Y %H:%i') as hora_agendamento"),
|
||||
'status.descricao as status'
|
||||
)
|
||||
->join('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->join('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->join('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id')
|
||||
->join('transporte_paciente_ponto as ponto','agendar.ponto_id', 'ponto.id')
|
||||
->leftJoin('transporte_paciente_veiculo as veiculo', 'agendar.veiculo_id', 'veiculo.id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
||||
->join('cadastro_lotacao as lotacao', 'lotacao.id', 'agendar.created_lotacao_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'lotacao.usuario_id')
|
||||
->join('transporte_paciente_status as status', 'status.id', 'agendar.status_id')
|
||||
->join('cadastro_cidadao as cidadao_usuario', 'cidadao_usuario.id', 'usuario.cidadao_id')
|
||||
->whereBetween('agendar.data_saida', [request()->periodo['start'], request()->periodo['end']])
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->when(request()->horario, function($query) {
|
||||
$query->where('agendar.horario_saida', request()->horario);
|
||||
})
|
||||
->when(request()->paciente, function($query) {
|
||||
$query->where('agendar.paciente_id', request()->paciente);
|
||||
})
|
||||
->latest('agendar.created_at')
|
||||
->get();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Relatorios;
|
||||
|
||||
use App\Models\Intranet\Municipio;
|
||||
use App\Models\TransportePaciente\Destino\Destino;
|
||||
use App\Models\TransportePaciente\Motivo\Motivo;
|
||||
use App\Models\TransportePaciente\Veiculo\Veiculo;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RelatorioQuantitativoService extends Service
|
||||
{
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$items = self::getItems();
|
||||
|
||||
return [
|
||||
'inicio' => Carbon::createFromFormat('Y-m-d', request()->periodo['start'])->format('d/m/Y'),
|
||||
'fim' => Carbon::createFromFormat('Y-m-d', request()->periodo['end'])->format('d/m/Y'),
|
||||
'municipio' => request()->municipio ? Municipio::find(request()->municipio)->nome : 'Todos',
|
||||
'destino' => request()->destino ? Destino::find(request()->destino)->descricao_destino : 'Todos',
|
||||
'veiculo' => request()->veiculo ? Veiculo::find(request()->veiculo)->numero_placa : 'Todos',
|
||||
'motivo' => request()->motivo ? Motivo::find(request()->motivo)->descricao : 'Todos',
|
||||
'colunas' => collect(request()->selectedCols),
|
||||
'items' => $items,
|
||||
'total_paciente' => $items->sum('total_paciente'),
|
||||
'total_acompanhantes' => $items->sum('quantidade_acompanhantes'),
|
||||
'total_paciente_acompanhante' => $items->sum('quantidade_paciente_acompanhante'),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getItems()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$consulta = DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'agendar.acompanhante',
|
||||
'agendar.veiculo_id',
|
||||
'municipio.nome as municipio',
|
||||
'destino.descricao_destino as destino',
|
||||
'motivo.descricao as motivo_descricao',
|
||||
DB::raw("CONCAT(DATE_FORMAT(agendar.data, '%d/%m/%Y'), ' - ', DATE_FORMAT(agendar.horario, '%H:%i')) as hora_agendamento"),
|
||||
DB::raw("CONCAT(veiculo.numero_placa, ' - ', veiculo.descricao_modelo) AS descricao_veiculo"),
|
||||
DB::raw('COUNT(*) as total_paciente'),
|
||||
DB::raw('SUM(IFNULL(agendar.acompanhante, 0)) AS quantidade_acompanhantes'),
|
||||
DB::raw('SUM(IFNULL(agendar.acompanhante, 0) + 1) AS quantidade_paciente_acompanhante'),
|
||||
DB::raw('IF(viagem.protocolo IS NOT NULL, viagem.protocolo, "-") AS protocolo')
|
||||
)
|
||||
->leftJoin('transporte_paciente_veiculo as veiculo', 'agendar.veiculo_id', 'veiculo.id')
|
||||
->leftJoin('transporte_paciente_veiculo_marca as marca', 'marca.id', 'veiculo.marca_id')
|
||||
->leftJoin('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'agendar.municipio_id', 'municipio.id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->join('transporte_paciente_motivo_viagem_procedimento as motivo', 'motivo.id', 'agendar.motivo_id')
|
||||
->groupBy(
|
||||
'agendar.veiculo_id',
|
||||
'municipio.nome',
|
||||
'destino.descricao_destino',
|
||||
'motivo.descricao',
|
||||
DB::raw("CONCAT(DATE_FORMAT(agendar.data, '%d/%m/%Y'), ' - ', DATE_FORMAT(agendar.horario, '%H:%i'))")
|
||||
)
|
||||
->orderBy('hora_agendamento');
|
||||
|
||||
if (request()->periodo) {
|
||||
|
||||
$consulta->where('agendar.data', '>=', request()->periodo['start']);
|
||||
$consulta->where('agendar.data', '<=', request()->periodo['end']);
|
||||
} else {
|
||||
|
||||
$consulta->where('agendar.data', $currentDate);
|
||||
}
|
||||
|
||||
if (request()->veiculo) {
|
||||
|
||||
$consulta->where('agendar.veiculo_id', request()->veiculo);
|
||||
}
|
||||
|
||||
if (request()->municipio) {
|
||||
|
||||
$consulta->where('agendar.municipio_id', request()->municipio);
|
||||
}
|
||||
|
||||
if (request()->destino) {
|
||||
|
||||
$consulta->where('agendar.destino_id', request()->destino);
|
||||
}
|
||||
|
||||
if (request()->motivo) {
|
||||
|
||||
$consulta->where('agendar.motivo_id', request()->motivo);
|
||||
}
|
||||
|
||||
if(request()->protocolo) {
|
||||
$consulta->where('viagem.protocolo', request()->protocolo);
|
||||
}
|
||||
|
||||
$consulta = $consulta->get();
|
||||
|
||||
return $consulta;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Relatorios;
|
||||
|
||||
use App\Models\Cadastro\SujeitoAtencao\Cidadao;
|
||||
use App\Models\Intranet\Municipio;
|
||||
use App\Models\TransportePaciente\Destino\Destino;
|
||||
use App\Models\TransportePaciente\Motivo\Motivo;
|
||||
use App\Models\TransportePaciente\Status\Status;
|
||||
use App\Models\TransportePaciente\ViagemStatus;
|
||||
use App\Models\TransportePaciente\Veiculo\Veiculo;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RelatorioViagemGeralService extends Service
|
||||
{
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$items = self::getItems();
|
||||
$contador = self::getContador();
|
||||
|
||||
return [
|
||||
'data_inicial' => Carbon::parse(request()->data_inicial)->format('d/m/Y'),
|
||||
'data_final' => Carbon::parse(request()->data_final)->format('d/m/Y'),
|
||||
'motivo_viagem' => request()->motivo_viagem ? Motivo::find(request()->motivo_viagem)->descricao : 'Todos',
|
||||
'municipio' => request()->municipio ? Municipio::find(request()->municipio)->nome : 'Todos',
|
||||
'destino' => request()->destino ? Destino::find(request()->destino)->descricao_destino : 'Todos',
|
||||
'veiculo' => request()->veiculo ? Veiculo::find(request()->veiculo)->descricao_modelo : 'Todos',
|
||||
'status' => request()->status ? ViagemStatus::find(request()->status)->descricao : 'Todos',
|
||||
'colunas' => collect(request()->selectedCols),
|
||||
'items' => $items,
|
||||
'total_paciente' => $contador['total_paciente'],
|
||||
'total_acompanhante' => $contador['total_paciente_acompanhante'] - $contador['total_paciente'],
|
||||
'total_paciente_acompanhante' => $contador['total_paciente_acompanhante'],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getItems(){
|
||||
|
||||
$query = DB::table('transporte_paciente_agendar_transporte AS agendar')
|
||||
->select(
|
||||
'agendar.id',
|
||||
'cidadao.nome AS paciente_nome',
|
||||
'motivo.descricao AS motivo_viagem',
|
||||
'municipio.nome AS municipio',
|
||||
'destino.descricao_destino AS destino',
|
||||
'ponto.descricao AS ponto_referencia',
|
||||
'veiculo.descricao_modelo AS veiculo',
|
||||
'status.descricao AS status',
|
||||
DB::raw("COALESCE(agendar.acompanhante, '-') AS acompanhante"),
|
||||
DB::raw("COALESCE(cidadao2.nome, '-') AS motorista"),
|
||||
DB::raw("TIME_FORMAT(agendar.horario, '%H:%i') AS horario"),
|
||||
DB::raw("DATE_FORMAT(agendar.data, '%d/%m/%Y') AS data"),
|
||||
DB::raw("IF(agendar.horario_saida, TIME_FORMAT(agendar.horario_saida, '%H:%i'),'-' ) AS horario_saida"),
|
||||
DB::raw('IF(transporte.protocolo, transporte.protocolo, "-") as protocolo'),
|
||||
DB::raw("CONCAT(logradouro.nome, ' - ', bairro.nome) AS endereco"),
|
||||
'cidadao.cns',
|
||||
'agendar.observacao AS observacao_viagem',
|
||||
'agendar.consulta_observacao AS observacao_paciente',
|
||||
)
|
||||
->leftJoin('cadastro_paciente AS paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->leftJoin('cadastro_cidadao AS cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->leftJoin('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id')
|
||||
->leftJoin('intranet.cadastro_municipio as municipio', 'agendar.municipio_id', 'municipio.id')
|
||||
->leftJoin('transporte_paciente_destino AS destino', 'agendar.destino_id', 'destino.id')
|
||||
->leftJoin('transporte_paciente_ponto AS ponto', 'agendar.ponto_id', 'ponto.id')
|
||||
->leftJoin('transporte_paciente_viagem AS transporte', 'agendar.viagem_id', 'transporte.id')
|
||||
->leftJoin('transporte_paciente_veiculo AS veiculo', 'transporte.veiculo_id', 'veiculo.id')
|
||||
->leftJoin('transporte_paciente_condutor AS condutor', 'condutor.id', 'transporte.condutor_id')
|
||||
->leftJoin('cadastro_usuario AS usuario', 'condutor.usuario_id', 'usuario.id')
|
||||
->leftJoin('cadastro_cidadao AS cidadao2', 'usuario.cidadao_id', 'cidadao2.id')
|
||||
->leftJoin('transporte_paciente_viagem_status AS status', 'transporte.status_id', 'status.id')
|
||||
->leftJoin('cadastro_domicilio AS domicilio', 'domicilio.id', 'cidadao.domicilio_id')
|
||||
->leftJoin('cadastro_endereco AS endereco', 'endereco.id', 'domicilio.endereco_id')
|
||||
->leftJoin('cadastro_logradouro AS logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
||||
->leftJoin('cadastro_bairro AS bairro', 'bairro.id', 'logradouro.bairro_id')
|
||||
->where('agendar.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('agendar.data', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->when(request()->motivo, function($query) {
|
||||
$query->where('agendar.motivo_id', request()->motivo);
|
||||
})
|
||||
->when(request()->municipio, function ($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function ($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->when(request()->veiculo, function ($query) {
|
||||
$query->where('agendar.veiculo_id', request()->veiculo);
|
||||
})
|
||||
->when(request()->paciente, function ($query) {
|
||||
$query->where('agendar.paciente_id', request()->paciente);
|
||||
})
|
||||
->when(request()->protocolo, function($query) {
|
||||
$query->where('transporte.protocolo', request()->protocolo);
|
||||
})
|
||||
->when(request()->status, function($query) {
|
||||
$query->where('transporte.status_id', request()->status);
|
||||
});
|
||||
|
||||
if (request()->has('order')) {
|
||||
$orderDir = request()->get('order')['dir'];
|
||||
$query
|
||||
->orderBy('agendar.data', $orderDir)
|
||||
->orderBy('agendar.horario', $orderDir);
|
||||
} else {
|
||||
$query
|
||||
->orderBy('agendar.data', 'desc')
|
||||
->orderBy('agendar.horario', 'desc');
|
||||
}
|
||||
|
||||
return $query->groupBy('agendar.id')->get();
|
||||
}
|
||||
|
||||
private static function getContador() {
|
||||
|
||||
$contagem = DB::table('transporte_paciente_agendar_transporte AS agendar')
|
||||
->leftjoin('transporte_paciente_viagem AS viagem', 'viagem.id', 'agendar.viagem_id')
|
||||
->select(
|
||||
DB::raw('SUM(IFNULL(agendar.acompanhante, 0) + 1) AS quantidade_paciente_acompanhante'),
|
||||
DB::raw('COUNT(agendar.id) AS quantidade_paciente'),
|
||||
)
|
||||
->where('agendar.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('agendar.data', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->when(request()->motivo, function($query) {
|
||||
$query->where('agendar.motivo_id', request()->motivo);
|
||||
})
|
||||
->when(request()->municipio, function ($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function ($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->when(request()->veiculo, function ($query) {
|
||||
$query->where('agendar.veiculo_id', request()->veiculo);
|
||||
})
|
||||
->when(request()->paciente, function($query) {
|
||||
$query->where('agendar.paciente_id', request()->paciente);
|
||||
})
|
||||
->when(request()->protocolo, function($query) {
|
||||
$query->where('viagem.protocolo', request()->protocolo);
|
||||
})
|
||||
->when(request()->status, function($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->get();
|
||||
|
||||
$totalizadores = [
|
||||
'total_paciente' => $contagem->sum('quantidade_paciente'),
|
||||
'total_paciente_acompanhante' => $contagem->sum('quantidade_paciente_acompanhante'),
|
||||
];
|
||||
|
||||
return $totalizadores;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,227 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Relatorios;
|
||||
|
||||
use App\Enums\TransportePaciente\ViagemStatus as EnumViagemStatus;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Cidadao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\TransportePaciente\Condutor\Condutor;
|
||||
use App\Models\TransportePaciente\ViagemStatus;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RelatorioViagemMotoristaService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
return [
|
||||
'form' => [
|
||||
'status' => ViagemStatus::find([
|
||||
EnumViagemStatus::ABERTO,
|
||||
EnumViagemStatus::FINALIZADO,
|
||||
]),
|
||||
'motoristas' => [],
|
||||
],
|
||||
'model' => [
|
||||
'ano' => null,
|
||||
'periodo' => [
|
||||
'start' => null,
|
||||
'end' => null,
|
||||
],
|
||||
'motorista' => null,
|
||||
'status' => null,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function getMotoristas()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_condutor as condutor', 'condutor.id', 'viagem.condutor_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->select('viagem.condutor_id', 'cidadao.nome')
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->when(request()->status, function ($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->groupBy('viagem.condutor_id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$consulta = DB::table('transporte_paciente_viagem AS viagem')
|
||||
->join('transporte_paciente_condutor AS condutor', 'condutor.id', 'viagem.condutor_id')
|
||||
->join('cadastro_usuario AS usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->leftJoin('transporte_paciente_destino AS destino', 'destino.id', 'agendar.destino_id')
|
||||
->leftJoin('intranet.cadastro_municipio AS municipio', 'municipio.id', 'destino.municipio_id')
|
||||
->leftJoin('intranet.cadastro_estado AS estado', 'estado.id', 'municipio.estado_id')
|
||||
->select(
|
||||
'viagem.condutor_id AS motorista_id',
|
||||
'cidadao.nome AS motorista',
|
||||
'destino.municipio_id',
|
||||
DB::raw("CONCAT(municipio.nome, ' - ',estado.uf) AS municipio"),
|
||||
DB::raw("COUNT(viagem.id) AS total"),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 1 THEN 1 END) AS total_janeiro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 2 THEN 1 END) AS total_fevereiro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 3 THEN 1 END) AS total_marco'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 4 THEN 1 END) AS total_abril'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 5 THEN 1 END) AS total_maio'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 6 THEN 1 END) AS total_junho'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 7 THEN 1 END) AS total_julho'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 8 THEN 1 END) AS total_agosto'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 9 THEN 1 END) AS total_setembro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 10 THEN 1 END) AS total_outubro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 11 THEN 1 END) AS total_novembro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 12 THEN 1 END) AS total_dezembro'),
|
||||
)
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->when(request()->motorista, function ($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->where('viagem.status_id', '!=', EnumViagemStatus::CANCELADO)
|
||||
->when(request()->status, function ($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->orderBy('cidadao.nome')
|
||||
->groupByRaw('motorista_id, municipio_id')
|
||||
->get();
|
||||
|
||||
|
||||
$motorista = DB::table('transporte_paciente_viagem AS viagem')
|
||||
->join('transporte_paciente_condutor AS condutor', 'condutor.id', 'viagem.condutor_id')
|
||||
->join('cadastro_usuario AS usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->select(
|
||||
'viagem.condutor_id AS id',
|
||||
'cidadao.nome AS nome',
|
||||
)
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->when(request()->motorista, function ($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->when(request()->status, function ($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->orderBy('cidadao.nome')
|
||||
->groupBy('viagem.condutor_id')->get();
|
||||
|
||||
$meses = DB::table('transporte_paciente_viagem AS viagem')
|
||||
->join('transporte_paciente_condutor AS condutor', 'condutor.id', 'viagem.condutor_id')
|
||||
->leftJoin('transporte_paciente_destino AS destino', 'destino.id', 'viagem.destino_id')
|
||||
->select(
|
||||
DB::raw("MONTH(viagem.data) AS mes"),
|
||||
DB::raw("COUNT(viagem.id) AS total"),
|
||||
)
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->when(request()->motorista, function ($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->where('viagem.status_id', '!=', EnumViagemStatus::CANCELADO)
|
||||
->when(request()->status, function ($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->groupByRaw('MONTH(viagem.data)')->get();
|
||||
|
||||
$total = $meses->sum('total');
|
||||
|
||||
return ['consulta' => $consulta, 'motorista' => $motorista, 'meses' => $meses, 'total_meses' => $total];
|
||||
}
|
||||
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$items = self::list();
|
||||
$consulta = json_decode(json_encode($items['consulta']), true);
|
||||
$motorista = json_decode(json_encode($items['motorista']), true);
|
||||
$meses = json_decode(json_encode($items['meses']), true);
|
||||
$total_meses = json_decode(json_encode($items['total_meses']), true);
|
||||
|
||||
foreach ($meses as $key => $mes) {
|
||||
|
||||
if($mes['mes'] == '1') {
|
||||
$meses[$key]['mes'] = 'Janeiro';
|
||||
$meses[$key]['mes_abreviado'] = 'JAN';
|
||||
}
|
||||
|
||||
if($mes['mes'] == '2') {
|
||||
$meses[$key]['mes'] = 'Fevereiro';
|
||||
$meses[$key]['mes_abreviado'] = 'FEV';
|
||||
}
|
||||
|
||||
if($mes['mes'] == '3') {
|
||||
$meses[$key]['mes'] = 'Março';
|
||||
$meses[$key]['mes_abreviado'] = 'MAR';
|
||||
}
|
||||
|
||||
if($mes['mes'] == '4') {
|
||||
$meses[$key]['mes'] = 'Abril';
|
||||
$meses[$key]['mes_abreviado'] = 'ABR';
|
||||
}
|
||||
|
||||
if($mes['mes'] == '5') {
|
||||
$meses[$key]['mes'] = 'Maio';
|
||||
$meses[$key]['mes_abreviado'] = 'MAI';
|
||||
}
|
||||
|
||||
if($mes['mes'] == '6') {
|
||||
$meses[$key]['mes'] = 'Junho';
|
||||
$meses[$key]['mes_abreviado'] = 'JUN';
|
||||
}
|
||||
|
||||
if($mes['mes'] == '7') {
|
||||
$meses[$key]['mes'] = 'Julho';
|
||||
$meses[$key]['mes_abreviado'] = 'JUL';
|
||||
}
|
||||
|
||||
if($mes['mes'] == '8') {
|
||||
$meses[$key]['mes'] = 'Agosto';
|
||||
$meses[$key]['mes_abreviado'] = 'AGO';
|
||||
}
|
||||
|
||||
if($mes['mes'] == '9') {
|
||||
$meses[$key]['mes'] = 'Setembro';
|
||||
$meses[$key]['mes_abreviado'] = 'SET';
|
||||
}
|
||||
|
||||
if($mes['mes'] == '10') {
|
||||
$meses[$key]['mes'] = 'Outubro';
|
||||
$meses[$key]['mes_abreviado'] = 'OUT';
|
||||
}
|
||||
|
||||
if($mes['mes'] == '11') {
|
||||
$meses[$key]['mes'] = 'Novembro';
|
||||
$meses[$key]['mes_abreviado'] = 'NOV';
|
||||
}
|
||||
|
||||
if($mes['mes'] == '12') {
|
||||
$meses[$key]['mes'] = 'Dezembro';
|
||||
$meses[$key]['mes_abreviado'] = 'DEZ';
|
||||
}
|
||||
}
|
||||
|
||||
$condutor = request()->motorista ? Condutor::find(request()->motorista)->usuario_id : 0;
|
||||
$usuario = $condutor ? Usuario::find($condutor)->cidadao_id : 0;
|
||||
$filtro_motorista = $usuario ? Cidadao::find($usuario)->nome : 0;
|
||||
|
||||
return [
|
||||
'data_inicial' => Carbon::parse(request()->data_inicial)->format('d/m/Y'),
|
||||
'data_final' => Carbon::parse(request()->data_final)->format('d/m/Y'),
|
||||
'filtro_status' => request()->status ? ViagemStatus::find(request()->status)->descricao : 'Todos',
|
||||
'filtro_motorista' => $filtro_motorista ? $filtro_motorista : 'Todos',
|
||||
'consulta' => $consulta,
|
||||
'motorista' => $motorista,
|
||||
'meses' => $meses,
|
||||
'total' => $total_meses,
|
||||
'colunas' => collect(request()->selectedCols),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Relatorios;
|
||||
|
||||
use App\Models\Intranet\Municipio;
|
||||
use App\Enums\TransportePaciente\Status as TransportePacienteStatus;
|
||||
use App\Models\TransportePaciente\Condutor\Condutor;
|
||||
use App\Models\TransportePaciente\Destino\Destino;
|
||||
use App\Models\TransportePaciente\Status\Status;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
class ViagemDataService extends Service
|
||||
{
|
||||
public static function list()
|
||||
{
|
||||
$consulta = DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'agendar.id',
|
||||
'municipio.nome as municipio',
|
||||
'cidadao.nome as motorista',
|
||||
'destino.descricao_destino as descricao_destino',
|
||||
'status.id as status_id',
|
||||
'status.descricao as descricao_status',
|
||||
DB::raw('IF(viagem.protocolo IS NOT NULL, viagem.protocolo, "-") AS protocolo'),
|
||||
DB::raw('DATE_FORMAT(agendar.data, "%d/%m/%Y") as data')
|
||||
)
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', '=', 'agendar.municipio_id')
|
||||
->join('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id')
|
||||
->join('transporte_paciente_condutor as condutor', 'condutor.id', 'viagem.condutor_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->join('transporte_paciente_status as status', 'status.id', 'agendar.status_id')
|
||||
->where('agendar.data', '>=', Carbon::parse(request()->start)->format('Y-m-d'))
|
||||
->where('agendar.data', '<', Carbon::parse(request()->end)->addDay()->format('Y-m-d'))
|
||||
->when(request()->municipio, function ($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->motorista, function ($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->when(request()->destino, function ($query) {
|
||||
$query->where('destino.id', request()->destino);
|
||||
})
|
||||
->when(request()->status, function ($query) {
|
||||
$query->where('status.id', request()->status);
|
||||
})
|
||||
->orderBy('agendar.data')
|
||||
->get();
|
||||
|
||||
return [
|
||||
'consulta' => $consulta,
|
||||
'totalizadores' => [
|
||||
'agendado' => $consulta->where('status_id', TransportePacienteStatus::AGENDADO)->count(),
|
||||
'cancelado' => $consulta->where('status_id', TransportePacienteStatus::CANCELADO)->count(),
|
||||
'faltou' => $consulta->where('status_id', TransportePacienteStatus::FALTOU)->count(),
|
||||
'transportado' => $consulta->where('status_id', TransportePacienteStatus::TRANSPORTADO)->count(),
|
||||
'geral' => $consulta->count(),
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$items = self::list();
|
||||
return [
|
||||
'data_inicial' => Carbon::parse(request()->start)->format('d/m/Y'),
|
||||
'data_final' => Carbon::parse(request()->end)->format('d/m/Y'),
|
||||
'municipio' => request()->municipio ? Municipio::find(request()->municipio)->nome : 'Todos',
|
||||
'motorista' => request()->motorista ? Condutor::find(request()->motorista)->usuario->cidadao->nome : 'Todos',
|
||||
'destino' => request()->destino ? Destino::find(request()->destino)->descricao_destino : 'Todos',
|
||||
'status' => request()->status ? Status::find(request()->status)->descricao : 'Todos',
|
||||
'totalizadores' => $items['totalizadores'],
|
||||
'items' => $items,
|
||||
'colunas' => collect(request()->selectedCols),
|
||||
];
|
||||
}
|
||||
}
|
||||
156
api/app/Services/TransportePaciente/Relatorios/ViagemService.php
Normal file
156
api/app/Services/TransportePaciente/Relatorios/ViagemService.php
Normal file
@@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Relatorios;
|
||||
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Carbon;
|
||||
use App\Enums\TransportePaciente\ViagemStatus;
|
||||
|
||||
class ViagemService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
return [
|
||||
'model' => [
|
||||
'data_inicial' => null,
|
||||
'data_final' => null,
|
||||
'municipio' => null,
|
||||
],
|
||||
'form' => [
|
||||
'municipios' => []
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$viagens = DB::table('transporte_paciente_viagem as viagem')
|
||||
->leftJoin('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->leftJoin('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->leftJoin('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
||||
->leftJoin('transporte_paciente_veiculo as veiculo','viagem.veiculo_id', 'veiculo.id')
|
||||
->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id')
|
||||
->leftJoin('cadastro_usuario as usuario', 'condutor.usuario_id', 'usuario.id')
|
||||
->leftJoin('cadastro_cidadao as cidadao', 'usuario.cidadao_id', 'cidadao.id')
|
||||
->leftJoin('transporte_paciente_jornada as jornada', 'jornada.id', 'viagem.jornada_id')
|
||||
->leftJoin('transporte_paciente_viagem_status as viagem_status', 'viagem_status.id', 'viagem.status_id')
|
||||
->select(
|
||||
'viagem.id',
|
||||
DB::raw('DATE_FORMAT(viagem.data, "%d/%m/%Y") as data'),
|
||||
DB::raw("viagem.horario_saida_temp IS NOT NULL, DATE_FORMAT(viagem.horario_saida_temp, '%H:%i') AS horario"),
|
||||
'municipio.nome as municipio',
|
||||
DB::raw('CONCAT(veiculo.numero_placa," - ",veiculo.descricao_modelo) AS veiculo'),
|
||||
'veiculo.id as veiculo_id',
|
||||
'cidadao.nome as motorista',
|
||||
'viagem.status_id as status_da_viagem',
|
||||
'viagem_status.descricao as nome_status',
|
||||
DB::raw('IF(viagem.protocolo IS NOT NULL, viagem.protocolo, "-") AS protocolo')
|
||||
)
|
||||
->where('viagem.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('viagem.data', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->when(request()->municipio_id, function($query) {
|
||||
$query->where('destino.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->protocolo, function($query) {
|
||||
$query->where('viagem.protocolo', request()->protocolo);
|
||||
})
|
||||
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
||||
->whereExists(function ($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('transporte_paciente_agendar_transporte')
|
||||
->whereRaw('transporte_paciente_agendar_transporte.viagem_id = viagem.id');
|
||||
})
|
||||
->groupBy('horario', 'motorista', 'veiculo_id')
|
||||
->orderBy('viagem.data')
|
||||
->get();
|
||||
|
||||
$viagens->each(function($viagem) {
|
||||
|
||||
$agendados = DB::table('transporte_paciente_agendar_transporte')
|
||||
->where('viagem_id', $viagem->id)
|
||||
->get();
|
||||
$viagem->pacientes = $agendados->count();
|
||||
$viagem->acompanhantes = $agendados->sum('acompanhante');
|
||||
$viagem->quantidade = $viagem->pacientes + $viagem->acompanhantes;
|
||||
});
|
||||
|
||||
return $viagens;
|
||||
}
|
||||
|
||||
public static function getMunicipios()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'agendar.municipio_id')
|
||||
->select('municipio.id', 'municipio.nome')
|
||||
->where('viagem.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('viagem.data', '<=', Carbon::parse(request()->data_final)->format('Y-m-d'))
|
||||
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
||||
->orderBy('municipio.nome')
|
||||
->groupBy('municipio.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getViagem()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->leftJoin('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->leftJoin('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->leftJoin('cadastro_paciente as paciente', 'paciente.id', 'agendar.paciente_id')
|
||||
->leftJoin('cadastro_cidadao as cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
||||
->leftJoin('cadastro_domicilio as domicilio', 'cidadao.domicilio_id', 'domicilio.id')
|
||||
->leftJoin('cadastro_endereco as endereco', 'endereco.id', 'domicilio.endereco_id')
|
||||
->leftJoin('cadastro_logradouro as logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
||||
->leftJoin('intranet.cadastro_municipio as municipio', 'municipio.id', 'logradouro.municipio_id')
|
||||
->leftJoin('cadastro_bairro as bairro', 'bairro.id', 'logradouro.bairro_id')
|
||||
->leftJoin('intranet.cadastro_estado as estado', 'estado.id', 'municipio.estado_id')
|
||||
->leftJoin('transporte_paciente_ponto as ponto', 'ponto.id', 'agendar.ponto_id')
|
||||
->leftJoin('transporte_paciente_acompanhante as acompanhante1', 'acompanhante1.id', 'agendar.acompanhante_1_id')
|
||||
->leftJoin('cadastro_paciente as paciente_acompanhante_1', 'paciente_acompanhante_1.id', 'acompanhante1.usuario_id')
|
||||
->leftJoin('cadastro_cidadao as cidadao_acompanhante_1', 'paciente_acompanhante_1.cidadao_id', 'cidadao_acompanhante_1.id')
|
||||
->leftJoin('transporte_paciente_acompanhante_relacao as relacao1', 'relacao1.id', 'acompanhante1.relacao_id')
|
||||
->leftJoin('transporte_paciente_acompanhante as acompanhante2', 'acompanhante2.id', 'agendar.acompanhante_2_id')
|
||||
->leftJoin('cadastro_paciente as paciente_acompanhante_2', 'paciente_acompanhante_2.cidadao_id', 'acompanhante2.usuario_id')
|
||||
->leftJoin('cadastro_cidadao as cidadao_acompanhante_2', 'paciente_acompanhante_2.id', 'paciente_acompanhante_2.id')
|
||||
->leftJoin('transporte_paciente_acompanhante_relacao as relacao2', 'relacao2.id', 'acompanhante2.relacao_id')
|
||||
->select(
|
||||
DB::raw('DATE_FORMAT(agendar.horario, "%H:%i") as horario'),
|
||||
'estado.uf as estado',
|
||||
'municipio.nome as municipio',
|
||||
'cidadao.nome',
|
||||
'destino.descricao_destino as destino',
|
||||
'cidadao.cns',
|
||||
'logradouro.nome as logradouro',
|
||||
'endereco.numero',
|
||||
'bairro.nome as bairro',
|
||||
'agendar.consulta_observacao as observacao',
|
||||
'cidadao_acompanhante_1.nome as acompanhante_1',
|
||||
'acompanhante1.nome as nome_1',
|
||||
'cidadao_acompanhante_1.cns as cns_acompanhante_1',
|
||||
'relacao1.descricao as relacao_1',
|
||||
'cidadao_acompanhante_2.nome as acompanhante_2',
|
||||
'acompanhante2.nome as nome_2',
|
||||
'cidadao_acompanhante_2.cns as cns_acompanhante_2',
|
||||
'relacao2.descricao as relacao_2',
|
||||
DB::raw('COALESCE(ponto.descricao, "CASA DO PACIENTE") AS ponto'),
|
||||
)
|
||||
->where('viagem.id', request()->viagem_id)
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$items = self::list();
|
||||
$total_pacientes = $items->sum('pacientes');
|
||||
$total_acompanhantes = $items->sum('acompanhantes');
|
||||
return [
|
||||
'data_inicial' => Carbon::parse(request()->data_inicial)->format('d/m/Y'),
|
||||
'data_final' => Carbon::parse(request()->data_final)->format('d/m/Y'),
|
||||
'items' => $items,
|
||||
'colunas' => collect(request()->selectedCols),
|
||||
'total_pacientes_acompanhantes' => $total_pacientes + $total_acompanhantes
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,231 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Relatorios;
|
||||
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Carbon;
|
||||
use App\Models\TransportePaciente\ViagemStatus;
|
||||
use App\Enums\TransportePaciente\ViagemStatus as EnumViagemStatus;
|
||||
|
||||
class ViagemVeiculoService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
return [
|
||||
'form' => [
|
||||
'status' => ViagemStatus::find([
|
||||
EnumViagemStatus::ABERTO,
|
||||
EnumViagemStatus::FINALIZADO,
|
||||
]),
|
||||
'veiculos' => [],
|
||||
],
|
||||
'model' => [
|
||||
'ano' => null,
|
||||
'periodo' => [
|
||||
'start' => null,
|
||||
'end' => null,
|
||||
],
|
||||
'veiculo' => null,
|
||||
'status' => null,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function getVeiculos()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'viagem.veiculo_id')
|
||||
->select('veiculo.id', DB::raw("CONCAT(veiculo.numero_placa, ' - ', veiculo.descricao_modelo) as descricao"))
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->where('viagem.status_id', '!=', EnumViagemStatus::CANCELADO)
|
||||
->when(request()->status, function ($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->groupBy('viagem.veiculo_id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
return [
|
||||
'resultado' => DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'viagem.veiculo_id')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->leftJoin('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->leftJoin('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.municipio_id')
|
||||
->leftJoin('intranet.cadastro_estado as estado', 'estado.id', 'municipio.estado_id')
|
||||
->select(
|
||||
'viagem.veiculo_id',
|
||||
'destino.municipio_id',
|
||||
'agendar.destino_id',
|
||||
DB::raw("CONCAT(veiculo.descricao_modelo, ' - ',veiculo.numero_placa) as veiculo"),
|
||||
DB::raw("CONCAT(municipio.nome, ' - ',estado.uf) as municipio"),
|
||||
DB::raw("COUNT(*) as total"),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 1 THEN 1 END) AS total_janeiro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 2 THEN 1 END) AS total_fevereiro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 3 THEN 1 END) AS total_marco'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 4 THEN 1 END) AS total_abril'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 5 THEN 1 END) AS total_maio'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 6 THEN 1 END) AS total_junho'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 7 THEN 1 END) AS total_julho'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 8 THEN 1 END) AS total_agosto'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 9 THEN 1 END) AS total_setembro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 10 THEN 1 END) AS total_outubro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 11 THEN 1 END) AS total_novembro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 12 THEN 1 END) AS total_dezembro'),
|
||||
)
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->when(request()->veiculo, function ($query) {
|
||||
$query->where('viagem.veiculo_id', request()->veiculo);
|
||||
})
|
||||
->where('viagem.status_id', '!=', EnumViagemStatus::CANCELADO)
|
||||
->when(request()->status, function ($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->groupByRaw('viagem.veiculo_id, destino.municipio_id')
|
||||
->orderBy('veiculo')
|
||||
->get(),
|
||||
'veiculos' => DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'viagem.veiculo_id')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->select(
|
||||
'viagem.veiculo_id',
|
||||
DB::raw("CONCAT(veiculo.descricao_modelo, ' - ',veiculo.numero_placa) as veiculo"),
|
||||
DB::raw("COUNT(*) as total"),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 1 THEN 1 END) AS total_janeiro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 2 THEN 1 END) AS total_fevereiro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 3 THEN 1 END) AS total_marco'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 4 THEN 1 END) AS total_abril'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 5 THEN 1 END) AS total_maio'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 6 THEN 1 END) AS total_junho'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 7 THEN 1 END) AS total_julho'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 8 THEN 1 END) AS total_agosto'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 9 THEN 1 END) AS total_setembro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 10 THEN 1 END) AS total_outubro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 11 THEN 1 END) AS total_novembro'),
|
||||
DB::raw('COUNT(CASE WHEN MONTH(viagem.data) = 12 THEN 1 END) AS total_dezembro'),
|
||||
)
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->where('viagem.status_id', '!=', EnumViagemStatus::CANCELADO)
|
||||
->when(request()->status, function ($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->when(request()->veiculo, function ($query) {
|
||||
$query->where('viagem.veiculo_id', request()->veiculo);
|
||||
})
|
||||
->groupBy('viagem.veiculo_id')
|
||||
->get(),
|
||||
'totais' => DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->select(
|
||||
DB::raw("MONTH(viagem.data) as mes"),
|
||||
DB::raw("COUNT(viagem.id) as total"),
|
||||
)
|
||||
->where('viagem.data', '>=', request()->data_inicial)
|
||||
->where('viagem.data', '<=', request()->data_final)
|
||||
->where('viagem.status_id', '!=', EnumViagemStatus::CANCELADO)
|
||||
->when(request()->veiculo, function($query) {
|
||||
$query->where('viagem.veiculo_id', request()->veiculo);
|
||||
})
|
||||
->when(request()->status, function ($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->groupByRaw('mes')
|
||||
->get()
|
||||
];
|
||||
}
|
||||
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$data = self::list();
|
||||
$items = $data['resultado']->map(fn($item) => [
|
||||
'veiculo' => $item->veiculo,
|
||||
'municipio' => $item->municipio,
|
||||
'total' => $item->total,
|
||||
'jan' =>$item->total_janeiro ?? 0,
|
||||
'fev' =>$item->total_fevereiro ?? 0,
|
||||
'mar' =>$item->total_marco ?? 0,
|
||||
'abr' =>$item->total_abril ?? 0,
|
||||
'mai' =>$item->total_maio ?? 0,
|
||||
'jun' =>$item->total_junho ?? 0,
|
||||
'jul' =>$item->total_julho ?? 0,
|
||||
'ago' =>$item->total_agosto ?? 0,
|
||||
'set' => $item->total_setembro ?? 0,
|
||||
'out' => $item->total_outubro ?? 0,
|
||||
'nov' => $item->total_novembro ?? 0,
|
||||
'dez' => $item->total_dezembro ?? 0,
|
||||
]);
|
||||
$veiculos = $data['veiculos']->map(fn($item) => [
|
||||
'veiculo' => $item->veiculo,
|
||||
'municipio' => 'TODOS',
|
||||
'total' => $item->total,
|
||||
'jan' =>$item->total_janeiro ?? 0,
|
||||
'fev' =>$item->total_fevereiro ?? 0,
|
||||
'mar' =>$item->total_marco ?? 0,
|
||||
'abr' =>$item->total_abril ?? 0,
|
||||
'mai' =>$item->total_maio ?? 0,
|
||||
'jun' =>$item->total_junho ?? 0,
|
||||
'jul' =>$item->total_julho ?? 0,
|
||||
'ago' =>$item->total_agosto ?? 0,
|
||||
'set' => $item->total_setembro ?? 0,
|
||||
'out' => $item->total_outubro ?? 0,
|
||||
'nov' => $item->total_novembro ?? 0,
|
||||
'dez' => $item->total_dezembro ?? 0,
|
||||
]);
|
||||
$totais = [
|
||||
'jan' => $data['totais']->contains('mes', 1) ? $data['totais']->first(function($item) {
|
||||
return $item->mes == 1;
|
||||
})->total : null,
|
||||
'fev' => $data['totais']->contains('mes', 2) ? $data['totais']->first(function($item) {
|
||||
return $item->mes == 2;
|
||||
})->total : null,
|
||||
'mar' => $data['totais']->contains('mes', 3) ? $data['totais']->first(function($item) {
|
||||
return $item->mes == 3;
|
||||
})->total : null,
|
||||
'abr' => $data['totais']->contains('mes', 4) ? $data['totais']->first(function($item) {
|
||||
return $item->mes == 4;
|
||||
})->total : null,
|
||||
'mai' => $data['totais']->contains('mes', 5) ? $data['totais']->first(function($item) {
|
||||
return $item->mes == 5;
|
||||
})->total : null,
|
||||
'jun' => $data['totais']->contains('mes', 6) ? $data['totais']->first(function($item) {
|
||||
return $item->mes == 6;
|
||||
})->total : null,
|
||||
'jul' => $data['totais']->contains('mes', 7) ? $data['totais']->first(function($item) {
|
||||
return $item->mes == 7;
|
||||
})->total : null,
|
||||
'ago' => $data['totais']->contains('mes', 8) ? $data['totais']->first(function($item) {
|
||||
return $item->mes == 8;
|
||||
})->total : null,
|
||||
'set' => $data['totais']->contains('mes', 9) ? $data['totais']->first(function($item) {
|
||||
return $item->mes == 9;
|
||||
})->total : null,
|
||||
'out' => $data['totais']->contains('mes', 10) ? $data['totais']->first(function($item) {
|
||||
return $item->mes == 10;
|
||||
})->total : null,
|
||||
'nov' => $data['totais']->contains('mes', 11) ? $data['totais']->first(function($item) {
|
||||
return $item->mes == 11;
|
||||
})->total : null,
|
||||
'dez' => $data['totais']->contains('mes', 12) ? $data['totais']->first(function($item) {
|
||||
return $item->mes == 12;
|
||||
})->total : null,
|
||||
'total' => $data['totais']->sum('total')
|
||||
];
|
||||
return [
|
||||
'data_inicial' => Carbon::parse(request()->data_inicial)->format('d/m/Y'),
|
||||
'data_final' => Carbon::parse(request()->data_final)->format('d/m/Y'),
|
||||
'filtro_veiculo' => request()->filtro_veiculo ? request()->filtro_veiculo : 'Todos',
|
||||
'filtro_status' => request()->filtro_status ? request()->filtro_status : 'Todos',
|
||||
'items' => $items,
|
||||
'veiculos' => $veiculos,
|
||||
'totais' => $totais,
|
||||
'colunas' => collect(request()->selectedCols),
|
||||
'colunasTotal' => collect(request()->selectedCols)->splice(2)
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,288 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Supervisor;
|
||||
|
||||
use App\Models\TransportePaciente\Supervisor\Supervisor;
|
||||
use App\Services\Service;
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class SupervisorService extends Service
|
||||
{
|
||||
|
||||
public static function getUnidades() {
|
||||
|
||||
$unidades = DB::table('cadastro_unidade')
|
||||
->select(
|
||||
'cadastro_unidade.id as id_unidade',
|
||||
'cadastro_unidade.nome_fantasia as nome_fantasia',
|
||||
'cadastro_infraestrutura.id as id_infraestrutura',
|
||||
DB::raw("
|
||||
CASE WHEN cadastro_infraestrutura.nome IS NOT NULL THEN
|
||||
cadastro_infraestrutura.nome
|
||||
ELSE
|
||||
cadastro_unidade.nome_fantasia
|
||||
END AS nome_infraestrutura
|
||||
"),
|
||||
'cadastro_infraestrutura.principal as principal'
|
||||
)
|
||||
->join(
|
||||
'cadastro_infraestrutura',
|
||||
'cadastro_infraestrutura.unidade_id',
|
||||
'cadastro_unidade.id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_lotacao',
|
||||
'cadastro_lotacao.infraestrutura_id',
|
||||
'cadastro_infraestrutura.id'
|
||||
)
|
||||
->where('cadastro_lotacao.usuario_id', request()->usuario_id)
|
||||
->groupBy('id_unidade', 'id_infraestrutura')
|
||||
->get();
|
||||
|
||||
$unidadesComInfraestruturas = [];
|
||||
|
||||
foreach ($unidades as $unidade) {
|
||||
$idUnidade = $unidade->id_unidade;
|
||||
$nomeUnidade = $unidade->nome_fantasia;
|
||||
|
||||
$infraestrutura = [
|
||||
'id' => $unidade->id_infraestrutura,
|
||||
'nome' => $unidade->nome_infraestrutura,
|
||||
'principal' => $unidade->principal
|
||||
];
|
||||
|
||||
if (!array_key_exists($idUnidade, $unidadesComInfraestruturas)) {
|
||||
$unidadesComInfraestruturas[$idUnidade] = [
|
||||
'id' => $idUnidade,
|
||||
'nome_fantasia' => $nomeUnidade,
|
||||
'infraestruturas' => []
|
||||
];
|
||||
}
|
||||
|
||||
$unidadesComInfraestruturas[$idUnidade]['infraestruturas'][] = $infraestrutura;
|
||||
}
|
||||
|
||||
return array_values($unidadesComInfraestruturas);
|
||||
}
|
||||
|
||||
private static function getModelData($supervisor = null)
|
||||
{
|
||||
|
||||
$supervisor = [
|
||||
'id' => $supervisor->id ?? null,
|
||||
'usuario' => [
|
||||
'id' => $supervisor ? $supervisor->usuario->id : null,
|
||||
'cidadao_nome' => $supervisor ? $supervisor->usuario->cidadao->nome : null
|
||||
],
|
||||
'usuario_id' => $supervisor->usuario_id ?? null,
|
||||
'origem_usuario_id' => $supervisor->usuario_id ?? null,
|
||||
'unidade_id' => $supervisor->unidade_id ?? null,
|
||||
'infraestrutura_id' => $supervisor->infraestrutura_id ?? null,
|
||||
];
|
||||
|
||||
return $supervisor;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
return Supervisor::find($id);
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return Supervisor::where('id', $id)->update(request()->all());
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
return [
|
||||
'model' => self::getModelData(self::show($id)),
|
||||
];
|
||||
}
|
||||
|
||||
public static function getSupervisor()
|
||||
{
|
||||
return DB::table('transporte_paciente_supervisor')
|
||||
->select(
|
||||
'transporte_paciente_supervisor.id',
|
||||
'cadastro_cidadao.nome as usuario',
|
||||
DB::raw("
|
||||
CASE WHEN cadastro_unidade.nome_fantasia IS NOT NULL THEN
|
||||
cadastro_unidade.nome_fantasia
|
||||
ELSE
|
||||
'TODAS'
|
||||
END AS unidade
|
||||
"),
|
||||
DB::raw("
|
||||
CASE WHEN transporte_paciente_supervisor.infraestrutura_id IS NOT NULL THEN
|
||||
COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia)
|
||||
ELSE
|
||||
'TODOS'
|
||||
END AS infraestrutura
|
||||
"),
|
||||
)
|
||||
->join(
|
||||
'cadastro_usuario',
|
||||
'cadastro_usuario.id',
|
||||
'transporte_paciente_supervisor.usuario_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_cidadao',
|
||||
'cadastro_cidadao.id',
|
||||
'cadastro_usuario.cidadao_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_unidade',
|
||||
'cadastro_unidade.id',
|
||||
'transporte_paciente_supervisor.unidade_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_infraestrutura',
|
||||
'cadastro_infraestrutura.id',
|
||||
'transporte_paciente_supervisor.infraestrutura_id'
|
||||
)
|
||||
->where(function ($query) {
|
||||
|
||||
if (request()->unidade_id) {
|
||||
|
||||
$query
|
||||
->where('transporte_paciente_supervisor.unidade_id', request()->unidade_id)
|
||||
->orWhereNull('transporte_paciente_supervisor.unidade_id');
|
||||
|
||||
} else {
|
||||
|
||||
$query
|
||||
->whereNotNull('transporte_paciente_supervisor.unidade_id')
|
||||
->orWhereNull('transporte_paciente_supervisor.unidade_id');
|
||||
}
|
||||
})
|
||||
->where(function ($query) {
|
||||
|
||||
if (request()->unidade_id) {
|
||||
|
||||
if (request()->infraestrutura_id) {
|
||||
|
||||
$query
|
||||
->where('transporte_paciente_supervisor.infraestrutura_id', request()->infraestrutura_id)
|
||||
->orWhereNull('transporte_paciente_supervisor.infraestrutura_id');
|
||||
} else {
|
||||
|
||||
$query
|
||||
->whereNotNull('transporte_paciente_supervisor.infraestrutura_id')
|
||||
->orWhereNull('transporte_paciente_supervisor.infraestrutura_id');
|
||||
}
|
||||
}
|
||||
})
|
||||
->where('cadastro_usuario.id', request()->usuario_id)
|
||||
->first();
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return Supervisor::create(request()->all())->fresh();
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
return self::show($id)->delete();
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
|
||||
$supervisor = DB::table('transporte_paciente_supervisor')
|
||||
->select(
|
||||
'transporte_paciente_supervisor.id',
|
||||
'cadastro_cidadao.nome as usuario',
|
||||
DB::raw("
|
||||
CASE WHEN cadastro_unidade.nome_fantasia IS NOT NULL THEN
|
||||
cadastro_unidade.nome_fantasia
|
||||
ELSE
|
||||
'TODAS'
|
||||
END AS unidade
|
||||
"),
|
||||
DB::raw("
|
||||
CASE WHEN transporte_paciente_supervisor.infraestrutura_id IS NOT NULL THEN
|
||||
COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia)
|
||||
ELSE
|
||||
'TODOS'
|
||||
END AS infraestrutura
|
||||
"),
|
||||
)
|
||||
->join(
|
||||
'cadastro_usuario',
|
||||
'cadastro_usuario.id',
|
||||
'transporte_paciente_supervisor.usuario_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_cidadao',
|
||||
'cadastro_cidadao.id',
|
||||
'cadastro_usuario.cidadao_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_unidade',
|
||||
'cadastro_unidade.id',
|
||||
'transporte_paciente_supervisor.unidade_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_infraestrutura',
|
||||
'cadastro_infraestrutura.id',
|
||||
'transporte_paciente_supervisor.infraestrutura_id'
|
||||
);
|
||||
|
||||
return datatables()
|
||||
->of($supervisor)
|
||||
->filterColumn('cadastro_infraestrutura.nome', function ($query, $keyword) {
|
||||
|
||||
$query
|
||||
->whereRaw("cadastro_infraestrutura.nome like ?", ["%{$keyword}%"])
|
||||
->orWhereRaw(
|
||||
"CASE WHEN transporte_paciente_supervisor.infraestrutura_id IS NOT NULL THEN
|
||||
COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia)
|
||||
ELSE
|
||||
'TODOS'
|
||||
END like ?",
|
||||
["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->filterColumn('cadastro_unidade.nome_fantasia', function ($query, $keyword) {
|
||||
|
||||
$query
|
||||
->whereRaw("cadastro_unidade.nome_fantasia like ?", ["%{$keyword}%"])
|
||||
->orWhereRaw(
|
||||
"CASE WHEN cadastro_unidade.nome_fantasia IS NOT NULL THEN
|
||||
cadastro_unidade.nome_fantasia
|
||||
ELSE
|
||||
'TODAS'
|
||||
END like ?",
|
||||
["%{$keyword}%"]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
return request()->validate(
|
||||
[
|
||||
'usuario_id' => [
|
||||
'required',
|
||||
],
|
||||
],
|
||||
[
|
||||
'usuario_id.unique' => 'É obrigatório informar o profissional.',
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,684 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Transferencia;
|
||||
|
||||
use App\Enums\TransportePaciente\Funcionalidade;
|
||||
use App\Enums\TransportePaciente\Status;
|
||||
use App\Enums\TransportePaciente\ViagemStatus;
|
||||
use App\Models\TransportePaciente\Agendar\Agendar;
|
||||
use App\Models\TransportePaciente\Destino\Destino;
|
||||
use App\Models\TransportePaciente\Parametrizacao\Parametrizacao;
|
||||
use App\Models\TransportePaciente\Veiculo\Tipo;
|
||||
use App\Models\TransportePaciente\Veiculo\TipoPassageiro;
|
||||
use App\Models\TransportePaciente\Veiculo\Veiculo;
|
||||
use App\Models\TransportePaciente\Viagem;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class TransferenciaService extends Service
|
||||
{
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$agendamentos = DB::table('transporte_paciente_agendar_transporte')
|
||||
->select([
|
||||
'transporte_paciente_viagem.protocolo',
|
||||
'transporte_paciente_agendar_transporte.supervisor_id',
|
||||
'transporte_paciente_viagem.jornada_id',
|
||||
'cadastro_cidadao.nome AS motorista_nome',
|
||||
'intranet.cadastro_municipio.nome AS municipio_nome',
|
||||
'transporte_paciente_condutor.id AS motorista_id',
|
||||
DB::raw('IF(transporte_paciente_viagem.diaria IS NOT NULL, FORMAT(transporte_paciente_viagem.diaria, 2, "pt_BR"), NULL) AS diaria'),
|
||||
DB::raw('DATE_FORMAT(transporte_paciente_agendar_transporte.data, "%d/%m/%Y") AS data_consulta'),
|
||||
DB::raw('DATE_FORMAT(transporte_paciente_agendar_transporte.data_saida, "%d/%m/%Y") AS data_saida'),
|
||||
DB::raw('TIME_FORMAT(transporte_paciente_agendar_transporte.horario, "%H:%i") AS horario_consulta'),
|
||||
DB::raw('COALESCE(SUM(transporte_paciente_agendar_transporte.acompanhante), 0) AS quantidade_acompanhantes'),
|
||||
DB::raw('COUNT(transporte_paciente_agendar_transporte.id) AS quantidade_pacientes'),
|
||||
DB::raw('transporte_paciente_veiculo.id AS veiculo_id'),
|
||||
DB::raw('transporte_paciente_veiculo.numero_capacidade AS capacidade'),
|
||||
DB::raw('CONCAT(
|
||||
transporte_paciente_veiculo.numero_placa,
|
||||
" - ",
|
||||
transporte_paciente_veiculo.descricao_modelo
|
||||
) AS veiculo_nome'),
|
||||
DB::raw('IFNULL(
|
||||
IF(
|
||||
transporte_paciente_veiculo.numero_capacidade - (
|
||||
COALESCE(SUM(transporte_paciente_agendar_transporte.acompanhante), 0) + COUNT(transporte_paciente_agendar_transporte.id)
|
||||
) < 0,
|
||||
0,
|
||||
transporte_paciente_veiculo.numero_capacidade - (
|
||||
COALESCE(SUM(transporte_paciente_agendar_transporte.acompanhante), 0) + COUNT(transporte_paciente_agendar_transporte.id)
|
||||
)
|
||||
),
|
||||
transporte_paciente_veiculo.numero_capacidade
|
||||
) AS vagas_disponiveis'),
|
||||
DB::raw("CASE
|
||||
WHEN transporte_paciente_viagem.jornada_id IS NULL THEN 'SEM JORNADA'
|
||||
ELSE CONCAT(
|
||||
DATE_FORMAT(transporte_paciente_jornada.data_inicial, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
DATE_FORMAT(transporte_paciente_jornada.data_final, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
transporte_paciente_jornada.id
|
||||
) END AS jornada"
|
||||
),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN transporte_paciente_viagem.horario_saida_real IS NOT NULL THEN
|
||||
TIME_FORMAT(transporte_paciente_viagem.horario_saida_real, "%H:%i")
|
||||
WHEN transporte_paciente_viagem.horario_saida_temp IS NOT NULL THEN
|
||||
TIME_FORMAT(transporte_paciente_viagem.horario_saida_temp, "%H:%i")
|
||||
ELSE
|
||||
"-"
|
||||
END AS horario_saida
|
||||
')
|
||||
])
|
||||
->join(
|
||||
'transporte_paciente_veiculo',
|
||||
'transporte_paciente_veiculo.id',
|
||||
'transporte_paciente_agendar_transporte.veiculo_id'
|
||||
)
|
||||
->join(
|
||||
'transporte_paciente_viagem',
|
||||
'transporte_paciente_viagem.veiculo_id',
|
||||
'transporte_paciente_veiculo.id'
|
||||
)
|
||||
->join(
|
||||
'transporte_paciente_condutor',
|
||||
'transporte_paciente_condutor.id',
|
||||
'transporte_paciente_viagem.condutor_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_usuario',
|
||||
'cadastro_usuario.id',
|
||||
'transporte_paciente_condutor.usuario_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_cidadao',
|
||||
'cadastro_cidadao.id',
|
||||
'cadastro_usuario.cidadao_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'transporte_paciente_destino as destino',
|
||||
'transporte_paciente_agendar_transporte.destino_id',
|
||||
'destino.id'
|
||||
)
|
||||
->join(
|
||||
'intranet.cadastro_municipio',
|
||||
'intranet.cadastro_municipio.id',
|
||||
'transporte_paciente_agendar_transporte.municipio_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'transporte_paciente_jornada',
|
||||
'transporte_paciente_jornada.id',
|
||||
'transporte_paciente_viagem.jornada_id'
|
||||
)
|
||||
->whereColumn('transporte_paciente_viagem.id', '=', 'transporte_paciente_agendar_transporte.viagem_id')
|
||||
->when(request()->municipio_id, function ($query) {
|
||||
$query->where('destino.municipio_id', request()->municipio_id);
|
||||
})
|
||||
->when(request()->destino_id, function ($query) {
|
||||
$query->where('destino.id', request()->destino_id);
|
||||
});
|
||||
|
||||
$agendamentos = $agendamentos->whereIn('transporte_paciente_agendar_transporte.status_id', [Status::AGENDADO, Status::MODIFICADO, Status::REAGENDADO]);
|
||||
|
||||
if (request()->data_saida) {
|
||||
|
||||
$agendamentos = $agendamentos->where('transporte_paciente_agendar_transporte.data_saida', request()->data_saida);
|
||||
$agendamentos = $agendamentos->where('transporte_paciente_viagem.data', request()->data_saida);
|
||||
} else {
|
||||
|
||||
$agendamentos = $agendamentos->where('transporte_paciente_agendar_transporte.data_saida', $currentDate);
|
||||
$agendamentos = $agendamentos->where('transporte_paciente_viagem.data', $currentDate);
|
||||
}
|
||||
|
||||
$agendamentos = $agendamentos->groupBy(
|
||||
'transporte_paciente_veiculo.id',
|
||||
'transporte_paciente_condutor.id',
|
||||
'transporte_paciente_viagem.jornada_id'
|
||||
);
|
||||
|
||||
$agendamentos = $agendamentos->get();
|
||||
|
||||
return [
|
||||
'veiculos' => self::getVeiculos(),
|
||||
'agendamentos' => $agendamentos,
|
||||
'agendamentos_jornada' => self::getAgendadosPaciente()
|
||||
];
|
||||
}
|
||||
|
||||
public static function index()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
|
||||
$agendamentos = DB::table('transporte_paciente_agendar_transporte')
|
||||
->select([
|
||||
'transporte_paciente_viagem.protocolo',
|
||||
'transporte_paciente_agendar_transporte.id',
|
||||
'transporte_paciente_agendar_transporte.supervisor_id',
|
||||
'transporte_paciente_agendar_transporte.jornada_id',
|
||||
'transporte_paciente_agendar_transporte.consulta_observacao as observacao',
|
||||
'transporte_paciente_condutor.id AS motorista_id',
|
||||
'cidadao_condutor.nome AS motorista_nome',
|
||||
DB::raw('IF(transporte_paciente_viagem.diaria IS NOT NULL, FORMAT(transporte_paciente_viagem.diaria, 2, "pt_BR"), NULL) AS diaria'),
|
||||
DB::raw('DATE_FORMAT(transporte_paciente_agendar_transporte.data, "%d/%m/%Y") AS data_consulta'),
|
||||
DB::raw('DATE_FORMAT(transporte_paciente_agendar_transporte.data_saida, "%d/%m/%Y") AS data_saida'),
|
||||
DB::raw('TIME_FORMAT(transporte_paciente_agendar_transporte.horario, "%H:%i") AS horario_consulta'),
|
||||
'transporte_paciente_agendar_transporte.consulta_observacao',
|
||||
'transporte_paciente_agendar_transporte.horario_saida',
|
||||
DB::raw('COALESCE(transporte_paciente_agendar_transporte.acompanhante, "NÃO") AS acompanhante'),
|
||||
DB::raw('COALESCE(transporte_paciente_ponto.descricao, "CASA DO PACIENTE") AS ponto'),
|
||||
DB::raw('COALESCE(transporte_paciente_destino.descricao_destino, "-") AS destino'),
|
||||
'intranet.cadastro_municipio.nome AS municipio',
|
||||
'cadastro_paciente.id AS paciente_id',
|
||||
'cadastro_cidadao.nome AS paciente_nome',
|
||||
'cadastro_cidadao.preferencia_nome_id AS paciente_preferencia_nome_id',
|
||||
'cadastro_cidadao.nome_social AS paciente_nome_social',
|
||||
'transporte_paciente_veiculo.id AS viagem_id',
|
||||
DB::raw('false AS selecionado'),
|
||||
DB::raw('false AS atribuido'),
|
||||
DB::raw('transporte_paciente_veiculo.id AS veiculo_id'),
|
||||
DB::raw('CONCAT(
|
||||
transporte_paciente_veiculo.numero_placa,
|
||||
" - ",
|
||||
transporte_paciente_veiculo.descricao_modelo
|
||||
) AS veiculo_nome'),
|
||||
DB::raw("CASE
|
||||
WHEN transporte_paciente_viagem.jornada_id IS NULL THEN 'SEM JORNADA'
|
||||
ELSE CONCAT(
|
||||
DATE_FORMAT(transporte_paciente_jornada.data_inicial, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
DATE_FORMAT(transporte_paciente_jornada.data_final, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
transporte_paciente_jornada.id
|
||||
) END AS jornada"
|
||||
),
|
||||
DB::raw('LPAD(cadastro_paciente.prontuario,7,0) AS prontuario'),
|
||||
DB::raw('IF (cadastro_cidadao.data_nascimento IS NULL, "Não informada", DATE_FORMAT(cadastro_cidadao.data_nascimento, "%d/%m/%Y")) as data_nascimento'),
|
||||
DB::raw(
|
||||
'(
|
||||
CASE WHEN cadastro_cidadao.nome_mae IS NULL THEN
|
||||
"Não informado"
|
||||
ELSE
|
||||
cadastro_cidadao.nome_mae
|
||||
END
|
||||
) as nome_mae'
|
||||
),
|
||||
])
|
||||
->join('transporte_paciente_ponto', 'transporte_paciente_ponto.id', 'transporte_paciente_agendar_transporte.ponto_id')
|
||||
->join('transporte_paciente_destino', 'transporte_paciente_destino.id', 'transporte_paciente_agendar_transporte.destino_id')
|
||||
->join('intranet.cadastro_municipio', 'intranet.cadastro_municipio.id', 'transporte_paciente_agendar_transporte.municipio_id')
|
||||
->join('cadastro_paciente', 'cadastro_paciente.id', 'transporte_paciente_agendar_transporte.paciente_id')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->join(
|
||||
'transporte_paciente_veiculo',
|
||||
'transporte_paciente_veiculo.id',
|
||||
'transporte_paciente_agendar_transporte.veiculo_id'
|
||||
)
|
||||
->join(
|
||||
'transporte_paciente_viagem',
|
||||
'transporte_paciente_viagem.veiculo_id',
|
||||
'transporte_paciente_veiculo.id'
|
||||
)
|
||||
->join(
|
||||
'transporte_paciente_condutor',
|
||||
'transporte_paciente_condutor.id',
|
||||
'transporte_paciente_viagem.condutor_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_usuario',
|
||||
'cadastro_usuario.id',
|
||||
'transporte_paciente_condutor.usuario_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_cidadao as cidadao_condutor',
|
||||
'cidadao_condutor.id',
|
||||
'cadastro_usuario.cidadao_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'transporte_paciente_jornada',
|
||||
'transporte_paciente_jornada.id',
|
||||
'transporte_paciente_viagem.jornada_id'
|
||||
)
|
||||
->whereColumn('transporte_paciente_viagem.id', '=', 'transporte_paciente_agendar_transporte.viagem_id');
|
||||
|
||||
$agendamentos = $agendamentos->whereIn('transporte_paciente_agendar_transporte.status_id', [Status::AGENDADO, Status::MODIFICADO, Status::REAGENDADO]);
|
||||
|
||||
if (request()->data_saida) {
|
||||
|
||||
$agendamentos->where('transporte_paciente_agendar_transporte.data_saida', request()->data_saida);
|
||||
} else {
|
||||
|
||||
$agendamentos->where('transporte_paciente_agendar_transporte.data_saida', $currentDate);
|
||||
}
|
||||
|
||||
if (request()->motorista_id) {
|
||||
|
||||
$agendamentos->where('transporte_paciente_condutor.id', request()->motorista_id);
|
||||
}
|
||||
|
||||
if (request()->veiculo_id) {
|
||||
|
||||
$agendamentos->where('transporte_paciente_agendar_transporte.veiculo_id', request()->veiculo_id);
|
||||
}
|
||||
|
||||
$agendamentos = $agendamentos->get();
|
||||
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
|
||||
return [
|
||||
'veiculos' => self::getVeiculos(),
|
||||
'agendamentos' => $agendamentos,
|
||||
'agendamentos_jornada' => self::getAgendadosPaciente(),
|
||||
'motoristas' => self::getMotoristas(),
|
||||
'tipos_veiculo' => Tipo::orderBy('descricao')->get(),
|
||||
'agendar_transporte_jornada' => $parametrizacao->agendar_transporte_jornada ?? null,
|
||||
];
|
||||
}
|
||||
|
||||
public static function getMotoristas()
|
||||
{
|
||||
return DB::table('transporte_paciente_condutor as condutor')
|
||||
->select('condutor.id', 'cidadao.nome')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->groupBy('condutor.id')
|
||||
->orderBy('cidadao.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getAgendadosPaciente() {
|
||||
|
||||
return Agendar::where('data_saida', request()->data_saida)
|
||||
->when(request()->municipio_id, function ($query) {
|
||||
$query->where('municipio_id', request()->municipio_id);
|
||||
})
|
||||
->when(request()->destino_id, function ($query) {
|
||||
$query->where('destino_id', request()->destino_id);
|
||||
})
|
||||
->when(request()->horario_saida, function ($query) {
|
||||
$query->where('horario_saida', request()->horario_saida);
|
||||
})
|
||||
->whereNotNull('veiculo_id')
|
||||
->get()
|
||||
->map(fn($query) => [
|
||||
'id' => $query->id ?? null,
|
||||
'jornada_id' => $query->jornada_id ?? null,
|
||||
'paciente_id' => $query->paciente_id ?? null,
|
||||
'paciente_nome' => $query->paciente->cidadao->nome ?? null,
|
||||
'numero_placa' => $query->veiculo->numero_placa ?? null,
|
||||
'descricao_modelo' => $query->veiculo->descricao_modelo ?? null,
|
||||
'data_inicial' => $query->jornada->data_inicial ?? $query->data,
|
||||
'data_final' => $query->jornada->data_final ?? $query->data,
|
||||
'data' => (new Carbon($query->data))->format('d/m/Y') ?? null,
|
||||
'horario' => (new Carbon($query->horario))->format('H:i') ?? null,
|
||||
'destino' => $query->destino->descricao_destino ?? null,
|
||||
'municipio' => $query->municipio->nome ?? null,
|
||||
'uf' => $query->municipio->estado->uf ?? null,
|
||||
]);
|
||||
}
|
||||
|
||||
public static function loadFields()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData()
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
|
||||
return [
|
||||
'data_atual' => $now->format('d/m/Y'),
|
||||
'periodo' => [
|
||||
'start' => $currentDate,
|
||||
'end' => $currentDate,
|
||||
],
|
||||
'municipios' => self::getMunicipios(),
|
||||
'destinos' => self::getDestinos(),
|
||||
'horariosSaida' => self::getHorariosSaida(),
|
||||
'tipos_passageiro' => TipoPassageiro::orderBy('descricao')->get(),
|
||||
'tipos_veiculo' => Tipo::orderBy('descricao')->get(),
|
||||
'horario_saida' => $parametrizacao->horario_saida ?? null,
|
||||
'mensagem_protocolo' => $parametrizacao->mensagem_protocolo ?? null,
|
||||
'agendar_transporte_jornada' => $parametrizacao->agendar_transporte_jornada ?? null,
|
||||
'veiculos' => self::getVeiculos(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function getVeiculos() {
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
if($parametrizacao && $parametrizacao->agendar_transporte_jornada) {
|
||||
$veiculos = Veiculo::where('bloqueado', false)
|
||||
->where(function ($query) {
|
||||
$query->where('transporte_paciente_viagem.status_id', ViagemStatus::ABERTO)
|
||||
->orWhereNull('transporte_paciente_viagem.status_id')
|
||||
->orWhereNull('transporte_paciente_viagem.id');
|
||||
})
|
||||
->leftJoin(
|
||||
'transporte_paciente_jornada',
|
||||
'transporte_paciente_jornada.veiculo_id',
|
||||
'transporte_paciente_veiculo.id'
|
||||
)
|
||||
->leftJoin(
|
||||
'transporte_paciente_viagem',
|
||||
'transporte_paciente_viagem.jornada_id',
|
||||
'transporte_paciente_jornada.id'
|
||||
)
|
||||
->select(
|
||||
'transporte_paciente_veiculo.id as veiculo_id',
|
||||
'transporte_paciente_veiculo.numero_placa as numero_placa',
|
||||
'transporte_paciente_veiculo.descricao_modelo as descricao_modelo',
|
||||
'transporte_paciente_veiculo.numero_capacidade as numero_capacidade',
|
||||
'transporte_paciente_veiculo.tipo_id as tipo_id',
|
||||
'transporte_paciente_viagem.diaria as diaria',
|
||||
'transporte_paciente_viagem.id as viagem_id',
|
||||
)
|
||||
->when(request()->data_saida, function ($query) {
|
||||
$query->where(DB::raw("DATE_FORMAT(transporte_paciente_jornada.data_inicial, '%Y-%m-%d')"), '<=', request()->data_saida);
|
||||
})
|
||||
->when(request()->data_saida, function ($query) {
|
||||
$query->where(DB::raw("DATE_FORMAT(transporte_paciente_jornada.data_final, '%Y-%m-%d')"), '>=', request()->data_saida);
|
||||
})
|
||||
->groupBy('veiculo_id')
|
||||
->orderBy('numero_placa')
|
||||
->get()
|
||||
->map(fn($query) => [
|
||||
'id' => $query->veiculo_id ?? null,
|
||||
'descricao' => $query->numero_placa . ' - ' . $query->descricao_modelo,
|
||||
'capacidade' => $query->numero_capacidade ?? null,
|
||||
'tipo_id' => $query->tipo_id ?? null,
|
||||
'viagem_id' => $query->viagem_id ?? null,
|
||||
'protocolo' => $query->viagem_id ? Viagem::find($query->viagem_id)->protocolo ?? '-' : '-',
|
||||
'diaria' => $query->diaria ? number_format($query->diaria, 2, ',', '.') : null,
|
||||
'agendados' => Agendar::where('veiculo_id', $query->veiculo_id)
|
||||
->when(request()->data_saida, function ($query) {
|
||||
$query->where(DB::raw("DATE_FORMAT(data_saida, '%Y-%m-%d')"), request()->data_saida);
|
||||
})
|
||||
->select(
|
||||
DB::raw('SUM(IFNULL(acompanhante, 0) + 1) AS quantidade'),
|
||||
)
|
||||
->groupBy('veiculo_id')
|
||||
->first()
|
||||
]);
|
||||
} else {
|
||||
$veiculos = Veiculo::where('bloqueado', false)
|
||||
->leftJoin(
|
||||
'transporte_paciente_viagem',
|
||||
'transporte_paciente_viagem.veiculo_id',
|
||||
'transporte_paciente_veiculo.id'
|
||||
)
|
||||
->select(
|
||||
'transporte_paciente_veiculo.id as veiculo_id',
|
||||
'transporte_paciente_veiculo.numero_placa as numero_placa',
|
||||
'transporte_paciente_veiculo.descricao_modelo as descricao_modelo',
|
||||
'transporte_paciente_veiculo.numero_capacidade as numero_capacidade',
|
||||
'transporte_paciente_veiculo.tipo_id as tipo_id',
|
||||
'transporte_paciente_viagem.diaria as diaria',
|
||||
'transporte_paciente_viagem.id as viagem_id',
|
||||
)
|
||||
->groupBy('veiculo_id')
|
||||
->orderBy('numero_placa')
|
||||
->get()
|
||||
->map(function ($query) {
|
||||
$veiculo_id = $query->veiculo_id;
|
||||
$veiculo = Veiculo::where('bloqueado', false)
|
||||
->where('transporte_paciente_viagem.status_id', ViagemStatus::ABERTO)
|
||||
->leftJoin(
|
||||
'transporte_paciente_viagem',
|
||||
'transporte_paciente_viagem.veiculo_id',
|
||||
'transporte_paciente_veiculo.id'
|
||||
)
|
||||
->select(
|
||||
'transporte_paciente_viagem.id as viagem_id',
|
||||
)
|
||||
->when(request()->data_saida, function($query) {
|
||||
$query->where('transporte_paciente_viagem.data', request()->data_saida);
|
||||
})
|
||||
->when($query->veiculo_id, function($query) use ($veiculo_id) {
|
||||
$query->where('transporte_paciente_viagem.veiculo_id', $veiculo_id);
|
||||
})
|
||||
->first();
|
||||
return [
|
||||
'id' => $query->veiculo_id ?? null,
|
||||
'descricao' => $query->numero_placa . ' - ' . $query->descricao_modelo,
|
||||
'capacidade' => $query->numero_capacidade ?? null,
|
||||
'tipo_id' => $query->tipo_id ?? null,
|
||||
'viagem_id' => $veiculo ? $veiculo->viagem_id : null,
|
||||
'protocolo' => $veiculo ? Viagem::find($veiculo->viagem_id)->protocolo ?? '-' : '-',
|
||||
'diaria' => $query->diaria ? number_format($query->diaria, 2, ',', '.') : null,
|
||||
'agendados' => Agendar::where('veiculo_id', $query->veiculo_id)
|
||||
->when(request()->data_saida, function ($query) {
|
||||
$query->where(DB::raw("DATE_FORMAT(data_saida, '%Y-%m-%d')"), request()->data_saida);
|
||||
})
|
||||
->select(
|
||||
DB::raw('SUM(IFNULL(acompanhante, 0) + 1) AS quantidade'),
|
||||
)
|
||||
->groupBy('veiculo_id')
|
||||
->first()
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
return $veiculos;
|
||||
}
|
||||
|
||||
public static function getJornadas()
|
||||
{
|
||||
$jornadas = DB::table('transporte_paciente_jornada as jornada')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'jornada.veiculo_id', 'veiculo.id')
|
||||
->join('geral_dia_semana as dia_semana', 'jornada.geral_dia_semana_id', 'dia_semana.id')
|
||||
->leftJoin(
|
||||
'transporte_paciente_viagem',
|
||||
'transporte_paciente_viagem.jornada_id',
|
||||
'jornada.id'
|
||||
)
|
||||
->leftJoin(DB::raw(
|
||||
'(
|
||||
SELECT jornada_id, SUM(IFNULL(acompanhante, 0) + 1) AS total_agendados
|
||||
FROM transporte_paciente_agendar_transporte
|
||||
GROUP BY jornada_id
|
||||
) AS agendamentos
|
||||
'),
|
||||
'jornada.id',
|
||||
'agendamentos.jornada_id'
|
||||
)
|
||||
->where('jornada.veiculo_id', request()->veiculo_id)
|
||||
->where(DB::raw("DATE_FORMAT(jornada.data_inicial, '%Y-%m-%d')"), '<=', request()->data_saida)
|
||||
->where(DB::raw("DATE_FORMAT(jornada.data_final, '%Y-%m-%d')"), '>=', request()->data_saida)
|
||||
->select(
|
||||
'transporte_paciente_viagem.protocolo',
|
||||
'jornada.id',
|
||||
'jornada.data_inicial',
|
||||
'jornada.data_final',
|
||||
'veiculo.numero_placa',
|
||||
'veiculo.numero_capacidade',
|
||||
'veiculo.tipo_id',
|
||||
'dia_semana.id as geral_dia_semana_id',
|
||||
'dia_semana.descricao as geral_dia_semana_descricao',
|
||||
'transporte_paciente_viagem.id as viagem_id',
|
||||
DB::raw("CONCAT(
|
||||
DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
jornada.id
|
||||
) AS descricao"),
|
||||
DB::raw('COALESCE(agendamentos.total_agendados, 0) as total_agendados')
|
||||
)
|
||||
->orderByRaw('CASE WHEN transporte_paciente_viagem.id IS NOT NULL THEN 0 ELSE 1 END')
|
||||
->orderBy('jornada.data_inicial')
|
||||
->groupBy('jornada.id')
|
||||
->get();
|
||||
|
||||
return $jornadas;
|
||||
}
|
||||
|
||||
public static function getHorariosSaida() {
|
||||
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$data_saida = request()->data_saida ?? $currentDate;
|
||||
|
||||
return Agendar::where('data_saida', $data_saida)
|
||||
->where('transporte_paciente_agendar_transporte.status_id', Status::AGENDADO)
|
||||
->whereNotNull('horario_saida')
|
||||
->when(request()->municipio_id, function ($query) {
|
||||
|
||||
$query->where('municipio_id', request()->municipio_id);
|
||||
})
|
||||
->when(request()->destino_id, function ($query) {
|
||||
|
||||
$query->where('destino_id', request()->destino_id);
|
||||
})
|
||||
->select(DB::raw("TIME_FORMAT(horario_saida, '%H:%i') as horario_saida"))
|
||||
->distinct()
|
||||
->orderBy('horario_saida')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getMunicipios() {
|
||||
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$data_saida = request()->data_saida ?? $currentDate;
|
||||
|
||||
return Agendar::join('intranet.cadastro_municipio', 'intranet.cadastro_municipio.id', '=', 'transporte_paciente_agendar_transporte.municipio_id')
|
||||
->whereIn('transporte_paciente_agendar_transporte.status_id', [Status::AGENDADO, Status::MODIFICADO])
|
||||
->where('transporte_paciente_agendar_transporte.data_saida', $data_saida)
|
||||
->whereNotNull('transporte_paciente_agendar_transporte.viagem_id')
|
||||
->select('intranet.cadastro_municipio.id','intranet.cadastro_municipio.nome')
|
||||
->distinct()
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getDestinos() {
|
||||
|
||||
$now = Carbon::now();
|
||||
$currentDate = $now->format('Y-m-d');
|
||||
|
||||
$data_saida = request()->data_saida ?? $currentDate;
|
||||
|
||||
return Destino::join('transporte_paciente_agendar_transporte', 'transporte_paciente_agendar_transporte.destino_id', '=', 'transporte_paciente_destino.id')
|
||||
->whereIn('transporte_paciente_agendar_transporte.status_id', [Status::AGENDADO, Status::MODIFICADO])
|
||||
->where('transporte_paciente_destino.municipio_id', request()->municipio_id)
|
||||
->where('transporte_paciente_agendar_transporte.data_saida', $data_saida)
|
||||
->where('transporte_paciente_destino.bloqueado', false)
|
||||
->whereNotNull('transporte_paciente_agendar_transporte.viagem_id')
|
||||
->select('transporte_paciente_destino.id','transporte_paciente_destino.descricao_destino as descricao')
|
||||
->distinct()
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getModelData($destino = null)
|
||||
{
|
||||
|
||||
$destino = [
|
||||
'id' => $destino->id ?? null,
|
||||
'municipio_id' => $destino->municipio_id ?? null,
|
||||
'destino_id' => $destino->destino_id ?? null,
|
||||
'data_saida' => $destino->data_saida ?? null,
|
||||
'horario_saida' => $destino->horario_saida ?? null,
|
||||
'jornada_id' => $destino->jornada_id ?? null,
|
||||
'veiculo_id' => $destino->veiculo_id ?? null,
|
||||
'total_agendados' => $destino->total_agendados ?? null,
|
||||
'capacidade' => $destino->capacidade ?? null,
|
||||
'tipo_veiculo_id' => $destino->tipo_veiculo_id ?? null,
|
||||
'tipo_passageiro_id' => $destino->tipo_passageiro_id ?? null,
|
||||
'supervisor_id' => $destino->supervisor_id ?? null,
|
||||
'total_agendados' => $destino->total_agendados ?? null,
|
||||
'capacidade' => $destino->capacidade ?? null,
|
||||
];
|
||||
|
||||
return $destino;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
$viagens = [];
|
||||
foreach (request()->all() as $params) {
|
||||
|
||||
if ($params['atribuido'] === true) {
|
||||
|
||||
$escolher = Agendar::where('id', $params['id'])->first();
|
||||
if($escolher->veiculo_id != $params['veiculo_id']) {
|
||||
$escolher->veiculo_edited_by = self::getCurrentLotacao()->usuario->id;
|
||||
$escolher->veiculo_edited_at = Carbon::now();
|
||||
$escolher->funcionalidade_origem = Funcionalidade::TRANSFERENCIA_VEICULO;
|
||||
}
|
||||
$escolher->veiculo_id = $params['veiculo_id'];
|
||||
$escolher->supervisor_id = $params['supervisor_id'];
|
||||
$escolher->jornada_id = $params['jornada_id'];
|
||||
$viagem_id = $escolher->viagem_id;
|
||||
|
||||
$viagem = Viagem::where('id', $params['viagem_id'])->where('status_id', ViagemStatus::ABERTO)->first();
|
||||
if($viagem) {
|
||||
$viagem->diaria = $params['diaria'];
|
||||
$viagem->jornada_id = $params['jornada_id'];
|
||||
if (!is_null($params['diaria'])) {
|
||||
$viagem->diaria = str_replace('.', '', $viagem->diaria);
|
||||
$viagem->diaria = str_replace(',', '.', $viagem->diaria);
|
||||
}
|
||||
$viagem->condutor_id = $params['motorista_id'];
|
||||
$viagem->save();
|
||||
$escolher->viagem_id = $params['viagem_id'];
|
||||
} else {
|
||||
$atual = Viagem::where('id', $escolher->viagem_id)->where('status_id', ViagemStatus::ABERTO)->first();
|
||||
$viagem = Viagem::create([
|
||||
'condutor_id' => $params['motorista_id'],
|
||||
'veiculo_id' => $params['veiculo_id'],
|
||||
'data' => Carbon::createFromFormat('d/m/Y', $params['data_saida']),
|
||||
'horario_saida_temp' => $atual->horario_saida_temp,
|
||||
'diaria' => $atual->diaria,
|
||||
'jornada_id' => $params['jornada_id'],
|
||||
'status' => ViagemStatus::ABERTO,
|
||||
])->fresh();
|
||||
$escolher->viagem_id = $viagem->id;
|
||||
array_push($viagens, $viagem->id);
|
||||
}
|
||||
$escolher->save();
|
||||
|
||||
if(Agendar::where('viagem_id', $viagem_id)->get()->count() == 0) {
|
||||
$viagem_anterior = Viagem::find($viagem_id);
|
||||
$viagem_anterior->status_id = ViagemStatus::CANCELADO;
|
||||
if(is_null($viagem->protocolo)) {
|
||||
$viagem->protocolo = $viagem_anterior->protocolo;
|
||||
$viagem->save();
|
||||
}
|
||||
$viagem_anterior->protocolo = Viagem::max('protocolo') + 1;
|
||||
$viagem_anterior->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ($viagens as $viagem_id) {
|
||||
$viagem = Viagem::find($viagem_id);
|
||||
if(is_null($viagem->protocolo)) {
|
||||
$viagem->protocolo = Viagem::max('protocolo') + 1;
|
||||
$viagem->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
311
api/app/Services/TransportePaciente/Veiculo/VeiculoService.php
Normal file
311
api/app/Services/TransportePaciente/Veiculo/VeiculoService.php
Normal file
@@ -0,0 +1,311 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente\Veiculo;
|
||||
|
||||
use App\Exceptions\Model\DeletingModelException;
|
||||
use App\Models\TransportePaciente\Veiculo\Combustivel;
|
||||
use App\Models\TransportePaciente\Veiculo\Cor;
|
||||
use App\Models\TransportePaciente\Veiculo\Marca;
|
||||
use App\Models\TransportePaciente\Veiculo\Tipo;
|
||||
use App\Models\TransportePaciente\Veiculo\TipoPassageiro;
|
||||
use App\Models\TransportePaciente\Veiculo\Veiculo;
|
||||
use App\Rules\NomeCompleto;
|
||||
use App\Services\Service;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class VeiculoService extends Service
|
||||
{
|
||||
private static function obterCombustiveis()
|
||||
{
|
||||
|
||||
return Combustivel::all();
|
||||
}
|
||||
|
||||
private static function obterCores()
|
||||
{
|
||||
|
||||
return Cor::orderBy('descricao')->get();
|
||||
}
|
||||
|
||||
private static function obterMarcas()
|
||||
{
|
||||
|
||||
return Marca::orderBy('descricao')->get();
|
||||
}
|
||||
|
||||
private static function obterTipos()
|
||||
{
|
||||
|
||||
return Tipo::all();
|
||||
}
|
||||
|
||||
private static function obterTiposPassageiros()
|
||||
{
|
||||
|
||||
return TipoPassageiro::all();
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
$now = Carbon::now();
|
||||
|
||||
return [
|
||||
'combustiveis' => self::obterCombustiveis(),
|
||||
'cores' => self::obterCores(),
|
||||
'marcas' => self::obterMarcas(),
|
||||
'tipos' => self::obterTipos(),
|
||||
'tiposPassageiros' => self::obterTiposPassageiros(),
|
||||
'dataAtual' => $now->format('d/m/Y'),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModelData($veiculo = null)
|
||||
{
|
||||
return [
|
||||
'id' => $veiculo->id ?? null,
|
||||
'numero_placa' => $veiculo->numero_placa ?? null !== null ?
|
||||
MaskUtil::getPlacaMasked($veiculo->numero_placa) :
|
||||
null,
|
||||
'padrao_placa_mercosul' => $veiculo->padrao_placa_mercosul ?? null,
|
||||
'descricao_modelo' => $veiculo->descricao_modelo ?? null,
|
||||
'numero_capacidade' => $veiculo->numero_capacidade ?? null,
|
||||
'ano_fabricacao' => $veiculo->ano_fabricacao ?? null,
|
||||
'numero_patrimonio' => $veiculo->numero_patrimonio ?? null,
|
||||
'prefixo' => $veiculo->prefixo ?? null,
|
||||
'kilometro_inicial' => $veiculo->kilometro_inicial ?? null,
|
||||
'numero_renavam' => $veiculo->numero_renavam ?? null,
|
||||
'numero_eixos' => $veiculo->numero_eixos ?? null,
|
||||
'numero_chassi' => $veiculo->numero_chassi ?? null,
|
||||
'data_aquisicao' => $veiculo->data_aquisicao ?? null,
|
||||
'numero_cnpj_proprietario' => $veiculo->numero_cnpj_proprietario ?? null !== null ?
|
||||
MaskUtil::getCnpjMasked($veiculo->numero_cnpj_proprietario) :
|
||||
null,
|
||||
'nome_proprietario' => $veiculo->nome_proprietario ?? null,
|
||||
'bloqueado' => $veiculo->bloqueado ?? null,
|
||||
'tipo_ambulancia' => $veiculo->tipo_ambulancia ?? null,
|
||||
'marca_id' => $veiculo->marca_id ?? null,
|
||||
'tipo_id' => $veiculo->tipo_id ?? null,
|
||||
'tipo_passageiro_id' => $veiculo->tipo_passageiro_id ?? null,
|
||||
'cor_id' => $veiculo->cor_id ?? null,
|
||||
'combustivel_id' => $veiculo->combustivel_id ?? null,
|
||||
];
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
return Veiculo::find($id);
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return Veiculo::where('id', $id)->update(request()->all());
|
||||
}
|
||||
|
||||
public static function bloquear($id)
|
||||
{
|
||||
$veiculo = self::show($id);
|
||||
|
||||
return Veiculo::where('id', $id)->update(['bloqueado' => $veiculo->bloqueado == 1 ? 0 : 1]);
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(self::show($id)),
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return Veiculo::create(request()->all())->fresh();
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
try {
|
||||
return self::show($id)->delete();
|
||||
} catch (\Throwable $th) {
|
||||
throw new DeletingModelException();
|
||||
}
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
$veiculos = DB::table('transporte_paciente_veiculo')
|
||||
->join(
|
||||
'transporte_paciente_veiculo_combustivel',
|
||||
'transporte_paciente_veiculo.combustivel_id',
|
||||
'=',
|
||||
'transporte_paciente_veiculo_combustivel.id'
|
||||
)
|
||||
->join(
|
||||
'transporte_paciente_veiculo_cor',
|
||||
'transporte_paciente_veiculo.cor_id',
|
||||
'=',
|
||||
'transporte_paciente_veiculo_cor.id'
|
||||
)
|
||||
->join(
|
||||
'transporte_paciente_veiculo_marca',
|
||||
'transporte_paciente_veiculo.marca_id',
|
||||
'=',
|
||||
'transporte_paciente_veiculo_marca.id'
|
||||
)
|
||||
->join(
|
||||
'transporte_paciente_veiculo_tipo',
|
||||
'transporte_paciente_veiculo.tipo_id',
|
||||
'=',
|
||||
'transporte_paciente_veiculo_tipo.id'
|
||||
)
|
||||
->select(
|
||||
'transporte_paciente_veiculo.*',
|
||||
'transporte_paciente_veiculo_combustivel.descricao as descricao_combustivel',
|
||||
'transporte_paciente_veiculo_cor.descricao as descricao_cor',
|
||||
'transporte_paciente_veiculo_marca.descricao as descricao_marca',
|
||||
'transporte_paciente_veiculo_tipo.descricao as descricao_tipo',
|
||||
DB::raw("
|
||||
CASE WHEN transporte_paciente_veiculo.bloqueado THEN
|
||||
'INATIVO'
|
||||
ELSE
|
||||
'ATIVO'
|
||||
END AS status
|
||||
"),
|
||||
);
|
||||
|
||||
return datatables()
|
||||
->of($veiculos)
|
||||
->filterColumn('transporte_paciente_veiculo.bloqueado', function ($query, $keyword) {
|
||||
|
||||
$query->whereRaw("
|
||||
CASE WHEN transporte_paciente_veiculo.bloqueado THEN
|
||||
'INATIVO'
|
||||
ELSE
|
||||
'ATIVO'
|
||||
END LIKE ?", ["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->filterColumn('transporte_paciente_veiculo.numero_placa', function ($query, $keyword) {
|
||||
|
||||
$query
|
||||
->whereRaw("transporte_paciente_veiculo.numero_placa like ?", ["%{$keyword}%"])
|
||||
->orWhereRaw(
|
||||
"CONCAT(
|
||||
SUBSTR(transporte_paciente_veiculo.numero_placa,1,3),
|
||||
'-',
|
||||
SUBSTR(transporte_paciente_veiculo.numero_placa,4,4)
|
||||
) like ?",
|
||||
["%{$keyword}%"]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
return request()->validate(
|
||||
[
|
||||
'numero_placa' => [
|
||||
'required',
|
||||
'string',
|
||||
'min:7',
|
||||
'max:7',
|
||||
Rule::unique('transporte_paciente_veiculo')
|
||||
->ignore(request()->veiculo)
|
||||
],
|
||||
'descricao_modelo' => [
|
||||
'required',
|
||||
'max:56',
|
||||
],
|
||||
'numero_capacidade' => [
|
||||
'required',
|
||||
'max:3',
|
||||
],
|
||||
'ano_fabricacao' => [
|
||||
'required',
|
||||
'min:4',
|
||||
'max:4',
|
||||
],
|
||||
'numero_patrimonio' => [
|
||||
'max:10',
|
||||
],
|
||||
'prefixo' => [
|
||||
'max:3',
|
||||
],
|
||||
'kilometro_inicial' => [
|
||||
'required',
|
||||
'max:11',
|
||||
],
|
||||
'numero_renavam' => [
|
||||
'required',
|
||||
'max:11',
|
||||
Rule::unique('transporte_paciente_veiculo')
|
||||
->ignore(request()->veiculo)
|
||||
],
|
||||
'numero_eixos' => [
|
||||
'required',
|
||||
'max:2',
|
||||
],
|
||||
'numero_chassi' => [
|
||||
'required',
|
||||
'max:17',
|
||||
Rule::unique('transporte_paciente_veiculo')
|
||||
->ignore(request()->veiculo)
|
||||
],
|
||||
'data_aquisicao' => [
|
||||
'required'
|
||||
],
|
||||
'numero_cnpj_proprietario' => [
|
||||
'required',
|
||||
'max:14',
|
||||
],
|
||||
'nome_proprietario' => [
|
||||
'required',
|
||||
'min:4',
|
||||
'max:72',
|
||||
new NomeCompleto,
|
||||
],
|
||||
'bloqueado' => [
|
||||
'required',
|
||||
],
|
||||
'tipo_ambulancia' => [
|
||||
'required',
|
||||
],
|
||||
'marca_id' => [
|
||||
'required',
|
||||
],
|
||||
'tipo_id' => [
|
||||
'required',
|
||||
],
|
||||
'tipo_passageiro_id' => [
|
||||
'required',
|
||||
],
|
||||
'cor_id' => [
|
||||
'required',
|
||||
],
|
||||
'combustivel_id' => [
|
||||
'required',
|
||||
],
|
||||
],
|
||||
[
|
||||
'numero_placa.unique' => 'A placa já foi inserida anteriormente.',
|
||||
'numero_renavam.unique' => 'O número do renavam já foi inserido anteriormente.',
|
||||
'numero_chassi.unique' => 'O número do chassi já foi inserido anteriormente.',
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
139
api/app/Services/TransportePaciente/ViagemDataService.php
Normal file
139
api/app/Services/TransportePaciente/ViagemDataService.php
Normal file
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente;
|
||||
|
||||
use App\Enums\TransportePaciente\Status;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ViagemDataService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
return [
|
||||
'model' => [
|
||||
'periodo' => [
|
||||
'start' => null,
|
||||
'end' => null,
|
||||
],
|
||||
'municipio' => null,
|
||||
'motorista' => null,
|
||||
'destino' => null,
|
||||
'status' => null,
|
||||
],
|
||||
'form' => [
|
||||
'municipios' => null,
|
||||
'motoristas' => null,
|
||||
'destinos' => null,
|
||||
'status' => null,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function getMunicipios()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select('agendar.municipio_id as id', 'municipio.nome')
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', '=', 'agendar.municipio_id')
|
||||
->where('agendar.data', '>=', Carbon::parse(request()->start)->format('Y-m-d'))
|
||||
->where('agendar.data', '<', Carbon::parse(request()->end)->addDay()->format('Y-m-d'))
|
||||
->orderBy('municipio.nome')
|
||||
->groupBy('id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getMotoristas()
|
||||
{
|
||||
return DB::table('transporte_paciente_condutor as condutor')
|
||||
->select('condutor.id', 'cidadao.nome')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('transporte_paciente_viagem as viagem', 'condutor.id', 'viagem.condutor_id')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->where('agendar.data', '>=', Carbon::parse(request()->start)->format('Y-m-d'))
|
||||
->where('agendar.data', '<', Carbon::parse(request()->end)->addDay()->format('Y-m-d'))
|
||||
->when(request()->municipio, function ($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->orderBy('cidadao.nome')
|
||||
->groupBy('condutor.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getDestinos()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->join('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id')
|
||||
->select('destino.id', 'destino.descricao_destino as descricao')
|
||||
->where('agendar.data', '>=', Carbon::parse(request()->start)->format('Y-m-d'))
|
||||
->where('agendar.data', '<', Carbon::parse(request()->end)->addDay()->format('Y-m-d'))
|
||||
->when(request()->municipio, function ($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->motorista, function ($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->orderBy('destino.descricao_destino')
|
||||
->groupBy('destino.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getStatus()
|
||||
{
|
||||
return DB::table('transporte_paciente_status as status')
|
||||
->select('status.id', 'status.descricao')
|
||||
->orderBy('status.descricao')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$consulta = DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select(
|
||||
'agendar.id',
|
||||
'municipio.nome as municipio',
|
||||
'cidadao.nome as motorista',
|
||||
'destino.descricao_destino as descricao_destino',
|
||||
'status.id as status_id',
|
||||
'status.descricao as descricao_status',
|
||||
DB::raw('DATE_FORMAT(agendar.data, "%d/%m/%Y") as data'),
|
||||
DB::raw('IF(viagem.protocolo IS NOT NULL, viagem.protocolo, "-") AS protocolo')
|
||||
)
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', '=', 'agendar.municipio_id')
|
||||
->join('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id')
|
||||
->join('transporte_paciente_condutor as condutor', 'condutor.id', 'viagem.condutor_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->join('transporte_paciente_status as status', 'status.id', 'agendar.status_id')
|
||||
->where('agendar.data', '>=', Carbon::parse(request()->start)->format('Y-m-d'))
|
||||
->where('agendar.data', '<', Carbon::parse(request()->end)->addDay()->format('Y-m-d'))
|
||||
->when(request()->municipio, function ($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->motorista, function ($query) {
|
||||
$query->where('viagem.condutor_id', request()->motorista);
|
||||
})
|
||||
->when(request()->destino, function ($query) {
|
||||
$query->where('destino.id', request()->destino);
|
||||
})
|
||||
->when(request()->status, function ($query) {
|
||||
$query->where('status.id', request()->status);
|
||||
})
|
||||
->orderBy('agendar.data')
|
||||
->get();
|
||||
|
||||
return [
|
||||
'consulta' => $consulta,
|
||||
'totalizadores' => [
|
||||
'agendado' => $consulta->where('status_id', Status::AGENDADO)->count(),
|
||||
'cancelado' => $consulta->where('status_id', Status::CANCELADO)->count(),
|
||||
'faltou' => $consulta->where('status_id', Status::FALTOU)->count(),
|
||||
'transportado' => $consulta->where('status_id', Status::TRANSPORTADO)->count(),
|
||||
'geral' => $consulta->count(),
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
239
api/app/Services/TransportePaciente/ViagemGeralService.php
Normal file
239
api/app/Services/TransportePaciente/ViagemGeralService.php
Normal file
@@ -0,0 +1,239 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente;
|
||||
|
||||
use App\Enums\TransportePaciente\ViagemStatus;
|
||||
use App\Enums\TransportePaciente\Status;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ViagemGeralService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
return [
|
||||
'model' => [
|
||||
'data_inicial' => null,
|
||||
'data_final' => null,
|
||||
'motivo_viagem' => null,
|
||||
'municipio' => null,
|
||||
'destino' => null,
|
||||
'veiculo' => null,
|
||||
'status' => null,
|
||||
'paciente' => null,
|
||||
'protocolo' => ''
|
||||
],
|
||||
'form' => self::getFormData()
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
$status = DB::table('transporte_paciente_viagem_status AS status')
|
||||
->select(
|
||||
'status.id',
|
||||
'status.descricao',
|
||||
)
|
||||
->get();
|
||||
|
||||
return [
|
||||
'motivo_viagem' => null,
|
||||
'municipio' => null,
|
||||
'destino' => null,
|
||||
'veiculo' => null,
|
||||
'status' => $status,
|
||||
];
|
||||
}
|
||||
|
||||
public static function getMotivos()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id')
|
||||
->select('motivo.id', 'motivo.descricao')
|
||||
->groupBy('motivo.id')
|
||||
->where('data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('data', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getMunicipios()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'agendar.municipio_id')
|
||||
->select('municipio.id', 'municipio.nome')
|
||||
->groupBy('municipio.id')
|
||||
->where('data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('data', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->when(request()->motivo, function($query) {
|
||||
$query->where('agendar.motivo_id', request()->motivo);
|
||||
})
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getDestinos()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
|
||||
->select('destino.id', 'destino.descricao_destino as descricao')
|
||||
->where('data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('data', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->when(request()->motivo, function($query) {
|
||||
$query->where('agendar.motivo_id', request()->motivo);
|
||||
})
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->groupBy('destino.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getVeiculos()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'agendar.veiculo_id')
|
||||
->select(
|
||||
'veiculo.id',
|
||||
DB::raw("CONCAT(veiculo.numero_placa, ' - ', veiculo.descricao_modelo) AS descricao")
|
||||
)
|
||||
->where('data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('data', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->where('veiculo.bloqueado', false)
|
||||
->when(request()->motivo, function($query) {
|
||||
$query->where('agendar.motivo_id', request()->motivo);
|
||||
})
|
||||
->when(request()->municipio, function ($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function ($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->orderBy('veiculo.numero_placa')
|
||||
->groupBy('veiculo.id')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$consulta = DB::table('transporte_paciente_agendar_transporte AS agendar')
|
||||
->select(
|
||||
'agendar.id',
|
||||
'agendar.paciente_id AS paciente_id',
|
||||
'cidadao.nome AS paciente_nome',
|
||||
DB::raw('DATE_FORMAT(cidadao.data_nascimento, "%d/%m/%Y") as data_nascimento'),
|
||||
'cidadao.nome_social AS nome_social',
|
||||
'cidadao.cns AS cns',
|
||||
'cidadao.cpf AS cpf',
|
||||
'cidadao.nome_mae AS nome_mae',
|
||||
'motivo.descricao AS motivo_viagem',
|
||||
'municipio.nome AS municipio',
|
||||
'destino.descricao_destino AS destino',
|
||||
'ponto.descricao AS ponto_referencia',
|
||||
DB::raw("CONCAT(veiculo.numero_placa, ' - ', veiculo.descricao_modelo) AS veiculo"),
|
||||
'status.descricao AS status',
|
||||
'paciente.prontuario',
|
||||
'identidade.numero AS rg',
|
||||
'tipo_logradouro.descricao AS logradouro_tipo',
|
||||
DB::raw("CONCAT(logradouro.nome, ' - ', bairro.nome) AS endereco"),
|
||||
'logradouro.cep AS cep',
|
||||
'bairro.nome AS bairro',
|
||||
'cadastro_estado.uf AS uf',
|
||||
'unidade.nome_fantasia AS unidade_referencia',
|
||||
DB::raw('LPAD(paciente.prontuario,6,0) as prontuario'),
|
||||
DB::raw("COALESCE(agendar.acompanhante, '-') AS acompanhante"),
|
||||
DB::raw("COALESCE(motorista.nome, '-') AS motorista"),
|
||||
DB::raw("TIME_FORMAT(agendar.horario, '%H:%i') AS horario"),
|
||||
DB::raw("IF(agendar.horario_saida, TIME_FORMAT(agendar.horario_saida, '%H:%i'),'-' ) AS horario_saida"),
|
||||
DB::raw('IF(transporte.protocolo, transporte.protocolo, "-") as protocolo'),
|
||||
'agendar.data',
|
||||
'agendar.observacao AS observacao_viagem',
|
||||
'agendar.consulta_observacao AS observacao_paciente',
|
||||
)
|
||||
->leftJoin('cadastro_paciente AS paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->leftJoin('cadastro_cidadao AS cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->leftJoin('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id')
|
||||
->leftJoin('intranet.cadastro_municipio as municipio', 'agendar.municipio_id', 'municipio.id')
|
||||
->leftJoin('transporte_paciente_destino AS destino', 'agendar.destino_id', 'destino.id')
|
||||
->leftJoin('transporte_paciente_ponto AS ponto', 'agendar.ponto_id', 'ponto.id')
|
||||
->leftJoin('transporte_paciente_viagem AS transporte', 'agendar.viagem_id', 'transporte.id')
|
||||
->leftJoin('transporte_paciente_veiculo AS veiculo', 'transporte.veiculo_id', 'veiculo.id')
|
||||
->leftJoin('transporte_paciente_condutor AS condutor', 'condutor.id', 'transporte.condutor_id')
|
||||
->leftJoin('cadastro_usuario AS usuario', 'condutor.usuario_id', 'usuario.id')
|
||||
->leftJoin('transporte_paciente_viagem_status AS status', 'transporte.status_id', 'status.id')
|
||||
->leftJoin('cadastro_domicilio AS domicilio', 'domicilio.id', 'cidadao.domicilio_id')
|
||||
->leftJoin('cadastro_endereco AS endereco', 'endereco.id', 'domicilio.endereco_id')
|
||||
->leftJoin('cadastro_logradouro AS logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
||||
->leftJoin('cadastro_logradouro_tipo AS tipo_logradouro', 'tipo_logradouro.id', 'logradouro.id')
|
||||
->leftJoin('cadastro_bairro AS bairro', 'bairro.id', 'logradouro.bairro_id')
|
||||
->leftJoin('intranet.cadastro_municipio', 'cadastro_municipio.id', 'logradouro.municipio_id')
|
||||
->leftJoin('intranet.cadastro_estado', 'cadastro_estado.id', 'cadastro_municipio.estado_id')
|
||||
->leftJoin('cadastro_carteira_identidade AS identidade','identidade.cidadao_id', 'cidadao.id')
|
||||
->leftJoin('cadastro_unidade AS unidade','unidade.id', 'paciente.unidade_id')
|
||||
->leftJoin('cadastro_cidadao AS motorista', 'usuario.cidadao_id', 'motorista.id')
|
||||
->where('agendar.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('agendar.data', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->when(request()->motivo, function($query) {
|
||||
$query->where('agendar.motivo_id', request()->motivo);
|
||||
})
|
||||
->when(request()->municipio, function($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->when(request()->veiculo, function($query) {
|
||||
$query->where('agendar.veiculo_id', request()->veiculo);
|
||||
})
|
||||
->when(request()->paciente, function($query) {
|
||||
$query->where('agendar.paciente_id', request()->paciente);
|
||||
})
|
||||
->when(request()->protocolo, function($query) {
|
||||
$query->where('transporte.protocolo', request()->protocolo);
|
||||
})
|
||||
->when(request()->status, function($query) {
|
||||
$query->where('transporte.status_id', request()->status);
|
||||
})
|
||||
->orderBy('agendar.data', 'desc')
|
||||
->orderBy('agendar.horario')
|
||||
->groupBy('agendar.id')
|
||||
->get();
|
||||
|
||||
$contagem = DB::table('transporte_paciente_agendar_transporte AS agendar')
|
||||
->leftJoin('transporte_paciente_viagem AS viagem', 'viagem.id', 'agendar.viagem_id')
|
||||
->select(
|
||||
DB::raw('SUM(IFNULL(agendar.acompanhante, 0) + 1) AS quantidade_paciente_acompanhante'),
|
||||
DB::raw('COUNT(agendar.id) AS quantidade_paciente'),
|
||||
)
|
||||
->where('agendar.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
||||
->where('agendar.data', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
|
||||
->when(request()->motivo, function($query) {
|
||||
$query->where('agendar.motivo_id', request()->motivo);
|
||||
})
|
||||
->when(request()->municipio, function ($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio);
|
||||
})
|
||||
->when(request()->destino, function ($query) {
|
||||
$query->where('agendar.destino_id', request()->destino);
|
||||
})
|
||||
->when(request()->veiculo, function($query) {
|
||||
$query->where('agendar.veiculo_id', request()->veiculo);
|
||||
})
|
||||
->when(request()->paciente, function($query) {
|
||||
$query->where('agendar.paciente_id', request()->paciente);
|
||||
})
|
||||
->when(request()->protocolo, function($query) {
|
||||
$query->where('viagem.protocolo', request()->protocolo);
|
||||
})
|
||||
->when(request()->status, function($query) {
|
||||
$query->where('viagem.status_id', request()->status);
|
||||
})
|
||||
->get();
|
||||
|
||||
$totalizadores = [
|
||||
'total_paciente' => $contagem->sum('quantidade_paciente'),
|
||||
'total_paciente_acompanhante' => $contagem->sum('quantidade_paciente_acompanhante'),
|
||||
];
|
||||
|
||||
return ['consulta' => $consulta, 'totalizadores' => $totalizadores];
|
||||
}
|
||||
}
|
||||
708
api/app/Services/TransportePaciente/ViagemService.php
Normal file
708
api/app/Services/TransportePaciente/ViagemService.php
Normal file
@@ -0,0 +1,708 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TransportePaciente;
|
||||
|
||||
use App\Enums\TransportePaciente\Status as EnumAgendaStatus;
|
||||
use App\Enums\TransportePaciente\Status as EnumTransporteStatus;
|
||||
use App\Enums\TransportePaciente\ViagemStatus as EnumStatus;
|
||||
use App\Models\Intranet\Cliente;
|
||||
use App\Models\TransportePaciente\Agendar\Agendar;
|
||||
use App\Models\TransportePaciente\Jornada\Jornada;
|
||||
use App\Models\TransportePaciente\Parametrizacao\Parametrizacao;
|
||||
use App\Models\TransportePaciente\Viagem;
|
||||
use App\Models\TransportePaciente\ViagemStatus;
|
||||
use App\Services\Service;
|
||||
use App\Services\TransportePaciente\Agendar\HistoricoService;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ViagemService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(),
|
||||
'parametrizacao' => Parametrizacao::first()->agendar_transporte_jornada ?? null,
|
||||
];
|
||||
}
|
||||
|
||||
public static function store($request)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$data = $request->all();
|
||||
|
||||
if (!is_null(request()->diaria)) {
|
||||
$data['diaria'] = str_replace('.', '', $data['diaria']);
|
||||
$data['diaria'] = str_replace(',', '.', $data['diaria']);
|
||||
}
|
||||
|
||||
$viagem = Viagem::where('veiculo_id', $data['veiculo_id'])
|
||||
->when($data['jornada_id'] ?? null, function($query, $data) {
|
||||
$query->where('jornada_id', $data);
|
||||
})
|
||||
->when($data['destino_id'] ?? null, function($query, $data) {
|
||||
$query->where('destino_id', $data);
|
||||
})
|
||||
->where('data', request()->data)
|
||||
->first();
|
||||
|
||||
if ($viagem) {
|
||||
if(is_null($viagem->protocolo)) {
|
||||
$data['protocolo'] = Viagem::max('protocolo') + 1;
|
||||
}
|
||||
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
|
||||
$viagem->update($data);
|
||||
|
||||
$agendamentos = self::getPacientes();
|
||||
|
||||
$agendamentos->each(function ($agendamento) use ($viagem, $currentLotacao) {
|
||||
|
||||
$agendamento->lotacao_id = $currentLotacao->infraestrutura->unidade->id;
|
||||
$agendamento->ocupacao_id = $currentLotacao->ocupacao_id;
|
||||
$agendamento->usuario_id = $currentLotacao->usuario_id;
|
||||
|
||||
$agendar = Agendar::where('id', $agendamento->id);
|
||||
|
||||
$agendar->update([
|
||||
'viagem_id' => $viagem->id,
|
||||
'lotacao_id' => $currentLotacao->infraestrutura->unidade->id,
|
||||
'ocupacao_id' => $currentLotacao->ocupacao_id,
|
||||
'usuario_id' => $currentLotacao->usuario_id,
|
||||
'procedimento_id' => $agendamento->procedimento_id,
|
||||
]);
|
||||
|
||||
$transporte = $agendar->first();
|
||||
HistoricoService::create($transporte, EnumTransporteStatus::MODIFICADO, $transporte->updated_lotacao_id);
|
||||
});
|
||||
|
||||
return $viagem;
|
||||
} else {
|
||||
|
||||
$data = $request->all();
|
||||
|
||||
$data['protocolo'] = Viagem::max('protocolo') + 1;
|
||||
|
||||
if (!is_null(request()->diaria)) {
|
||||
$data['diaria'] = str_replace('.', '', $data['diaria']);
|
||||
$data['diaria'] = str_replace(',', '.', $data['diaria']);
|
||||
}
|
||||
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
$viagem = Viagem::create($data)->fresh();
|
||||
$agendamentos = self::getPacientes();
|
||||
|
||||
$agendamentos->each(function ($agendamento) use ($viagem, $currentLotacao) {
|
||||
|
||||
$agendamento->lotacao_id = $currentLotacao->infraestrutura->unidade->id;
|
||||
$agendamento->ocupacao_id = $currentLotacao->ocupacao_id;
|
||||
$agendamento->usuario_id = $currentLotacao->usuario_id;
|
||||
|
||||
$agendar = Agendar::where('id', $agendamento->id);
|
||||
$agendar->update([
|
||||
'viagem_id' => $viagem->id,
|
||||
'lotacao_id' => $currentLotacao->infraestrutura->unidade->id,
|
||||
'ocupacao_id' => $currentLotacao->ocupacao_id,
|
||||
'usuario_id' => $currentLotacao->usuario_id,
|
||||
'procedimento_id' => $agendamento->procedimento_id
|
||||
]);
|
||||
|
||||
$transporte = $agendar->first();
|
||||
HistoricoService::create($transporte, EnumTransporteStatus::MODIFICADO, $transporte->updated_lotacao_id);
|
||||
});
|
||||
|
||||
return $viagem;
|
||||
}
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
$rules = [
|
||||
'data' => [
|
||||
'date',
|
||||
],
|
||||
'condutor_id' => [
|
||||
'exists:transporte_paciente_condutor,id',
|
||||
],
|
||||
'veiculo_id' => [
|
||||
'exists:transporte_paciente_veiculo,id',
|
||||
],
|
||||
'status_id' => [
|
||||
'required',
|
||||
]
|
||||
];
|
||||
|
||||
return request()->validate($rules);
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
|
||||
return [
|
||||
"status" => ViagemStatus::find([
|
||||
EnumStatus::ABERTO,
|
||||
EnumStatus::FINALIZADO,
|
||||
]),
|
||||
"municipios" => [],
|
||||
"bairros" => [],
|
||||
"veiculos" => [],
|
||||
"jornadas" => [],
|
||||
"motoristas" => self::getMotoristas(),
|
||||
"agrupar" => [
|
||||
[
|
||||
"id" => 1,
|
||||
"descricao" => "Destino"
|
||||
],
|
||||
[
|
||||
"id" => 2,
|
||||
"descricao" => "Município de destino"
|
||||
],
|
||||
[
|
||||
"id" => 3,
|
||||
"descricao" => "Ponto"
|
||||
]
|
||||
],
|
||||
"ordenar" => [
|
||||
[
|
||||
"id" => 1,
|
||||
"descricao" => "Destino"
|
||||
],
|
||||
[
|
||||
"id" => 2,
|
||||
"descricao" => "Endereço do paciente"
|
||||
],
|
||||
[
|
||||
"id" => 3,
|
||||
"descricao" => "Horário da consulta"
|
||||
],
|
||||
[
|
||||
"id" => 4,
|
||||
"descricao" => "Horário de saída"
|
||||
],
|
||||
[
|
||||
"id" => 5,
|
||||
"descricao" => "Município de Destino"
|
||||
],
|
||||
[
|
||||
"id" => 6,
|
||||
"descricao" => "Nome do paciente"
|
||||
],
|
||||
[
|
||||
"id" => 7,
|
||||
"descricao" => "Ponto"
|
||||
]
|
||||
],
|
||||
'exibir_observacao_transporte' => $parametrizacao->exibir_observacao_transporte ?? null,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModelData()
|
||||
{
|
||||
return [
|
||||
"status_id" => 1,
|
||||
"data" => null,
|
||||
"veiculo_id" => null,
|
||||
"municipio_id" => null,
|
||||
"nome_bairro" => null,
|
||||
"jornada_id" => null,
|
||||
"horario_saida" => null,
|
||||
"diaria" => null,
|
||||
"motorista_id" => null,
|
||||
"agrupar" => 1,
|
||||
"ordenar" => 7,
|
||||
];
|
||||
}
|
||||
|
||||
public static function getVeiculos()
|
||||
{
|
||||
|
||||
if(request()->status_id == EnumStatus::FINALIZADO) {
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'viagem.veiculo_id')
|
||||
->select(
|
||||
'veiculo.id',
|
||||
DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) AS descricao')
|
||||
)
|
||||
->orderBy('veiculo.numero_placa')
|
||||
->groupBy('veiculo.id')
|
||||
->where('veiculo.bloqueado', false)
|
||||
->where('viagem.data', request()->data)
|
||||
->where('viagem.status_id', request()->status_id)
|
||||
->get();
|
||||
}
|
||||
else {
|
||||
return DB::table('transporte_paciente_veiculo as veiculo')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.veiculo_id', 'veiculo.id')
|
||||
->where(DB::raw("DATE_FORMAT(agendar.data_saida, '%Y-%m-%d')"), request()->data)
|
||||
->where('veiculo.bloqueado', false)
|
||||
->whereIn('agendar.status_id', [EnumStatus::ABERTO, EnumStatus::REAGENDADO, EnumStatus::MODIFICADO ])
|
||||
->select(
|
||||
'veiculo.id',
|
||||
DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) AS descricao')
|
||||
)
|
||||
->orderBy('veiculo.numero_placa')
|
||||
->groupBy('veiculo.id')
|
||||
->get();
|
||||
}
|
||||
}
|
||||
|
||||
public static function getMunicipios()
|
||||
{
|
||||
if(request()->status_id == EnumStatus::FINALIZADO) {
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select('municipio.id', 'municipio.nome')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.municipio_id')
|
||||
->where('agendar.veiculo_id', request()->veiculo_id)
|
||||
->where('agendar.data_saida', request()->data)
|
||||
->whereIn('agendar.status_id', [EnumAgendaStatus::TRANSPORTADO, EnumAgendaStatus::FALTOU])
|
||||
->orderBy('nome')
|
||||
->groupBy('municipio.id')
|
||||
->get();
|
||||
}
|
||||
else {
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select('municipio.id', 'municipio.nome')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.municipio_id')
|
||||
->where('agendar.veiculo_id', request()->veiculo_id)
|
||||
->where('agendar.data_saida', request()->data)
|
||||
->where('agendar.status_id', EnumAgendaStatus::AGENDADO)
|
||||
->orderBy('nome')
|
||||
->groupBy('municipio.id')
|
||||
->get();
|
||||
}
|
||||
}
|
||||
|
||||
public static function getBairros()
|
||||
{
|
||||
if(request()->status_id == EnumStatus::FINALIZADO) {
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select('destino.id', 'destino.nome_bairro as nome', 'destino.municipio_id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->where('agendar.veiculo_id', request()->veiculo_id)
|
||||
->where('agendar.data_saida', request()->data)
|
||||
->whereIn('agendar.status_id', [EnumAgendaStatus::TRANSPORTADO, EnumAgendaStatus::FALTOU])
|
||||
->whereNotNull('destino.nome_bairro')
|
||||
->when(request()->municipio_id, function($query) {
|
||||
$query->where('destino.municipio_id', request()->municipio_id);
|
||||
})
|
||||
->orderBy('nome')
|
||||
->groupBy('nome')
|
||||
->get();
|
||||
}
|
||||
else {
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->select('destino.id', 'destino.nome_bairro as nome', 'destino.municipio_id')
|
||||
->join('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->where('agendar.veiculo_id', request()->veiculo_id)
|
||||
->where('agendar.data_saida', request()->data)
|
||||
->where('agendar.status_id', EnumAgendaStatus::AGENDADO)
|
||||
->whereNotNull('destino.nome_bairro')
|
||||
->when(request()->municipio_id, function($query) {
|
||||
$query->where('destino.municipio_id', request()->municipio_id);
|
||||
})
|
||||
->orderBy('nome')
|
||||
->groupBy('nome')
|
||||
->get();
|
||||
}
|
||||
}
|
||||
|
||||
public static function getJornadas()
|
||||
{
|
||||
if(request()->status_id == EnumStatus::FINALIZADO) {
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->join('transporte_paciente_jornada as jornada', 'viagem.jornada_id', 'jornada.id')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'jornada.veiculo_id', 'veiculo.id')
|
||||
->where('viagem.status_id', EnumStatus::FINALIZADO)
|
||||
->where('veiculo.id', request()->veiculo_id)
|
||||
->where(DB::raw("DATE_FORMAT(jornada.data_inicial, '%Y-%m-%d')"), request()->data)
|
||||
->select(
|
||||
'jornada.id',
|
||||
DB::raw("CONCAT(
|
||||
DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
jornada.id
|
||||
) AS descricao"),
|
||||
)
|
||||
->orderBy('jornada.data_inicial')
|
||||
->groupBy('jornada.id')
|
||||
->get();
|
||||
|
||||
} else {
|
||||
return DB::table('transporte_paciente_jornada as jornada')
|
||||
->join('transporte_paciente_veiculo as veiculo', 'jornada.veiculo_id', 'veiculo.id')
|
||||
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.jornada_id', 'jornada.id')
|
||||
->whereIn('agendar.status_id', [EnumAgendaStatus::AGENDADO, EnumAgendaStatus::MODIFICADO, EnumAgendaStatus::REAGENDADO])
|
||||
->where('agendar.veiculo_id', request()->veiculo_id)
|
||||
->where(DB::raw("DATE_FORMAT(agendar.data_saida, '%Y-%m-%d')"), request()->data)
|
||||
->select(
|
||||
'jornada.id',
|
||||
DB::raw("CONCAT(
|
||||
DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
jornada.id
|
||||
) AS descricao"),
|
||||
)
|
||||
->orderBy('jornada.data_inicial')
|
||||
->groupBy('jornada.id')
|
||||
->get();
|
||||
}
|
||||
}
|
||||
|
||||
public static function getMotoristas()
|
||||
{
|
||||
return DB::table('transporte_paciente_condutor as condutor')
|
||||
->select('condutor.id', 'cidadao.nome')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->orderBy('cidadao.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function search()
|
||||
{
|
||||
return [
|
||||
'pacientes' => self::getPacientes(),
|
||||
'viagem' => self::getViagem(),
|
||||
'ordenacao' => request()->ordenar,
|
||||
'total' => array_reduce(self::getPacientes()->toArray(), function($carry, $item) {
|
||||
if($item->acompanhante != null) {
|
||||
$carry += $item->acompanhante;
|
||||
}
|
||||
return $carry + 1;
|
||||
}, 0)
|
||||
];
|
||||
}
|
||||
|
||||
private static function getPacientes()
|
||||
{
|
||||
return DB::table('transporte_paciente_agendar_transporte as agendar')
|
||||
->leftJoin('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->leftJoin('transporte_paciente_ponto as ponto', 'agendar.ponto_id', 'ponto.id')
|
||||
->leftJoin('transporte_paciente_motivo_viagem_procedimento as motivo', 'agendar.motivo_id', 'motivo.id')
|
||||
->leftJoin('cadastro_paciente as paciente', 'agendar.paciente_id', 'paciente.id')
|
||||
->leftJoin('cadastro_cidadao as cidadao', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->leftJoin('cadastro_cidadao_telefone as telefone', 'cidadao.id', 'telefone.cidadao_id')
|
||||
->leftJoin('intranet.cadastro_municipio as municipio', 'destino.municipio_id', 'municipio.id')
|
||||
->leftJoin('cadastro_domicilio as domicilio', 'cidadao.domicilio_id', 'domicilio.id')
|
||||
->leftJoin('cadastro_endereco as endereco', 'domicilio.endereco_id', 'endereco.id')
|
||||
->leftJoin('cadastro_logradouro as logradouro', 'endereco.logradouro_id', 'logradouro.id')
|
||||
->leftJoin('cadastro_logradouro_tipo as tipo_logradouro', 'logradouro.tipo_id', 'tipo_logradouro.id')
|
||||
->leftJoin('cadastro_bairro as bairro', 'logradouro.bairro_id', 'bairro.id')
|
||||
->leftJoin('cadastro_logradouro as logradouro_referencia', 'ponto.logradouro_id', 'logradouro_referencia.id')
|
||||
->leftJoin('cadastro_logradouro_tipo as tipo_logradouro_referencia', 'logradouro_referencia.tipo_id', 'tipo_logradouro_referencia.id')
|
||||
->leftJoin('cadastro_bairro as bairro_referencia', 'logradouro_referencia.bairro_id', 'bairro_referencia.id')
|
||||
->leftJoin('transporte_paciente_acompanhante', 'transporte_paciente_acompanhante.id', 'agendar.acompanhante_1_id')
|
||||
->leftJoin('cadastro_paciente as paciente_acompanhante_1', 'transporte_paciente_acompanhante.usuario_id', 'paciente_acompanhante_1.id')
|
||||
->leftJoin('cadastro_cidadao as cidadao_acompanhante_1', 'paciente_acompanhante_1.cidadao_id', 'cidadao_acompanhante_1.id')
|
||||
->leftJoin('cadastro_cidadao_telefone as telefone_acompanhante_1', 'cidadao_acompanhante_1.id', 'telefone_acompanhante_1.cidadao_id')
|
||||
->leftJoin('transporte_paciente_acompanhante AS acompanhante_dois', 'acompanhante_dois.id', 'agendar.acompanhante_2_id')
|
||||
->leftJoin('cadastro_paciente as paciente_acompanhante_2', 'acompanhante_dois.usuario_id', 'paciente_acompanhante_2.id')
|
||||
->leftJoin('cadastro_cidadao as cidadao_acompanhante_2', 'paciente_acompanhante_2.cidadao_id', 'cidadao_acompanhante_2.id')
|
||||
->leftJoin('cadastro_cidadao_telefone as telefone_acompanhante_2', 'cidadao_acompanhante_2.id', 'telefone_acompanhante_2.cidadao_id')
|
||||
->leftJoin('sigtap.procedimento', function ($join) {
|
||||
|
||||
$join->on('sigtap.procedimento.codigo', 'motivo.codigo_procedimento')
|
||||
->where('sigtap.procedimento.competencia_id', '=', function ($query) {
|
||||
|
||||
$query->select('sigtap.competencia.id')
|
||||
->from('sigtap.competencia')
|
||||
->orderByDesc('sigtap.competencia.valor')
|
||||
->limit(1);
|
||||
});
|
||||
})
|
||||
->leftJoin('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id')
|
||||
->leftJoin('transporte_paciente_status as status', 'agendar.status_id', 'status.id')
|
||||
->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id')
|
||||
->leftJoin('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->leftJoin('cadastro_cidadao as motorista', 'motorista.id', 'usuario.cidadao_id')
|
||||
->select(
|
||||
'agendar.id',
|
||||
'agendar.viagem_id',
|
||||
DB::raw("CONCAT_WS(
|
||||
', ',
|
||||
NULLIF(destino.descricao_destino, ''),
|
||||
IF(destino.nome_logradouro != '', CONCAT('Logradouro: ', destino.nome_logradouro), NULL),
|
||||
IF(destino.numero_logradouro != '', CONCAT('Nº: ', destino.numero_logradouro), NULL),
|
||||
IF(destino.nome_complemento != '', CONCAT('Complemento: ', destino.nome_complemento), NULL),
|
||||
IF(destino.nome_bairro != '', CONCAT('Bairro: ', destino.nome_bairro), NULL),
|
||||
IF(destino.numero_cep != '', CONCAT('CEP: ', destino.numero_cep), NULL),
|
||||
IF(destino.observacao != '', CONCAT('Observação: ', destino.observacao), NULL)
|
||||
) as destino"),
|
||||
'municipio.nome as municipio',
|
||||
'cidadao.nome as nome',
|
||||
'cidadao.data_nascimento as cidadao_data_nascimento',
|
||||
DB::raw('TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) AS idade'),
|
||||
DB::raw("CONCAT(logradouro.nome,' - ',IF(endereco.numero, endereco.numero, 'Sem número')) as endereco"),
|
||||
'bairro.nome as bairro',
|
||||
'bairro_referencia.nome as bairro_referencia',
|
||||
DB::raw('GROUP_CONCAT(DISTINCT telefone.numero) as telefones'),
|
||||
'motivo.descricao as motivo',
|
||||
'motivo.codigo_procedimento as codigo_procedimento',
|
||||
'agendar.horario_saida',
|
||||
'agendar.horario as horario_consulta',
|
||||
'agendar.acompanhante',
|
||||
'agendar.observacao',
|
||||
'agendar.consulta_observacao',
|
||||
DB::raw("
|
||||
CASE
|
||||
WHEN ponto.descricao IS NULL THEN CONCAT('CASA DO PACIENTE - ', tipo_logradouro.descricao, ' ', logradouro.nome, ' ', IF(endereco.numero, endereco.numero, 'S/N'))
|
||||
ELSE ponto.descricao
|
||||
END as ponto
|
||||
"),
|
||||
'endereco.complemento',
|
||||
'agendar.lotacao_id',
|
||||
'agendar.ocupacao_id',
|
||||
'agendar.usuario_id',
|
||||
'sigtap.procedimento.nome as procedimento_nome',
|
||||
'sigtap.procedimento.id as procedimento_id',
|
||||
'motorista.nome as motorista',
|
||||
'status.descricao as status',
|
||||
'transporte_paciente_acompanhante.id as acompanhante_1',
|
||||
'cidadao_acompanhante_1.nome as acompanhante_nome_1',
|
||||
'transporte_paciente_acompanhante.nome as nome_1',
|
||||
'cidadao_acompanhante_1.cns as acompanhante_cns_1',
|
||||
DB::raw('GROUP_CONCAT(DISTINCT telefone_acompanhante_1.numero) as telefones_acompanhante_1'),
|
||||
'acompanhante_dois.id as acompanhante_2',
|
||||
'cidadao_acompanhante_2.nome as acompanhante_nome_2',
|
||||
'acompanhante_dois.nome as nome_2',
|
||||
'cidadao_acompanhante_2.cns as acompanhante_cns_2',
|
||||
DB::raw('GROUP_CONCAT(DISTINCT telefone_acompanhante_2.numero) as telefones_acompanhante_2'),
|
||||
'destino.distancia',
|
||||
'agendar.consulta_observacao',
|
||||
)
|
||||
->where('agendar.data_saida', request()->data)
|
||||
->where('agendar.veiculo_id', request()->veiculo_id)
|
||||
->when(request()->status_id == EnumStatus::ABERTO, function ($query) {
|
||||
$query->whereIn('agendar.status_id', [
|
||||
EnumAgendaStatus::AGENDADO,
|
||||
EnumAgendaStatus::MODIFICADO,
|
||||
EnumAgendaStatus::REAGENDADO
|
||||
]);
|
||||
})
|
||||
->when(request()->status_id == EnumStatus::FINALIZADO, function ($query) {
|
||||
$query->whereIn('agendar.status_id', [
|
||||
EnumAgendaStatus::TRANSPORTADO,
|
||||
EnumAgendaStatus::FALTOU,
|
||||
EnumAgendaStatus::MODIFICADO
|
||||
]);
|
||||
})
|
||||
->when(request()->municipio_id, function ($query) {
|
||||
$query->where('agendar.municipio_id', request()->municipio_id);
|
||||
})
|
||||
->when(request()->jornada_id, function ($query) {
|
||||
$query->where('agendar.jornada_id', request()->jornada_id);
|
||||
})
|
||||
->when(request()->nome_bairro, function($query) {
|
||||
$query->where('destino.nome_bairro', '=', request()->nome_bairro);
|
||||
})
|
||||
->when(request()->veiculo_id, function ($query) {
|
||||
$query->where('agendar.veiculo_id', request()->veiculo_id);
|
||||
})
|
||||
->whereNull('telefone.deleted_at')
|
||||
->groupBy('agendar.id')
|
||||
->orderBy('agendar.horario_saida', 'asc')
|
||||
->orderBy('horario_consulta','asc')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getViagem()
|
||||
{
|
||||
return DB::table('transporte_paciente_viagem as viagem')
|
||||
->select(
|
||||
'viagem.protocolo',
|
||||
'viagem.diaria',
|
||||
'viagem.condutor_id',
|
||||
'cidadao.nome',
|
||||
'viagem.horario_saida_temp as horarioSaida'
|
||||
)
|
||||
->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id')
|
||||
->leftJoin('cadastro_usuario as usuario', 'usuario.id', 'condutor.id')
|
||||
->leftJoin('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->leftJoin('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
|
||||
->leftJoin('transporte_paciente_destino as destino', 'agendar.destino_id', 'destino.id')
|
||||
->where('viagem.veiculo_id', request()->veiculo_id)
|
||||
->where('viagem.data', request()->data)
|
||||
->when(request()->jornada_id, function ($query) {
|
||||
$query->where('viagem.jornada_id', request()->jornada_id);
|
||||
})
|
||||
->when(request()->nome_bairro, function($query) {
|
||||
$query->where('destino.nome_bairro', request()->nome_bairro);
|
||||
})
|
||||
->where('viagem.status_id', request()->status_id)
|
||||
->first();
|
||||
}
|
||||
|
||||
public static function print()
|
||||
{
|
||||
$pacientes = self::getPacientes();
|
||||
|
||||
$pacientes->each(function ($paciente) {
|
||||
$telefones = explode(',', $paciente->telefones);
|
||||
$telefonesComMascara = [];
|
||||
foreach($telefones as $telefone) {
|
||||
array_push($telefonesComMascara, MaskUtil::getPhoneMasked($telefone));
|
||||
}
|
||||
$paciente->telefones = implode(', ', $telefonesComMascara);
|
||||
|
||||
$telefonesAcompanhante = explode(',', $paciente->telefones_acompanhante_1);
|
||||
$telefonesAcompanhanteComMascara = [];
|
||||
foreach($telefonesAcompanhante as $telefone) {
|
||||
array_push($telefonesAcompanhanteComMascara, MaskUtil::getPhoneMasked($telefone));
|
||||
}
|
||||
$paciente->telefones_acompanhante_1 = implode(', ', $telefonesAcompanhanteComMascara);
|
||||
|
||||
$telefonesAcompanhante = explode(',', $paciente->telefones_acompanhante_2);
|
||||
$telefonesAcompanhanteComMascara = [];
|
||||
foreach($telefonesAcompanhante as $telefone) {
|
||||
array_push($telefonesAcompanhanteComMascara, MaskUtil::getPhoneMasked($telefone));
|
||||
}
|
||||
$paciente->telefones_acompanhante_2 = implode(', ', $telefonesAcompanhanteComMascara);
|
||||
|
||||
$paciente->cidadao_idade_anos = $paciente->cidadao_data_nascimento
|
||||
? (int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%y')
|
||||
: 0;
|
||||
|
||||
$paciente->cidadao_idade_meses = $paciente->cidadao_data_nascimento ?
|
||||
(int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%m')
|
||||
: 0;
|
||||
|
||||
$paciente->cidadao_idade_dias = $paciente->cidadao_data_nascimento
|
||||
? (int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%d')
|
||||
: 0;
|
||||
|
||||
$paciente->cidadao_idade_meses = $paciente->cidadao_data_nascimento
|
||||
? str_pad($paciente->cidadao_idade_meses, 2, '0', STR_PAD_LEFT)
|
||||
: null;
|
||||
|
||||
$paciente->cidadao_idade_dias = $paciente->cidadao_data_nascimento
|
||||
? str_pad($paciente->cidadao_idade_dias, 2, '0', STR_PAD_LEFT)
|
||||
: null;
|
||||
|
||||
$paciente->acompanhante_cns_1 = $paciente->acompanhante_cns_1 ? MaskUtil::getCnsMasked($paciente->acompanhante_cns_1 ) : '';
|
||||
$paciente->acompanhante_cns_2 = $paciente->acompanhante_cns_2 ? MaskUtil::getCnsMasked($paciente->acompanhante_cns_2 ) : '';
|
||||
|
||||
});
|
||||
$total = array_reduce($pacientes->toArray(), function($carry, $item) {
|
||||
if($item->acompanhante != null) {
|
||||
$carry += $item->acompanhante;
|
||||
}
|
||||
return $carry + 1;
|
||||
}, 0);
|
||||
|
||||
$viagem = DB::table('transporte_paciente_viagem as viagem')
|
||||
->select(
|
||||
'viagem.protocolo',
|
||||
'viagem.status_id as status',
|
||||
DB::raw("DATE_FORMAT(viagem.data, '%d/%m/%Y') as data"),
|
||||
'viagem.horario_saida_temp as horario_saida',
|
||||
DB::raw('CONCAT(veiculo.descricao_modelo, " - ", veiculo.numero_placa) AS veiculo'),
|
||||
'motorista.nome as motorista',
|
||||
'condutor.matricula as matricula',
|
||||
'viagem.diaria',
|
||||
'viagem.horario_saida_temp',
|
||||
'viagem.horario_chegada',
|
||||
'viagem.horario_chegada_destino',
|
||||
'viagem.horario_saida_destino',
|
||||
'viagem.km_saida',
|
||||
'viagem.km_chegada',
|
||||
DB::raw("CONCAT(
|
||||
DATE_FORMAT(jornada.data_inicial, '%d/%m/%Y %H:%i'),
|
||||
' - ',
|
||||
DATE_FORMAT(jornada.data_final, '%d/%m/%Y %H:%i')) AS jornada"),
|
||||
'viagem.refeicao',
|
||||
'viagem.pernoite',
|
||||
'viagem.combustivel',
|
||||
'viagem.pedagio',
|
||||
'viagem.outras_despesas',
|
||||
'viagem.total_despesa',
|
||||
DB::raw("
|
||||
CASE WHEN (
|
||||
SELECT agendar_transporte_jornada
|
||||
FROM transporte_paciente_parametrizacao) = 1
|
||||
THEN DATE_FORMAT(jornada.data_inicial, '%H:%i')
|
||||
END as jornada_horario_inicial
|
||||
")
|
||||
)
|
||||
->leftJoin('transporte_paciente_veiculo as veiculo', 'viagem.veiculo_id', 'veiculo.id')
|
||||
->leftJoin('transporte_paciente_condutor as condutor', 'viagem.condutor_id', 'condutor.id')
|
||||
->leftJoin('transporte_paciente_jornada as jornada', 'viagem.jornada_id', 'jornada.id')
|
||||
->leftJoin('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
|
||||
->leftJoin('cadastro_cidadao as motorista', 'motorista.id', 'usuario.cidadao_id')
|
||||
->where('viagem.veiculo_id', request()->veiculo_id)
|
||||
->where('viagem.data', request()->data)
|
||||
->when(request()->jornada_id, function($query) {
|
||||
$query->where('viagem.jornada_id', request()->jornada_id);
|
||||
})
|
||||
->when(request()->destino_id, function($query) {
|
||||
$query->where('viagem.destino_id', request()->destino_id);
|
||||
})
|
||||
->where('viagem.status_id', request()->status_id)
|
||||
->first();
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
$cliente = Cliente::where('link', app('config')->get('database.default'))->firstOrFail();
|
||||
|
||||
$exibir = Parametrizacao::first();
|
||||
$exibirObservacaoPaciente = $exibir ? $exibir->exibir_observacao_paciente : false;
|
||||
|
||||
return [
|
||||
'unidade_nome' => request()->unidade_nome ?? 'TODAS',
|
||||
'infraestrutura_nome' => request()->infraestrutura_nome ?? 'TODOS',
|
||||
'unidade' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'unidade_id' => $currentLotacao->infraestrutura->unidade->id,
|
||||
'infraestrutura_id' => $currentLotacao->infraestrutura->id,
|
||||
'infraestrutura' => $currentLotacao->infraestrutura->nome,
|
||||
'sistema' => [
|
||||
'ramo_atividade' => [
|
||||
'nome' => $cliente->sistema->ramoAtividade->nome ?? null,
|
||||
],
|
||||
'nome' => $cliente->sistema->nome ?? null,
|
||||
'versao' => $cliente->sistema->versao ?? null,
|
||||
],
|
||||
'pacientes' => $pacientes,
|
||||
'viagem' => $viagem,
|
||||
'exibir_observacao_paciente' => $exibirObservacaoPaciente,
|
||||
'agrupar' => request()->agrupar,
|
||||
'ordenar' => request()->ordenar,
|
||||
'total' => $total,
|
||||
];
|
||||
}
|
||||
|
||||
public static function checkMotorista()
|
||||
{
|
||||
$viagens = Viagem::where('data', request()->data)
|
||||
->where('condutor_id', request()->condutor_id)
|
||||
->get();
|
||||
|
||||
if($viagens) {
|
||||
$jornada = Jornada::find(request()->jornada_id);
|
||||
foreach($viagens as $viagem) {
|
||||
$viagemStart = Carbon::createFromFormat('Y-m-d H:i:s', $viagem->jornada->data_inicial);
|
||||
$viagemEnd = Carbon::createFromFormat('Y-m-d H:i:s', $viagem->jornada->data_final);
|
||||
$jornadaStart = Carbon::createFromFormat('Y-m-d H:i:s', $jornada->data_inicial);
|
||||
$jornadaEnd = Carbon::createFromFormat('Y-m-d H:i:s', $jornada->data_final);
|
||||
if($jornadaStart->lt($viagemEnd) && $jornadaEnd->gt($viagemStart)) {
|
||||
return [
|
||||
'isValid' => false
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'isValid' => true
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user