Linux SRV-16 6.18.44-paas #1 SMP PREEMPT_DYNAMIC Thu Aug 13 10:08:12 UTC 2026 x86_64
/
proc
/
212
/
root
/
proc
/
212
/
task
/
212
/
root
/
proc
/
70528
/
cwd
/
src
/
Controller
/
back
/
//proc/212/root/proc/212/task/212/root/proc/70528/cwd/src/Controller/back/ProductController.php
<?php namespace App\Controller\back; use App\Entity\Size; use App\Entity\Price; use App\Entity\Product; use App\Entity\Quantity; use App\Form\ProductType; use App\Form\ProductPriceType; use App\Repository\FoldRepository; use App\Repository\PageRepository; use App\Repository\SizeRepository; use App\Repository\ColorRepository; use App\Repository\PriceRepository; use App\Repository\ProductRepository; use App\Repository\CategoryRepository; use App\Repository\GrammageRepository; use App\Repository\QuantityRepository; use App\Repository\FinishingRepository; use Doctrine\Persistence\ManagerRegistry; use Knp\Component\Pager\PaginatorInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException; /** * @Route("admin/product") */ class ProductController extends AbstractController { /** * @Route("/create", name="back_product_create") */ public function createProduct(Request $request, ManagerRegistry $doctrine, CategoryRepository $categoryRepository): Response { $categories = $categoryRepository->findAllActives(); $product = new Product(); $form = $this->createForm(ProductType::class, $product, ["categories" => $categories]); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $customSize = new Size(); $customSize->setName("Autre formats sur commande"); $customSize->setActive(1); $customSize->setProduct($product); $customQuantity = new Quantity(); $customQuantity->setQuantity("Autre quantités sur commande"); $customQuantity->setActive(1); $customQuantity->setProduct($product); $em = $doctrine->getManager(); $em->persist($customSize); $em->persist($customQuantity); $em->persist($product); $em->flush(); $this->addFlash("success", "Produit ajouté ! Vous pouvez maintenant lui ajouter des images secondaires."); return $this->redirectToRoute("back_product_image", ["id" => $product->getId()]); } return $this->render("back/product/create.html.twig", [ "form" => $form->createView() ]); } /** * @Route("/{id}/edit", name="back_product_edit") */ public function editProduct($id, Request $request, ManagerRegistry $doctrine, ProductRepository $productRepository, CategoryRepository $categoryRepository, GrammageRepository $grammageRepository): Response { $categories = $categoryRepository->findAllActives(); $product = $productRepository->find($id); $form = $this->createForm(ProductType::class, $product, ["categories" => $categories]); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $em = $doctrine->getManager(); $em->persist($product); $em->flush(); $this->addFlash("success", "Produit modifié !"); return $this->redirectToRoute("back_product_list"); } return $this->render("back/product/edit.html.twig", [ "form" => $form->createView(), "product" => $product, "categories" => $categoryRepository->findAll(), "grammages" => $grammageRepository->findAll() ]); } /** * @Route("/", name="back_product_list") */ public function listProducts(ProductRepository $productRepository, PaginatorInterface $paginatorInterface, Request $request) { $products = $paginatorInterface->paginate( $productRepository->findProducts(), $request->query->getInt("page", 1), 12 ); return $this->render("back/product/list.html.twig", [ "products" => $products ]); } /** * @Route("/{id}/delete", name="back_product_delete") */ public function deleteProduct($id, ProductRepository $productRepository, ManagerRegistry $doctrine) { $doctrine->resetManager(); $em = $doctrine->getManager(); $product = $productRepository->find($id); $product->setActive(false); $em->persist($product); $em->flush(); $this->addFlash("danger", "Produit archivé"); return $this->redirectToRoute("back_product_list"); } /** * @Route("/archived", name="back_product_archived") */ public function archivedProducts(ProductRepository $productRepository) { $products = $productRepository->findBy(["active" => 0]); return $this->render("back/product/archived.html.twig", [ "products" => $products ]); } /** * @Route("/{id}/unarchive", name="back_product_unarchive") */ public function unArchiveProduct($id, ProductRepository $productRepository, ManagerRegistry $doctrine) { $product = $productRepository->find($id); $em = $doctrine->getManager(); $product->setActive(1); $em->persist($product); $em->flush(); return $this->redirectToRoute("back_product_archived"); } /** * @Route("/{id}/configurer", name="back_product_configure") */ public function configureProduct($id, ProductRepository $productRepository, CategoryRepository $categoryRepository, GrammageRepository $grammageRepository) { $product = $productRepository->find($id); return $this->render("back/product/configuration.html.twig", [ "product" => $product, "categories" => $categoryRepository->findAll(), "grammages" => $grammageRepository->findAll() ]); } /** * @Route("/{id}/prix", name="back_product_price") */ public function price($id, ProductRepository $productRepository) { $product = $productRepository->find($id); return $this->render("back/product/price.html.twig", [ "product" => $product ]); } /** * @Route("/{id}/prix/{priceId}/edit", name="back_product_price_edit") */ public function editPrice($id, $priceId, PriceRepository $priceRepository, Request $request, ManagerRegistry $doctrine) { $price = $priceRepository->find($priceId); $newPrice = $request->request->get("price"); $price->setPrice($newPrice); $em = $doctrine->getManager(); $em->persist($price); $em->flush(); return $this->json("success"); } /** * @Route("/{id}/prix/remplir", name="back_product_price_fill") */ public function fillPrice( $id, ManagerRegistry $doctrine, Request $request, ProductRepository $productRepository, QuantityRepository $qr, SizeRepository $sr, PageRepository $pr, GrammageRepository $gr, FinishingRepository $fr, ColorRepository $cr, FoldRepository $for ) { if ($request->get("save")) { $em = $doctrine->getManager(); foreach ($request->request->all() as $key => $data) { if ($data != "") { //{{ product.id }}_{{ quantity.id }}_{{ size.id }}_{{ page.id }}_{{ grammage.id }}_{{ finishing.id }}_{{ color.id }}_{{ fold.id }} $ids = explode("_", $key); if (count($ids) == 8) { $product = $productRepository->find($ids[0]); $quantity = $qr->find($ids[1]); $size = $sr->find($ids[2]); $page = $pr->find($ids[3]); $grammage = $gr->find($ids[4]); $finishing = $fr->find($ids[5]); $color = $cr->find($ids[6]); $fold = $for->find($ids[7]); $price = new Price(); $price->setQuantity($quantity); $price->setSize($size); $price->setPage($page); $price->setGrammage($grammage); $price->setFinishing($finishing); $price->setColor($color); $price->setFold($fold); $price->setProduct($product); $price->setPrice($data); $em->persist($price); } } } $em->flush(); } return $this->render("back/product/fill-price.html.twig", [ "product" => $productRepository->find($id), ]); } /** * @Route("/{id}/prix/archive/{price}", name="back_product_price_archive") */ public function archivePrice($id, $price, PriceRepository $priceRepository, ManagerRegistry $doctrine){ $price = $priceRepository->find($price); $em = $doctrine->getManager(); $price->setActive(false); $em->persist($price); $em->flush(); $this->addFlash("success", "Prix archivé"); return $this->redirectToRoute("back_product_price", ["id" => $id]); } /** * @Route("/{id}/prix/unarchive/{price}", name="back_product_price_unarchive") */ public function unarchivePrice($id, $price, PriceRepository $priceRepository, ManagerRegistry $doctrine){ $price = $priceRepository->find($price); $em = $doctrine->getManager(); $price->setActive(true); $em->persist($price); $em->flush(); $this->addFlash("success", "Prix désarchivé"); return $this->redirectToRoute("back_product_price", ["id" => $id]); } }