src/Controller/Backend/OrderController.php line 81

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Backend;
  3. use App\Entity\EntityStatus;
  4. use App\Entity\Order;
  5. use App\Form\Backend\ChangeOrderStatusType;
  6. use App\Service\OrderPdfExport;
  7. use App\Service\SaleService;
  8. use DateTimeImmutable;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. #[Route('/admin')]
  18. class OrderController extends AbstractController
  19. {
  20.     #[Route('/orders/{id}/show'name'show_order')]
  21.     #[IsGranted('ROLE_USER'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  22.     public function show(Order $orderRequest $request): Response
  23.     {
  24.         $formChangeStatus $this->createForm(ChangeOrderStatusType::class, $order, [
  25.             'action' => $this->generateUrl('change_status_order', ['id' => $order->getId()])
  26.         ]);
  27.         return $this->renderForm('backend/order/show.html.twig', [
  28.             'controller_name' => 'OrderController',
  29.             'menu' => 'order',
  30.             'order' => $order,
  31.             'formChangeStatus' => $formChangeStatus
  32.         ]);
  33.     }
  34.     #[Route('/orders/{id}/change-status'name'change_status_order')]
  35.     #[IsGranted('ROLE_UPDATE_ENTITY'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  36.     public function edit(Order $orderRequest $requestEntityManagerInterface $emSaleService $saleService): RedirectResponse
  37.     {
  38.         $formChangeStatus $this->createForm(ChangeOrderStatusType::class, $order);
  39.         $formChangeStatus->handleRequest($request);
  40.         if ($formChangeStatus->isSubmitted() && $formChangeStatus->isValid()) {
  41.             if ($order->getStatus() >= Order::STATUS_PAID && $order->getInvoiceNumber() === null) {
  42.                 $order
  43.                     ->setInvoiceNumber($saleService->generateInvoiceNumber())
  44.                     ->setInvoiceDate(new DateTimeImmutable())
  45.                 ;
  46.             }
  47.             $em->persist($order);
  48.             $em->flush();
  49.             $this->addFlash(
  50.                 'success',
  51.                 'Statut mis à jour avec succès'
  52.             );
  53.         }
  54.         return $this->redirectToRoute('show_order', ['id' => $order->getId()]);
  55.     }
  56.     #[Route('/orders/{id}/download-order'name'download_order'methods: ['GET'])]
  57.     #[IsGranted('ROLE_USER'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  58.     public function downloadOrder(Order $orderOrderPdfExport $orderPdfExport): Response
  59.     {
  60.         $pdfPath $orderPdfExport->exportOrder($order);
  61.         return $this->file($pdfPathbasename($pdfPath));
  62.     }
  63.     #[Route('/orders/{id}/download-invoice'name'download_invoice'methods: ['GET'])]
  64.     #[IsGranted('ROLE_USER'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  65.     public function downloadInvoice(Order $orderOrderPdfExport $orderPdfExport): Response
  66.     {
  67.         $pdfPath $orderPdfExport->exportInvoice($order);
  68.         return $this->file($pdfPathbasename($pdfPath));
  69.     }
  70.     #[Route(path'/orders/{id}/archive'name'archive_order'methods: ['DELETE''POST'])]
  71.     #[IsGranted('ROLE_DELETE_ENTITY'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  72.     public function archive(Order $orderRequest $requestEntityManagerInterface $em): JsonResponse
  73.     {
  74.         $data json_decode($request->getContent(), true);
  75.         if ($this->isCsrfTokenValid('order_'.$order->getId(), $data['_token'])) {
  76.             $order->setStatus(EntityStatus::STATUS_ARCHIVED);
  77.             $cotisation $order->getCotisation();
  78.             if($cotisation && $cotisation->getAssocietedOrder() && $cotisation->getAssocietedOrder()->getId() === $order->getId()){
  79.                 $cotisation->setStatus(EntityStatus::STATUS_ARCHIVED);
  80.                 $em->persist($cotisation);
  81.             }
  82.             $em->persist($order);
  83.             $em->flush();
  84.             return new JsonResponse([
  85.                 'status' => 'ok',
  86.                 'message' => 'Archivage effectuée avec succès'
  87.             ]);
  88.         }
  89.         return new JsonResponse([
  90.             'status' => 'nok',
  91.             'message' => 'Erreur lors de l\'archivage. Merci de contacter un administrateur.'
  92.         ]);
  93.     }
  94. }