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