Compare commits
5 Commits
bugfix-1
...
931aa4c406
| Author | SHA1 | Date | |
|---|---|---|---|
| 931aa4c406 | |||
| c5ada405e6 | |||
| d6b4310de6 | |||
| 451085e9c2 | |||
| 4657d3e8d1 |
@@ -462,6 +462,38 @@ util::Map<std::string, const Invoice*> Controller::getInvoicesByUser()
|
||||
return userInvoicesReadOnly;
|
||||
}
|
||||
|
||||
/*
|
||||
Function: getAllInvoices
|
||||
Description: Retrieves all invoices from the PaymentManagementService and returns them as a read-only map.
|
||||
Parameters:
|
||||
- none
|
||||
Returns:
|
||||
- util::Map<std::string, const Invoice*>: Map of invoice IDs to invoice objects
|
||||
*/
|
||||
util::Map<std::string, const Invoice*> Controller::getAllInvoices()
|
||||
{
|
||||
auto invoices = m_paymentManagementService.getAllInvoice();
|
||||
util::Map<std::string, const Invoice*> readOnlyInvoice;
|
||||
for (int iterator = 0; iterator < invoices.getSize(); iterator++)
|
||||
{
|
||||
readOnlyInvoice.insert(invoices.getKeyAt(iterator), invoices.getValueAt(iterator));
|
||||
}
|
||||
return readOnlyInvoice;
|
||||
}
|
||||
|
||||
/*
|
||||
Function: confirmPayment
|
||||
Description: Delegates payment confirmation for a given invoice ID to the PaymentManagementService.
|
||||
Parameters:
|
||||
- invoiceID: std::string, ID of the invoice to confirm
|
||||
Returns:
|
||||
- void
|
||||
*/
|
||||
void Controller::confirmPayment(std::string invoiceID)
|
||||
{
|
||||
m_paymentManagementService.confirmPayment(invoiceID);
|
||||
}
|
||||
|
||||
/*
|
||||
Function: completePayment
|
||||
Description: Completes payment for a specific invoice using the given payment mode.
|
||||
|
||||
@@ -64,6 +64,8 @@ public:
|
||||
void createComboPackage(const std::string& name, const util::Vector<std::string>& serviceIDs, double discountPercentage);
|
||||
void removeComboPackage(const std::string& comboPackageID);
|
||||
util::Map<std::string, const Invoice*> getInvoicesByUser();
|
||||
util::Map<std::string, const Invoice*> getAllInvoices();
|
||||
void confirmPayment(std::string invoiceID);
|
||||
void completePayment(const std::string& invoiceID, util::PaymentMode paymentMode);
|
||||
util::Vector<const Notification*> getNotifications();
|
||||
void deleteNotification(const std::string& notificationID);
|
||||
|
||||
+50
-2
@@ -368,12 +368,12 @@ void PaymentManagementService::completePayment(const std::string& invoiceID, uti
|
||||
if (invoiceIndex != -1)
|
||||
{
|
||||
Invoice* invoice = currentInvoices.getValueAt(invoiceIndex);
|
||||
if (invoice && invoice->getStatus() != util::PaymentStatus::COMPLETED)
|
||||
if (invoice && invoice->getStatus() != util::PaymentStatus::PAID)
|
||||
{
|
||||
User* currentUser = invoice->getBooking()->getCustomer();
|
||||
invoice->setPaymentMethod(paymentMode);
|
||||
invoice->setPaymentDate(util::Timestamp());
|
||||
invoice->setStatus(util::PaymentStatus::COMPLETED);
|
||||
invoice->setStatus(util::PaymentStatus::PAID);
|
||||
std::string title, message;
|
||||
title = "Payment successful";
|
||||
message = "Payment successful for Invoice ID " + invoiceID;
|
||||
@@ -384,4 +384,52 @@ void PaymentManagementService::completePayment(const std::string& invoiceID, uti
|
||||
{
|
||||
throw std::runtime_error("Payment failed: invalid invoice ID.");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Function: getAllInvoice
|
||||
Description: Provides access to all invoices stored in the data store.
|
||||
Parameters:
|
||||
- none
|
||||
Returns:
|
||||
- util::Map<std::string, Invoice*>&: Map of invoice IDs to invoice objects
|
||||
*/
|
||||
util::Map<std::string, Invoice*>& PaymentManagementService::getAllInvoice()
|
||||
{
|
||||
return m_dataStore.getInvoices();
|
||||
}
|
||||
|
||||
/*
|
||||
Function: confirmPayment
|
||||
Description: Confirms payment for a specific invoice. Updates payment date and status,
|
||||
then sends a notification to the customer.
|
||||
Parameters:
|
||||
- invoiceID: std::string, ID of the invoice to confirm
|
||||
Returns:
|
||||
- void
|
||||
Throws:
|
||||
- std::runtime_error if the invoice ID is invalid
|
||||
*/
|
||||
void PaymentManagementService::confirmPayment(std::string invoiceID)
|
||||
{
|
||||
std::string title, message;
|
||||
auto& currentInvoices = m_dataStore.getInvoices();
|
||||
int invoiceIndex = currentInvoices.find(invoiceID);
|
||||
if (invoiceIndex != -1)
|
||||
{
|
||||
Invoice* invoice = currentInvoices.getValueAt(invoiceIndex);
|
||||
if (invoice && invoice->getStatus() != util::PaymentStatus::COMPLETED)
|
||||
{
|
||||
User* currentUser = invoice->getBooking()->getCustomer();
|
||||
invoice->setPaymentDate(util::Timestamp());
|
||||
invoice->setStatus(util::PaymentStatus::COMPLETED);
|
||||
title = "Payment Confirmed";
|
||||
message = "Payment Confirmed for Invoice ID " + invoiceID;
|
||||
sendNotification(currentUser, title, message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw std::runtime_error("Payment failed: invalid invoice ID.");
|
||||
}
|
||||
}
|
||||
+2
@@ -28,6 +28,8 @@ public:
|
||||
void generateInvoice(ServiceBooking* booking);
|
||||
util::Map<std::string, Invoice*> getInvoices(const std::string& customerID);
|
||||
void completePayment(const std::string& invoiceID, util::PaymentMode paymentMode);
|
||||
util::Map<std::string, Invoice*>& getAllInvoice();
|
||||
void confirmPayment(std::string invoiceID);
|
||||
void sendPaymentReminders();
|
||||
void sendNotification(User* user, const std::string& title, const std::string& message) override;
|
||||
void attach(User* user) override;
|
||||
|
||||
@@ -29,7 +29,8 @@ namespace util
|
||||
enum class PaymentStatus
|
||||
{
|
||||
PENDING,
|
||||
COMPLETED
|
||||
COMPLETED,
|
||||
PAID
|
||||
};
|
||||
|
||||
enum class ServiceJobStatus
|
||||
@@ -160,6 +161,8 @@ namespace util
|
||||
return "PENDING";
|
||||
case PaymentStatus::COMPLETED:
|
||||
return "COMPLETED";
|
||||
case PaymentStatus::PAID:
|
||||
return "PAID";
|
||||
}
|
||||
throw std::invalid_argument("Invalid PaymentStatus");
|
||||
}
|
||||
|
||||
@@ -42,15 +42,19 @@ void AdminMenu::showMenu()
|
||||
<< "\n3. Remove Inventory Item"
|
||||
<< "\n4. Check Stock Availability"
|
||||
<< "\n5. Assign Job to Technician"
|
||||
<< "\n6. Add Technician"
|
||||
<< "\n7. Remove Customer/Technician"
|
||||
<< "\n8. Create Service"
|
||||
<< "\n9. Remove Service"
|
||||
<< "\n10. Create Combo Package"
|
||||
<< "\n11. Remove Combo Package"
|
||||
<< "\n12. View Notifications"
|
||||
<< "\n13. Change Password"
|
||||
<< "\n14. Logout"
|
||||
<< "\n6. Display Users"
|
||||
<< "\n7. Add Technician"
|
||||
<< "\n8. Remove Customer/Technician"
|
||||
<< "\n9. Display Services"
|
||||
<< "\n10. Create Service"
|
||||
<< "\n11. Remove Service"
|
||||
<< "\n12. Display Combo Packages"
|
||||
<< "\n13. Create Combo Package"
|
||||
<< "\n14. Remove Combo Package"
|
||||
<< "\n15. View Notifications"
|
||||
<< "\n16. Change Password"
|
||||
<< "\n17. Confirm Payment"
|
||||
<< "\n18. Logout"
|
||||
<< "\nEnter a choice: ";
|
||||
util::read(choice);
|
||||
if (!handleOperation(choice))
|
||||
@@ -92,30 +96,42 @@ bool AdminMenu::handleOperation(int choice)
|
||||
assignJob();
|
||||
break;
|
||||
case 6:
|
||||
addTechnician();
|
||||
displayUsers();
|
||||
break;
|
||||
case 7:
|
||||
removeUser();
|
||||
addTechnician();
|
||||
break;
|
||||
case 8:
|
||||
createService();
|
||||
removeUser();
|
||||
break;
|
||||
case 9:
|
||||
removeService();
|
||||
displayServices();
|
||||
break;
|
||||
case 10:
|
||||
createComboPackages();
|
||||
createService();
|
||||
break;
|
||||
case 11:
|
||||
removeComboPackage();
|
||||
removeService();
|
||||
break;
|
||||
case 12:
|
||||
viewNotifications();
|
||||
displayComboPackages();
|
||||
break;
|
||||
case 13:
|
||||
changePassword();
|
||||
createComboPackages();
|
||||
break;
|
||||
case 14:
|
||||
removeComboPackage();
|
||||
break;
|
||||
case 15:
|
||||
viewNotifications();
|
||||
break;
|
||||
case 16:
|
||||
changePassword();
|
||||
break;
|
||||
case 17:
|
||||
confirmPayment();
|
||||
break;
|
||||
case 18:
|
||||
logout();
|
||||
return false;
|
||||
default:
|
||||
@@ -383,6 +399,24 @@ void AdminMenu::assignJob()
|
||||
util::pressEnter();
|
||||
}
|
||||
|
||||
/*
|
||||
Function: displayServices()
|
||||
Description: Display all active services
|
||||
Parameters:
|
||||
- None
|
||||
Returns:
|
||||
- void
|
||||
*/
|
||||
void AdminMenu::displayServices()
|
||||
{
|
||||
util::clear();
|
||||
std::cout << "List of all Services\n";
|
||||
util::Map<std::string, const Service*> currentServices = m_controller.getServices();
|
||||
util::Map<std::string, const Service*> currentActiveServices = filterActiveServices(currentServices);
|
||||
displayAllServices(currentActiveServices);
|
||||
util::pressEnter();
|
||||
}
|
||||
|
||||
/*
|
||||
Function: createService
|
||||
Description: Allows the admin to create a new service by selecting inventory items and specifying labor cost.
|
||||
@@ -443,6 +477,77 @@ void AdminMenu::removeService()
|
||||
util::pressEnter();
|
||||
}
|
||||
|
||||
/*
|
||||
Function: displayUsers
|
||||
Description: Displays all users.
|
||||
Parameter: None
|
||||
Return type: void
|
||||
*/
|
||||
void AdminMenu::displayUsers()
|
||||
{
|
||||
util::clear();
|
||||
auto listOfUsers = m_controller.getUsers();
|
||||
auto listOfActiveUsers = filterActiveUsers(listOfUsers);
|
||||
int activeUserCount = listOfActiveUsers.getSize();
|
||||
std::cout << "List of all Users\n";
|
||||
if (activeUserCount < 1)
|
||||
{
|
||||
std::cout << "No Active users." << std::endl;
|
||||
util::pressEnter();
|
||||
return;
|
||||
}
|
||||
displayAllUsers(listOfActiveUsers);
|
||||
util::pressEnter();
|
||||
}
|
||||
|
||||
/*
|
||||
Function: confirmPayment
|
||||
Description: Confirms payment for a selected invoice. Validates invoice status, updates payment date,
|
||||
sets status to PAID, and sends a notification to the customer.
|
||||
Parameters:
|
||||
- invoiceID: std::string, ID of the invoice to confirm
|
||||
Returns:
|
||||
- void
|
||||
*/
|
||||
void AdminMenu::confirmPayment()
|
||||
{
|
||||
util::clear();
|
||||
std::cout << "Confirm Payment\n";
|
||||
auto invoiceList = m_controller.getAllInvoices();
|
||||
if (invoiceList.isEmpty())
|
||||
{
|
||||
std::cout << "No pending invoices available for confirmation.";
|
||||
util::pressEnter();
|
||||
return;
|
||||
}
|
||||
bool hasPaidInvoice = false;
|
||||
for (int index = 0; index < invoiceList.getSize(); ++index)
|
||||
{
|
||||
const Invoice* invoice = invoiceList.getValueAt(index);
|
||||
if (invoice && invoice->getStatus() == util::PaymentStatus::PAID)
|
||||
{
|
||||
hasPaidInvoice = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!hasPaidInvoice)
|
||||
{
|
||||
std::cout << "No pending invoices available for payment.\n";
|
||||
util::pressEnter();
|
||||
return;
|
||||
}
|
||||
std::string selectedID = selectInvoiceFromUserForPayment(invoiceList, util::PaymentStatus::PAID);
|
||||
if (selectedID == "")
|
||||
{
|
||||
std::cout << "Payment failed.\n";
|
||||
util::pressEnter();
|
||||
return;
|
||||
}
|
||||
m_controller.confirmPayment(selectedID);
|
||||
std::cout << "Payment Confirmed successfully.\n";
|
||||
util::pressEnter();
|
||||
}
|
||||
|
||||
/*
|
||||
Function: addTechnician
|
||||
Description: Adds a new technician after validating username, password, email, and phone number.
|
||||
@@ -507,12 +612,12 @@ void AdminMenu::removeUser()
|
||||
util::pressEnter();
|
||||
return;
|
||||
}
|
||||
displayAllActiveUsers(listOfActiveUsers, activeUserCount);
|
||||
displayAllUsers(listOfActiveUsers);
|
||||
std::cout << "Enter the index of the user to delete : ";
|
||||
util::read(indexChoice);
|
||||
if (indexChoice < 1 || indexChoice > activeUserCount)
|
||||
{
|
||||
std::cout << "Error Invaild index.\n" << std::endl;
|
||||
std::cout << "Error invalid index.\n" << std::endl;
|
||||
util::pressEnter();
|
||||
return;
|
||||
}
|
||||
@@ -526,6 +631,24 @@ void AdminMenu::removeUser()
|
||||
util::pressEnter();
|
||||
}
|
||||
|
||||
/*
|
||||
Function: displayComboPackages()
|
||||
Description: Display all active combo packages
|
||||
Parameters:
|
||||
- None
|
||||
Returns:
|
||||
- void
|
||||
*/
|
||||
void AdminMenu::displayComboPackages()
|
||||
{
|
||||
util::clear();
|
||||
std::cout << "List of all Combo Packages\n";
|
||||
util::Map<std::string, const ComboPackage*> currentComboPackages = m_controller.getComboPackages();
|
||||
util::Map<std::string, const ComboPackage*> currentActiveComboPackages = filterComboPackages(currentComboPackages);
|
||||
displayAllComboPackages(currentActiveComboPackages);
|
||||
util::pressEnter();
|
||||
}
|
||||
|
||||
/*
|
||||
Function: createComboPackages
|
||||
Description: Creates a new combo package by selecting two active services and applying a discount.
|
||||
|
||||
@@ -24,10 +24,14 @@ public:
|
||||
void removeInventoryItem();
|
||||
void checkStockAvailability();
|
||||
void assignJob();
|
||||
void displayServices();
|
||||
void createService();
|
||||
void removeService();
|
||||
void displayUsers();
|
||||
void confirmPayment();
|
||||
void addTechnician();
|
||||
void removeUser();
|
||||
void displayComboPackages();
|
||||
void createComboPackages();
|
||||
void removeComboPackage();
|
||||
void viewNotifications();
|
||||
|
||||
@@ -338,7 +338,7 @@ void CustomerMenu::completePayments()
|
||||
util::pressEnter();
|
||||
return;
|
||||
}
|
||||
std::string selectedID = selectInvoiceFromUserForPayment(currentInvoices);
|
||||
std::string selectedID = selectInvoiceFromUserForPayment(currentInvoices, util::PaymentStatus::PENDING);
|
||||
if (selectedID == "")
|
||||
{
|
||||
std::cout << "Payment failed.\n";
|
||||
|
||||
@@ -29,6 +29,41 @@ Date: 21-May-2026
|
||||
#include "Validator.h"
|
||||
#include "Vector.h"
|
||||
|
||||
/*
|
||||
Function: displayAllServices
|
||||
Description: Displays all active services
|
||||
Parameters:
|
||||
- currentServices: util::Map<std::string, const Service*>, available services
|
||||
Returns:
|
||||
- void;
|
||||
*/
|
||||
inline void displayAllServices(util::Map<std::string, const Service*> currentServices)
|
||||
{
|
||||
if (currentServices.getSize() == 0)
|
||||
{
|
||||
std::cout << "No Services Currently Available.\n";
|
||||
return;
|
||||
}
|
||||
std::cout << std::left
|
||||
<< std::setw(12) << "Service ID"
|
||||
<< std::setw(35) << "Name"
|
||||
<< std::setw(10) << "Labor Cost"
|
||||
<< std::endl;
|
||||
for (int iterator = 0; iterator < currentServices.getSize(); iterator++)
|
||||
{
|
||||
const Service* currentService = currentServices.getValueAt(iterator);
|
||||
if (currentService == nullptr || currentService->getState() == util::State::INACTIVE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
std::cout << std::left
|
||||
<< std::setw(12) << currentService->getId()
|
||||
<< std::setw(35) << util::truncateString(currentService->getName(), 30)
|
||||
<< std::setw(10) << currentService->getLaborCost()
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Function: selectServicesToRemove
|
||||
Description: Allows selection of a service to remove by index.
|
||||
@@ -329,14 +364,18 @@ inline const User* selectTechnician(util::Map<int, const User*>& currentAvailabl
|
||||
}
|
||||
|
||||
/*
|
||||
Function: selectInvoiceFromUserForPayment
|
||||
Description: Lists all pending invoices for the customer and allows selection by index.
|
||||
Function: selectInvoiceFromUserForPayment
|
||||
Description: Displays a list of invoices filtered by the required payment status.
|
||||
Allows the user to select an invoice by index and returns the corresponding invoice ID.
|
||||
Parameters:
|
||||
- currentInvoices: util::Map<std::string, const Invoice*>&, map of customer invoices
|
||||
- currentInvoices: const util::Map<std::string, const Invoice*>&,
|
||||
map of all invoices keyed by invoice ID
|
||||
- requiredStatus: util::PaymentStatus,
|
||||
the status to filter invoices (e.g., PENDING, PAID, COMPLETED)
|
||||
Returns:
|
||||
- std::string: ID of the selected invoice, or empty string if none selected
|
||||
- std::string: ID of the selected invoice, or empty string if none selected or invalid index
|
||||
*/
|
||||
inline std::string selectInvoiceFromUserForPayment(const util::Map<std::string, const Invoice*>& currentInvoices)
|
||||
inline std::string selectInvoiceFromUserForPayment(const util::Map<std::string, const Invoice*>& currentInvoices, util::PaymentStatus requiredStatus)
|
||||
{
|
||||
int currentIndex = 1, choice;
|
||||
util::Map<int, const Invoice*> pendingInvoicesForPayment;
|
||||
@@ -354,7 +393,7 @@ inline std::string selectInvoiceFromUserForPayment(const util::Map<std::string,
|
||||
for (int iterator = 0; iterator < currentInvoices.getSize(); iterator++)
|
||||
{
|
||||
const Invoice* currentInvoice = currentInvoices.getValueAt(iterator);
|
||||
if (currentInvoice && currentInvoice->getStatus() == util::PaymentStatus::PENDING)
|
||||
if (currentInvoice && currentInvoice->getStatus() == requiredStatus)
|
||||
{
|
||||
const User* currentTechnician = currentInvoice->getBooking()->getAssignedTechnician();
|
||||
std::cout << std::left
|
||||
@@ -619,12 +658,47 @@ inline util::Map<std::string, const JobCard*> filterStartedJobCards(util::Map<st
|
||||
return startedJobCards;
|
||||
}
|
||||
|
||||
/*
|
||||
Function: displayAllJobs
|
||||
Description: Displays all Jobs assigned to a Technician
|
||||
Parameters:
|
||||
- assignedJobCards: util::Map<std::string, const JobCard*>&, job cards assigned to the technician
|
||||
Returns:
|
||||
- std::string: ID of the selected job card, or empty string if none selected
|
||||
*/
|
||||
inline void displayAllJobs(util::Map<std::string, const JobCard*>& assignedJobCards)
|
||||
{
|
||||
if (assignedJobCards.getSize() == 0)
|
||||
{
|
||||
std::cout << "No active jobs assigned.\n";
|
||||
return;
|
||||
}
|
||||
std::cout << std::endl;
|
||||
std::cout << std::left
|
||||
<< std::setw(12) << "BookingID"
|
||||
<< std::setw(12) << "JobID"
|
||||
<< std::setw(20) << "ServiceName"
|
||||
<< std::setw(12) << "ServiceID"
|
||||
<< std::endl;
|
||||
for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++)
|
||||
{
|
||||
const JobCard* currentJobCard = assignedJobCards.getValueAt(iterator);
|
||||
if (currentJobCard && (currentJobCard->getStatus() == util::ServiceJobStatus::STARTED))
|
||||
{
|
||||
std::cout << std::left << std::setw(12) << currentJobCard->getBookingId()
|
||||
<< std::setw(12) << currentJobCard->getId()
|
||||
<< std::setw(20) << currentJobCard->getService()->getName()
|
||||
<< std::setw(12) << currentJobCard->getServiceId()
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Function: selectJobCardToComplete
|
||||
Description: Lists all incomplete job cards assigned to the technician and allows selection by index.
|
||||
Parameters:
|
||||
- assignedJobCards: util::Map<std::string, const JobCard*>&, job cards assigned to the technician
|
||||
- incompleteJobCards: util::Map<int, const JobCard*>&, map of incomplete job cards indexed for selection
|
||||
Returns:
|
||||
- std::string: ID of the selected job card, or empty string if none selected
|
||||
*/
|
||||
@@ -844,14 +918,14 @@ inline util::Map<std::string, const User*> filterActiveUsers(const util::Map<std
|
||||
}
|
||||
|
||||
/*
|
||||
Function: displayAllActiveUsers
|
||||
Function: displayAllUsers
|
||||
Description: Displays all active users in a tabular format with index, ID, username, and type.
|
||||
Parameter: util::Map<std::string, const User*>& activeUsers - active users list
|
||||
int activeUserCount - number of active users
|
||||
Return type: void
|
||||
*/
|
||||
inline void displayAllActiveUsers(util::Map<std::string, const User*>& activeUsers, int activeUserCount)
|
||||
inline void displayAllUsers(util::Map<std::string, const User*>& activeUsers)
|
||||
{
|
||||
int activeUserCount = activeUsers.getSize();
|
||||
std::cout << std::left << std::setw(10) << "Index"
|
||||
<< std::setw(15) << "User ID"
|
||||
<< std::setw(25) << "Username"
|
||||
@@ -986,6 +1060,43 @@ inline util::Map<std::string, const ComboPackage*> filterComboPackages(util::Map
|
||||
return activeComboPackages;
|
||||
}
|
||||
|
||||
/*
|
||||
Function: displayAllComboPackages
|
||||
Description: Displays all active combo packages
|
||||
Parameters:
|
||||
- currentComboPackages: util::Map<std::string, const ComboPackage*>, available combo packages
|
||||
Returns:
|
||||
- void;
|
||||
*/
|
||||
inline void displayAllComboPackages(util::Map<std::string, const ComboPackage*> comboPackages)
|
||||
{
|
||||
std::cout << std::endl;
|
||||
if (comboPackages.getSize() == 0)
|
||||
{
|
||||
std::cout << "No active combo packages available." << std::endl;
|
||||
return;
|
||||
}
|
||||
std::cout << std::left
|
||||
<< std::setw(15) << "Combo ID"
|
||||
<< std::setw(35) << "Combo Name"
|
||||
<< std::setw(15) << "Estimate Cost"
|
||||
<< std::endl;
|
||||
for (int index = 0; index < comboPackages.getSize(); index++)
|
||||
{
|
||||
const ComboPackage* currentComboPackage = comboPackages.getValueAt(index);
|
||||
if (currentComboPackage && currentComboPackage->getState() != util::State::ACTIVE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
std::cout << std::left
|
||||
<< std::setw(15) << currentComboPackage->getId()
|
||||
<< std::setw(35) << util::truncateString(currentComboPackage->getPackageName(), 30)
|
||||
<< std::setw(15) << util::calculateComboServiceEstimatedCost(currentComboPackage)
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Function: selectComboPackageFromPackages
|
||||
Description: Displays active combo packages and allows the customer to select one by index.
|
||||
@@ -1007,7 +1118,7 @@ inline const ComboPackage* selectComboPackageFromPackages(const util::Map<std::s
|
||||
for (int index = 0; index < comboPackages.getSize(); index++)
|
||||
{
|
||||
const ComboPackage* currentComboPackage = comboPackages.getValueAt(index);
|
||||
if (currentComboPackage->getState() != util::State::ACTIVE)
|
||||
if (currentComboPackage && currentComboPackage->getState() != util::State::ACTIVE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -34,10 +34,11 @@ void TechnicianMenu::showMenu()
|
||||
int choice;
|
||||
util::clear();
|
||||
std::cout << "Technician Menu"
|
||||
<< "\n1. Mark Job as Completed"
|
||||
<< "\n2. View Notifications"
|
||||
<< "\n3. Change Password"
|
||||
<< "\n4. Logout"
|
||||
<< "\n1. Display My Jobs"
|
||||
<< "\n2. Mark Job as Completed"
|
||||
<< "\n3. View Notifications"
|
||||
<< "\n4. Change Password"
|
||||
<< "\n5. Logout"
|
||||
<< "\nEnter a choice: ";
|
||||
util::read(choice);
|
||||
if (!handleOperation(choice))
|
||||
@@ -64,15 +65,18 @@ bool TechnicianMenu::handleOperation(int choice)
|
||||
switch (choice)
|
||||
{
|
||||
case 1:
|
||||
completeJob();
|
||||
displayJobs();
|
||||
break;
|
||||
case 2:
|
||||
viewNotifications();
|
||||
completeJob();
|
||||
break;
|
||||
case 3:
|
||||
changePassword();
|
||||
viewNotifications();
|
||||
break;
|
||||
case 4:
|
||||
changePassword();
|
||||
break;
|
||||
case 5:
|
||||
logout();
|
||||
return false;
|
||||
default:
|
||||
@@ -82,6 +86,24 @@ bool TechnicianMenu::handleOperation(int choice)
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
Function: displayJobs
|
||||
Description: Displays all Jobs assigned to a Technician
|
||||
Parameters:
|
||||
- None
|
||||
Returns:
|
||||
- void
|
||||
*/
|
||||
void TechnicianMenu::displayJobs()
|
||||
{
|
||||
util::clear();
|
||||
std::cout << "My Jobs\n";
|
||||
util::Map<std::string, const JobCard*> assignedJobCards = m_controller.getJobCardsByUser();
|
||||
util::Map<std::string, const JobCard*> startedJobCards = filterStartedJobCards(assignedJobCards);
|
||||
displayAllJobs(startedJobCards);
|
||||
util::pressEnter();
|
||||
}
|
||||
|
||||
/*
|
||||
Function: completeJob
|
||||
Description: Allows the technician to mark a selected job card as completed.
|
||||
|
||||
@@ -17,6 +17,7 @@ private:
|
||||
bool handleOperation(int choice);
|
||||
public:
|
||||
void showMenu();
|
||||
void displayJobs();
|
||||
void completeJob();
|
||||
void viewNotifications();
|
||||
void logout();
|
||||
|
||||
Reference in New Issue
Block a user