1179f92849
Changes: - Updated AdminMenu::handleNotificationEvent, CustomerMenu::handleNotificationEvent, and TechnicianMenu::handleNotificationEvent to retrieve the authenticated user and pass their name to displayNewNotification(). - Modified Menu::handleAccountDisabledEvent to append the authenticated user’s name to the message box title when available. - Refactored displayNewNotification() in MenuHelper.h to accept the authenticated user’s name as an additional parameter. - Enhanced notification display logic to append the user’s name to the notification title when present. - Added null checks to ensure safe handling when no authenticated user exists. FIxes #2080
215 lines
5.2 KiB
C++
215 lines
5.2 KiB
C++
/*
|
|
File: TechnicianMenu.cpp
|
|
Description: Implementation file containing the method definitions of the
|
|
TechnicianMenu class, including menu handling, job completion,
|
|
notification viewing, password management, and logout logic.
|
|
Author: Trenser
|
|
Date:19-May-2026
|
|
*/
|
|
|
|
#include "Enums.h"
|
|
#include "InputHelper.h"
|
|
#include "JobCard.h"
|
|
#include "MenuHelper.h"
|
|
#include "OutputHelper.h"
|
|
#include "Service.h"
|
|
#include "TechnicianMenu.h"
|
|
#include "Validator.h"
|
|
|
|
/*
|
|
Function: showMenu
|
|
Description: Displays the technician menu in a loop until the user chooses to logout.
|
|
Handles exceptions and ensures smooth user interaction.
|
|
Parameters:
|
|
- None
|
|
Returns:
|
|
- void
|
|
*/
|
|
void TechnicianMenu::showMenu()
|
|
{
|
|
startEventListener();
|
|
while (true)
|
|
{
|
|
try
|
|
{
|
|
if (!m_isMenuActive)
|
|
{
|
|
logout();
|
|
break;
|
|
}
|
|
int choice;
|
|
util::clear();
|
|
std::cout << "Technician Menu"
|
|
<< "\n1. Display My Jobs"
|
|
<< "\n2. Update Job Status"
|
|
<< "\n3. View Notifications"
|
|
<< "\n4. Change Password"
|
|
<< "\n5. Logout"
|
|
<< "\nEnter a choice: ";
|
|
util::read(choice);
|
|
if (!handleOperation(choice))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
catch (const std::exception& e)
|
|
{
|
|
std::cout << "Exception: " << e.what() << std::endl;
|
|
util::pressEnter();
|
|
}
|
|
}
|
|
stopEventListener();
|
|
}
|
|
|
|
/*
|
|
Function: handleOperation
|
|
Description: Executes the corresponding technician operation based on the selected menu choice.
|
|
Parameter: int choice - selected menu option
|
|
Return type: bool - true if menu continues, false if logout
|
|
*/
|
|
bool TechnicianMenu::handleOperation(int choice)
|
|
{
|
|
if (!m_isMenuActive)
|
|
{
|
|
logout();
|
|
return false;
|
|
}
|
|
switch (choice)
|
|
{
|
|
case 1:
|
|
displayJobs();
|
|
break;
|
|
case 2:
|
|
updateJobStatus();
|
|
break;
|
|
case 3:
|
|
viewNotifications();
|
|
break;
|
|
case 4:
|
|
changePassword();
|
|
break;
|
|
case 5:
|
|
logout();
|
|
return false;
|
|
default:
|
|
std::cout << "Enter a valid choice!" << std::endl;
|
|
util::pressEnter();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
Function: handleNotificationEvent
|
|
Description: Retrieves and displays the latest notification for the
|
|
currently logged in admin.
|
|
Parameter: None
|
|
Return type: void
|
|
*/
|
|
void TechnicianMenu::handleNotificationEvent()
|
|
{
|
|
auto notifications = m_controller.getNotifications();
|
|
const User* authenticatedUser = m_controller.getAuthenticatedUser();
|
|
std::string name;
|
|
if (authenticatedUser)
|
|
{
|
|
name = authenticatedUser->getName();
|
|
}
|
|
displayNewNotification(notifications, name);
|
|
}
|
|
|
|
/*
|
|
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*> jobCards = filterStartedJobCards(assignedJobCards);
|
|
displayAllJobs(jobCards);
|
|
util::pressEnter();
|
|
}
|
|
|
|
/*
|
|
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::updateJobStatus()
|
|
{
|
|
util::clear();
|
|
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();
|
|
std::cout << "Select the type of job you want to update:\n1.Started\n2.In Progress\nChoice: ";
|
|
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())
|
|
{
|
|
m_controller.updateJobStatus(selectedJobID);
|
|
std::cout << "\nJob status updated.\n\n";
|
|
}
|
|
util::pressEnter();
|
|
}
|
|
|
|
/*
|
|
Function: viewNotifications
|
|
Description: Displays notifications for the technician and allows deletion of notifications.
|
|
Parameters:
|
|
- None
|
|
Returns:
|
|
- void
|
|
*/
|
|
void TechnicianMenu::viewNotifications()
|
|
{
|
|
viewAndDeleteNotification(m_controller);
|
|
}
|
|
|
|
/*
|
|
Function: logout
|
|
Description: Logs out the currently authenticated technician user.
|
|
Parameter: None
|
|
Return type: void
|
|
*/
|
|
void TechnicianMenu::logout()
|
|
{
|
|
m_controller.logout();
|
|
}
|
|
|
|
/*
|
|
Function: changePassword
|
|
Description: Allows the technician to change their password after validation.
|
|
Parameter: None
|
|
Return type: void
|
|
*/
|
|
|
|
void TechnicianMenu::changePassword()
|
|
{
|
|
changePasswordHelper(m_controller);
|
|
} |