diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp index b81074e..e7ee48a 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp @@ -42,15 +42,18 @@ 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. Logout" << "\nEnter a choice: "; util::read(choice); if (!handleOperation(choice)) @@ -92,30 +95,39 @@ 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: logout(); return false; default: @@ -383,6 +395,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 currentServices = m_controller.getServices(); + util::Map 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 +473,29 @@ 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: addTechnician Description: Adds a new technician after validating username, password, email, and phone number. @@ -507,12 +560,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 +579,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 currentComboPackages = m_controller.getComboPackages(); + util::Map currentActiveComboPackages = filterComboPackages(currentComboPackages); + displayAllComboPackages(currentActiveComboPackages); + util::pressEnter(); +} + /* Function: createComboPackages Description: Creates a new combo package by selecting two active services and applying a discount. diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.h index 8b1b31f..2fe2283 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.h @@ -24,10 +24,13 @@ public: void removeInventoryItem(); void checkStockAvailability(); void assignJob(); + void displayServices(); void createService(); void removeService(); + void displayUsers(); void addTechnician(); void removeUser(); + void displayComboPackages(); void createComboPackages(); void removeComboPackage(); void viewNotifications(); diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h index 53c15f4..f65c1f4 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h @@ -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, available services +Returns: + - void; +*/ +inline void displayAllServices(util::Map 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. @@ -619,12 +654,47 @@ inline util::Map filterStartedJobCards(util::Map&, 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& 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&, job cards assigned to the technician - - incompleteJobCards: util::Map&, 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 +914,14 @@ inline util::Map filterActiveUsers(const util::Map& activeUsers - active users list - int activeUserCount - number of active users Return type: void */ -inline void displayAllActiveUsers(util::Map& activeUsers, int activeUserCount) +inline void displayAllUsers(util::Map& activeUsers) { + int activeUserCount = activeUsers.getSize(); std::cout << std::left << std::setw(10) << "Index" << std::setw(15) << "User ID" << std::setw(25) << "Username" @@ -986,6 +1056,43 @@ inline util::Map filterComboPackages(util::Map return activeComboPackages; } +/* +Function: displayAllComboPackages +Description: Displays all active combo packages +Parameters: + - currentComboPackages: util::Map, available combo packages +Returns: + - void; +*/ +inline void displayAllComboPackages(util::Map 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 +1114,7 @@ inline const ComboPackage* selectComboPackageFromPackages(const util::MapgetState() != util::State::ACTIVE) + if (currentComboPackage && currentComboPackage->getState() != util::State::ACTIVE) { continue; } diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp index 38264bf..9ee3402 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp @@ -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 assignedJobCards = m_controller.getJobCardsByUser(); + util::Map startedJobCards = filterStartedJobCards(assignedJobCards); + displayAllJobs(startedJobCards); + util::pressEnter(); +} + /* Function: completeJob Description: Allows the technician to mark a selected job card as completed. diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.h index 3c7e9ed..d0c5ca9 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.h @@ -17,6 +17,7 @@ private: bool handleOperation(int choice); public: void showMenu(); + void displayJobs(); void completeJob(); void viewNotifications(); void logout();