src\Controller\MenuController.php line 64

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