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];
|
const ComboPackage* comboPackage = comboPackagesMap[comboPackageID];
|
||||||
util::Map<std::string, Service*> selectedServices = comboPackage->getServices();
|
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)
|
if (serviceBooking == nullptr)
|
||||||
{
|
{
|
||||||
throw std::runtime_error("Failed to create combo package service booking");
|
throw std::runtime_error("Failed to create combo package service booking");
|
||||||
|
|||||||
@@ -220,20 +220,24 @@ void CustomerMenu::selectComboPackage()
|
|||||||
util::clear();
|
util::clear();
|
||||||
std::cout << "Select a Combo Package\n";
|
std::cout << "Select a Combo Package\n";
|
||||||
auto comboPackages = m_controller.getComboPackages();
|
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();
|
util::pressEnter();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const ComboPackage* selectedComboPackage = selectComboPackageFromPackages(comboPackages);
|
const ComboPackage* selectedComboPackage = selectComboPackageFromPackages(activeComboPackages);
|
||||||
if (selectedComboPackage == nullptr)
|
if (selectedComboPackage == nullptr)
|
||||||
{
|
{
|
||||||
std::cout << "Failed to book combo package!";
|
std::cout << "Failed to book combo package!\n\n";
|
||||||
util::pressEnter();
|
util::pressEnter();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
std::cout << "Combo Package selected\n";
|
||||||
|
util::pressEnter();
|
||||||
util::clear();
|
util::clear();
|
||||||
|
std::cout << "Enter the vehicle details\n";
|
||||||
std::cout << "Enter vehicle number: ";
|
std::cout << "Enter vehicle number: ";
|
||||||
util::read(vehicleNumber);
|
util::read(vehicleNumber);
|
||||||
std::cout << "Enter vehicle brand: ";
|
std::cout << "Enter vehicle brand: ";
|
||||||
@@ -241,7 +245,7 @@ void CustomerMenu::selectComboPackage()
|
|||||||
std::cout << "Enter vehicle model: ";
|
std::cout << "Enter vehicle model: ";
|
||||||
util::read(vehicleModel);
|
util::read(vehicleModel);
|
||||||
m_controller.purchaseComboPackage(selectedComboPackage->getId(), vehicleNumber, vehicleBrand, 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();
|
util::pressEnter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ Parameters:
|
|||||||
Returns:
|
Returns:
|
||||||
- util::Map<std::string, const ServiceBooking*>: map containing only active (PENDING) service bookings
|
- 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;
|
util::Map<std::string, const ServiceBooking*> activeServiceBookings;
|
||||||
for (int iterator = 0; iterator < currentBookings.getSize(); iterator++)
|
for (int iterator = 0; iterator < currentBookings.getSize(); iterator++)
|
||||||
@@ -496,7 +496,7 @@ Parameters:
|
|||||||
Returns:
|
Returns:
|
||||||
- util::Map<std::string, const JobCard*> containing only job cards with status STARTED.
|
- 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;
|
util::Map<std::string, const JobCard*> startedJobCards;
|
||||||
for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++)
|
for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++)
|
||||||
@@ -776,7 +776,7 @@ Parameters:
|
|||||||
Returns:
|
Returns:
|
||||||
- util::Map<std::string, const Service*> containing only active services.
|
- 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;
|
util::Map<std::string, const Service*> activeServices;
|
||||||
for (int iterator = 0; iterator < serviceList.getSize(); iterator++)
|
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];
|
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
|
Function: selectComboPackageFromPackages
|
||||||
Description: Displays active combo packages and allows the customer to select one by index.
|
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;
|
util::Map<int, const ComboPackage*> activeComboPackages;
|
||||||
int currentIndex = 1;
|
int currentIndex = 1;
|
||||||
int userInputIndex;
|
int userInputIndex;
|
||||||
|
std::cout << std::endl;
|
||||||
std::cout << std::left
|
std::cout << std::left
|
||||||
<< std::setw(10) << "Index"
|
<< std::setw(10) << "Index"
|
||||||
<< std::setw(15) << "Combo ID"
|
<< std::setw(15) << "Combo ID"
|
||||||
<< std::setw(15) << "Combo Name"
|
<< std::setw(25) << "Combo Name"
|
||||||
<< std::setw(15) << "Estimate Cost"
|
<< std::setw(15) << "Estimate Cost"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
for (int index = 0; index < comboPackages.getSize(); index++)
|
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::cout << std::left
|
||||||
<< std::setw(10) << currentIndex
|
<< std::setw(10) << currentIndex
|
||||||
<< std::setw(15) << currentComboPackage->getId()
|
<< 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::setw(15) << util::calculateComboServiceEstimatedCost(currentComboPackage)
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
currentIndex++;
|
currentIndex++;
|
||||||
|
|||||||
Reference in New Issue
Block a user