From 923c2ae4124ddfa3cd8587c1c44b05b2a662396c Mon Sep 17 00:00:00 2001 From: Joel Thomas <1914@trenser.com> Date: Fri, 20 Feb 2026 00:59:54 +0530 Subject: [PATCH] Implement controller removeMenuItem() --- .../FoodDeliveryController.cpp | 75 ++++++++++++++++++- .../FoodDeliveryController.h | 2 +- 2 files changed, 74 insertions(+), 3 deletions(-) diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp index 684e5ec..9e1e34c 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp @@ -66,6 +66,45 @@ static restaurants::iterator pickRestaurantFromRestaurants(RestaurantOwner& rest return restaurantIterator; } +static menuItems::iterator pickMenuFromMenuItems(menuItems& restaurantMenuItems) +{ + util::clear(); + int menuItemIndex = 1, menuItemChoiceIndex; + if (restaurantMenuItems.empty()) + { + std::cout << "Restaurant doesn't have any Menu Items!\n"; + return restaurantMenuItems.end(); + } + std::cout << "Pick a Menu Item\n"; + std::cout << std::left << std::setw(8) << "Index" + << std::left << std::setw(5) << "ID" + << std::left << std::setw(25) << "Name" + << std::left << std::setw(50) << "Description" + << std::left << std::setw(5) << "Price" + << "\n"; + for (menuItems::iterator menuItemIterator = restaurantMenuItems.begin(); menuItemIterator != restaurantMenuItems.end(); menuItemIterator++, menuItemIndex++) + { + auto& menuItem = *(menuItemIterator->second); + std::cout + << std::left << std::setw(8) << menuItemIndex + << std::left << std::setw(5) << menuItem.getId() + << std::left << std::setw(25) << menuItem.getName() + << std::left << std::setw(50) << menuItem.getDescription() + << std::left << std::setw(5) << menuItem.getPrice() + << "\n"; + } + std::cout << "\nSelect Index: "; + util::readValue(menuItemChoiceIndex); + menuItemChoiceIndex--; + if (menuItemChoiceIndex < 0 || menuItemChoiceIndex >= restaurantMenuItems.size()) + { + return restaurantMenuItems.end(); + } + menuItems::iterator menuItemIterator = restaurantMenuItems.begin(); + std::advance(menuItemIterator, menuItemChoiceIndex); + return menuItemIterator; +} + void FoodDeliveryController::run() { bool isMenuActive = true; @@ -390,9 +429,41 @@ void FoodDeliveryController::addMenuItem() const } } -void FoodDeliveryController::removeMenuItem() +void FoodDeliveryController::removeMenuItem() const { - + try + { + util::clear(); + if (!checkAccess(m_authenticatedUser, "RestaurantOwner")) + { + return; + } + RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast(m_authenticatedUser)); + restaurants::iterator restaurantIterator = pickRestaurantFromRestaurants(restaurantOwner); + if (restaurantIterator != restaurantOwner.getRestaurants().end()) + { + menuItems& restaurantMenuItems = restaurantIterator->second->getMenuItems(); + menuItems::iterator menuItemIterator = pickMenuFromMenuItems(restaurantMenuItems); + if (menuItemIterator != restaurantMenuItems.end()) + { + restaurantMenuItems.erase(menuItemIterator); + std::cout << "Removed Menu Item successfully\n"; + } + else if (!restaurantMenuItems.empty()) + { + std::cout << "Invalid Index. Cannot remove Menu Item!\n"; + } + } + else if (!restaurantOwner.getRestaurants().empty()) + { + std::cout << "Invalid Index. Cannot remove Menu Item!\n"; + return; + } + } + catch (const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + } } void FoodDeliveryController::listCustomerOrders() diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h index 8abd94a..b639d2a 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h @@ -33,7 +33,7 @@ public: void markOrderReady(); void listMenuItems() const; void addMenuItem() const; - void removeMenuItem(); + void removeMenuItem() const; void listCustomerOrders(); void placeOrder(); void cancelOrder();