From 2ea77bf9b6a445ba53fbff2cfe609e4b0c35afc1 Mon Sep 17 00:00:00 2001 From: Jissin Mathew Date: Fri, 29 May 2026 13:18:11 +0530 Subject: [PATCH 1/2] Implement Update Job Status for technician MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SER1798: Update Job Status 1. Renamed Controller and ServiceManagementService methods from completeJob to updateJobStatus for clarity and flexibility. 2. Enhanced ServiceManagementService::updateJobStatus to support transitions: - STARTED → INPROGRESS - INPROGRESS → COMPLETED (with invoice generation and customer notification). 3. Added INPROGRESS state to ServiceJobStatus enum and updated string conversion utilities. 4. Introduced filterJobCards helper to generalize job filtering by status. 5. Updated TechnicianMenu to allow technicians to select job type (Started/Inprogress) and update status accordingly. 6. Improved job display to show current status and truncated service names for readability. Acceptance Criteria: 1. Technician can select a job with status STARTED and update it to INPROGRESS. 2. Technician can select a job with status INPROGRESS and update it to COMPLETED. 3. Completed bookings automatically generate invoices and send notifications to customers. 4. Job status updates are reflected in the technician’s job list and customer view. Precondition: 1. Technician is logged into the system. 2. Assigned job cards exist with valid statuses (STARTED or INPROGRESS). 3. Datastore and payment service are available. Steps: 1. Navigate to Technician menu and choose "Update Job Status". - Verify that the system prompts for job type selection (Started/Inprogress). 2. Select a job card from the filtered list. - Verify that the job card details are displayed with status. 3. Confirm update. - Verify that the job status changes correctly. 4. For jobs updated to COMPLETED: - Verify that the booking status is updated, invoice is generated, and notification is sent. Sreeja Reghukumar, please review #1798 --- .../controllers/Controller.cpp | 4 +- .../controllers/Controller.h | 2 +- .../services/ServiceManagementService.cpp | 34 ++++++---- .../services/ServiceManagementService.h | 2 +- .../utilities/Enums.h | 7 ++ .../views/MenuHelper.h | 67 ++++++++++++++++--- .../views/TechnicianMenu.cpp | 41 ++++++++---- .../views/TechnicianMenu.h | 2 +- .../views/UserInterface.h | 2 +- 9 files changed, 120 insertions(+), 41 deletions(-) diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp index 3b674ed..d27635e 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp @@ -392,9 +392,9 @@ Parameters: Returns: - void */ -void Controller::completeJob(const std::string& jobID) +void Controller::updateJobStatus(const std::string& jobID) { - m_serviceManagementService.completeJob(jobID); + m_serviceManagementService.updateJobStatus(jobID); } /* diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h index e75ebd4..a0a70bc 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h @@ -59,7 +59,7 @@ public: void createService(const std::string& name, const util::Vector& inventoryItemIDs, double laborCost); void removeService(const std::string& serviceID); util::Map getJobCardsByUser(); - void completeJob(const std::string& jobID); + void updateJobStatus(const std::string& jobID); void removeUser(const std::string& userID); void createComboPackage(const std::string& name, const util::Vector& serviceIDs, double discountPercentage); void removeComboPackage(const std::string& comboPackageID); diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp index 5cd870b..0308ced 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp @@ -1080,7 +1080,7 @@ static bool hasCompletedAllJobs(std::string bookingId, util::MapgetBookingId() == bookingId) { - if (currentJob->getStatus() == util::ServiceJobStatus::STARTED) + if (currentJob->getStatus() == util::ServiceJobStatus::STARTED || currentJob->getStatus() == util::ServiceJobStatus::INPROGRESS) { return false; } @@ -1101,7 +1101,7 @@ Returns: 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; PaymentManagementService paymentManagementService; @@ -1126,26 +1126,32 @@ void ServiceManagementService::completeJob(const std::string& jobID) } if (currentJob->getStatus() == util::ServiceJobStatus::STARTED) { - currentJob->setStatus(util::ServiceJobStatus::COMPLETED); + currentJob->setStatus(util::ServiceJobStatus::INPROGRESS); jobStatusUpdated = true; } + else if (currentJob->getStatus() == util::ServiceJobStatus::INPROGRESS) + { + 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 { - throw std::runtime_error("Failed to complete the job, some error occurred or job already completed."); + throw std::runtime_error("Failed to update the job."); } 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 the job"); } - 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); - } + } \ No newline at end of file diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.h index 2fdcc93..b2a4384 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.h @@ -37,7 +37,7 @@ public: void createService(const std::string& name, const util::Vector& inventoryItemIDs, double laborCost); void removeService(const std::string& serviceID); util::Map getJobCards(const std::string& technicianID); - void completeJob(const std::string& jobID); + void updateJobStatus(const std::string& jobID); void cancelCustomerServiceBookings(const std::string& customerID); void cancelTechnicianJobs(const std::string& technicianID); void createComboPackage(const std::string& packageName, const util::Vector& serviceIDs, double discountPercentage); diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h index 16490f1..01c4660 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h @@ -37,6 +37,7 @@ namespace util PENDING, STARTED, COMPLETED, + INPROGRESS, CANCELLED }; @@ -209,6 +210,8 @@ namespace util return "COMPLETED"; case ServiceJobStatus::CANCELLED: return "CANCELLED"; + case ServiceJobStatus::INPROGRESS: + return "INPROGRESS"; } throw std::invalid_argument("Invalid ServiceJobStatus"); } @@ -241,6 +244,10 @@ namespace util { return ServiceJobStatus::CANCELLED; } + if (value == "INPROGRESS") + { + return ServiceJobStatus::INPROGRESS; + } throw std::invalid_argument("Invalid ServiceJobStatus string"); } diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h index f65c1f4..5cabad3 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h @@ -646,7 +646,37 @@ inline util::Map filterStartedJobCards(util::MapgetStatus() == util::ServiceJobStatus::STARTED) + if (currentJobCard && (currentJobCard->getStatus() == util::ServiceJobStatus::STARTED || currentJobCard->getStatus() == util::ServiceJobStatus::INPROGRESS)) + { + 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& + 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 + A map containing only job cards with the specified status. +*/ +inline util::Map filterJobCards(util::Map& assignedJobCards, util::ServiceJobStatus selectedJobStatus) +{ + util::Map 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); } @@ -675,16 +705,18 @@ inline void displayAllJobs(util::Map& assignedJobCa << std::setw(12) << "JobID" << std::setw(20) << "ServiceName" << std::setw(12) << "ServiceID" + << std::setw(12) << "Status" << std::endl; for (int iterator = 0; iterator < assignedJobCards.getSize(); 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::INPROGRESS)) { std::cout << std::left << std::setw(12) << currentJobCard->getBookingId() << 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) << util::getServiceJobStatusString(currentJobCard->getStatus()) << std::endl; } } @@ -698,16 +730,31 @@ Parameters: Returns: - std::string: ID of the selected job card, or empty string if none selected */ -inline std::string selectJobCardToComplete(util::Map& assignedJobCards) +inline std::string selectJobCardToUpdate(util::Map& assignedJobCards, util::ServiceJobStatus selectedJobStatusType) { util::Map incompleteJobCards; if (assignedJobCards.getSize() == 0) { - std::cout << "No started jobs available to complete.\n"; + std::cout << "No jobs available.\n\n"; return ""; } int currentIndex = 1; int choice; + if (selectedJobStatusType == util::ServiceJobStatus::STARTED) + { + util::clear(); + std::cout << "Select a job to update to Inprogress\n"; + } + else if (selectedJobStatusType == util::ServiceJobStatus::INPROGRESS) + { + 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::left << std::setw(6) << "Index" @@ -715,22 +762,24 @@ inline std::string selectJobCardToComplete(util::MapgetStatus() == util::ServiceJobStatus::STARTED)) + if (currentJobCard && (currentJobCard->getStatus() == selectedJobStatusType)) { std::cout << std::left << std::setw(6) << currentIndex << std::setw(12) << currentJobCard->getBookingId() << 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) << util::getServiceJobStatusString(currentJobCard->getStatus()) << std::endl; 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); int selectedJobCardIndex = incompleteJobCards.find(choice); if (selectedJobCardIndex != -1) @@ -741,7 +790,7 @@ inline std::string selectJobCardToComplete(util::Map assignedJobCards = m_controller.getJobCardsByUser(); - util::Map startedJobCards = filterStartedJobCards(assignedJobCards); - displayAllJobs(startedJobCards); + util::Map jobCards = filterStartedJobCards(assignedJobCards); + displayAllJobs(jobCards); util::pressEnter(); } /* -Function: completeJob -Description: Allows the technician to mark a selected job card as completed. +Function: updateJobStatus +Description: Allows the technician to update a selected job card. Validates selection and updates job status through the controller. Parameters: - None Returns: - void */ -void TechnicianMenu::completeJob() +void TechnicianMenu::updateJobStatus() { util::clear(); - std::cout << "Complete Job\n"; + std::cout << "Update Job Status\n"; + int choice; + std::string selectedJobID; + util::ServiceJobStatus selectedJobStatus; util::Map assignedJobCards = m_controller.getJobCardsByUser(); - util::Map startedJobCards = filterStartedJobCards(assignedJobCards); - std::string selectedJobID = selectJobCardToComplete(startedJobCards); + std::cout << "Select the type of job you want to update\n1.Started\n2.Inprogress\nChoice: "; + util::read(choice); + if (choice == 1) + { + selectedJobStatus = util::ServiceJobStatus::STARTED; + } + else if (choice == 2) + { + selectedJobStatus = util::ServiceJobStatus::INPROGRESS; + } + else + { + throw std::runtime_error("Invalid Index"); + } + util::Map selectedTypeJobCard = filterJobCards(assignedJobCards, selectedJobStatus); + selectedJobID = selectJobCardToUpdate(selectedTypeJobCard, selectedJobStatus); if (!selectedJobID.empty()) { - m_controller.completeJob(selectedJobID); - std::cout << "\nJob marked as completed.\n\n"; + m_controller.updateJobStatus(selectedJobID); + std::cout << "\nJob status updated.\n\n"; } util::pressEnter(); } diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.h index d0c5ca9..a17ccb1 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.h @@ -18,7 +18,7 @@ private: public: void showMenu(); void displayJobs(); - void completeJob(); + void updateJobStatus(); void viewNotifications(); void logout(); void changePassword(); diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.h index 501cfce..4a485de 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.h @@ -27,4 +27,4 @@ public: void run(); void login(); void registerCustomer(); -}; +}; \ No newline at end of file From 70ec47df04d6537369e025a641d433c8a9f5540a Mon Sep 17 00:00:00 2001 From: Jissin Mathew Date: Mon, 1 Jun 2026 12:17:35 +0530 Subject: [PATCH 2/2] Fix review comments --- .../services/ServiceManagementService.cpp | 29 +++++++++---------- .../utilities/Enums.h | 10 +++---- .../views/MenuHelper.h | 9 ++---- .../views/TechnicianMenu.cpp | 8 +++-- 4 files changed, 27 insertions(+), 29 deletions(-) diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp index 0308ced..f6d3905 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp @@ -1080,7 +1080,7 @@ static bool hasCompletedAllJobs(std::string bookingId, util::MapgetBookingId() == bookingId) { - if (currentJob->getStatus() == util::ServiceJobStatus::STARTED || currentJob->getStatus() == util::ServiceJobStatus::INPROGRESS) + if (currentJob->getStatus() != util::ServiceJobStatus::COMPLETED && currentJob->getStatus() != util::ServiceJobStatus::CANCELLED) { return false; } @@ -1090,16 +1090,17 @@ static bool hasCompletedAllJobs(std::string bookingId, util::MapgetStatus() == util::ServiceJobStatus::STARTED) { - currentJob->setStatus(util::ServiceJobStatus::INPROGRESS); + currentJob->setStatus(util::ServiceJobStatus::IN_PROGRESS); jobStatusUpdated = true; } - else if (currentJob->getStatus() == util::ServiceJobStatus::INPROGRESS) + else if (currentJob->getStatus() == util::ServiceJobStatus::IN_PROGRESS) { currentJob->setStatus(util::ServiceJobStatus::COMPLETED); jobStatusUpdated = true; @@ -1146,12 +1147,10 @@ void ServiceManagementService::updateJobStatus(const std::string& jobID) } else { - throw std::runtime_error("Failed to update the job."); + throw std::runtime_error("Failed to update job status. Job may already be completed."); } if (!jobStatusUpdated) { - throw std::runtime_error("Failed to update the job"); + throw std::runtime_error("Failed to update job status. Job may already be completed."); } - - } \ No newline at end of file diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h index 01c4660..c167b28 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h @@ -37,7 +37,7 @@ namespace util PENDING, STARTED, COMPLETED, - INPROGRESS, + IN_PROGRESS, CANCELLED }; @@ -210,8 +210,8 @@ namespace util return "COMPLETED"; case ServiceJobStatus::CANCELLED: return "CANCELLED"; - case ServiceJobStatus::INPROGRESS: - return "INPROGRESS"; + case ServiceJobStatus::IN_PROGRESS: + return "IN_PROGRESS"; } throw std::invalid_argument("Invalid ServiceJobStatus"); } @@ -244,9 +244,9 @@ namespace util { return ServiceJobStatus::CANCELLED; } - if (value == "INPROGRESS") + if (value == "IN_PROGRESS") { - return ServiceJobStatus::INPROGRESS; + return ServiceJobStatus::IN_PROGRESS; } throw std::invalid_argument("Invalid ServiceJobStatus string"); } diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h index 5cabad3..0a4136a 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h @@ -627,7 +627,6 @@ inline void displayInvoices(util::Map currentUserIn std::cout << "Unable to fetch the selected invoice\n"; doRun = false; } - } while (doRun); } } @@ -646,7 +645,7 @@ inline util::Map filterStartedJobCards(util::MapgetStatus() == util::ServiceJobStatus::STARTED || currentJobCard->getStatus() == util::ServiceJobStatus::INPROGRESS)) + if (currentJobCard && (currentJobCard->getStatus() == util::ServiceJobStatus::STARTED || currentJobCard->getStatus() == util::ServiceJobStatus::IN_PROGRESS)) { startedJobCards.insert(currentJobCard->getId(), currentJobCard); } @@ -659,13 +658,11 @@ Function: filterJobCards Description: Filters the given list of job cards and returns only those whose status matches the specified ServiceJobStatus. - Parameters: - assignedJobCards: util::Map& 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 A map containing only job cards with the specified status. @@ -710,7 +707,7 @@ inline void displayAllJobs(util::Map& assignedJobCa for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++) { const JobCard* currentJobCard = assignedJobCards.getValueAt(iterator); - if (currentJobCard && (currentJobCard->getStatus() == util::ServiceJobStatus::STARTED || currentJobCard->getStatus() == util::ServiceJobStatus::INPROGRESS)) + if (currentJobCard && (currentJobCard->getStatus() == util::ServiceJobStatus::STARTED || currentJobCard->getStatus() == util::ServiceJobStatus::IN_PROGRESS)) { std::cout << std::left << std::setw(12) << currentJobCard->getBookingId() << std::setw(12) << currentJobCard->getId() @@ -745,7 +742,7 @@ inline std::string selectJobCardToUpdate(util::Map& util::clear(); std::cout << "Select a job to update to Inprogress\n"; } - else if (selectedJobStatusType == util::ServiceJobStatus::INPROGRESS) + else if (selectedJobStatusType == util::ServiceJobStatus::IN_PROGRESS) { util::clear(); std::cout << "Select a job to update to Completed\n"; diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp index e358f88..5d125cc 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp @@ -119,7 +119,7 @@ void TechnicianMenu::updateJobStatus() std::cout << "Update Job Status\n"; int choice; std::string selectedJobID; - util::ServiceJobStatus selectedJobStatus; + util::ServiceJobStatus selectedJobStatus = util::ServiceJobStatus::PENDING; util::Map assignedJobCards = m_controller.getJobCardsByUser(); std::cout << "Select the type of job you want to update\n1.Started\n2.Inprogress\nChoice: "; util::read(choice); @@ -129,11 +129,13 @@ void TechnicianMenu::updateJobStatus() } else if (choice == 2) { - selectedJobStatus = util::ServiceJobStatus::INPROGRESS; + selectedJobStatus = util::ServiceJobStatus::IN_PROGRESS; } else { - throw std::runtime_error("Invalid Index"); + std::cout << "Invalid choice. Please try again.\n"; + util::pressEnter(); + return; } util::Map selectedTypeJobCard = filterJobCards(assignedJobCards, selectedJobStatus); selectedJobID = selectJobCardToUpdate(selectedTypeJobCard, selectedJobStatus);