src/Controller/CatalogueController.php line 180

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\CatalogueAsset;
  4. use App\Entity\FamilleJ;
  5. use App\Entity\CategoryJ;
  6. use App\Entity\Catalogue;
  7. use App\Form\CatalogueType;
  8. use App\Entity\CategoryCatalogue;
  9. use App\Form\CategoryCatalogueType;
  10. use App\Entity\SousCategoryCatalogue;
  11. use App\Form\SousCategoryCatalogueType;
  12. use App\Service\CatalogueService;
  13. use App\Service\EmailService;
  14. use Twig\Environment;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Symfony\Component\Security\Core\Security;
  22. use Symfony\Component\Form\Extension\Core\Type\FileType;
  23. use Symfony\Component\Form\Extension\Core\Type\TextType;
  24. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  25. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  26. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  27. use App\Service\TranslationService;
  28. use App\Repository\CatalogueRepository;
  29. class CatalogueController extends AbstractController
  30. {
  31. // Le constructeur prend tous les services en paramètre
  32. public function __construct(
  33. private EntityManagerInterface $em,
  34. private Security $security,
  35. private EmailService $emailService,
  36. private Environment $twig,
  37. private CatalogueService $catalogueService,
  38. private readonly TranslationService $translationService,
  39. private readonly CatalogueRepository $catalogueRepo,
  40. ) {}
  41. public function gestionCatalog(Request $request): Response
  42. {
  43. $catalogue = new Catalogue();
  44. $page = $request->query->getInt('page', 1);
  45. $limit = 10;
  46. $search = $request->query->get('search');
  47. $data = $this->catalogueService->getListeCatalogue($page, $limit, $search);
  48. //$data = $this->catalogueService->getListeCatalogue();
  49. $catalogs = $data['catalogs'];
  50. $pagesCount = $data['pagesCount'];
  51. $currentPage = $data['currentPage'];
  52. $searchTerm = $data['searchTerm'];
  53. $form = $this->createForm(CatalogueType::class, $catalogue);
  54. return $this->render('CatalogueVue/catalogue.html.twig', [
  55. 'form' => $form->createView(),
  56. 'catalogs' => $catalogs,
  57. 'pagesCount' => $pagesCount,
  58. 'currentPage' => $currentPage,
  59. 'searchTerm' => $searchTerm,
  60. ]);
  61. }
  62. public function mstopescreerarticle(Request $request): Response {
  63. $catalogue = new Catalogue();
  64. $categarticle=new CategoryCatalogue;
  65. $souscategory=new SousCategoryCatalogue;
  66. $data = $this->catalogueService->getIndexCreerarticle();
  67. $categorys = $data['categorys'];
  68. $souscategorys = $data['souscategorys'];
  69. $form = $this->createForm(CatalogueType::class, $catalogue);
  70. $form1 = $this->createForm(CategoryCatalogueType::class, $categarticle);
  71. $form2 = $this->createForm(SousCategoryCatalogueType::class, $souscategory);
  72. $form->handleRequest($request);
  73. if ($form->isSubmitted() ) {
  74. $type=$form->get('typeArticle')->getData();
  75. if($type=="ASSET"){
  76. $assetArt=new CatalogueAsset;
  77. $assetArt->setCatalogue($catalogue);
  78. $assetArt->setNumeroArticleAsset(1);
  79. $this->em->persist($assetArt);
  80. }
  81. $this->em->persist($catalogue);
  82. //vrif la categorie de l'article type stock
  83. $categ=$catalogue->getCategorycatalogue();
  84. if( $type=="STOCK"){
  85. $categ->setCode(1);
  86. }else $categ->setCode(0);
  87. $this->em->persist($categ);
  88. $this->em->flush();
  89. // ── Traduction automatique FR → EN ────────────────────────────
  90. $this->translationService->traduire(
  91. entityType: 'Catalogue',
  92. entityId: $catalogue->getId(),
  93. fields: [
  94. 'designation' => $catalogue->getDesignation() ?? '',
  95. 'description' => $catalogue->getDescription() ?? '',
  96. 'unite' => $catalogue->getUnite() ?? '',
  97. ]
  98. );
  99. return $this->redirectToRoute('mstopes_gestion_catalog');
  100. }
  101. return $this->render('CatalogueVue/mstopescreerarticle.html.twig', [
  102. 'souscategorys' => $souscategorys,
  103. 'categorys' => $categorys,
  104. 'form' => $form->createView(),
  105. 'form1' => $form1->createView(),
  106. 'form2' => $form2->createView(),
  107. ]);
  108. }
  109. public function listcategoryj( Request $request): JsonResponse
  110. {
  111. // Tableau de réponse
  112. $listnum4 = [];
  113. // Récupérer l'id envoyé
  114. $id = $request->request->get('id');
  115. // Récupérer la famille asset
  116. $famille = $this->em->getRepository(FamilleJ::class)->find($id);
  117. // Récupérer les categ asset
  118. $categs = $this->em->getRepository(CategoryJ::class) ->findByFamille($famille);
  119. // Valeur par défaut
  120. $listnum4[0] = 'choisir';
  121. // Remplir le tableau
  122. foreach ($categs as $dem) {
  123. $listnum4[$dem->getId()] = $dem->getLibele().'-'.$dem->getNomequip();
  124. }
  125. // Retour JSON
  126. return new JsonResponse($listnum4);
  127. }
  128. // ─────────────────────────────────────────────────────────────────
  129. // GET : charge le formulaire dans le modal
  130. // URL : /catalogue/{id}/edit
  131. // ─────────────────────────────────────────────────────────────────
  132. #[Route('/{id}/edit', name: 'mstopes_modifier_article', methods: ['GET', 'POST'])]
  133. public function edit(int $id, Request $request): Response
  134. {
  135. $catalogue = $this->catalogueRepo->find($id);
  136. if (!$catalogue) {
  137. return new Response(
  138. '<div class="alert alert-danger m-3">Article introuvable.</div>',
  139. 404
  140. );
  141. }
  142. $form = $this->createForm(CatalogueType::class, $catalogue, [
  143. 'action' => $this->generateUrl('mstopes_modifier_article', ['id' => $id]),
  144. 'method' => 'POST',
  145. ]);
  146. $form->handleRequest($request);
  147. if ($form->isSubmitted() ) {
  148. // Mise à jour date de modification
  149. $catalogue->setDateModif(new \DateTimeImmutable());
  150. // Calcul prix TTC si prixHT et taxe sont renseignés
  151. $prixHT = (float)$catalogue->getPrixHT();
  152. $taxe = (float)($catalogue->getTaxe() ?? 0);
  153. if ($prixHT > 0) {
  154. $catalogue->setPrix((string)round($prixHT * (1 + $taxe / 100), 2));
  155. }
  156. //vrif la categorie de l'article type stock
  157. $type = $catalogue->getTypeArticle();
  158. $categ=$catalogue->getCategorycatalogue();
  159. if( $type=="STOCK"){
  160. $categ->setCode(1);
  161. }else $categ->setCode(0);
  162. // Sauvegarde en base
  163. $this->em->persist($catalogue);
  164. $this->em->persist($categ);
  165. $this->em->flush();
  166. // ── Traduction automatique FR → EN ────────────────────────
  167. $this->translationService->traduire(
  168. entityType: 'Catalogue',
  169. entityId: $catalogue->getId(),
  170. fields: [
  171. 'designation' => $catalogue->getDesignation() ?? '',
  172. 'description' => $catalogue->getDescription() ?? '',
  173. 'unite' => $catalogue->getUnite() ?? '',
  174. 'typeMRP' => $catalogue->getTypeMRP() ?? '',
  175. ]
  176. );
  177. $this->addFlash('success', sprintf(
  178. 'Article "%s" modifié avec succès.',
  179. $catalogue->getDesignation()
  180. ));
  181. return $this->redirectToRoute('mstopes_gestion_catalog');
  182. }
  183. return $this->render('CatalogueVue/_modal_edit.html.twig', [
  184. 'catalogue' => $catalogue,
  185. 'form' => $form->createView(),
  186. ]);
  187. }
  188. }