Implement controller removeMenuItem()

This commit is contained in:
Joel Thomas
2026-02-20 00:59:54 +05:30
parent b43086f578
commit 923c2ae412
2 changed files with 74 additions and 3 deletions
@@ -66,6 +66,45 @@ static restaurants::iterator pickRestaurantFromRestaurants(RestaurantOwner& rest
return restaurantIterator; 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<int>(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() void FoodDeliveryController::run()
{ {
bool isMenuActive = true; 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<RestaurantOwner>(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() void FoodDeliveryController::listCustomerOrders()
@@ -33,7 +33,7 @@ public:
void markOrderReady(); void markOrderReady();
void listMenuItems() const; void listMenuItems() const;
void addMenuItem() const; void addMenuItem() const;
void removeMenuItem(); void removeMenuItem() const;
void listCustomerOrders(); void listCustomerOrders();
void placeOrder(); void placeOrder();
void cancelOrder(); void cancelOrder();