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
This commit is contained in:
+1
-1
@@ -99,7 +99,7 @@ void ServiceManagementService::purchaseComboPackage(const std::string& comboPack
|
||||
}
|
||||
const ComboPackage* comboPackage = comboPackagesMap[comboPackageID];
|
||||
util::Map<std::string, Service*> selectedServices = comboPackage->getServices();
|
||||
ServiceBooking* serviceBooking = Factory::getObject<ServiceBooking>(util::ServiceJobStatus::STARTED, selectedServices, authenticatedUser->getId(), authenticatedUser, vehicleNumber, vehicleBrand, vehicleModel, comboPackage->getDiscountPercentage());
|
||||
ServiceBooking* serviceBooking = Factory::getObject<ServiceBooking>(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");
|
||||
|
||||
@@ -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<std::string, const ComboPackage*> 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();
|
||||
}
|
||||
|
||||
|
||||
@@ -160,7 +160,7 @@ Parameters:
|
||||
Returns:
|
||||
- util::Map<std::string, const ServiceBooking*>: map containing only active (PENDING) service bookings
|
||||
*/
|
||||
inline util::Map<std::string, const ServiceBooking*> filterActiveServiceBookings(util::Map<std::string, const ServiceBooking*> currentBookings)
|
||||
inline util::Map<std::string, const ServiceBooking*> filterActiveServiceBookings(util::Map<std::string, const ServiceBooking*>& currentBookings)
|
||||
{
|
||||
util::Map<std::string, const ServiceBooking*> activeServiceBookings;
|
||||
for (int iterator = 0; iterator < currentBookings.getSize(); iterator++)
|
||||
@@ -496,7 +496,7 @@ Parameters:
|
||||
Returns:
|
||||
- util::Map<std::string, const JobCard*> containing only job cards with status STARTED.
|
||||
*/
|
||||
inline util::Map<std::string, const JobCard*> filterStartedJobCards(util::Map<std::string, const JobCard*> assignedJobCards)
|
||||
inline util::Map<std::string, const JobCard*> filterStartedJobCards(util::Map<std::string, const JobCard*>& assignedJobCards)
|
||||
{
|
||||
util::Map<std::string, const JobCard*> startedJobCards;
|
||||
for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++)
|
||||
@@ -776,7 +776,7 @@ Parameters:
|
||||
Returns:
|
||||
- util::Map<std::string, const Service*> containing only active services.
|
||||
*/
|
||||
inline util::Map<std::string, const Service*> filterActiveServices(util::Map<std::string, const Service*> serviceList)
|
||||
inline util::Map<std::string, const Service*> filterActiveServices(util::Map<std::string, const Service*>& serviceList)
|
||||
{
|
||||
util::Map<std::string, const Service*> activeServices;
|
||||
for (int iterator = 0; iterator < serviceList.getSize(); iterator++)
|
||||
@@ -849,6 +849,20 @@ inline const Service* selectServiceFromServices(const util::Map<std::string, con
|
||||
return activeServicesMap[userInputIndex];
|
||||
}
|
||||
|
||||
inline util::Map<std::string, const ComboPackage*> filterComboPackages(util::Map<std::string, const ComboPackage*>& comboPackages)
|
||||
{
|
||||
util::Map<std::string, const ComboPackage*> 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<std::s
|
||||
util::Map<int, const ComboPackage*> 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::Map<std::s
|
||||
std::cout << std::left
|
||||
<< std::setw(10) << currentIndex
|
||||
<< std::setw(15) << currentComboPackage->getId()
|
||||
<< std::setw(25) << currentComboPackage->getPackageName()
|
||||
<< std::setw(25) << util::truncateString(currentComboPackage->getPackageName(), 20)
|
||||
<< std::setw(15) << util::calculateComboServiceEstimatedCost(currentComboPackage)
|
||||
<< std::endl;
|
||||
currentIndex++;
|
||||
|
||||
Reference in New Issue
Block a user