diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp index c0478fc..591b342 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp @@ -26,7 +26,6 @@ Date:19-May-2026 #include "User.h" #include "UserManagementService.h" #include "Utility.h" -#include "ComboPackage.h" /* Function: purchaseService diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h index a4cfe33..08b8bba 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h @@ -488,6 +488,28 @@ inline void displayInvoices(util::Map currentUserIn util::pressEnter(); } +/* +Function: filterStartedJobCards +Description: Filters the given list of job cards and returns only those with status STARTED. +Parameters: + - assignedJobCards: Map of job card IDs to JobCard pointers. +Returns: + - util::Map containing only job cards with status STARTED. +*/ +inline util::Map filterStartedJobCards(util::Map assignedJobCards) +{ + util::Map startedJobCards; + for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++) + { + const JobCard* currentJobCard = assignedJobCards.getValueAt(iterator); + if (currentJobCard && currentJobCard->getStatus() == util::ServiceJobStatus::STARTED) + { + startedJobCards.insert(currentJobCard->getId(), currentJobCard); + } + } + return startedJobCards; +} + /* Function: selectJobCardToComplete Description: Lists all incomplete job cards assigned to the technician and allows selection by index. @@ -497,49 +519,50 @@ Parameters: Returns: - std::string: ID of the selected job card, or empty string if none selected */ -inline std::string selectJobCardToComplete(util::Map& assignedJobCards, util::Map& incompleteJobCards) +inline std::string selectJobCardToComplete(util::Map& assignedJobCards) +{ + util::Map incompleteJobCards; + if (assignedJobCards.getSize() == 0) { - int currentIndex = 1; - int choice; - bool hasIncompleteJobCard = false; - std::cout << std::left - << std::setw(6) << "Index" - << 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++) + std::cout << "No started jobs present to complete\n\n"; + return ""; + } + int currentIndex = 1; + int choice; + std::cout << std::endl; + std::cout << std::left + << std::setw(6) << "Index" + << 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)) + const JobCard* currentJobCard = assignedJobCards.getValueAt(iterator); + if (currentJobCard && (currentJobCard->getStatus() == util::ServiceJobStatus::STARTED)) { - 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(12) << currentJobCard->getServiceId() - << std::endl; - hasIncompleteJobCard = true; - incompleteJobCards.insert(currentIndex++, currentJobCard); + 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(12) << currentJobCard->getServiceId() + << std::endl; + incompleteJobCards.insert(currentIndex++, currentJobCard); } } - if (!hasIncompleteJobCard) - { - std::cout << "No pending jobs are present.\n"; - return ""; - } - std::cout << "Select the Job Card to complete (Index): "; + std::cout << "Select the Job Card to complete (Index): "; util::read(choice); - int selectedJobCardIndex = incompleteJobCards.find(choice); - if (selectedJobCardIndex != -1) + int selectedJobCardIndex = incompleteJobCards.find(choice); + if (selectedJobCardIndex != -1) { - const JobCard* selectedJobCard = incompleteJobCards.getValueAt(selectedJobCardIndex); - return selectedJobCard->getId(); + const JobCard* selectedJobCard = incompleteJobCards.getValueAt(selectedJobCardIndex); + return selectedJobCard->getId(); } else { - std::cout << "Invalid index.\n"; + std::cout << "Invalid index.\n"; + std::cout << "Failed to complete jobs.\n\n"; return ""; } } diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp index d50c73e..38264bf 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp @@ -93,18 +93,15 @@ Returns: */ void TechnicianMenu::completeJob() { + util::clear(); + std::cout << "Complete Job\n"; util::Map assignedJobCards = m_controller.getJobCardsByUser(); - util::Map incompleteJobCards; - std::cout << "Jobs to be completed.\n"; - std::string selectedJobID = selectJobCardToComplete(assignedJobCards, incompleteJobCards); - if (selectedJobID == "") - { - std::cout << "Failed to complete the job.\n"; - } - else + util::Map startedJobCards = filterStartedJobCards(assignedJobCards); + std::string selectedJobID = selectJobCardToComplete(startedJobCards); + if (!selectedJobID.empty()) { m_controller.completeJob(selectedJobID); - std::cout << "Job marked as completed.\n"; + std::cout << "\nJob marked as completed.\n\n"; } util::pressEnter(); }