57 lines
1.7 KiB
PHP
57 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Ticket\Services;
|
|
|
|
use App\Domains\Tenant\Models\Tenant;
|
|
use App\Domains\Ticket\Models\Ticket;
|
|
use Barryvdh\DomPDF\Facade\Pdf;
|
|
use Barryvdh\DomPDF\PDF as DomPdf;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\Support\Collection;
|
|
|
|
class AdminAppTicketPdfService
|
|
{
|
|
public function __construct(
|
|
private readonly AdminAppTicketReportService $reportService,
|
|
private readonly AdminAppTicketColumnService $columnService,
|
|
) {}
|
|
|
|
/** @param Collection<int, Ticket> $tickets */
|
|
public function download(Tenant $tenant, Collection $tickets, string $timeZone): Response
|
|
{
|
|
$generatedAt = now();
|
|
$columns = $this->columnService->columns($tenant);
|
|
$rows = $this->reportService->rows($tickets);
|
|
$pdf = Pdf::loadView('pdf.adminapp.tickets', [
|
|
'tenant' => $tenant,
|
|
'columns' => $columns,
|
|
'tickets' => $this->reportService->displayRows($rows, $columns, $timeZone),
|
|
'generatedAt' => $generatedAt,
|
|
'timeZone' => $timeZone,
|
|
])->setPaper('a3', 'landscape');
|
|
|
|
$this->addPageNumbers($pdf);
|
|
|
|
return $pdf->download(
|
|
'tickets_'.$tenant->codigo.'_'
|
|
.$generatedAt->copy()->timezone($timeZone)->format('Ymd_His').'.pdf'
|
|
);
|
|
}
|
|
|
|
private function addPageNumbers(DomPdf $pdf): void
|
|
{
|
|
$pdf->render();
|
|
$domPdf = $pdf->getDomPDF();
|
|
$font = $domPdf->getFontMetrics()->getFont('DejaVu Sans');
|
|
|
|
$domPdf->getCanvas()->page_text(
|
|
565,
|
|
805,
|
|
'Página {PAGE_NUM} de {PAGE_COUNT}',
|
|
$font,
|
|
7,
|
|
[0.48, 0.52, 0.49],
|
|
);
|
|
}
|
|
}
|