Merge branch 'feature-customer-management-cus007' into feature-customer-management
This commit is contained in:
@@ -59,6 +59,7 @@ void Controller::purchaseService(const util::Vector<std::string>& serviceIDs, co
|
|||||||
|
|
||||||
void Controller::purchaseComboPackage(const std::string& comboPackageID, const std::string& vehicleNumber, const std::string& vehicleBrand, const std::string& vehicleModel)
|
void Controller::purchaseComboPackage(const std::string& comboPackageID, const std::string& vehicleNumber, const std::string& vehicleBrand, const std::string& vehicleModel)
|
||||||
{
|
{
|
||||||
|
m_serviceManagementService.purchaseComboPackage(comboPackageID, vehicleNumber, vehicleBrand, vehicleModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
util::Map<std::string, const InventoryItem*> Controller::getInventoryItems()
|
util::Map<std::string, const InventoryItem*> Controller::getInventoryItems()
|
||||||
|
|||||||
+29
@@ -3,6 +3,7 @@
|
|||||||
#include "AuthenticationManagementService.h"
|
#include "AuthenticationManagementService.h"
|
||||||
#include "Service.h"
|
#include "Service.h"
|
||||||
#include "ServiceBooking.h"
|
#include "ServiceBooking.h"
|
||||||
|
#include "ComboPackage.h"
|
||||||
#include "Factory.h"
|
#include "Factory.h"
|
||||||
|
|
||||||
void ServiceManagementService::purchaseService(const util::Vector<std::string>& serviceIDs, const std::string& vehicleNumber, const std::string& vehicleBrand, const std::string& vehicleModel)
|
void ServiceManagementService::purchaseService(const util::Vector<std::string>& serviceIDs, const std::string& vehicleNumber, const std::string& vehicleBrand, const std::string& vehicleModel)
|
||||||
@@ -37,3 +38,31 @@ void ServiceManagementService::purchaseService(const util::Vector<std::string>&
|
|||||||
"Service Booking succeeded",
|
"Service Booking succeeded",
|
||||||
"Your service booking has been successfully placed with ID " + serviceBooking->getId());
|
"Your service booking has been successfully placed with ID " + serviceBooking->getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ServiceManagementService::purchaseComboPackage(const std::string& comboPackageID, const std::string& vehicleNumber, const std::string& vehicleBrand, const std::string& vehicleModel)
|
||||||
|
{
|
||||||
|
AuthenticationManagementService m_authenticationManagementService;
|
||||||
|
auto authenticatedUser = m_authenticationManagementService.getAuthenticatedUser();
|
||||||
|
if (authenticatedUser == nullptr)
|
||||||
|
{
|
||||||
|
throw std::runtime_error("No user is currently logged in!");
|
||||||
|
}
|
||||||
|
auto& comboPackagesMap = m_dataStore.getComboPackages();
|
||||||
|
auto& serviceBookingMap = m_dataStore.getServiceBookings();
|
||||||
|
int comboPackageIndex = comboPackagesMap.find(comboPackageID);
|
||||||
|
if (comboPackageIndex == -1)
|
||||||
|
{
|
||||||
|
throw std::runtime_error("Combo Package not found!");
|
||||||
|
}
|
||||||
|
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());
|
||||||
|
if (serviceBooking == nullptr)
|
||||||
|
{
|
||||||
|
throw std::runtime_error("Failed to create combo package service booking");
|
||||||
|
}
|
||||||
|
serviceBookingMap[serviceBooking->getId()] = serviceBooking;
|
||||||
|
sendNotification(authenticatedUser,
|
||||||
|
"Combo Package Service Booking succeeded",
|
||||||
|
"Your service booking for the combo package has been successfully placed with ID " + serviceBooking->getId());
|
||||||
|
}
|
||||||
|
|||||||
@@ -13,3 +13,16 @@ inline double calculatePartsCost(const Service* service)
|
|||||||
}
|
}
|
||||||
return cost;
|
return cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline double calculateComboServiceEstimatedCost(const ComboPackage* comboPackage)
|
||||||
|
{
|
||||||
|
double cost = 0;
|
||||||
|
auto& services = comboPackage->getServices();
|
||||||
|
int servicesSize = services.getSize();
|
||||||
|
for (int index = 0; index < servicesSize; index++)
|
||||||
|
{
|
||||||
|
const Service* service = services.getValueAt(index);
|
||||||
|
cost += calculatePartsCost(service) + service->getLaborCost();
|
||||||
|
}
|
||||||
|
return cost;
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
#include "CustomerMenu.h"
|
#include "CustomerMenu.h"
|
||||||
#include "Service.h"
|
#include "Service.h"
|
||||||
#include "InventoryItem.h"
|
#include "InventoryItem.h"
|
||||||
|
#include "ComboPackage.h"
|
||||||
|
#include "Service.h"
|
||||||
#include "InputHelper.h"
|
#include "InputHelper.h"
|
||||||
#include "OutputHelper.h"
|
#include "OutputHelper.h"
|
||||||
#include "Validator.h"
|
#include "Validator.h"
|
||||||
@@ -154,8 +156,70 @@ void CustomerMenu::selectService()
|
|||||||
util::pressEnter();
|
util::pressEnter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const ComboPackage* selectComboPackageFromPackages(const util::Map<std::string, const ComboPackage*>& comboPackages)
|
||||||
|
{
|
||||||
|
util::Map<int, const ComboPackage*> activeComboPackages;
|
||||||
|
int currentIndex = 1;
|
||||||
|
int userInputIndex;
|
||||||
|
std::cout << std::left
|
||||||
|
<< std::setw(10) << "Index"
|
||||||
|
<< std::setw(15) << "Combo Package ID"
|
||||||
|
<< std::setw(15) << "Combo Package Name"
|
||||||
|
<< std::setw(15) << "Estimate Cost"
|
||||||
|
<< std::endl;
|
||||||
|
for (int index = 0; index < comboPackages.getSize(); index++)
|
||||||
|
{
|
||||||
|
const ComboPackage* currentComboPackage = comboPackages.getValueAt(index);
|
||||||
|
if (currentComboPackage->getState() != util::State::ACTIVE)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
activeComboPackages.insert(currentIndex, currentComboPackage);
|
||||||
|
std::cout << std::left
|
||||||
|
<< std::setw(10) << currentIndex
|
||||||
|
<< std::setw(15) << currentComboPackage->getId()
|
||||||
|
<< std::setw(25) << currentComboPackage->getPackageName()
|
||||||
|
<< std::setw(15) << calculateComboServiceEstimatedCost(currentComboPackage)
|
||||||
|
<< std::endl;
|
||||||
|
currentIndex++;
|
||||||
|
}
|
||||||
|
if (activeComboPackages.getSize() == 0)
|
||||||
|
{
|
||||||
|
std::cout << "No active combo packages available." << std::endl;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
std::cout << "Enter combo package index: ";
|
||||||
|
util::read(userInputIndex);
|
||||||
|
if (activeComboPackages.find(userInputIndex) == -1)
|
||||||
|
{
|
||||||
|
std::cout << "Invalid combo package index." << std::endl;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
return activeComboPackages[userInputIndex];
|
||||||
|
}
|
||||||
|
|
||||||
void CustomerMenu::selectComboPackage()
|
void CustomerMenu::selectComboPackage()
|
||||||
{
|
{
|
||||||
|
std::string vehicleNumber, vehicleBrand, vehicleModel;
|
||||||
|
auto comboPackages = m_controller.getComboPackages();
|
||||||
|
util::clear();
|
||||||
|
const ComboPackage* selectedComboPackage = selectComboPackageFromPackages(comboPackages);
|
||||||
|
if (selectedComboPackage == nullptr)
|
||||||
|
{
|
||||||
|
std::cout << "Failed to book combo package!";
|
||||||
|
util::pressEnter();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
util::clear();
|
||||||
|
std::cout << "Enter vehicle number: ";
|
||||||
|
util::read(vehicleNumber);
|
||||||
|
std::cout << "Enter vehicle brand: ";
|
||||||
|
util::read(vehicleBrand);
|
||||||
|
std::cout << "Enter vehicle model: ";
|
||||||
|
util::read(vehicleModel);
|
||||||
|
m_controller.purchaseComboPackage(selectedComboPackage->getId(), vehicleNumber, vehicleBrand, vehicleModel);
|
||||||
|
std::cout << "Combo Package has been booked successfully";
|
||||||
|
util::pressEnter();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CustomerMenu::viewServiceHistory()
|
void CustomerMenu::viewServiceHistory()
|
||||||
|
|||||||
Reference in New Issue
Block a user