81 lines
3.9 KiB
PHP
81 lines
3.9 KiB
PHP
<?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),
|
|
];
|
|
}
|
|
}
|