File manager - Edit - /var/www/html/portalHomolog/app/Http/Controllers/IndicadoresTi/IndicadoresTiRelatorioController.php
Back
<?php namespace App\Http\Controllers\IndicadoresTi; use App\Http\Controllers\Controller; use App\Http\Services\IndicadoresTi\IndicadoresTiRelatorioService; use Barryvdh\DomPDF\Facade\Pdf; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\View\View; use App\Models\IndicadoresTi\Setor; class IndicadoresTiRelatorioController extends Controller { public function __construct(private readonly IndicadoresTiRelatorioService $service) {} public function index(Request $request): View { $filterParams = $request->only([ 'data_inicio', 'data_fim', 'setor_id', 'assunto_id', 'subassunto_id', 'status', 'prioridade', 'tipo', 'canal', ]); $setores = Setor::orderBy('nome')->get(); $assuntos = $request->filled('setor_id') ? $this->service->assuntosPorSetor($request->setor_id) : collect(); $subassuntos = $request->filled('assunto_id') ? $this->service->subassuntosPorAssunto($request->assunto_id) : collect(); $resumo = null; if ($request->isMethod('GET') && !empty(array_filter($filterParams))) { $resumo = $this->service->calcularResumo($filterParams); } return view('admin.indicadoresTi.report', compact( 'filterParams', 'setores', 'assuntos', 'subassuntos', 'resumo' ) + ['headLine' => 'Relatório de Indicadores de TI']); } public function exportarPdf(Request $request): Response { $request->validate([ 'data_inicio' => ['nullable', 'date'], 'data_fim' => ['nullable', 'date', 'after_or_equal:data_inicio'], 'tipo_relatorio' => ['required', 'in:resumido,detalhado'], ]); $filterParams = $request->only([ 'data_inicio', 'data_fim', 'setor_id', 'assunto_id', 'subassunto_id', 'status', 'prioridade', 'tipo', 'canal', ]); $tipoRelatorio = $request->input('tipo_relatorio', 'resumido'); $dados = $this->service->montarDadosRelatorio($filterParams, $tipoRelatorio); $view = $tipoRelatorio === 'detalhado' ? 'admin.indicadoresTi.reports.relatorio_pdf_detalhado' : 'admin.indicadoresTi.reports.relatorio_pdf_resumido'; $pdf = Pdf::loadView($view, $dados) ->setPaper('a4', $tipoRelatorio === 'detalhado' ? 'landscape' : 'portrait') ->setOptions([ 'defaultFont' => 'DejaVu Sans', 'isHtml5ParserEnabled' => true, 'isRemoteEnabled' => false, 'isPhpEnabled' => true, ]); return $pdf->download('relatorio-ti-' . $tipoRelatorio . '-' . now()->format('Y-m-d') . '.pdf'); } public function exportarCsv(Request $request): \Symfony\Component\HttpFoundation\StreamedResponse { $request->validate([ 'data_inicio' => ['nullable', 'date'], 'data_fim' => ['nullable', 'date', 'after_or_equal:data_inicio'], 'tipo_relatorio' => ['required', 'in:resumido,detalhado'], ]); $filterParams = $request->only([ 'data_inicio', 'data_fim', 'setor_id', 'assunto_id', 'subassunto_id', 'status', 'prioridade', 'tipo', 'canal', ]); $tipoRelatorio = $request->input('tipo_relatorio', 'resumido'); $nomeArquivo = 'relatorio-ti-' . $tipoRelatorio . '-' . now()->format('Y-m-d') . '.csv'; return response()->streamDownload(function () use ($filterParams, $tipoRelatorio) { $out = fopen('php://output', 'w'); fputs($out, "\xEF\xBB\xBF"); if ($tipoRelatorio === 'detalhado') { $this->service->gerarCsvDetalhado($out, $filterParams); } else { $this->service->gerarCsvResumido($out, $filterParams); } fclose($out); }, $nomeArquivo, [ 'Content-Type' => 'text/csv; charset=UTF-8', 'Content-Disposition' => 'attachment; filename="' . $nomeArquivo . '"', ]); } public function exportarPdfMatricial(Request $request): Response { $filters = $request->only([ 'data_inicio', 'data_fim', 'setor_id', 'assunto_id', 'subassunto_id', 'status', 'prioridade', 'tipo', 'canal', ]); $ano = $this->service->determinarAno($filters); $chamados = $this->service->queryBase($filters)->get(); $meses = [ 1 => 'Janeiro', 2 => 'Fevereiro', 3 => 'Março', 4 => 'Abril', 5 => 'Maio', 6 => 'Junho', 7 => 'Julho', 8 => 'Agosto', 9 => 'Setembro', 10 => 'Outubro', 11 => 'Novembro', 12 => 'Dezembro', ]; $pdf = Pdf::loadView('admin.indicadoresTi.reports.relatorio_pdf_matricial', [ 'totalMensal' => $this->service->buildTotalMensal($chamados), 'matrizSetores' => $this->service->buildMatrizSetoresSimples($chamados), 'totalGeral' => $chamados->count(), 'ano' => $ano, 'filters' => $filters, 'meses' => $meses, ]); $pdf->setPaper('A4', 'landscape') ->setOptions([ 'defaultFont' => 'DejaVu Sans', 'isHtml5ParserEnabled' => true, 'isRemoteEnabled' => false, 'isPhpEnabled' => true, ]); return $pdf->download('relatorio-matricial-ti-' . $ano . '.pdf'); } public function assuntosPorSetor(int $setor): JsonResponse { return response()->json($this->service->assuntosPorSetor($setor)); } public function subassuntosPorAssunto(int $assunto): JsonResponse { return response()->json($this->service->subassuntosPorAssunto($assunto)); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings