155 lines
7.1 KiB
PHP
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];
|
|
}
|
|
}
|