Merged PR 1128: Fix customer removal flow, admin inventory UI issues, and user display improvements
Changes:
- Refactored customer and technician removal flow:
- Ensured linked job cards and service bookings are properly cancelled.
- Centralized cancellation logic with processBookingCancellation helper for consistent notifications, technician reassignment, and inventory restoration.
- Prevented duplicate inventory restocking during customer removal.
- Preserved customer references and IDs correctly during booking cancellation.
- Admin inventory management improvements:
- Added heading output to Remove Inventory Item submenu for clearer context.
- Prevented service creation with empty inventory selection by adding validation and early return.
- Improved combo package creation by simplifying null checks with modern idioms.
- Enhanced inventory selection flow:
- Clear screen and context header for better UX.
- Prevent duplicate item selection by checking already chosen items.
- Changed exit option from -1 to 0 for consistency.
- Added pressEnter prompt after successful item addition.
- Simplified pointer checks using concise conditions (e.g., if (item)).
- User management UI fix:
- Updated active user display in Remove User menu to include Full Name column, ensuring administrators have complete visibility when managing users.
Fixes #1788
Fixes #1778
Fixes #1781
Related work items: #1778, #1781, #1788
This commit is contained in:
+8
-7
@@ -294,7 +294,7 @@ void PaymentManagementService::generateInvoice(ServiceBooking* booking)
|
||||
{
|
||||
throw std::runtime_error("Invoice generation failed: booking is null.");
|
||||
}
|
||||
double totalLabourCost = 0, totalPartsCost = 0, totalServiceCost = 0;
|
||||
double totalLaborCost = 0, totalPartsCost = 0, totalServiceCost = 0;
|
||||
double discountPercentage = booking->getDiscountPercentage();
|
||||
std::string bookingID = booking->getId();
|
||||
util::Map<std::string, Service*> servicesInTheBookedService = booking->getServices();
|
||||
@@ -303,9 +303,10 @@ void PaymentManagementService::generateInvoice(ServiceBooking* booking)
|
||||
for (int iterator = 0; iterator < currentJobCards.getSize(); iterator++)
|
||||
{
|
||||
JobCard* currentJobCard = currentJobCards.getValueAt(iterator);
|
||||
if (currentJobCard->getBookingId() == bookingID && currentJobCard->getStatus() != util::ServiceJobStatus::COMPLETED)
|
||||
util::ServiceJobStatus currentJobCardStatus = currentJobCard->getStatus();
|
||||
if (currentJobCard->getBookingId() == bookingID && currentJobCardStatus != util::ServiceJobStatus::CANCELLED && currentJobCardStatus != util::ServiceJobStatus::COMPLETED)
|
||||
{
|
||||
throw std::runtime_error("Invoice generation failed: not all job cards are completed for booking '" + bookingID + "'.");
|
||||
throw std::runtime_error("Invoice generation failed: Not all job cards are completed for booking '" + bookingID + "'.");
|
||||
}
|
||||
}
|
||||
for (int iterator = 0; iterator < servicesInTheBookedService.getSize(); iterator++)
|
||||
@@ -314,13 +315,13 @@ void PaymentManagementService::generateInvoice(ServiceBooking* booking)
|
||||
if (currentService)
|
||||
{
|
||||
createInventoryItemsMap(completeInventoryItemMapOfBooking, currentService);
|
||||
totalLabourCost += currentService->getLaborCost();
|
||||
totalLaborCost += currentService->getLaborCost();
|
||||
totalPartsCost += util::calculatePartsCost(currentService);
|
||||
}
|
||||
}
|
||||
totalServiceCost = totalLabourCost + totalPartsCost;
|
||||
totalServiceCost = totalLaborCost + totalPartsCost;
|
||||
totalServiceCost -= (totalServiceCost * (discountPercentage / 100));
|
||||
Invoice* invoice = Factory::getObject<Invoice>(bookingID, booking, util::Timestamp(), totalLabourCost, completeInventoryItemMapOfBooking, totalPartsCost, discountPercentage, totalServiceCost, util::Timestamp(), util::PaymentMode::NOTSET, util::PaymentStatus::PENDING);
|
||||
Invoice* invoice = Factory::getObject<Invoice>(bookingID, booking, util::Timestamp(), totalLaborCost, completeInventoryItemMapOfBooking, totalPartsCost, discountPercentage, totalServiceCost, util::Timestamp(), util::PaymentMode::NOTSET, util::PaymentStatus::PENDING);
|
||||
util::Map<std::string, Invoice*>& currentInvoices = m_dataStore.getInvoices();
|
||||
currentInvoices.insert(invoice->getId(), invoice);
|
||||
}
|
||||
@@ -375,7 +376,7 @@ void PaymentManagementService::completePayment(const std::string& invoiceID, uti
|
||||
invoice->setStatus(util::PaymentStatus::COMPLETED);
|
||||
std::string title, message;
|
||||
title = "Payment successful";
|
||||
message = "Payment successful for invoice ID " + invoiceID;
|
||||
message = "Payment successful for Invoice ID " + invoiceID;
|
||||
sendNotification(currentUser, title, message);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user