Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 70ec47df04 | |||
| 2ea77bf9b6 |
+2
-2
@@ -392,9 +392,9 @@ Parameters:
|
|||||||
Returns:
|
Returns:
|
||||||
- void
|
- void
|
||||||
*/
|
*/
|
||||||
void Controller::completeJob(const std::string& jobID)
|
void Controller::updateJobStatus(const std::string& jobID)
|
||||||
{
|
{
|
||||||
m_serviceManagementService.completeJob(jobID);
|
m_serviceManagementService.updateJobStatus(jobID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public:
|
|||||||
void createService(const std::string& name, const util::Vector<std::string>& inventoryItemIDs, double laborCost);
|
void createService(const std::string& name, const util::Vector<std::string>& inventoryItemIDs, double laborCost);
|
||||||
void removeService(const std::string& serviceID);
|
void removeService(const std::string& serviceID);
|
||||||
util::Map<std::string, const JobCard*> getJobCardsByUser();
|
util::Map<std::string, const JobCard*> getJobCardsByUser();
|
||||||
void completeJob(const std::string& jobID);
|
void updateJobStatus(const std::string& jobID);
|
||||||
void removeUser(const std::string& userID);
|
void removeUser(const std::string& userID);
|
||||||
void createComboPackage(const std::string& name, const util::Vector<std::string>& serviceIDs, double discountPercentage);
|
void createComboPackage(const std::string& name, const util::Vector<std::string>& serviceIDs, double discountPercentage);
|
||||||
void removeComboPackage(const std::string& comboPackageID);
|
void removeComboPackage(const std::string& comboPackageID);
|
||||||
|
|||||||
+28
-23
@@ -1080,7 +1080,7 @@ static bool hasCompletedAllJobs(std::string bookingId, util::Map<std::string, Jo
|
|||||||
JobCard* currentJob = currentAssignedJobs.getValueAt(iterator);
|
JobCard* currentJob = currentAssignedJobs.getValueAt(iterator);
|
||||||
if (currentJob->getBookingId() == bookingId)
|
if (currentJob->getBookingId() == bookingId)
|
||||||
{
|
{
|
||||||
if (currentJob->getStatus() == util::ServiceJobStatus::STARTED)
|
if (currentJob->getStatus() != util::ServiceJobStatus::COMPLETED && currentJob->getStatus() != util::ServiceJobStatus::CANCELLED)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1090,18 +1090,19 @@ static bool hasCompletedAllJobs(std::string bookingId, util::Map<std::string, Jo
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Function: completeJob
|
Function: updateJobStatus
|
||||||
Description: Marks a job card as completed for the authenticated technician.
|
Description:
|
||||||
If all job cards in the booking are completed, marks the booking as completed
|
Updates the status of a job card assigned to the currently authenticated technician.
|
||||||
and generates an invoice.
|
- If the job is STARTED, it moves to IN_PROGRESS.
|
||||||
|
- If the job is IN_PROGRESS, it moves to COMPLETED.
|
||||||
|
When all jobs in a service booking are completed, the booking status is updated,
|
||||||
|
an invoice is generated, and a notification is sent to the customer.
|
||||||
Parameters:
|
Parameters:
|
||||||
- jobID: std::string, ID of the job card
|
- jobID: const std::string&, unique identifier of the job card to update.
|
||||||
Returns:
|
Returns:
|
||||||
- void
|
- void
|
||||||
Throws:
|
|
||||||
- std::runtime_error if technician is not authenticated, job card not found, or job already completed
|
|
||||||
*/
|
*/
|
||||||
void ServiceManagementService::completeJob(const std::string& jobID)
|
void ServiceManagementService::updateJobStatus(const std::string& jobID)
|
||||||
{
|
{
|
||||||
AuthenticationManagementService authenticationManagementService;
|
AuthenticationManagementService authenticationManagementService;
|
||||||
PaymentManagementService paymentManagementService;
|
PaymentManagementService paymentManagementService;
|
||||||
@@ -1126,26 +1127,30 @@ void ServiceManagementService::completeJob(const std::string& jobID)
|
|||||||
}
|
}
|
||||||
if (currentJob->getStatus() == util::ServiceJobStatus::STARTED)
|
if (currentJob->getStatus() == util::ServiceJobStatus::STARTED)
|
||||||
{
|
{
|
||||||
currentJob->setStatus(util::ServiceJobStatus::COMPLETED);
|
currentJob->setStatus(util::ServiceJobStatus::IN_PROGRESS);
|
||||||
jobStatusUpdated = true;
|
jobStatusUpdated = true;
|
||||||
}
|
}
|
||||||
|
else if (currentJob->getStatus() == util::ServiceJobStatus::IN_PROGRESS)
|
||||||
|
{
|
||||||
|
currentJob->setStatus(util::ServiceJobStatus::COMPLETED);
|
||||||
|
jobStatusUpdated = true;
|
||||||
|
serviceBookingCompleted = hasCompletedAllJobs(currentJob->getBookingId(), currentAssignedJobs);
|
||||||
|
if (serviceBookingCompleted)
|
||||||
|
{
|
||||||
|
currentJob->getBooking()->setStatus(util::ServiceJobStatus::COMPLETED);
|
||||||
|
paymentManagementService.generateInvoice(currentJob->getBooking());
|
||||||
|
std::string title = "Service Booking completed. Invoice Generated.";
|
||||||
|
std::string message = "Services completed for the booking and invoice generated.";
|
||||||
|
sendNotification(currentJob->getBooking()->getCustomer(), title, message);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw std::runtime_error("Failed to complete the job, some error occurred or job already completed.");
|
throw std::runtime_error("Failed to update job status. Job may already be completed.");
|
||||||
}
|
}
|
||||||
if (!jobStatusUpdated)
|
if (!jobStatusUpdated)
|
||||||
{
|
{
|
||||||
throw std::runtime_error("Failed to complete the job, some error occurred or job already completed.");
|
throw std::runtime_error("Failed to update job status. Job may already be completed.");
|
||||||
}
|
|
||||||
|
|
||||||
serviceBookingCompleted = hasCompletedAllJobs(currentJob->getBookingId(), currentAssignedJobs);
|
|
||||||
if (serviceBookingCompleted)
|
|
||||||
{
|
|
||||||
currentJob->getBooking()->setStatus(util::ServiceJobStatus::COMPLETED);
|
|
||||||
paymentManagementService.generateInvoice(currentJob->getBooking());
|
|
||||||
std::string title = "Service Booking completed. Invoice Generated.";
|
|
||||||
std::string message = "Services completed for the booking and invoice generated.";
|
|
||||||
sendNotification(currentJob->getBooking()->getCustomer(), title, message);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-1
@@ -37,7 +37,7 @@ public:
|
|||||||
void createService(const std::string& name, const util::Vector<std::string>& inventoryItemIDs, double laborCost);
|
void createService(const std::string& name, const util::Vector<std::string>& inventoryItemIDs, double laborCost);
|
||||||
void removeService(const std::string& serviceID);
|
void removeService(const std::string& serviceID);
|
||||||
util::Map<std::string, JobCard*> getJobCards(const std::string& technicianID);
|
util::Map<std::string, JobCard*> getJobCards(const std::string& technicianID);
|
||||||
void completeJob(const std::string& jobID);
|
void updateJobStatus(const std::string& jobID);
|
||||||
void cancelCustomerServiceBookings(const std::string& customerID);
|
void cancelCustomerServiceBookings(const std::string& customerID);
|
||||||
void cancelTechnicianJobs(const std::string& technicianID);
|
void cancelTechnicianJobs(const std::string& technicianID);
|
||||||
void createComboPackage(const std::string& packageName, const util::Vector<std::string>& serviceIDs, double discountPercentage);
|
void createComboPackage(const std::string& packageName, const util::Vector<std::string>& serviceIDs, double discountPercentage);
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ namespace util
|
|||||||
PENDING,
|
PENDING,
|
||||||
STARTED,
|
STARTED,
|
||||||
COMPLETED,
|
COMPLETED,
|
||||||
|
IN_PROGRESS,
|
||||||
CANCELLED
|
CANCELLED
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -209,6 +210,8 @@ namespace util
|
|||||||
return "COMPLETED";
|
return "COMPLETED";
|
||||||
case ServiceJobStatus::CANCELLED:
|
case ServiceJobStatus::CANCELLED:
|
||||||
return "CANCELLED";
|
return "CANCELLED";
|
||||||
|
case ServiceJobStatus::IN_PROGRESS:
|
||||||
|
return "IN_PROGRESS";
|
||||||
}
|
}
|
||||||
throw std::invalid_argument("Invalid ServiceJobStatus");
|
throw std::invalid_argument("Invalid ServiceJobStatus");
|
||||||
}
|
}
|
||||||
@@ -241,6 +244,10 @@ namespace util
|
|||||||
{
|
{
|
||||||
return ServiceJobStatus::CANCELLED;
|
return ServiceJobStatus::CANCELLED;
|
||||||
}
|
}
|
||||||
|
if (value == "IN_PROGRESS")
|
||||||
|
{
|
||||||
|
return ServiceJobStatus::IN_PROGRESS;
|
||||||
|
}
|
||||||
throw std::invalid_argument("Invalid ServiceJobStatus string");
|
throw std::invalid_argument("Invalid ServiceJobStatus string");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -627,7 +627,6 @@ inline void displayInvoices(util::Map<std::string, const Invoice*> currentUserIn
|
|||||||
std::cout << "Unable to fetch the selected invoice\n";
|
std::cout << "Unable to fetch the selected invoice\n";
|
||||||
doRun = false;
|
doRun = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
} while (doRun);
|
} while (doRun);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -646,7 +645,35 @@ inline util::Map<std::string, const JobCard*> filterStartedJobCards(util::Map<st
|
|||||||
for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++)
|
for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++)
|
||||||
{
|
{
|
||||||
const JobCard* currentJobCard = assignedJobCards.getValueAt(iterator);
|
const JobCard* currentJobCard = assignedJobCards.getValueAt(iterator);
|
||||||
if (currentJobCard && currentJobCard->getStatus() == util::ServiceJobStatus::STARTED)
|
if (currentJobCard && (currentJobCard->getStatus() == util::ServiceJobStatus::STARTED || currentJobCard->getStatus() == util::ServiceJobStatus::IN_PROGRESS))
|
||||||
|
{
|
||||||
|
startedJobCards.insert(currentJobCard->getId(), currentJobCard);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return startedJobCards;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Function: filterJobCards
|
||||||
|
Description:
|
||||||
|
Filters the given list of job cards and returns only those
|
||||||
|
whose status matches the specified ServiceJobStatus.
|
||||||
|
Parameters:
|
||||||
|
- assignedJobCards: util::Map<std::string, const JobCard*>&
|
||||||
|
Map of job card IDs to JobCard pointers assigned to the technician.
|
||||||
|
- selectedJobStatus: util::ServiceJobStatus
|
||||||
|
The status type to filter job cards by.
|
||||||
|
Returns:
|
||||||
|
- util::Map<std::string, const JobCard*>
|
||||||
|
A map containing only job cards with the specified status.
|
||||||
|
*/
|
||||||
|
inline util::Map<std::string, const JobCard*> filterJobCards(util::Map<std::string, const JobCard*>& assignedJobCards, util::ServiceJobStatus selectedJobStatus)
|
||||||
|
{
|
||||||
|
util::Map<std::string, const JobCard*> startedJobCards;
|
||||||
|
for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++)
|
||||||
|
{
|
||||||
|
const JobCard* currentJobCard = assignedJobCards.getValueAt(iterator);
|
||||||
|
if (currentJobCard && currentJobCard->getStatus() == selectedJobStatus)
|
||||||
{
|
{
|
||||||
startedJobCards.insert(currentJobCard->getId(), currentJobCard);
|
startedJobCards.insert(currentJobCard->getId(), currentJobCard);
|
||||||
}
|
}
|
||||||
@@ -675,16 +702,18 @@ inline void displayAllJobs(util::Map<std::string, const JobCard*>& assignedJobCa
|
|||||||
<< std::setw(12) << "JobID"
|
<< std::setw(12) << "JobID"
|
||||||
<< std::setw(20) << "ServiceName"
|
<< std::setw(20) << "ServiceName"
|
||||||
<< std::setw(12) << "ServiceID"
|
<< std::setw(12) << "ServiceID"
|
||||||
|
<< std::setw(12) << "Status"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++)
|
for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++)
|
||||||
{
|
{
|
||||||
const JobCard* currentJobCard = assignedJobCards.getValueAt(iterator);
|
const JobCard* currentJobCard = assignedJobCards.getValueAt(iterator);
|
||||||
if (currentJobCard && (currentJobCard->getStatus() == util::ServiceJobStatus::STARTED))
|
if (currentJobCard && (currentJobCard->getStatus() == util::ServiceJobStatus::STARTED || currentJobCard->getStatus() == util::ServiceJobStatus::IN_PROGRESS))
|
||||||
{
|
{
|
||||||
std::cout << std::left << std::setw(12) << currentJobCard->getBookingId()
|
std::cout << std::left << std::setw(12) << currentJobCard->getBookingId()
|
||||||
<< std::setw(12) << currentJobCard->getId()
|
<< std::setw(12) << currentJobCard->getId()
|
||||||
<< std::setw(20) << currentJobCard->getService()->getName()
|
<< std::setw(20) << util::truncateString(currentJobCard->getService()->getName(), 15)
|
||||||
<< std::setw(12) << currentJobCard->getServiceId()
|
<< std::setw(12) << currentJobCard->getServiceId()
|
||||||
|
<< std::setw(12) << util::getServiceJobStatusString(currentJobCard->getStatus())
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -698,16 +727,31 @@ Parameters:
|
|||||||
Returns:
|
Returns:
|
||||||
- std::string: ID of the selected job card, or empty string if none selected
|
- std::string: ID of the selected job card, or empty string if none selected
|
||||||
*/
|
*/
|
||||||
inline std::string selectJobCardToComplete(util::Map<std::string, const JobCard*>& assignedJobCards)
|
inline std::string selectJobCardToUpdate(util::Map<std::string, const JobCard*>& assignedJobCards, util::ServiceJobStatus selectedJobStatusType)
|
||||||
{
|
{
|
||||||
util::Map<int, const JobCard* > incompleteJobCards;
|
util::Map<int, const JobCard* > incompleteJobCards;
|
||||||
if (assignedJobCards.getSize() == 0)
|
if (assignedJobCards.getSize() == 0)
|
||||||
{
|
{
|
||||||
std::cout << "No started jobs available to complete.\n";
|
std::cout << "No jobs available.\n\n";
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
int currentIndex = 1;
|
int currentIndex = 1;
|
||||||
int choice;
|
int choice;
|
||||||
|
if (selectedJobStatusType == util::ServiceJobStatus::STARTED)
|
||||||
|
{
|
||||||
|
util::clear();
|
||||||
|
std::cout << "Select a job to update to Inprogress\n";
|
||||||
|
}
|
||||||
|
else if (selectedJobStatusType == util::ServiceJobStatus::IN_PROGRESS)
|
||||||
|
{
|
||||||
|
util::clear();
|
||||||
|
std::cout << "Select a job to update to Completed\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cout << "Unable to update completed or pending jobs.\n\n";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
std::cout << std::left
|
std::cout << std::left
|
||||||
<< std::setw(6) << "Index"
|
<< std::setw(6) << "Index"
|
||||||
@@ -715,22 +759,24 @@ inline std::string selectJobCardToComplete(util::Map<std::string, const JobCard*
|
|||||||
<< std::setw(12) << "JobID"
|
<< std::setw(12) << "JobID"
|
||||||
<< std::setw(20) << "ServiceName"
|
<< std::setw(20) << "ServiceName"
|
||||||
<< std::setw(12) << "ServiceID"
|
<< std::setw(12) << "ServiceID"
|
||||||
|
<< std::setw(12) << "JobStatus"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++)
|
for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++)
|
||||||
{
|
{
|
||||||
const JobCard* currentJobCard = assignedJobCards.getValueAt(iterator);
|
const JobCard* currentJobCard = assignedJobCards.getValueAt(iterator);
|
||||||
if (currentJobCard && (currentJobCard->getStatus() == util::ServiceJobStatus::STARTED))
|
if (currentJobCard && (currentJobCard->getStatus() == selectedJobStatusType))
|
||||||
{
|
{
|
||||||
std::cout << std::left << std::setw(6) << currentIndex
|
std::cout << std::left << std::setw(6) << currentIndex
|
||||||
<< std::setw(12) << currentJobCard->getBookingId()
|
<< std::setw(12) << currentJobCard->getBookingId()
|
||||||
<< std::setw(12) << currentJobCard->getId()
|
<< std::setw(12) << currentJobCard->getId()
|
||||||
<< std::setw(20) << currentJobCard->getService()->getName()
|
<< std::setw(20) << util::truncateString(currentJobCard->getService()->getName(), 15)
|
||||||
<< std::setw(12) << currentJobCard->getServiceId()
|
<< std::setw(12) << currentJobCard->getServiceId()
|
||||||
|
<< std::setw(12) << util::getServiceJobStatusString(currentJobCard->getStatus())
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
incompleteJobCards.insert(currentIndex++, currentJobCard);
|
incompleteJobCards.insert(currentIndex++, currentJobCard);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::cout << "Select the Job Card to complete (Index): ";
|
std::cout << "Select the Job Card to Update (Index): ";
|
||||||
util::read(choice);
|
util::read(choice);
|
||||||
int selectedJobCardIndex = incompleteJobCards.find(choice);
|
int selectedJobCardIndex = incompleteJobCards.find(choice);
|
||||||
if (selectedJobCardIndex != -1)
|
if (selectedJobCardIndex != -1)
|
||||||
@@ -741,7 +787,7 @@ inline std::string selectJobCardToComplete(util::Map<std::string, const JobCard*
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::cout << "Invalid index.\n";
|
std::cout << "Invalid index.\n";
|
||||||
std::cout << "Failed to complete jobs.\n\n";
|
std::cout << "Failed to update job.\n\n";
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+31
-12
@@ -35,7 +35,7 @@ void TechnicianMenu::showMenu()
|
|||||||
util::clear();
|
util::clear();
|
||||||
std::cout << "Technician Menu"
|
std::cout << "Technician Menu"
|
||||||
<< "\n1. Display My Jobs"
|
<< "\n1. Display My Jobs"
|
||||||
<< "\n2. Mark Job as Completed"
|
<< "\n2. Update Job Status"
|
||||||
<< "\n3. View Notifications"
|
<< "\n3. View Notifications"
|
||||||
<< "\n4. Change Password"
|
<< "\n4. Change Password"
|
||||||
<< "\n5. Logout"
|
<< "\n5. Logout"
|
||||||
@@ -68,7 +68,7 @@ bool TechnicianMenu::handleOperation(int choice)
|
|||||||
displayJobs();
|
displayJobs();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
completeJob();
|
updateJobStatus();
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
viewNotifications();
|
viewNotifications();
|
||||||
@@ -99,31 +99,50 @@ void TechnicianMenu::displayJobs()
|
|||||||
util::clear();
|
util::clear();
|
||||||
std::cout << "My Jobs\n";
|
std::cout << "My Jobs\n";
|
||||||
util::Map<std::string, const JobCard*> assignedJobCards = m_controller.getJobCardsByUser();
|
util::Map<std::string, const JobCard*> assignedJobCards = m_controller.getJobCardsByUser();
|
||||||
util::Map<std::string, const JobCard*> startedJobCards = filterStartedJobCards(assignedJobCards);
|
util::Map<std::string, const JobCard*> jobCards = filterStartedJobCards(assignedJobCards);
|
||||||
displayAllJobs(startedJobCards);
|
displayAllJobs(jobCards);
|
||||||
util::pressEnter();
|
util::pressEnter();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Function: completeJob
|
Function: updateJobStatus
|
||||||
Description: Allows the technician to mark a selected job card as completed.
|
Description: Allows the technician to update a selected job card.
|
||||||
Validates selection and updates job status through the controller.
|
Validates selection and updates job status through the controller.
|
||||||
Parameters:
|
Parameters:
|
||||||
- None
|
- None
|
||||||
Returns:
|
Returns:
|
||||||
- void
|
- void
|
||||||
*/
|
*/
|
||||||
void TechnicianMenu::completeJob()
|
void TechnicianMenu::updateJobStatus()
|
||||||
{
|
{
|
||||||
util::clear();
|
util::clear();
|
||||||
std::cout << "Complete Job\n";
|
std::cout << "Update Job Status\n";
|
||||||
|
int choice;
|
||||||
|
std::string selectedJobID;
|
||||||
|
util::ServiceJobStatus selectedJobStatus = util::ServiceJobStatus::PENDING;
|
||||||
util::Map<std::string, const JobCard*> assignedJobCards = m_controller.getJobCardsByUser();
|
util::Map<std::string, const JobCard*> assignedJobCards = m_controller.getJobCardsByUser();
|
||||||
util::Map<std::string, const JobCard*> startedJobCards = filterStartedJobCards(assignedJobCards);
|
std::cout << "Select the type of job you want to update\n1.Started\n2.Inprogress\nChoice: ";
|
||||||
std::string selectedJobID = selectJobCardToComplete(startedJobCards);
|
util::read(choice);
|
||||||
|
if (choice == 1)
|
||||||
|
{
|
||||||
|
selectedJobStatus = util::ServiceJobStatus::STARTED;
|
||||||
|
}
|
||||||
|
else if (choice == 2)
|
||||||
|
{
|
||||||
|
selectedJobStatus = util::ServiceJobStatus::IN_PROGRESS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cout << "Invalid choice. Please try again.\n";
|
||||||
|
util::pressEnter();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
util::Map<std::string, const JobCard*> selectedTypeJobCard = filterJobCards(assignedJobCards, selectedJobStatus);
|
||||||
|
selectedJobID = selectJobCardToUpdate(selectedTypeJobCard, selectedJobStatus);
|
||||||
if (!selectedJobID.empty())
|
if (!selectedJobID.empty())
|
||||||
{
|
{
|
||||||
m_controller.completeJob(selectedJobID);
|
m_controller.updateJobStatus(selectedJobID);
|
||||||
std::cout << "\nJob marked as completed.\n\n";
|
std::cout << "\nJob status updated.\n\n";
|
||||||
}
|
}
|
||||||
util::pressEnter();
|
util::pressEnter();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ private:
|
|||||||
public:
|
public:
|
||||||
void showMenu();
|
void showMenu();
|
||||||
void displayJobs();
|
void displayJobs();
|
||||||
void completeJob();
|
void updateJobStatus();
|
||||||
void viewNotifications();
|
void viewNotifications();
|
||||||
void logout();
|
void logout();
|
||||||
void changePassword();
|
void changePassword();
|
||||||
|
|||||||
@@ -27,4 +27,4 @@ public:
|
|||||||
void run();
|
void run();
|
||||||
void login();
|
void login();
|
||||||
void registerCustomer();
|
void registerCustomer();
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user