src/Billing/Controller/InvoiceController.php line 24

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace App\Billing\Controller;
  3. use App\Billing\Entity\Invoice;
  4. use App\Billing\Service\InvoicePDFService;
  5. use App\Billing\Service\InvoiceService;
  6. use App\Framework\Controller\APIController;
  7. use App\Framework\Serializer\APISerializerGroup;
  8. use App\Order\Service\OrderService;
  9. use Doctrine\ORM\EntityNotFoundException;
  10. use Symfony\Component\Security\Http\Attribute\IsGranted;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Attribute\Route;
  13. use Symfony\Component\ExpressionLanguage\Expression;
  14. #[Route(path'/api/invoices')]
  15. #[IsGranted(new Expression("is_granted('ROLE_ADMIN') or is_granted('ROLE_HUERTA') or is_granted('ROLE_CALLCENTER')"))]
  16. class InvoiceController extends APIController
  17. {
  18.     /**
  19.      * @return mixed[]
  20.      */
  21.     #[Route(path'/stats'methods: ['GET'])]
  22.     public function getStats(InvoiceService $invoiceService): ?array
  23.     {
  24.         // Get collection filters
  25.         $filters $this->getCollectionFilters();
  26.         return $invoiceService->getStats([
  27.             'filters' => $filters,
  28.         ]);
  29.     }
  30.     /**
  31.      * @return mixed[]
  32.      */
  33.     #[Route(path''methods: ['GET'])]
  34.     #[APISerializerGroup('list')]
  35.     public function listInvoices(InvoiceService $invoiceService): array
  36.     {
  37.         $filters $this->getCollectionFilters();
  38.         $result $invoiceService->getInvoices([
  39.             'filters' => $filters,
  40.         ]);
  41.         return [
  42.             'count' => count($result),
  43.             'records' => $result,
  44.         ];
  45.     }
  46.     /**
  47.      * @throws EntityNotFoundException
  48.      */
  49.     #[Route(path'/{id}'requirements: ['id' => '\d+'], methods: ['GET'])]
  50.     #[APISerializerGroup('details')]
  51.     public function getInvoice(int $idInvoiceService $invoiceServiceInvoicePDFService $invoicePDFService): Response
  52.     {
  53.         $invoice $invoiceService->getInvoiceById($id);
  54.         $pdf $invoicePDFService->generatePDFInvoice($invoice);
  55.         return new Response($pdf200, [
  56.             'Content-Type' => 'application/pdf',
  57.             'Content-Disposition' => 'inline; filename="factura.pdf"',
  58.         ]);
  59.     }
  60.     /**
  61.      * @throws EntityNotFoundException
  62.      */
  63.     #[Route(path'/{ids}'methods: ['GET'])]
  64.     public function getInvoices(
  65.         string $ids,
  66.         InvoiceService $invoiceService,
  67.         InvoicePDFService $invoicePDFService
  68.     ): Response {
  69.         // Get array of ids that we want to pack
  70.         $ids array_map('intval'explode(','$ids));
  71.         $invoices $invoiceService->getInvoicesByIds($ids);
  72.         $pdf $invoicePDFService->generatePDFInvoices($invoices);
  73.         return new Response($pdf200, [
  74.             'Content-Type' => 'application/pdf',
  75.             'Content-Disposition' => 'inline; filename="facturas.pdf"',
  76.         ]);
  77.     }
  78.     #[Route(path''methods: ['POST'])]
  79.     #[APISerializerGroup('details')]
  80.     public function postInvoice(OrderService $orderServiceInvoiceService $invoiceService): Invoice
  81.     {
  82.         $orderId $this->getRequestBodyData('order'true);
  83.         $order $orderService->getOrderById($orderId);
  84.         $customer $order->getCustomer();
  85.         return $invoiceService->generateInvoiceForOrder($order$customer);
  86.     }
  87. }