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