src/Controller/Manager/ProviderOrderController.php line 103

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Manager;
  3. use App\Entity\PaperStock;
  4. use App\Entity\ProviderOrder;
  5. use App\Services\StockManager;
  6. use App\Services\ArchiveManager;
  7. use App\Entity\ProviderOrderItem;
  8. use App\Form\Manager\ProviderOrderType;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use App\Repository\ProviderOrderRepository;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use App\Form\Manager\ProviderOrderDeliveryType;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. #[Route('/manager/provider-order'name'provider_order_')]
  17. class ProviderOrderController extends AbstractController
  18. {
  19.     #[Route('/'name'index'methods: ['GET'])]
  20.     public function index(ProviderOrderRepository $providerOrderRepository): Response
  21.     {   
  22.         $pagination $providerOrderRepository->findPaginated();
  23.         return $this->render('manager/provider_order/index.html.twig', [
  24.             'pagination' => $pagination,
  25.             'provider_orders' => $pagination->getItems(),
  26.         ]);
  27.     }
  28.     #[Route('/new'name'new'methods: ['GET''POST'])]
  29.     public function new(Request $requestEntityManagerInterface $em): Response
  30.     {
  31.         $providerOrder = new ProviderOrder();
  32.         $form $this->createForm(ProviderOrderType::class, $providerOrder);
  33.         $form->handleRequest($request);
  34.         if ($form->isSubmitted() && $form->isValid()) {
  35.             $em->persist($providerOrder);
  36.             $em->flush();
  37.             return $this->redirectToRoute('provider_order_edit', [
  38.                 'id' => $providerOrder->getId(),
  39.             ], Response::HTTP_SEE_OTHER);
  40.         }
  41.         return $this->renderForm('manager/provider_order/new.html.twig', [
  42.             'provider_order' => $providerOrder,
  43.             'form' => $form,
  44.         ]);
  45.     }
  46.     #[Route('/{id}'name'show'methods: ['GET''POST'])]
  47.     public function show(Request $requestProviderOrder $providerOrderStockManager $stockManagerEntityManagerInterface $em): Response
  48.     {
  49.         $form $this->createForm(ProviderOrderDeliveryType::class);
  50.         $form->handleRequest($request);
  51.         
  52.         if ($form->isSubmitted() && $form->isValid()) { 
  53.             $space $form->get('space')->getData();
  54.             foreach ($providerOrder->getProviderOrderItems() as $providerOrderItem) {
  55.                 foreach($providerOrderItem->getPaperProducts() as $paperProduct) {
  56.                     if($paperProduct->getDelivered() || $paperProduct->getDismissed()) continue;
  57.                     $paperProduct->setSpace($space);
  58.                     $paperProduct->deliver();
  59.                     $stockManager->addStock($paperProductPaperStock::TYPE_PROVIDER);
  60.                 }
  61.             }
  62.             $providerOrder->updateProviderOrderDelivery();
  63.             $providerOrder->updateProviderOrderDifference();
  64.             $em->flush();
  65.             return $this->redirectToRoute('provider_order_show', [
  66.                 'id' => $providerOrder->getId(),
  67.             ], Response::HTTP_SEE_OTHER);
  68.         }
  69.         $hasProducts false;
  70.         foreach ($providerOrder->getProviderOrderItems() as $providerOrderItem) {
  71.             foreach ($providerOrderItem->getPaperProducts() as $paperProduct) {
  72.                 $hasProducts true;
  73.                 break;
  74.             }
  75.             if ($hasProducts) break;
  76.         }
  77.         return $this->render('manager/provider_order/show.html.twig', [
  78.             'provider_order' => $providerOrder,
  79.             'form' => $form->createView(),
  80.             'has_products' => $hasProducts
  81.         ]);
  82.     }
  83.     #[Route('/{id}/edit'name'edit'methods: ['GET''POST'])]
  84.     public function edit(Request $requestProviderOrder $providerOrderEntityManagerInterface $em): Response
  85.     {   
  86.         $isAjax $request->isXmlHttpRequest();
  87.         // Make sure there is at least one item line for the edition
  88.         if (!$providerOrder->getProviderOrderItems()->count()) {
  89.             $providerOrderItem = new ProviderOrderItem();
  90.             $providerOrder->addProviderOrderItem($providerOrderItem);
  91.         }
  92.         $form $this->createForm(ProviderOrderType::class, $providerOrder, [
  93.             'is_ajax' => $isAjax
  94.         ]);
  95.         $form->handleRequest($request);
  96.         if ($form->isSubmitted() && $form->isValid()) {
  97.             $providerOrder->updatePapersPriceUnity();
  98.             $providerOrder->updateProviderOrderDelivery();
  99.             $providerOrder->updateProviderOrderDifference();
  100.             
  101.             $em->flush();
  102.             return $this->redirectToRoute('provider_order_show', [
  103.                 'id' => $providerOrder->getId()
  104.             ], Response::HTTP_SEE_OTHER);
  105.         }
  106.         $template $isAjax '_form' 'edit';
  107.         return $this->renderForm('manager/provider_order/' $template '.html.twig', [
  108.             'provider_order' => $providerOrder,
  109.             'price_unities' => \json_encode($providerOrder->getPriceUnities()),
  110.             'form' => $form
  111.         ]);
  112.     }
  113.     #[Route('/archive/{id}'name'archive'methods: ['POST'])]
  114.     public function archive(ProviderOrder $providerOrderArchiveManager $archiveManager): Response
  115.     {   
  116.         $message $archiveManager->archive($providerOrder);
  117.         $this->addFlash('success'$message);
  118.         
  119.         return $this->redirectToRoute('provider_order_show', [
  120.             'id' => $providerOrder->getId(),
  121.         ], Response::HTTP_SEE_OTHER);
  122.     }
  123. }