Service Can Still Be Purchased After Required Inventory Item Is Removed
Changes: - Added m_dataStore.saveServiceBookings() in ServiceManagementService::purchaseService() to persist bookings immediately after successful purchase. - Enhanced AdminMenu::removeInventoryItem() to also remove all services that depend on the removed inventory item, ensuring consistency between inventory and service availability. - Updated selectServiceFromServices() in MenuHelper.h to skip services if any of their required inventory items have a quantity less than 1, preventing users from selecting unavailable services. - Introduced inventory depletion checks before inserting services into the active services map, improving reliability of service selection. Fixes #2082
This commit is contained in:
+1
@@ -72,6 +72,7 @@ void ServiceManagementService::purchaseService(const util::Vector<std::string>&
|
||||
std::string title = "Service Booking succeeded";
|
||||
std::string message = "Your service booking has been successfully placed with ID " + serviceBooking->getId();
|
||||
sendNotification(authenticatedUser, title, message);
|
||||
m_dataStore.saveServiceBookings();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -338,6 +338,23 @@ void AdminMenu::removeInventoryItem()
|
||||
std::string selectedItemId = selectedItem->getId();
|
||||
m_controller.removeInventoryItem(selectedItemId);
|
||||
std::cout << "Item " << selectedItem->getPartName() << " removed successfully." << std::endl;
|
||||
const util::Map<std::string, const Service*>& listOfService = m_controller.getServices();
|
||||
for (int serviceIndex = 0; serviceIndex < listOfService.getSize(); serviceIndex++)
|
||||
{
|
||||
const Service* service = listOfService.getValueAt(serviceIndex);
|
||||
if (!service)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
const util::Map<std::string, InventoryItem*>& requiredItems = service->getRequiredInventoryItems();
|
||||
if (requiredItems.find(selectedItemId) != -1)
|
||||
{
|
||||
m_controller.removeService(service->getId());
|
||||
std::cout << "Service " << service->getName()
|
||||
<< " removed as the item "
|
||||
<< selectedItem->getPartName() << " required for the service has been removed." << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
util::pressEnter();
|
||||
|
||||
@@ -1057,6 +1057,21 @@ inline const Service* selectServiceFromServices(const util::Map<std::string, con
|
||||
{
|
||||
continue;
|
||||
}
|
||||
bool hasDepletedItem = false;
|
||||
const util::Map<std::string, InventoryItem*>& requiredItems = currentService->getRequiredInventoryItems();
|
||||
for (int itemIndex = 0; itemIndex < requiredItems.getSize(); itemIndex++)
|
||||
{
|
||||
const InventoryItem* item = requiredItems.getValueAt(itemIndex);
|
||||
if (!item || item->getQuantity() < 1)
|
||||
{
|
||||
hasDepletedItem = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (hasDepletedItem)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
activeServicesMap.insert(currentIndex, currentService);
|
||||
double partsCost = util::calculatePartsCost(currentService);
|
||||
std::cout << std::left
|
||||
|
||||
Reference in New Issue
Block a user