[ '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) ]; } }