src\Controller\RegimeController.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Knp\Component\Pager\PaginatorInterface;
  9. use App\Entity\Regime;
  10. use App\Entity\Menu;
  11. use App\Entity\Adapte;
  12. use App\Form\RegimeType;
  13. class RegimeController extends AbstractController
  14. {
  15. #[Route('/regime/liste', name: 'app_regime_liste')]
  16. public function liste(EntityManagerInterface $em, PaginatorInterface $paginator,Request $request): Response
  17. {
  18. if ($request->query->get('filterField') && $request->query->get('filterValue') && !is_numeric($request->query->get('filterValue'))) {
  19. $request->query->set('filterValue', "*".$request->query->get('filterValue')."*");
  20. }
  21. // On récupère tous les articles disponibles en base de données
  22. $query = $em->createQuery('SELECT regime FROM App\Entity\Regime regime');
  23. $pagination = $paginator->paginate(
  24. $query, /* query NOT result */
  25. $request->query->getInt('page', 1), /* page number */
  26. 10 /* limit per page */
  27. );
  28. return $this->render('regime/liste.html.twig', [
  29. 'pagination' => $pagination
  30. ]);
  31. }
  32. #[Route('/regime/index/{id}', name: 'app_regime_index')]
  33. public function index(EntityManagerInterface $em,PaginatorInterface $paginator, Request $request,int $id): Response
  34. {
  35. if ($request->query->get('filterField') && $request->query->get('filterValue') && !is_numeric($request->query->get('filterValue'))) {
  36. $request->query->set('filterValue', "*".$request->query->get('filterValue')."*");
  37. }
  38. // On récupère l'regime qui correspond à l'id passé dans l'url
  39. $regime = $em->getRepository(Regime::class)->findOneBy(['regime_id' => $id]);
  40. if (!$regime) {
  41. $this->addFlash('danger', 'Le regime n"existe pas');
  42. return $this->redirectToRoute('app_regime_liste');
  43. }
  44. $menus = $regime->getAdaptes()->map(function($adapte) {
  45. return $adapte->getMenuId();
  46. })->toArray();
  47. if ($menus){
  48. // On récupère tous les articles disponibles en base de données
  49. $queryBuilder = $em->createQueryBuilder()
  50. ->select('menu')
  51. ->from(Menu::class, 'menu')
  52. ->where('menu.menu_id NOT IN (:menus)')
  53. ->setParameter('menus', $menus);
  54. }
  55. else
  56. {
  57. // On récupère tous les articles disponibles en base de données
  58. $queryBuilder = $em->createQueryBuilder()
  59. ->select('menu')
  60. ->from(Menu::class, 'menu');
  61. }
  62. $prixMin = $request->query->get('prix_min');
  63. $prixMax = $request->query->get('prix_max');
  64. if ($prixMin !== null) {
  65. $queryBuilder->andWhere('menu.prix_par_personne >= :prixMin')
  66. ->setParameter('prixMin', $prixMin);
  67. }
  68. if ($prixMax !== null) {
  69. $queryBuilder->andWhere('menu.prix_par_personne <= :prixMax')
  70. ->setParameter('prixMax', $prixMax);
  71. }
  72. $query = $queryBuilder->getQuery();
  73. $pagination = $paginator->paginate(
  74. $query, /* query NOT result */
  75. $request->query->getInt('page', 1), /* page number */
  76. 10 /* limit per page */
  77. );
  78. return $this->render('regime/index.html.twig', [
  79. 'regime' => $regime,
  80. 'menus' => $menus,
  81. 'pagination' => $pagination,
  82. 'page' => $request->query->getInt('page', 1),
  83. 'sort'=> $request->query->get('sort', ''),
  84. 'direction'=> $request->query->get('direction', ''),
  85. 'filterField'=> $request->query->get('filterField', ''),
  86. 'filterValue'=> $request->query->get('filterValue', ''),
  87. 'prix_min' => $prixMin,
  88. 'prix_max' => $prixMax
  89. ]);
  90. }
  91. #[Route('/regime/add', name: 'app_regime_add')]
  92. public function add(EntityManagerInterface $em, Request $request): Response
  93. {
  94. $mode = 'new';
  95. $regime = new Regime();
  96. $form = $this->createForm(RegimeType::class, $regime);
  97. $form->handleRequest($request);
  98. if($form->isSubmitted() && $form->isValid()) {
  99. $this->saveregime($regime, $mode,$em);
  100. return $this->redirectToRoute('app_regime_index', ['id' => $regime->getRegimeId()]);
  101. }
  102. $parameters = array(
  103. 'form' => $form->createView(),
  104. 'regime' => $regime,
  105. 'mode' => $mode
  106. );
  107. return $this->render('regime/edit.html.twig', $parameters);
  108. }
  109. #[Route('/regime/edit/{id}', name: 'app_regime_edit')]
  110. public function edit(EntityManagerInterface $em, Request $request, int $id=null): Response
  111. {
  112. $mode = 'update';
  113. // On récupère l'regime qui correspond à l'id passé dans l'url
  114. $regime = $em->getRepository(regime::class)->findOneBy(['regime_id' => $id]);
  115. if (!$regime) {
  116. $this->addFlash('danger', 'Le regime n"existe pas');
  117. return $this->redirectToRoute('app_regime_liste');
  118. }
  119. $form = $this->createForm(RegimeType::class, $regime);
  120. $form->handleRequest($request);
  121. if($form->isSubmitted() && $form->isValid()) {
  122. $this->saveregime($regime, $mode,$em);
  123. return $this->redirectToRoute('app_regime_index', ['id' => $id]);
  124. }
  125. $parameters = array(
  126. 'form' => $form->createView(),
  127. 'regime' => $regime,
  128. 'mode' => $mode
  129. );
  130. return $this->render('regime/edit.html.twig', $parameters);
  131. }
  132. #[Route('/regime/remove/{id}', name: 'app_regime_remove')]
  133. public function remove(EntityManagerInterface $em, int $id): Response
  134. {
  135. // On récupère l'regime qui correspond à l'id passé dans l'URL
  136. $regime = $em->getRepository(regime::class)->findOneBy(['regime_id' => $id]);
  137. if (!$regime) {
  138. $this->addFlash('danger', 'L"regime n"existe pas');
  139. return $this->redirectToRoute('app_regime_liste');
  140. }
  141. // L'regime est supprimé
  142. $em->remove($regime);
  143. $em->flush();
  144. $this->addFlash('success', 'L"regime a été supprimé avec succès');
  145. return $this->redirectToRoute('app_regime_liste');
  146. }
  147. #[Route('/regime/menuadd/{idregime}/{idmenu}', name: 'app_regime_menuadd')]
  148. public function menuadd(EntityManagerInterface $em, int $idregime, int $idmenu): Response
  149. {
  150. // On récupère le regime qui correspond à l'id passé dans l'url
  151. $regime = $em->getRepository(regime::class)->findOneBy(['regime_id' => $idregime]);
  152. if (!$regime) {
  153. $this->addFlash('danger', 'Le regime n"existe pas');
  154. return $this->redirectToRoute('app_regime_liste');
  155. }
  156. $menu= $em->getRepository(Menu::class)->findOneBy(['menu_id' => $idmenu]);
  157. if (!$menu) {
  158. $this->addFlash('danger', 'Le menu n"existe pas');
  159. return $this->redirectToRoute('app_regime_index', ['id' => $idregime]);
  160. }
  161. $adapte= $menu->getAdapte();
  162. if ($adapte) {
  163. $adapte->setregimeId($regime);
  164. $em->persist($adapte);
  165. $em->flush();
  166. }
  167. else
  168. {
  169. $adapte = new Adapte();
  170. $adapte->setMenuId($menu);
  171. $adapte->setregimeId($regime);
  172. $regime->addAdapte($adapte);
  173. $em->persist($regime);
  174. $em->flush();
  175. }
  176. $this->addFlash('success', 'Le menu a été ajouté avec succès');
  177. return $this->redirectToRoute('app_regime_index', ['id' => $idregime]);
  178. }
  179. #[Route('/regime/menuremove/{idregime}/{idmenu}', name: 'app_regime_menuremove')]
  180. public function menuremove(EntityManagerInterface $em, int $idregime, int $idmenu): Response
  181. {
  182. // On récupère le regime qui correspond à l'id passé dans l'url
  183. $regime = $em->getRepository(Regime::class)->findOneBy(['regime_id' => $idregime]);
  184. if (!$regime) {
  185. $this->addFlash('danger', 'Le regime n"existe pas');
  186. return $this->redirectToRoute('app_regime_liste');
  187. }
  188. $menu= $em->getRepository(Menu::class)->findOneBy(['menu_id' => $idmenu]);
  189. if (!$menu) {
  190. $this->addFlash('danger', 'Le menu n"existe pas');
  191. return $this->redirectToRoute('app_regime_index', ['id' => $idregime]);
  192. }
  193. $adapte= $regime->getAdaptes()->filter(function($adapte) use ($idmenu) {
  194. return $adapte->getMenuId()->getMenuId() === $idmenu;
  195. })->first();
  196. if ($adapte) {
  197. $em->remove($adapte);
  198. $em->flush();
  199. }
  200. $this->addFlash('success', 'Le menu a été supprimé avec succès');
  201. return $this->redirectToRoute('app_regime_index', ['id' => $idregime]);
  202. }
  203. /**
  204. * Enregistrer un regime en base de données
  205. *
  206. * @param Regime $regime
  207. * @param string $mode
  208. */
  209. private function saveregime(Regime $regime, string $mode, EntityManagerInterface $em){
  210. $em->persist($regime);
  211. $em->flush();
  212. if($mode == 'new') {
  213. $this->addFlash('success', 'Le regime a été ajouté avec succès');
  214. } else {
  215. $this->addFlash('success', 'Le regime a été modifié avec succès');
  216. }
  217. }
  218. }