From efd8b32a5fe055e78b38fb5abfb2fb29478cac3a Mon Sep 17 00:00:00 2001 From: Jissin Mathew Date: Wed, 27 May 2026 12:30:42 +0530 Subject: [PATCH] Fix Combo Package Status and Creation Flow Issues - Changed combo package bookings to start with PENDING status - Added filterComboPackages to list only active packages - Improved CustomerMenu combo package selection with clearer messages and formatting - Enhanced output with console clearing, spacing, and success feedback - Added truncateString utility for consistent display of long names - Updated filter functions to use reference parameters for efficiency Fixes #1779 --- .../services/ServiceManagementService.cpp | 2 +- .../views/CustomerMenu.cpp | 14 +++++++---- .../views/MenuHelper.h | 25 +++++++++++++++---- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp index 591b342..b4fbc22 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp @@ -99,7 +99,7 @@ void ServiceManagementService::purchaseComboPackage(const std::string& comboPack } const ComboPackage* comboPackage = comboPackagesMap[comboPackageID]; util::Map selectedServices = comboPackage->getServices(); - ServiceBooking* serviceBooking = Factory::getObject(util::ServiceJobStatus::STARTED, selectedServices, authenticatedUser->getId(), authenticatedUser, vehicleNumber, vehicleBrand, vehicleModel, comboPackage->getDiscountPercentage()); + ServiceBooking* serviceBooking = Factory::getObject(util::ServiceJobStatus::PENDING, selectedServices, authenticatedUser->getId(), authenticatedUser, vehicleNumber, vehicleBrand, vehicleModel, comboPackage->getDiscountPercentage()); if (serviceBooking == nullptr) { throw std::runtime_error("Failed to create combo package service booking"); diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp index 05f85cf..022885f 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp @@ -220,20 +220,24 @@ void CustomerMenu::selectComboPackage() util::clear(); std::cout << "Select a Combo Package\n"; auto comboPackages = m_controller.getComboPackages(); - if (comboPackages.isEmpty()) + util::Map activeComboPackages = filterComboPackages(comboPackages); + if (activeComboPackages.isEmpty()) { - std::cout << "No combo packages available!"; + std::cout << "No combo packages available!\n\n"; util::pressEnter(); return; } - const ComboPackage* selectedComboPackage = selectComboPackageFromPackages(comboPackages); + const ComboPackage* selectedComboPackage = selectComboPackageFromPackages(activeComboPackages); if (selectedComboPackage == nullptr) { - std::cout << "Failed to book combo package!"; + std::cout << "Failed to book combo package!\n\n"; util::pressEnter(); return; } + std::cout << "Combo Package selected\n"; + util::pressEnter(); util::clear(); + std::cout << "Enter the vehicle details\n"; std::cout << "Enter vehicle number: "; util::read(vehicleNumber); std::cout << "Enter vehicle brand: "; @@ -241,7 +245,7 @@ void CustomerMenu::selectComboPackage() std::cout << "Enter vehicle model: "; util::read(vehicleModel); m_controller.purchaseComboPackage(selectedComboPackage->getId(), vehicleNumber, vehicleBrand, vehicleModel); - std::cout << "Combo Package has been booked successfully"; + std::cout << "Combo Package has been booked successfully\n\n"; util::pressEnter(); } diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h index 08b8bba..d89d34e 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h @@ -160,7 +160,7 @@ Parameters: Returns: - util::Map: map containing only active (PENDING) service bookings */ -inline util::Map filterActiveServiceBookings(util::Map currentBookings) +inline util::Map filterActiveServiceBookings(util::Map& currentBookings) { util::Map activeServiceBookings; for (int iterator = 0; iterator < currentBookings.getSize(); iterator++) @@ -496,7 +496,7 @@ Parameters: Returns: - util::Map containing only job cards with status STARTED. */ -inline util::Map filterStartedJobCards(util::Map assignedJobCards) +inline util::Map filterStartedJobCards(util::Map& assignedJobCards) { util::Map startedJobCards; for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++) @@ -776,7 +776,7 @@ Parameters: Returns: - util::Map containing only active services. */ -inline util::Map filterActiveServices(util::Map serviceList) +inline util::Map filterActiveServices(util::Map& serviceList) { util::Map activeServices; for (int iterator = 0; iterator < serviceList.getSize(); iterator++) @@ -849,6 +849,20 @@ inline const Service* selectServiceFromServices(const util::Map filterComboPackages(util::Map& comboPackages) +{ + util::Map activeComboPackages; + for (int iterator = 0; iterator < comboPackages.getSize(); iterator++) + { + const ComboPackage* currentComboPackage = comboPackages.getValueAt(iterator); + if (currentComboPackage && currentComboPackage->getState() == util::State::ACTIVE) + { + activeComboPackages.insert(currentComboPackage->getId(), currentComboPackage); + } + } + return activeComboPackages; +} + /* Function: selectComboPackageFromPackages Description: Displays active combo packages and allows the customer to select one by index. @@ -860,10 +874,11 @@ inline const ComboPackage* selectComboPackageFromPackages(const util::Map activeComboPackages; int currentIndex = 1; int userInputIndex; + std::cout << std::endl; std::cout << std::left << std::setw(10) << "Index" << std::setw(15) << "Combo ID" - << std::setw(15) << "Combo Name" + << std::setw(25) << "Combo Name" << std::setw(15) << "Estimate Cost" << std::endl; for (int index = 0; index < comboPackages.getSize(); index++) @@ -877,7 +892,7 @@ inline const ComboPackage* selectComboPackageFromPackages(const util::MapgetId() - << std::setw(25) << currentComboPackage->getPackageName() + << std::setw(25) << util::truncateString(currentComboPackage->getPackageName(), 20) << std::setw(15) << util::calculateComboServiceEstimatedCost(currentComboPackage) << std::endl; currentIndex++;