Files
rkm-conectasus-ci-sandbox/api/app/Services/TransportePaciente/PrestacaoContaService.php
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

155 lines
7.1 KiB
PHP

<?php
namespace App\Services\TransportePaciente;
use App\Enums\TransportePaciente\ViagemStatus;
use App\Services\Service;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class PrestacaoContaService extends Service
{
public static function index()
{
return [
'model' => [
'data_inicial' => null,
'data_final' => null,
'motorista' => null,
'destino' => null,
'veiculo' => null,
],
'form' => [
'veiculos' => null,
'motoristas' => null,
'destinos' => null,
]
];
}
public static function getVeiculos()
{
return DB::table('transporte_paciente_agendar_transporte as agendar')
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'agendar.veiculo_id')
->select(
'veiculo.id',
DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) as identificacao_veiculo'),
)
->join('transporte_paciente_viagem as viagem','viagem.id', 'agendar.viagem_id')
->where('viagem.status_id', ViagemStatus::FINALIZADO)
->where('viagem.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
->where('viagem.data_chegada', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
->where('veiculo.bloqueado', false)
->orderBy('identificacao_veiculo')
->groupBy('veiculo.id')
->get();
}
public static function getMotoristas()
{
return DB::table('transporte_paciente_condutor as condutor')
->select('condutor.id', 'cidadao.nome')
->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
->join('transporte_paciente_viagem as viagem', 'condutor.id', 'viagem.condutor_id')
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
->where('viagem.status_id', ViagemStatus::FINALIZADO)
->where('viagem.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
->where('viagem.data_chegada', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
->when(request()->veiculo, function($query) {
$query->where('viagem.veiculo_id', request()->veiculo);
})
->orderBy('cidadao.nome')
->groupBy('condutor.id')
->get();
}
public static function getDestinos()
{
return DB::table('transporte_paciente_agendar_transporte as agendar')
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
->join('transporte_paciente_viagem as viagem', 'viagem.id', 'agendar.viagem_id')
->select('destino.id', 'destino.descricao_destino as descricao')
->where('viagem.status_id', ViagemStatus::FINALIZADO)
->where('viagem.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
->where('viagem.data_chegada', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
->when(request()->veiculo, function($query) {
$query->where('viagem.veiculo_id', request()->veiculo);
})
->when(request()->motorista, function($query) {
$query->where('viagem.condutor_id', request()->motorista);
})
->groupBy('destino.id')
->get();
}
public static function list()
{
$consulta = DB::table('transporte_paciente_viagem as viagem')
->select(
'viagem.id',
'viagem.km_saida',
'viagem.km_chegada',
DB::raw('viagem.km_chegada - viagem.km_saida as km_percorrido'),
'diaria',
'refeicao',
'pernoite',
'pedagio',
'combustivel',
'outras_despesas',
'descricao_outras_despesas',
'cidadao.id', 'cidadao.nome as motorista',
'viagem.total_despesa',
'agendar.destino_id', 'destino.descricao_destino as destino',
'condutor.id as id_condutor',
'viagem.id as id_viagem',
'veiculo.id',
DB::raw('CONCAT(veiculo.numero_placa, " - ", veiculo.descricao_modelo) as identificacao_veiculo'),
DB::raw('CONCAT(
COALESCE(DATE_FORMAT(viagem.data, "%d/%m/%Y"), "-"),
" ",
COALESCE(DATE_FORMAT(viagem.horario_saida_real, "%H:%i"), "")
) AS data_horario_partida'),
DB::raw('CONCAT(
COALESCE(DATE_FORMAT(viagem.data_chegada, "%d/%m/%Y"), "-"),
" ",
COALESCE(DATE_FORMAT(viagem.horario_chegada, "%H:%i"), "")
) AS data_horario_chegada')
)
->join('transporte_paciente_veiculo as veiculo', 'veiculo.id', 'viagem.veiculo_id')
->join('transporte_paciente_condutor as condutor', 'condutor.id', 'viagem.condutor_id')
->join('cadastro_usuario as usuario', 'usuario.id', 'condutor.usuario_id')
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
->join('transporte_paciente_agendar_transporte as agendar', 'agendar.viagem_id', 'viagem.id')
->join('transporte_paciente_destino as destino', 'destino.id', 'agendar.destino_id')
->where('viagem.status_id', ViagemStatus::FINALIZADO)
->where('viagem.data', '>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
->where('viagem.data', '<', Carbon::parse(request()->data_final)->addDay()->format('Y-m-d'))
->when(request()->veiculo, function($query) {
$query->where('viagem.veiculo_id', request()->veiculo);
})
->when(request()->motorista, function($query) {
$query->where('viagem.condutor_id', request()->motorista);
})
->when(request()->destino, function($query) {
$query->where('destino.id', request()->destino);
})
->orderByDesc('viagem.data')
->groupBy('viagem.id')
->get();
$totalizadores = [
'total_diaria' => $consulta->sum('diaria'),
'total_refeicao' => $consulta->sum('refeicao'),
'total_pernoite' => $consulta->sum('pernoite'),
'total_pedagio' => $consulta->sum('pedagio'),
'total_combustivel' => $consulta->sum('combustivel'),
'total_outras_despesas' => $consulta->sum('outras_despesas'),
'total_despesa' => $consulta->sum('total_despesa'),
'total_km_percorrido' => $consulta->sum('km_percorrido'),
];
return ['consulta' => $consulta, 'totalizadores' => $totalizadores];
}
}