From 1651dfeafe337d62554ee7155fe2eb61599d82c9 Mon Sep 17 00:00:00 2001 From: Avinash Rajesh Date: Wed, 17 Jun 2026 18:10:12 +0530 Subject: [PATCH] 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 --- .../services/ServiceManagementService.cpp | 1 + .../views/AdminMenu.cpp | 17 +++++++++++++++++ .../views/MenuHelper.h | 15 +++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp index cf438d0..879ed73 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp @@ -72,6 +72,7 @@ void ServiceManagementService::purchaseService(const util::Vector& 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(); } /* diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp index 71882ba..62c64cd 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp @@ -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& listOfService = m_controller.getServices(); + for (int serviceIndex = 0; serviceIndex < listOfService.getSize(); serviceIndex++) + { + const Service* service = listOfService.getValueAt(serviceIndex); + if (!service) + { + continue; + } + const util::Map& 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(); diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h index c87707a..33cd5bd 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h @@ -1057,6 +1057,21 @@ inline const Service* selectServiceFromServices(const util::Map& 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