<?php
namespace AppBundle\Controller;
use AppBundle\Repository\BookingRepository;
use AppBundle\Utility\PdfExporter;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Routing\Annotation\Route;
class PdfController extends AbstractController
{
public function __construct(
private PdfExporter $pdfExporter,
private BookingRepository $bookingRepository
) {
}
#[Route(path: '/booking/pdf/{bookingId}/{type}.pdf', name: 'pdf.download')]
public function downloadAction($bookingId, $type)
{
$booking = $this->bookingRepository->find($bookingId);
if ($booking) {
// check if the user is able to access this booking
$this->denyAccessUnlessGranted('view', $booking);
$pdfGenerator = $this->pdfExporter->init($booking);
// which pdf to download?
switch ($type) {
case 1:
$file = $pdfGenerator
->printOverview()
->export(0);
break;
case 2:
$file = $pdfGenerator
->printFreightlist()
->export(0);
break;
case 3:
$file = $pdfGenerator
->printFreightSticker_A4()
->export(0);
break;
case 4: // A6 Format
$file = $pdfGenerator
->printFreightSticker_A4()
->export(1);
break;
case 5:
$file = $pdfGenerator
->printFreightSticker_A5Portrait()
->export(0);
break;
case 6:
$file = $pdfGenerator
->printFreightSticker_A5Landscape()
->export(0);
break;
case 7:
$file = $pdfGenerator
->printFreighLetter()
->export(0);
break;
}
$response = new BinaryFileResponse($file);
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
basename($file)
);
return $response;
}
return new RedirectResponse($this->generateUrl('history'));
}
}