109 lines
4.8 KiB
PHP
109 lines
4.8 KiB
PHP
<?php
|
|
|
|
namespace App\Services\TransportePaciente\Reabertura;
|
|
|
|
use App\Enums\TransportePaciente\Status;
|
|
use App\Enums\TransportePaciente\ViagemStatus;
|
|
use App\Models\TransportePaciente\Agendar\Agendar;
|
|
use App\Models\TransportePaciente\Faturamento\Faturamento;
|
|
use App\Models\TransportePaciente\Viagem;
|
|
use App\Services\Service;
|
|
use App\Services\TransportePaciente\Agendar\HistoricoService;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class ReaberturaViagemService extends Service
|
|
{
|
|
public static function index()
|
|
{
|
|
return [
|
|
'model' => [
|
|
'data_inicial' => null,
|
|
'data_final' => null,
|
|
'cidade' => null,
|
|
'destino' => null
|
|
],
|
|
'form' => [
|
|
'cidades' => [],
|
|
'destinos' => []
|
|
]
|
|
];
|
|
}
|
|
|
|
public static function list()
|
|
{
|
|
return DB::table('transporte_paciente_viagem as viagem')
|
|
->leftJoin('transporte_paciente_veiculo as veiculo','viagem.veiculo_id', 'veiculo.id')
|
|
->leftJoin('transporte_paciente_condutor as condutor', 'condutor.id', 'viagem.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_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')
|
|
->select(
|
|
'viagem.id',
|
|
'viagem.data',
|
|
DB::raw('GROUP_CONCAT(DISTINCT municipio.nome) as cidade'),
|
|
DB::raw('GROUP_CONCAT(DISTINCT descricao_destino) as destino'),
|
|
'viagem.protocolo',
|
|
'cidadao.nome as motorista',
|
|
DB::raw('CONCAT(veiculo.numero_placa," - ",veiculo.descricao_modelo) AS veiculo'),
|
|
)
|
|
->where('viagem.data' ,'>=', Carbon::parse(request()->data_inicial)->format('Y-m-d'))
|
|
->where('viagem.data', '<=', Carbon::parse(request()->data_final)->format('Y-m-d'))
|
|
->when(request()->cidade, function($query){
|
|
$query->where('municipio.id', request()->cidade);
|
|
})
|
|
->when(request()->destino, function($query){
|
|
$query->where('destino.id', request()->destino);
|
|
})
|
|
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
|
->groupBy('viagem.id')
|
|
->get();
|
|
}
|
|
|
|
public static function reopen($id)
|
|
{
|
|
$viagem = Viagem::find($id);
|
|
$viagem->status_id = ViagemStatus::ABERTO;
|
|
$viagem->save();
|
|
|
|
$agendamentos = Agendar::where('viagem_id', $viagem->id)->get();
|
|
foreach($agendamentos as $agendamento) {
|
|
$agendamento->status_id = Status::AGENDADO;
|
|
$agendamento->save();
|
|
HistoricoService::create($agendamento, Status::AGENDADO, $agendamento->updated_lotacao_id);
|
|
Faturamento::where('agendamento_id', $agendamento->id)->delete();
|
|
}
|
|
}
|
|
|
|
public static function getCidades()
|
|
{
|
|
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', 'destino.id', 'agendar.destino_id')
|
|
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.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)
|
|
->groupBy('municipio.id')
|
|
->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', 'destino.id', 'agendar.destino_id')
|
|
->join('intranet.cadastro_municipio as municipio', 'municipio.id', 'destino.municipio_id')
|
|
->select('destino.id', 'destino.descricao_destino as descricao')
|
|
->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('municipio.id', request()->cidade)
|
|
->where('viagem.status_id', ViagemStatus::FINALIZADO)
|
|
->groupBy('destino.id')
|
|
->get();
|
|
}
|
|
}
|