File manager - Edit - /var/www/html/portalHomolog/app/Http/Controllers/Demandas/DemandaRelatorioController.php
Back
<?php namespace App\Http\Controllers\Demandas; use App\Enums\PrioridadeDemanda; use App\Enums\StatusDemanda; use App\Http\Controllers\Controller; use App\Http\Services\Demandas\DemandaService; use App\Models\Demandas\Demanda; use Barryvdh\DomPDF\Facade\Pdf; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Auth; use Illuminate\View\View; use Symfony\Component\HttpFoundation\StreamedResponse; class DemandaRelatorioController extends Controller { private string $permissao = 'GERENCIADOR_DEMANDAS'; public function __construct(private readonly DemandaService $service) {} public function index(Request $request): View|RedirectResponse { $response = $this->checkPermissao($this->permissao, 'visualizar'); if ($response instanceof RedirectResponse) return $response; $filters = $request->only(['data_inicio', 'data_fim', 'status', 'prioridade', 'unidade_id', 'canal']); $hasFilter = !empty(array_filter($filters)); $user = Auth::user(); $isSuporteTi = $user->permissoes->pluck('permissao')->contains('SUPORTE_TI'); return view('admin.demandas.relatorio', [ 'filters' => $filters, 'hasFilter' => $hasFilter, 'demandas' => $hasFilter ? $this->service->relatorioResumido($user, $filters) : null, 'statusLabels' => StatusDemanda::options(), 'prioridades' => PrioridadeDemanda::options(), 'unidades' => $this->service->listarUnidadesDoUsuario($user), 'canais' => Demanda::CANAL, 'isSuporteTi' => $isSuporteTi, ]); } public function exportarPdfResumido(Request $request): Response|RedirectResponse { $response = $this->checkPermissao($this->permissao, 'visualizar'); if ($response instanceof RedirectResponse) return $response; $filters = $request->only(['data_inicio', 'data_fim', 'status', 'prioridade', 'unidade_id', 'canal']); $demandas = $this->service->relatorioResumidoAll(Auth::user(), $filters); $porStatus = $demandas->groupBy('status')->map->count(); $pdf = Pdf::loadView('admin.demandas.reports.relatorio_pdf_resumido', [ 'demandas' => $demandas, 'total' => $demandas->count(), 'porStatus' => $porStatus, 'filters' => $filters, ]) ->setPaper('a4', 'portrait') ->setOptions(['defaultFont' => 'DejaVu Sans', 'isHtml5ParserEnabled' => true, 'isRemoteEnabled' => false]); return $pdf->download('demandas-resumido-' . now()->format('Y-m-d') . '.pdf'); } public function exportarPdfMatricial(Request $request): Response|RedirectResponse { $response = $this->checkPermissao($this->permissao, 'visualizar'); if ($response instanceof RedirectResponse) return $response; $filters = $request->only(['data_inicio', 'data_fim', 'status', 'prioridade', 'unidade_id', 'canal']); $dados = $this->service->relatorioMatricial(Auth::user(), $filters); $pdf = Pdf::loadView('admin.demandas.reports.relatorio_pdf_matricial', $dados) ->setPaper('a4', 'landscape') ->setOptions(['defaultFont' => 'DejaVu Sans', 'isHtml5ParserEnabled' => true, 'isRemoteEnabled' => false]); return $pdf->download('demandas-matricial-' . now()->format('Y-m-d') . '.pdf'); } public function exportarPdfDetalhado(Request $request): Response|RedirectResponse { $response = $this->checkPermissao($this->permissao, 'visualizar'); if ($response instanceof RedirectResponse) return $response; $user = Auth::user(); if (!$user->permissoes->pluck('permissao')->contains('SUPORTE_TI')) { abort(403); } $filters = $request->only(['data_inicio', 'data_fim', 'status', 'prioridade', 'unidade_id', 'canal']); $dados = $this->service->montarDadosRelatorioDetalhado($user, $filters); $pdf = Pdf::loadView('admin.demandas.reports.relatorio_pdf_detalhado', $dados) ->setPaper('a4', 'landscape') ->setOptions([ 'defaultFont' => 'DejaVu Sans', 'isHtml5ParserEnabled' => true, 'isRemoteEnabled' => false, 'isPhpEnabled' => true, ]); return $pdf->download('demandas-ti-detalhado-' . now()->format('Y-m-d') . '.pdf'); } public function exportarCsv(Request $request): StreamedResponse|RedirectResponse { $response = $this->checkPermissao($this->permissao, 'visualizar'); if ($response instanceof RedirectResponse) return $response; $filters = $request->only(['data_inicio', 'data_fim', 'status', 'prioridade', 'unidade_id', 'canal']); $demandas = $this->service->relatorioResumidoAll(Auth::user(), $filters); return response()->streamDownload(function () use ($demandas) { $out = fopen('php://output', 'w'); fputs($out, "\xEF\xBB\xBF"); fputcsv($out, ['Nº', 'Unidade', 'Tarefa', 'Status', 'Prioridade', 'Responsável', 'Nº SEI', 'Canal', 'Abertura', 'Prazo']); foreach ($demandas as $d) { $resp = $d->destinatarios->first(fn($dt) => $dt->responsavel_id !== null); fputcsv($out, [ $d->numero, $d->unidade?->abbreviation ?? $d->unidade?->name ?? '-', $d->titulo, StatusDemanda::tryFrom($d->status)?->label() ?? $d->status, PrioridadeDemanda::tryFrom($d->prioridade)?->label() ?? $d->prioridade, $resp?->responsavel?->name ?? '-', $d->numero_sei ?? '', Demanda::CANAL[$d->canal] ?? $d->canal ?? '', $d->data_abertura?->format('d/m/Y') ?? '', $d->prazo?->format('d/m/Y') ?? '', ]); } fclose($out); }, 'demandas-' . now()->format('Y-m-d') . '.csv', [ 'Content-Type' => 'text/csv; charset=UTF-8', ]); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings