adminUrlGenerator = $adminUrlGenerator; $this->entityManager = $em; } #[Route('/admin/roomAvailability', name: 'admin_roomAvailability')] public function index(RoomAvailabilityRepository $repo, RoomCategoryRepository $catRepo): Response { $categoryList = $catRepo->findAll(); return $this->render('admin/room_availability/index.html.twig', [ 'roomCategoryList' => $categoryList, ]); } // List RoomAvailability items from category. #[Route('/admin/roomAvailability/{categoryId}', name: 'admin_roomAvailability_category')] public function categoryAvailability(RoomAvailabilityRepository $repo, RoomCategoryRepository $catRepo, string $categoryId): Response { $category = $catRepo->find($categoryId); $availabilityList = $repo->findByRoomCategory($categoryId); return $this->render('admin/room_availability/category_view.html.twig', [ 'categoryData' => $category, 'availabilityList' => $availabilityList, ]); } // Edit a RoomAvailability numAvailable. #[Route('/admin/roomAvailability/edit/{categoryId}/{day}', name: 'admin_roomAvailability_category_update')] public function updateCategoryAvailability(Request $request, RoomAvailabilityRepository $repo, string $categoryId, string $day): Response { $availabilityItem = $repo->find(["day" => $day, "roomCategory" => $categoryId]); if ($availabilityItem == null) { //TODOME: Aquí deberíamos llevar a una página de error o algo. $url = $this->adminUrlGenerator->setRoute('admin_roomAvailability_category', [ 'categoryId' => $item->getId(), ])->generateUrl(); return $this->redirect($url); } $form = $this->createFormBuilder($availabilityItem) ->add('numAvailable', NumberType::class, ['label' => 'Num Available']) ->add('save', SubmitType::class, ['label' => 'Update value']) ->getForm(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { // $form->getData() holds the submitted values // but, the original `$availabilityItem` variable has also been updated $this->entityManager->flush(); $url = $this->adminUrlGenerator->setRoute('admin_roomAvailability_category', [ 'categoryId' => $categoryId, ])->generateUrl(); return $this->redirect($url); } return $this->render('admin/room_availability/availability_day_edit.html.twig', [ 'form' => $form, 'availabilityData' => $availabilityItem, ]); } // Bulk edit all roomAvailability of a category on period. #[Route('/admin/roomAvailability/{categoryId}/bulkedit', name: 'admin_roomAvailability_category_bulkupdate')] public function bulkUpdateCategoryAvailability(Request $request, RoomAvailabilityRepository $repo, string $categoryId): Response { $form = $this->createFormBuilder() ->add('startDate', DateType::class, [ 'widget' => 'single_text', ]) ->add('endDate', DateType::class, [ 'widget' => 'single_text', ]) ->add('numAvailable', NumberType::class, [ 'label' => 'Num Available', ]) ->add('save', SubmitType::class, ['label' => 'Update value']) ->getForm(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { // $form->getData() holds the submitted values $data = $form->getData(); $categoryItem = $this->entityManager->find(RoomCategory::class, $categoryId); $repo->bulkEditRoomAvailabilityForCategoryOnPeriod($categoryItem, $data['startDate'], $data['endDate'], $data['numAvailable']); $url = $this->adminUrlGenerator->setRoute('admin_roomAvailability')->generateUrl(); return $this->redirect($url); } return $this->render('admin/room_availability/availability_bulk_edit.html.twig', [ 'form' => $form, 'categoryId' => $categoryId, ]); } }