src/Controller/POS/HomeController.php line 38

  1. <?php
  2. namespace App\Controller\POS;
  3. use App\Entity\Order;
  4. use App\Entity\Payment;
  5. use App\Entity\Pos;
  6. use App\Form\OrderType;
  7. use App\Repository\OrderRepository;
  8. use App\Repository\PosRepository;
  9. use App\Repository\ProductRepository;
  10. use App\Repository\SettingsRepository;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. class HomeController extends AbstractController
  17. {
  18.     #[Route('/'name'app_home')]
  19.     public function home(): Response
  20.     {
  21.         return $this->redirectToRoute('app_pos_home');
  22.     }
  23.     #[Route("/search"name"app_pos_home_search")]
  24.     public function search(Request $requestOrderRepository $orderRepository)
  25.     {
  26.         $order $orderRepository->find($request->get("s"));
  27.         if ($order) {
  28.             return $this->redirectToRoute("app_pos_order_edit", ['id' => $order->getId()]);
  29.         }
  30.         return $this->redirectToRoute("app_pos_home");
  31.     }
  32.     #[Route('/pos/'name'app_pos_home')]
  33.     public function index(Request                $request,
  34.                           ProductRepository      $productRepository,
  35.                           PosRepository          $posRepository,
  36.                           EntityManagerInterface $entityManager
  37.     ): Response
  38.     {
  39.         $pos $posRepository->getLastElement($this->getUser());
  40. //        dd($pos);
  41.         $oldCredit 0;
  42.         if ($pos == null || $pos->getDateEnd()) {
  43.             return $this->redirectToRoute('app_pos_index');
  44.         }
  45.         $order = new Order();
  46.         $payment = new Payment();
  47.         $payment->setMode("Espéce");
  48.         $payment->setAmount(0);
  49.         $order->addPayment($payment);
  50.         $order->setPos($pos);
  51.         $form $this->createForm(OrderType::class, $order);
  52.         $form->handleRequest($request);
  53.         if ($form->isSubmitted() && $form->isValid()) {
  54.             $this->saveOrder($order$pos$entityManager);
  55.             return $this->redirectToRoute("app_pos_order_show", [
  56.                 'id' => $order->getId(),
  57.             ]);
  58.         }
  59.         $products $productRepository->findAll();
  60.         $productsArray = [];
  61.         foreach ($products as $product) {
  62.             $productsArray[] = $product->getName();
  63.         }
  64.         return $this->render('pos/home/index.html.twig', [
  65.             'form' => $form,
  66.             'products' => $productsArray,
  67.             'pos' => $pos,
  68.             'order' => $order
  69.         ]);
  70.     }
  71.     #[Route('/pos/edit/{id}'name'app_pos_order_edit')]
  72.     public function edit(Request                $requestOrder $orderProductRepository $productRepository,
  73.                          PosRepository          $posRepository,
  74.                          EntityManagerInterface $entityManager)
  75.     {
  76.         $pos $posRepository->getLastElement($this->getUser());
  77.         $oldCredit 0;
  78.         if ($pos == null || $pos->getDateEnd()) {
  79.             return $this->redirectToRoute('app_pos_index');
  80.         }
  81.         $form $this->createForm(OrderType::class, $order);
  82.         $form->handleRequest($request);
  83.         if ($form->isSubmitted() && $form->isValid()) {
  84.             $this->saveOrder($order$pos$entityManagertrue);
  85.             return $this->redirectToRoute("app_pos_order_show", [
  86.                 'id' => $order->getId(),
  87.             ]);
  88.         }
  89.         $products $productRepository->findAll();
  90.         $productsArray = [];
  91.         foreach ($products as $product) {
  92.             $productsArray[] = $product->getName();
  93.         }
  94.         return $this->render('pos/home/index.html.twig', [
  95.             'form' => $form,
  96.             'products' => $productsArray,
  97.             'pos' => $pos,
  98.             'order' => $order
  99.         ]);
  100.     }
  101.     #[Route('/pos/order/show/{id}'name'app_pos_order_show')]
  102.     public function show(Order $order)
  103.     {
  104.         return $this->render("pos/home/show.html.twig", [
  105.             'order' => $order,
  106.             'pos' => $order->getPos()
  107.         ]);
  108.     }
  109.     #[Route("/pos/order/ticket/{id}"name"app_pos_order_ticket")]
  110.     public function ticket(Order $orderSettingsRepository $settingRepository)
  111.     {
  112.         return $this->render("pos/home/ticket.html.twig", [
  113.             'order' => $order,
  114.             'setting' => $settingRepository->findOneBy([])
  115.         ]);
  116.     }
  117.     private function saveOrder(Order                  $order,
  118.                                Pos                    $pos,
  119.                                EntityManagerInterface $entityManager,
  120.                                bool                   $isEdit false
  121.     )
  122.     {
  123.         $orderLines $order->getOrderLines();
  124.         foreach ($orderLines as $orderLine) {
  125.             if (!$orderLine->getPrixUnite()) {
  126.                 $order->removeOrderLine($orderLine);
  127.             }
  128.         }
  129.         $customer $order->getCustomer();
  130.         if ($customer) {
  131.             $payments $order->getPayments();
  132.             foreach ($payments as $payment) {
  133.                 if ($payment->getAmount()) {
  134.                 } else {
  135.                     $order->removePayment($payment);
  136.                 }
  137.             }
  138.         }
  139.         $to 0;
  140.         foreach ($order->getPayments() as $py) {
  141.             if ($py->getMode() == 'Espèce') {
  142.                 $to += $py->getAmount();
  143.             }
  144.         }
  145.         $pos->setFinalAmount($pos->getFinalAmount() + $to);
  146.         $entityManager->persist($pos);
  147.         $entityManager->persist($order);
  148.         $entityManager->flush();
  149.     }
  150. }