Fix PR review comments
Changes:
1. Added missing include for MenuHelper.h in project, AdminMenu, and CustomerMenu.
2. Updated PaymentManagementService::completePayment to guard against duplicate completion by checking status before updating.
3. Enhanced ServiceManagementService::createJobCard with null checks for inventory items and safe stock decrement logic.
4. Added null check for job card creation in ServiceManagementService and throw runtime error if creation fails.
5. Refactored ServiceManagementService::removeService to use m_dataStore.getServices() reference instead of getServices() copy.
6. Renamed helper function hasAllJobCardsinServiceBookingCompleted to hasCompletedAllJobs for clarity and updated usage in completeJob.
7. Fixed ServiceJobStatus string conversion in Enums.h to correctly return "PENDING" instead of "STARTED".
8. Added support for parsing "PENDING" string to ServiceJobStatus::PENDING in Enums.h.
9. Cleaned up AdminMenu.cpp by removing redundant static helper functions (listServiceBookings, selectPendingServiceBookings, listAvailableTechnicians, selectTechnician, selectInventoryItems, selectServicesToRemove).
10. Replaced removed helpers with shared MenuHelper usage and added util::pressEnter() calls for consistent user flow.
11. Simplified CustomerMenu.cpp by removing redundant static helpers (selectInvoiceFromUserForPayment, selectPaymentMode, displayInvoices) and moved logic to shared helpers.
12. General formatting and comment cleanup across AdminMenu.cpp and CustomerMenu.cpp for consistency.
This commit is contained in:
+19
-8
@@ -83,12 +83,16 @@ void ServiceManagementService::createJobCard(const std::string& bookingID, const
|
||||
for (int iterator = 0; iterator < inventoryItems.getSize(); iterator++)
|
||||
{
|
||||
InventoryItem* currentInventoryItem = inventoryItems.getValueAt(iterator);
|
||||
if (currentInventoryItem->getQuantity() == 0)
|
||||
if (currentInventoryItem && currentInventoryItem->getQuantity() == 0)
|
||||
{
|
||||
std::string errorMessage = "Failed to create job card, " + currentInventoryItem->getPartName() + " is out of stock.";
|
||||
throw std::runtime_error(errorMessage);
|
||||
}
|
||||
else
|
||||
}
|
||||
for (int iterator = 0; iterator < inventoryItems.getSize(); iterator++)
|
||||
{
|
||||
InventoryItem* currentInventoryItem = inventoryItems.getValueAt(iterator);
|
||||
if (currentInventoryItem)
|
||||
{
|
||||
int currentStockQuantity = currentInventoryItem->getQuantity();
|
||||
currentInventoryItem->setQuantity(currentStockQuantity - 1);
|
||||
@@ -99,8 +103,15 @@ void ServiceManagementService::createJobCard(const std::string& bookingID, const
|
||||
std::string title = "Job card created";
|
||||
std::string message = "Job card created for the service and you are assigned for that.";
|
||||
JobCard* jobCard = Factory::getObject<JobCard>(bookingID, currentBooking, currentService, serviceID, technicianID, selectedTechnician, util::Timestamp(), util::ServiceJobStatus::STARTED, util::Timestamp());
|
||||
currentJobCards.insert(jobCard->getId(), jobCard);
|
||||
sendNotification(selectedTechnician,title, message);
|
||||
if (jobCard)
|
||||
{
|
||||
currentJobCards.insert(jobCard->getId(), jobCard);
|
||||
sendNotification(selectedTechnician, title, message);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw std::runtime_error("Failed to create job card.");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -177,7 +188,7 @@ Throws:
|
||||
*/
|
||||
void ServiceManagementService::removeService(const std::string& serviceID)
|
||||
{
|
||||
util::Map<std::string, Service*> currentServices = getServices();
|
||||
util::Map<std::string, Service*>& currentServices = m_dataStore.getServices();
|
||||
if (currentServices.find(serviceID) != -1)
|
||||
{
|
||||
currentServices.getValueAt(currentServices.find(serviceID))->setState(util::State::INACTIVE);
|
||||
@@ -238,7 +249,7 @@ util::Map<std::string, JobCard*> ServiceManagementService::getJobCards(const std
|
||||
}
|
||||
|
||||
/*
|
||||
Function: hasAllJobCardsinServiceBookingCompleted (static helper)
|
||||
Function: hasCompletedAllJobs (static helper)
|
||||
Description: Checks if all job cards for a given service booking are completed.
|
||||
Parameters:
|
||||
- bookingId: std::string, ID of the service booking
|
||||
@@ -246,7 +257,7 @@ Parameters:
|
||||
Returns:
|
||||
- bool: True if all job cards are completed, False otherwise
|
||||
*/
|
||||
static bool hasAllJobCardsinServiceBookingCompleted(std::string bookingId, util::Map<std::string, JobCard*>& currentAssignedJobs)
|
||||
static bool hasCompletedAllJobs(std::string bookingId, util::Map<std::string, JobCard*>& currentAssignedJobs)
|
||||
{
|
||||
for (int iterator = 0; iterator < currentAssignedJobs.getSize(); iterator++)
|
||||
{
|
||||
@@ -312,7 +323,7 @@ void ServiceManagementService::completeJob(const std::string& jobID)
|
||||
throw std::runtime_error("Failed to complete the job, some error occured or job already completed.");
|
||||
}
|
||||
|
||||
serviceBookingCompleted = hasAllJobCardsinServiceBookingCompleted(currentJob->getBookingId(), currentAssignedJobs);
|
||||
serviceBookingCompleted = hasCompletedAllJobs(currentJob->getBookingId(), currentAssignedJobs);
|
||||
if (serviceBookingCompleted)
|
||||
{
|
||||
currentJob->getBooking()->setStatus(util::ServiceJobStatus::COMPLETED);
|
||||
|
||||
Reference in New Issue
Block a user