From 47a9065c3bec5758828fd834814171c4206147b6 Mon Sep 17 00:00:00 2001 From: Ajmal Jalaludeen Date: Tue, 7 Apr 2026 20:11:20 +0530 Subject: [PATCH 1/3] Add Search Employee for All Users EMP006 : Search Employee - Added MenuHelper.cpp and MenuHelper.h helper files to project - Added searchEmployee method in ZenvyController returning employee type and list - Implemented search Employee logic in Employement Management Service - Connected searchEmployee to all the User Menu Smitha Mohan --- .../Trenser.Zenvy/Trenser.Zenvy.vcxproj | 2 + .../Trenser.Zenvy.vcxproj.filters | 6 + .../controllers/ZenvyController.cpp | 9 +- .../controllers/ZenvyController.h | 1 + .../services/EmployeeManagementService.cpp | 30 +++- .../services/EmployeeManagementService.h | 3 + Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h | 146 ++++++++++++++++++ .../Trenser.Zenvy/utilities/InputHelper.h | 1 - .../Trenser.Zenvy/views/AdminMenu.cpp | 16 +- Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h | 2 + .../Trenser.Zenvy/views/EmployeeMenu.cpp | 19 ++- .../Trenser.Zenvy/views/EmployeeMenu.h | 3 + .../views/FinanceExecutiveMenu.cpp | 18 ++- .../views/FinanceExecutiveMenu.h | 2 + .../Trenser.Zenvy/views/HRManagerMenu.cpp | 76 +++++---- .../Trenser.Zenvy/views/HRManagerMenu.h | 2 + .../Trenser.Zenvy/views/ITExecutiveMenu.cpp | 18 ++- .../Trenser.Zenvy/views/ITExecutiveMenu.h | 2 + .../Trenser.Zenvy/views/MenuHelper.cpp | 3 + .../Trenser.Zenvy/views/MenuHelper.h | 69 +++++++++ .../views/TalentExecutiveMenu.cpp | 82 +++++----- .../Trenser.Zenvy/views/TalentExecutiveMenu.h | 2 + .../Trenser.Zenvy/views/TeamExecutiveMenu.cpp | 88 ++++++----- .../Trenser.Zenvy/views/TeamExecutiveMenu.h | 2 + .../Trenser.Zenvy/views/TeamLeadMenu.cpp | 18 ++- .../Trenser.Zenvy/views/TeamLeadMenu.h | 2 + 26 files changed, 482 insertions(+), 140 deletions(-) create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj index 7b35079..3116d41 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj @@ -172,6 +172,7 @@ + @@ -222,6 +223,7 @@ + diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters index d9514f7..0def00c 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters @@ -192,6 +192,9 @@ Services + + Views + @@ -338,6 +341,9 @@ Services + + Views + diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp index e7f4e30..f02f774 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp @@ -27,10 +27,15 @@ bool ZenvyController::deactivateEmployee(const std::string& id) return m_employeeManagementService->deactivateEmployee(id); } -Employees EmployeeManagementService::getEmployees() +std::pair>> ZenvyController::searchEmployee(const std::string& name) +{ + m_employeeManagementService->searchEmployee(name); +} + +Employees ZenvyController::getEmployees() { } -std::shared_ptr EmployeeManagementService::getEmployee(const std::string& id) +std::shared_ptr ZenvyController::getEmployee(const std::string& id) { } diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h index 89ba319..2c8a260 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h @@ -49,4 +49,5 @@ public: bool deactivateEmployee(const std::string&); Employees getEmployees(); std::shared_ptr getEmployee(const std::string&); + std::pair>> searchEmployee(const std::string&); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp index 56e27b0..a825956 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp @@ -3,15 +3,39 @@ void EmployeeManagementService::createEmployee(Enums::EmployeeType, const std::string& email, const std::string& password, const std::string& name, const std::string& phone) { } - bool EmployeeManagementService::deactivateEmployee(const std::string& id) { } - Employees EmployeeManagementService::getEmployees() { } - std::shared_ptr EmployeeManagementService::getEmployee(const std::string& id) { } +std::pair>> EmployeeManagementService::searchEmployee(const std::string& name) +{ + std::shared_ptr currentUser = m_dataStore.getAuthenticatedEmployee(); + Enums::EmployeeType employeeType = currentUser->getEmployeeType(); + employeeMap& employees = m_dataStore.getEmployees(); + std::vector> employeeList; + if (employees.empty()) + { + return std::make_pair(employeeType, employeeList); + } + for (const auto& entry : employees) { + const auto& employee = entry.second; + if (!employee) + { + continue; // skip if pointer is null + } + std::string employeeName = employee->getEmployeeName(); + std::transform(employeeName.begin(), employeeName.end(), employeeName.begin(), ::tolower); + std::string searchName = name; + std::transform(searchName.begin(), searchName.end(), searchName.begin(), ::tolower); + if (employeeName == searchName) + { + employeeList.push_back(employee); + } + } + return { employeeType, employeeList }; +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h index 5ff7613..e355154 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h @@ -1,6 +1,8 @@ #pragma once #include #include +#include +#include #include "DataStore.h" #include "Enums.h" @@ -16,4 +18,5 @@ public: bool deactivateEmployee(const std::string&); Employees getEmployees(); std::shared_ptr getEmployee(const std::string&); + std::pair>> searchEmployee(const std::string&); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h index ace8792..bf70b93 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h @@ -1,4 +1,5 @@ #pragma once +#include namespace Enums { @@ -89,4 +90,149 @@ namespace Enums { USER_NOT_FOUND, INVALID_PASSWORD }; + + /*std::string getEmployeeType(EmployeeType type) + { + switch (type) + { + case EmployeeType::HR: + return "HR Manager"; + case EmployeeType::TEAM: + return "Team Executive"; + case EmployeeType::ADMIN: + return "Admin"; + case EmployeeType::IT: + return "IT Executive"; + case EmployeeType::FINANCE: + return "Finance Executive"; + case EmployeeType::TAG: + return "Talent Acquisition Executive"; + case EmployeeType::GENERAL: + return "General Employee"; + default: + return "Invalid"; + } + } + + std::string getTeamStatus(TeamStatus status) + { + + }*/ + + std::string getAccountStatus(AccountStatus status) { + switch (status) { + case AccountStatus::ACTIVE: return "Active"; + case AccountStatus::INACTIVE: return "Inactive"; + default: return "Unknown"; + } + } + + std::string getTeamStatus(TeamStatus status) { + switch (status) { + case TeamStatus::IN_TEAM: return "In Team"; + case TeamStatus::NOT_IN_TEAM: return "Not in Team"; + default: return "Unknown"; + } + } + + std::string getCandidateStatus(CandidateStatus status) { + switch (status) { + case CandidateStatus::PENDING: return "Pending"; + case CandidateStatus::SHORTLISTED: return "Shortlisted"; + case CandidateStatus::REJECTED: return "Rejected"; + default: return "Unknown"; + } + } + + std::string getNotificationStatus(NotificationStatus status) { + switch (status) { + case NotificationStatus::READ: return "Read"; + case NotificationStatus::UNREAD: return "Unread"; + default: return "Unknown"; + } + } + + std::string getLeaveStatus(LeaveStatus status) { + switch (status) { + case LeaveStatus::PENDING: return "Pending"; + case LeaveStatus::APPROVED: return "Approved"; + case LeaveStatus::REJECTED: return "Rejected"; + default: return "Unknown"; + } + } + + std::string getLeaveType(LeaveType type) { + switch (type) { + case LeaveType::GENERAL: return "General Leave"; + case LeaveType::MEDICAL: return "Medical Leave"; + case LeaveType::RESTRICTED: return "Restricted Leave"; + default: return "Unknown"; + } + } + + std::string getJobListingStatus(JobListingStatus status) { + switch (status) { + case JobListingStatus::OPEN: return "Open"; + case JobListingStatus::CLOSED: return "Closed"; + default: return "Unknown"; + } + } + + std::string getTicketStatus(TicketStatus status) { + switch (status) { + case TicketStatus::OPEN: return "Open"; + case TicketStatus::RESOLVED: return "Resolved"; + case TicketStatus::CLOSED: return "Closed"; + default: return "Unknown"; + } + } + + std::string getTicketType(TicketType type) { + switch (type) { + case TicketType::IT: return "IT"; + case TicketType::FINANCE: return "Finance"; + case TicketType::ATTENDANCE: return "Attendance"; + case TicketType::UNKNOWN: return "Unknown"; + default: return "Unknown"; + } + } + + std::string getEmployeeDesignation(EmployeeDesignation designation) { + switch (designation) { + case EmployeeDesignation::JUNIOR: return "Junior"; + case EmployeeDesignation::SENIOR: return "Senior"; + case EmployeeDesignation::TEAM_LEAD: return "Team Lead"; + case EmployeeDesignation::INVALID: return "Invalid"; + default: return "Unknown"; + } + } + + std::string getEmployeeType(EmployeeType type) { + switch (type) { + case EmployeeType::HR: return "HR Manager"; + case EmployeeType::TEAM: return "Team Executive"; + case EmployeeType::ADMIN: return "Admin"; + case EmployeeType::IT: return "IT Executive"; + case EmployeeType::FINANCE: return "Finance Executive"; + case EmployeeType::TAG: return "Talent Acquisition Executive"; + case EmployeeType::GENERAL: return "General Employee"; + case EmployeeType::INVALID: return "Invalid"; + default: return "Unknown"; + } + } + + std::string getLoginStatus(LoginStatus status) { + switch (status) { + case LoginStatus::SUCCESS: return "Login Success"; + case LoginStatus::FIRST_LOGIN: return "First Login"; + case LoginStatus::USER_NOT_FOUND: return "User Not Found"; + case LoginStatus::INVALID_PASSWORD: return "Invalid Password"; + default: return "Unknown"; + } + } +} + +namespace Enums { + + } diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h index 559acda..f7d3fbf 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h @@ -1,5 +1,4 @@ #pragma once - #include #include #include diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp index ecad349..9d902a8 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp @@ -1,7 +1,8 @@ #include #include "AdminMenu.h" -#include"InputHelper.h" -#include"OutputHelper.h" +#include "InputHelper.h" +#include "OutputHelper.h" +#include "MenuHelper.h" void AdminMenu::run() { @@ -44,9 +45,20 @@ bool AdminMenu::handleOperation(int choice) m_zenvyController.deactivateEmployee(); break;*/ case 5: + searchEmployee(); + break; + case 6: return false; default: std::cout << "Enter a valid choice!" << std::endl; } return true; +} + +void AdminMenu::searchEmployee() +{ + std::string name; + std::cout << "Enter Employee Name: "; + util::read(name); + searchTheEmployee(name, m_zenvyController); } \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h index dab23c5..89804bc 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h @@ -1,5 +1,6 @@ #pragma once #include +#include "MenuHelper.h" #include"ZenvyController.h" class AdminMenu @@ -10,5 +11,6 @@ public: AdminMenu() :m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); + void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp index 99e3bc0..b6ddedd 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp @@ -51,11 +51,11 @@ bool EmployeeMenu::handleOperation(int choice) break; case 7: m_zenvyController.viewEmployees(); - break; + break;*/ case 8: - m_zenvyController.searchEmployee(); + searchEmployee(); break; - case 9: + /*case 9: m_zenvyController.viewTeamMembers(); break; case 10: @@ -69,11 +69,18 @@ bool EmployeeMenu::handleOperation(int choice) break; case 13: m_zenvyController.viewAnnouncements(); - break;*/ + break; case 14: return false; default: - std::cout << "Enter a valid choice!" << std::endl; + std::cout << "Enter a valid choice!" << std::endl;*/ } return true; -} \ No newline at end of file +} +void EmployeeMenu::searchEmployee() +{ + std::string name; + std::cout << "Enter Employee Name: "; + util::read(name); + searchTheEmployee(name, m_zenvyController); +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h index f082b66..331dd9d 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h @@ -1,5 +1,7 @@ #pragma once #include +#include +#include "MenuHelper.h" #include"ZenvyController.h" class EmployeeMenu @@ -10,5 +12,6 @@ public: EmployeeMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); + void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp index 081d281..90b5a5c 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp @@ -42,11 +42,11 @@ bool FinanceExecutiveMenu::handleOperation(int choice) break; case 4: m_zenvyController.viewEmployees(); - break; + break;*/ case 5: - m_zenvyController.searchEmployee(); + searchEmployee(); break; - case 6: + /*case 6: m_zenvyController.viewNotifications(); break; case 7: @@ -60,11 +60,19 @@ bool FinanceExecutiveMenu::handleOperation(int choice) break; case 10: m_zenvyController.updatePayroll(); - break;*/ + break; case 11: return false; default: - std::cout << "Enter a valid choice!" << std::endl; + std::cout << "Enter a valid choice!" << std::endl;*/ } return true; } + +void FinanceExecutiveMenu::searchEmployee() +{ + std::string name; + std::cout << "Enter Employee Name: "; + util::read(name); + searchTheEmployee(name, m_zenvyController); +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h index 825322f..1da4e2f 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h @@ -1,5 +1,6 @@ #pragma once #include +#include "MenuHelper.h" #include"ZenvyController.h" class FinanceExecutiveMenu @@ -10,5 +11,6 @@ public: FinanceExecutiveMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); + void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp index 7bf812c..908b2b0 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp @@ -31,43 +31,51 @@ bool HRManagerMenu::handleOperation(int choice) { switch (choice) { - //case 1: - // m_zenvyController.applyLeave(); - // break; - //case 2: - // m_zenvyController.viewPayslip(); - // break; - //case 3: - // m_zenvyController.viewPayslipHistory(); - // break; - //case 4: - // m_zenvyController.viewEmployees(); - // break; - //case 5: - // m_zenvyController.searchEmployee(); - // break; - //case 6: - // m_zenvyController.viewNotifications(); - // break; - //case 7: - // m_zenvyController.viewAnnouncements(); - // break; - //case 8: - // m_zenvyController.createEmployee(); - // break; - //case 9: - // m_zenvyController.regularizeAttenance(); - // break; - //case 10: - // m_zenvyController.updateLeaveRequest(); - // break; - //case 11: - // m_zenvyController.registercandidateAsEmployee(); - // break; + /*case 1: + m_zenvyController.applyLeave(); + break; + case 2: + m_zenvyController.viewPayslip(); + break; + case 3: + m_zenvyController.viewPayslipHistory(); + break; + case 4: + m_zenvyController.viewEmployees(); + break;*/ + case 5: + searchEmployee(); + break; + /*case 6: + m_zenvyController.viewNotifications(); + break; + case 7: + m_zenvyController.viewAnnouncements(); + break; + case 8: + m_zenvyController.createEmployee(); + break; + case 9: + m_zenvyController.regularizeAttenance(); + break; + case 10: + m_zenvyController.updateLeaveRequest(); + break; + case 11: + m_zenvyController.registercandidateAsEmployee(); + break; case 12: return false; default: - std::cout << "Enter a valid choice!" << std::endl; + std::cout << "Enter a valid choice!" << std::endl;*/ } return true; } + +void HRManagerMenu::searchEmployee() +{ + std::string name; + std::cout << "Enter Employee Name: "; + util::read(name); + searchTheEmployee(name, m_zenvyController); +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h index 05e1f41..986137b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h @@ -1,5 +1,6 @@ #pragma once #include +#include "MenuHelper.h" #include"ZenvyController.h" class HRManagerMenu @@ -10,5 +11,6 @@ public: HRManagerMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); + void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp index 836ca39..b231f2f 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp @@ -42,11 +42,11 @@ bool ITExecutiveMenu::handleOperation(int choice) break; case 4: m_zenvyController.viewEmployees(); - break; + break;*/ case 5: - m_zenvyController.searchEmployee(); + searchEmployee(); break; - case 6: + /*case 6: m_zenvyController.viewNotifications(); break; case 7: @@ -54,11 +54,19 @@ bool ITExecutiveMenu::handleOperation(int choice) break; case 8: m_zenvyController.resolveTicket(); - break;*/ + break; case 9: return false; default: - std::cout << "Enter a valid choice!" << std::endl; + std::cout << "Enter a valid choice!" << std::endl;*/ } return true; } + +void ITExecutiveMenu::searchEmployee() +{ + std::string name; + std::cout << "Enter Employee Name: "; + util::read(name); + searchTheEmployee(name, m_zenvyController); +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h index 1c5f060..fddfb8b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h @@ -1,5 +1,6 @@ #pragma once #include +#include "MenuHelper.h" #include"ZenvyController.h" class ITExecutiveMenu @@ -10,5 +11,6 @@ public: ITExecutiveMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); + void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.cpp new file mode 100644 index 0000000..5505d19 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.cpp @@ -0,0 +1,3 @@ +#include "MenuHelper.h" + + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h new file mode 100644 index 0000000..16f6958 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h @@ -0,0 +1,69 @@ +#pragma once +#include +#include +#include +#include +#include +#include "Enums.h" +#include"InputHelper.h" +#include"OutputHelper.h" +#include "Employee.h" +#include "ZenvyController.h" +#include "Payroll.h" + +inline void searchTheEmployee(const std::string& name, std::shared_ptr& m_zenvyController) +{ + std::pair>> searchResults = m_zenvyController->searchEmployee(name); + if (!(searchResults.second).empty()) + { + std::cout << std::left + << std::setw(10) << "ID" + << std::setw(20) << "Name" + << std::setw(25) << "Email" + << std::setw(15) << "Phone" + << std::setw(15) << "Type" + << std::setw(10) << "Team ID" + << std::setw(10) << "Team Status" + << std::endl; + std::cout << std::string(95, '-') << std::endl; + for (const auto& employee : searchResults.second) + { + if (employee->getEmployeeAccountStatus() == Enums::AccountStatus::ACTIVE) + { + std::cout << std::left + << std::setw(10) << employee->getEmployeeId() + << std::setw(20) << employee->getEmployeeName() + << std::setw(25) << employee->getEmployeeEmail() + << std::setw(15) << employee->getEmployeePhone() + << std::setw(15) << Enums::getEmployeeType(employee->getEmployeeType()) + << std::setw(10) << employee->getEmployeeTeamId() + << std::setw(10) << Enums::getTeamStatus(employee->getEmployeeTeamStatus()); + filterSearchResults(searchResults.first, employee); + } + } + } + else + { + std::cout << "No Employee found with this name" << std::endl; + } +} +static void filterSearchResults(Enums::EmployeeType type, std::shared_ptr employee) +{ + switch (type) + { + case Enums::EmployeeType::FINANCE: + displayPayroll(employee->getPayroll()); + break; + } +} +void displayPayroll(std::shared_ptr payroll) +{ + std::cout << std::left + << std::setw(10) << payroll->getPayrollId() + << std::setw(10) << payroll->getBasicSalary() + << std::setw(10) << payroll->getEmployeePFContribution() + << std::setw(10) << payroll->getEmployerPFContribution() + << std::setw(10) << payroll->getFoodAllowance() + << std::setw(10) << payroll->getHouseRentAllowance() + << std::endl; +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp index 45fbfba..6bfcba0 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp @@ -31,46 +31,54 @@ bool TalentExecutiveMenu::handleOperation(int choice) { switch (choice) { - //case 1: - // m_zenvyController.applyLeave(); - // break; - //case 2: - // m_zenvyController.viewPayslip(); - // break; - //case 3: - // m_zenvyController.viewPayslipHistory(); - // break; - //case 4: - // m_zenvyController.viewEmployees(); - // break; - //case 5: - // m_zenvyController.searchEmployee(); - // break; - //case 6: - // m_zenvyController.viewNotifications(); - // break; - //case 7: - // m_zenvyController.viewAnnouncements(); - // break; - //case 8: - // m_zenvyController.createNewJob(); - // break; - //case 9: - // m_zenvyController.viewJobOpenings(); - // break; - //case 10: - // m_zenvyController.addCandidate(); - // break; - //case 11: - // m_zenvyController.updateCandidateStatus(); - // break; - //case 12: - // m_zenvyController.viewShortlistedCandidates(); - // break; + /*case 1: + m_zenvyController.applyLeave(); + break; + case 2: + m_zenvyController.viewPayslip(); + break; + case 3: + m_zenvyController.viewPayslipHistory(); + break; + case 4: + m_zenvyController.viewEmployees(); + break;*/ + case 5: + searchEmployee(); + break; + /*case 6: + m_zenvyController.viewNotifications(); + break; + case 7: + m_zenvyController.viewAnnouncements(); + break; + case 8: + m_zenvyController.createNewJob(); + break; + case 9: + m_zenvyController.viewJobOpenings(); + break; + case 10: + m_zenvyController.addCandidate(); + break; + case 11: + m_zenvyController.updateCandidateStatus(); + break; + case 12: + m_zenvyController.viewShortlistedCandidates(); + break; case 13: return false; default: - std::cout << "Enter a valid choice!" << std::endl; + std::cout << "Enter a valid choice!" << std::endl;*/ } return true; } + +void TalentExecutiveMenu::searchEmployee() +{ + std::string name; + std::cout << "Enter Employee Name: "; + util::read(name); + searchTheEmployee(name, m_zenvyController); +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h index a258eaf..94dd86e 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h @@ -1,5 +1,6 @@ #pragma once #include +#include "MenuHelper.h" #include"ZenvyController.h" class TalentExecutiveMenu @@ -10,5 +11,6 @@ public: TalentExecutiveMenu() : m_zenvyController(std::make_shared < ZenvyController>()) {}; void run(); bool handleOperation(int); + void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp index 12c300b..6b847a8 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp @@ -31,49 +31,57 @@ bool TeamExecutiveMenu::handleOperation(int choice) { switch (choice) { - //case 1: - // m_zenvyController.applyLeave(); - // break; - //case 2: - // m_zenvyController.viewPayslip(); - // break; - //case 3: - // m_zenvyController.viewPayslipHistory(); - // break; - //case 4: - // m_zenvyController.viewEmployees(); - // break; - //case 5: - // m_zenvyController.searchEmployee(); - // break; - //case 6: - // m_zenvyController.viewNotifications(); - // break; - //case 7: - // m_zenvyController.viewAnnouncements(); - // break; - //case 8: - // m_zenvyController.createTeam(); - // break; - //case 9: - // m_zenvyController.updateTeam(); - // break; - //case 10: - // m_zenvyController.removeTeam(); - // break; - //case 11: - // m_zenvyController.assignEmployee(); - // break; - //case 12: - // m_zenvyController.unassignEmployee(); - // break; - //case 13: - // m_zenvyController.viewTeams(); - // break; + /*case 1: + m_zenvyController.applyLeave(); + break; + case 2: + m_zenvyController.viewPayslip(); + break; + case 3: + m_zenvyController.viewPayslipHistory(); + break; + case 4: + m_zenvyController.viewEmployees(); + break;*/ + case 5: + searchEmployee(); + break; + /*case 6: + m_zenvyController.viewNotifications(); + break; + case 7: + m_zenvyController.viewAnnouncements(); + break; + case 8: + m_zenvyController.createTeam(); + break; + case 9: + m_zenvyController.updateTeam(); + break; + case 10: + m_zenvyController.removeTeam(); + break; + case 11: + m_zenvyController.assignEmployee(); + break; + case 12: + m_zenvyController.unassignEmployee(); + break; + case 13: + m_zenvyController.viewTeams(); + break; case 14: return false; default: - std::cout << "Enter a valid choice!" << std::endl; + std::cout << "Enter a valid choice!" << std::endl;*/ } return true; } + +void TalentExecutiveMenu::searchEmployee() +{ + std::string name; + std::cout << "Enter Employee Name: "; + util::read(name); + searchTheEmployee(name, m_zenvyController); +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h index 4b5181d..a3d5382 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h @@ -1,5 +1,6 @@ #pragma once #include +#include "MenuHelper.h" #include"ZenvyController.h" class TeamExecutiveMenu @@ -10,5 +11,6 @@ public: TeamExecutiveMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); + void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp index 4204fb7..99fe626 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp @@ -51,11 +51,11 @@ bool TeamLeadMenu::handleOperation(int choice) break; case 7: m_zenvyController.viewEmployees(); - break; + break;*/ case 8: - m_zenvyController.searchEmployee(); + searchEmployee(); break; - case 9: + /*case 9: m_zenvyController.viewTeamMembers(); break; case 10: @@ -75,11 +75,19 @@ bool TeamLeadMenu::handleOperation(int choice) break; case 15: m_zenvyController.updateLeaveRequest(); - break;*/ + break; case 16: return false; default: - std::cout << "Enter a valid choice!" << std::endl; + std::cout << "Enter a valid choice!" << std::endl;*/ } return true; } + +void TeamLeadMenu::searchEmployee() +{ + std::string name; + std::cout << "Enter Employee Name: "; + util::read(name); + searchTheEmployee(name, m_zenvyController); +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h index e1bd45b..878d961 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h @@ -1,5 +1,6 @@ #pragma once #include +#include "MenuHelper.h" #include"ZenvyController.h" class TeamLeadMenu @@ -10,5 +11,6 @@ public: TeamLeadMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); + void searchEmployee(); }; From a3e622ff8ef16659bdaa892d113cc73c63c08f35 Mon Sep 17 00:00:00 2001 From: Ajmal Jalaludeen Date: Wed, 8 Apr 2026 10:19:21 +0530 Subject: [PATCH 2/3] Updated Menu Helper and all User Menu EMP006 : Search Employee - Updated MenuHelper.h helper file for input validation - Updated search employee logic in employee management service - Removed comments in Enums.h and EmployeeManagementService.h - Included MenuHelper.h in all User Menu files Smitha Mohan --- .../services/EmployeeManagementService.cpp | 4 +- Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h | 240 ++++++++++-------- .../Trenser.Zenvy/views/AdminMenu.cpp | 9 +- Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h | 2 - .../Trenser.Zenvy/views/EmployeeMenu.cpp | 11 +- .../Trenser.Zenvy/views/EmployeeMenu.h | 3 - .../views/FinanceExecutiveMenu.cpp | 11 +- .../views/FinanceExecutiveMenu.h | 2 - .../Trenser.Zenvy/views/HRManagerMenu.cpp | 11 +- .../Trenser.Zenvy/views/HRManagerMenu.h | 2 - .../Trenser.Zenvy/views/ITExecutiveMenu.cpp | 11 +- .../Trenser.Zenvy/views/ITExecutiveMenu.h | 2 - .../Trenser.Zenvy/views/MenuHelper.h | 6 +- .../views/TalentExecutiveMenu.cpp | 11 +- .../Trenser.Zenvy/views/TalentExecutiveMenu.h | 2 - .../Trenser.Zenvy/views/TeamExecutiveMenu.cpp | 11 +- .../Trenser.Zenvy/views/TeamExecutiveMenu.h | 2 - .../Trenser.Zenvy/views/TeamLeadMenu.cpp | 11 +- .../Trenser.Zenvy/views/TeamLeadMenu.h | 2 - 19 files changed, 162 insertions(+), 191 deletions(-) diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp index a825956..0a151c8 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp @@ -26,13 +26,13 @@ std::pair>> Emp const auto& employee = entry.second; if (!employee) { - continue; // skip if pointer is null + continue; } std::string employeeName = employee->getEmployeeName(); std::transform(employeeName.begin(), employeeName.end(), employeeName.begin(), ::tolower); std::string searchName = name; std::transform(searchName.begin(), searchName.end(), searchName.begin(), ::tolower); - if (employeeName == searchName) + if (employeeName.find(searchName) != std::string::npos) { employeeList.push_back(employee); } diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h index bf70b93..2f3fc5e 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h @@ -91,52 +91,36 @@ namespace Enums { INVALID_PASSWORD }; - /*std::string getEmployeeType(EmployeeType type) + std::string getAccountStatus(AccountStatus status) { - switch (type) + switch (status) { - case EmployeeType::HR: - return "HR Manager"; - case EmployeeType::TEAM: - return "Team Executive"; - case EmployeeType::ADMIN: - return "Admin"; - case EmployeeType::IT: - return "IT Executive"; - case EmployeeType::FINANCE: - return "Finance Executive"; - case EmployeeType::TAG: - return "Talent Acquisition Executive"; - case EmployeeType::GENERAL: - return "General Employee"; - default: - return "Invalid"; + case AccountStatus::ACTIVE: + return "Active"; + case AccountStatus::INACTIVE: + return "Inactive"; + default: + return "Unknown"; } } - std::string getTeamStatus(TeamStatus status) + std::string getTeamStatus(TeamStatus status) { - - }*/ - - std::string getAccountStatus(AccountStatus status) { - switch (status) { - case AccountStatus::ACTIVE: return "Active"; - case AccountStatus::INACTIVE: return "Inactive"; - default: return "Unknown"; + switch (status) + { + case TeamStatus::IN_TEAM: + return "In Team"; + case TeamStatus::NOT_IN_TEAM: + return "Not in Team"; + default: + return "Unknown"; } } - std::string getTeamStatus(TeamStatus status) { - switch (status) { - case TeamStatus::IN_TEAM: return "In Team"; - case TeamStatus::NOT_IN_TEAM: return "Not in Team"; - default: return "Unknown"; - } - } - - std::string getCandidateStatus(CandidateStatus status) { - switch (status) { + std::string getCandidateStatus(CandidateStatus status) + { + switch (status) + { case CandidateStatus::PENDING: return "Pending"; case CandidateStatus::SHORTLISTED: return "Shortlisted"; case CandidateStatus::REJECTED: return "Rejected"; @@ -145,94 +129,148 @@ namespace Enums { } std::string getNotificationStatus(NotificationStatus status) { - switch (status) { - case NotificationStatus::READ: return "Read"; - case NotificationStatus::UNREAD: return "Unread"; - default: return "Unknown"; + switch (status) + { + case NotificationStatus::READ: + return "Read"; + case NotificationStatus::UNREAD: + return "Unread"; + default: + return "Unknown"; } } - std::string getLeaveStatus(LeaveStatus status) { - switch (status) { - case LeaveStatus::PENDING: return "Pending"; - case LeaveStatus::APPROVED: return "Approved"; - case LeaveStatus::REJECTED: return "Rejected"; - default: return "Unknown"; + std::string getLeaveStatus(LeaveStatus status) + { + switch (status) + { + case LeaveStatus::PENDING: + return "Pending"; + case LeaveStatus::APPROVED: + return "Approved"; + case LeaveStatus::REJECTED: + return "Rejected"; + default: + return "Unknown"; } } - std::string getLeaveType(LeaveType type) { - switch (type) { - case LeaveType::GENERAL: return "General Leave"; - case LeaveType::MEDICAL: return "Medical Leave"; - case LeaveType::RESTRICTED: return "Restricted Leave"; - default: return "Unknown"; + std::string getLeaveType(LeaveType type) + { + switch (type) + { + case LeaveType::GENERAL: + return "General Leave"; + case LeaveType::MEDICAL: + return "Medical Leave"; + case LeaveType::RESTRICTED: + return "Restricted Leave"; + default: + return "Unknown"; } } - std::string getJobListingStatus(JobListingStatus status) { - switch (status) { - case JobListingStatus::OPEN: return "Open"; - case JobListingStatus::CLOSED: return "Closed"; - default: return "Unknown"; + std::string getJobListingStatus(JobListingStatus status) + { + switch (status) + { + case JobListingStatus::OPEN: + return "Open"; + case JobListingStatus::CLOSED: + return "Closed"; + default: + return "Unknown"; } } - std::string getTicketStatus(TicketStatus status) { - switch (status) { - case TicketStatus::OPEN: return "Open"; - case TicketStatus::RESOLVED: return "Resolved"; - case TicketStatus::CLOSED: return "Closed"; - default: return "Unknown"; + std::string getTicketStatus(TicketStatus status) + { + switch (status) + { + case TicketStatus::OPEN: + return "Open"; + case TicketStatus::RESOLVED: + return "Resolved"; + case TicketStatus::CLOSED: + return "Closed"; + default: + return "Unknown"; } } - std::string getTicketType(TicketType type) { - switch (type) { - case TicketType::IT: return "IT"; - case TicketType::FINANCE: return "Finance"; - case TicketType::ATTENDANCE: return "Attendance"; - case TicketType::UNKNOWN: return "Unknown"; - default: return "Unknown"; + std::string getTicketType(TicketType type) + { + switch (type) + { + case TicketType::IT: + return "IT"; + case TicketType::FINANCE: + return "Finance"; + case TicketType::ATTENDANCE: + return "Attendance"; + case TicketType::UNKNOWN: + return "Unknown"; + default: + return "Unknown"; } } - std::string getEmployeeDesignation(EmployeeDesignation designation) { - switch (designation) { - case EmployeeDesignation::JUNIOR: return "Junior"; - case EmployeeDesignation::SENIOR: return "Senior"; - case EmployeeDesignation::TEAM_LEAD: return "Team Lead"; - case EmployeeDesignation::INVALID: return "Invalid"; - default: return "Unknown"; + std::string getEmployeeDesignation(EmployeeDesignation designation) + { + switch (designation) + { + case EmployeeDesignation::JUNIOR: + return "Junior"; + case EmployeeDesignation::SENIOR: + return "Senior"; + case EmployeeDesignation::TEAM_LEAD: + return "Team Lead"; + case EmployeeDesignation::INVALID: + return "Invalid"; + default: + return "Unknown"; } } - std::string getEmployeeType(EmployeeType type) { - switch (type) { - case EmployeeType::HR: return "HR Manager"; - case EmployeeType::TEAM: return "Team Executive"; - case EmployeeType::ADMIN: return "Admin"; - case EmployeeType::IT: return "IT Executive"; - case EmployeeType::FINANCE: return "Finance Executive"; - case EmployeeType::TAG: return "Talent Acquisition Executive"; - case EmployeeType::GENERAL: return "General Employee"; - case EmployeeType::INVALID: return "Invalid"; - default: return "Unknown"; + std::string getEmployeeType(EmployeeType type) + { + switch (type) + { + case EmployeeType::HR: + return "HR Manager"; + case EmployeeType::TEAM: + return "Team Executive"; + case EmployeeType::ADMIN: + return "Admin"; + case EmployeeType::IT: + return "IT Executive"; + case EmployeeType::FINANCE: + return "Finance Executive"; + case EmployeeType::TAG: + return "Talent Acquisition Executive"; + case EmployeeType::GENERAL: + return "General Employee"; + case EmployeeType::INVALID: + return "Invalid"; + default: + return "Unknown"; } } - std::string getLoginStatus(LoginStatus status) { - switch (status) { - case LoginStatus::SUCCESS: return "Login Success"; - case LoginStatus::FIRST_LOGIN: return "First Login"; - case LoginStatus::USER_NOT_FOUND: return "User Not Found"; - case LoginStatus::INVALID_PASSWORD: return "Invalid Password"; - default: return "Unknown"; + std::string getLoginStatus(LoginStatus status) + { + switch (status) + { + case LoginStatus::SUCCESS: + return "Login Success"; + case LoginStatus::FIRST_LOGIN: + return "First Login"; + case LoginStatus::USER_NOT_FOUND: + return "User Not Found"; + case LoginStatus::INVALID_PASSWORD: + return "Invalid Password"; + default: + return "Unknown"; } } } - -namespace Enums { - - -} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp index 9d902a8..2dd9eec 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp @@ -45,7 +45,7 @@ bool AdminMenu::handleOperation(int choice) m_zenvyController.deactivateEmployee(); break;*/ case 5: - searchEmployee(); + searchEmployee(m_zenvyController); break; case 6: return false; @@ -55,10 +55,3 @@ bool AdminMenu::handleOperation(int choice) return true; } -void AdminMenu::searchEmployee() -{ - std::string name; - std::cout << "Enter Employee Name: "; - util::read(name); - searchTheEmployee(name, m_zenvyController); -} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h index 89804bc..dab23c5 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h @@ -1,6 +1,5 @@ #pragma once #include -#include "MenuHelper.h" #include"ZenvyController.h" class AdminMenu @@ -11,6 +10,5 @@ public: AdminMenu() :m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); - void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp index b6ddedd..da93020 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp @@ -2,6 +2,7 @@ #include "EmployeeMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include "MenuHelper.h" void EmployeeMenu::run() { @@ -53,7 +54,7 @@ bool EmployeeMenu::handleOperation(int choice) m_zenvyController.viewEmployees(); break;*/ case 8: - searchEmployee(); + searchEmployee(m_zenvyController); break; /*case 9: m_zenvyController.viewTeamMembers(); @@ -77,10 +78,4 @@ bool EmployeeMenu::handleOperation(int choice) } return true; } -void EmployeeMenu::searchEmployee() -{ - std::string name; - std::cout << "Enter Employee Name: "; - util::read(name); - searchTheEmployee(name, m_zenvyController); -} + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h index 331dd9d..f082b66 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h @@ -1,7 +1,5 @@ #pragma once #include -#include -#include "MenuHelper.h" #include"ZenvyController.h" class EmployeeMenu @@ -12,6 +10,5 @@ public: EmployeeMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); - void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp index 90b5a5c..058b339 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp @@ -2,6 +2,7 @@ #include "FinanceExecutiveMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include "MenuHelper.h" void FinanceExecutiveMenu::run() { @@ -44,7 +45,7 @@ bool FinanceExecutiveMenu::handleOperation(int choice) m_zenvyController.viewEmployees(); break;*/ case 5: - searchEmployee(); + searchEmployee(m_zenvyController); break; /*case 6: m_zenvyController.viewNotifications(); @@ -68,11 +69,3 @@ bool FinanceExecutiveMenu::handleOperation(int choice) } return true; } - -void FinanceExecutiveMenu::searchEmployee() -{ - std::string name; - std::cout << "Enter Employee Name: "; - util::read(name); - searchTheEmployee(name, m_zenvyController); -} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h index 1da4e2f..825322f 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h @@ -1,6 +1,5 @@ #pragma once #include -#include "MenuHelper.h" #include"ZenvyController.h" class FinanceExecutiveMenu @@ -11,6 +10,5 @@ public: FinanceExecutiveMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); - void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp index 908b2b0..35d99a3 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp @@ -2,6 +2,7 @@ #include "HRManagerMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include "MenuHelper.h" void HRManagerMenu::run() { @@ -44,7 +45,7 @@ bool HRManagerMenu::handleOperation(int choice) m_zenvyController.viewEmployees(); break;*/ case 5: - searchEmployee(); + searchEmployee(m_zenvyController); break; /*case 6: m_zenvyController.viewNotifications(); @@ -71,11 +72,3 @@ bool HRManagerMenu::handleOperation(int choice) } return true; } - -void HRManagerMenu::searchEmployee() -{ - std::string name; - std::cout << "Enter Employee Name: "; - util::read(name); - searchTheEmployee(name, m_zenvyController); -} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h index 986137b..05e1f41 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h @@ -1,6 +1,5 @@ #pragma once #include -#include "MenuHelper.h" #include"ZenvyController.h" class HRManagerMenu @@ -11,6 +10,5 @@ public: HRManagerMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); - void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp index b231f2f..827ef33 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp @@ -2,6 +2,7 @@ #include "ITExecutiveMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include "MenuHelper.h" void ITExecutiveMenu::run() { @@ -44,7 +45,7 @@ bool ITExecutiveMenu::handleOperation(int choice) m_zenvyController.viewEmployees(); break;*/ case 5: - searchEmployee(); + searchEmployee(m_zenvyController); break; /*case 6: m_zenvyController.viewNotifications(); @@ -62,11 +63,3 @@ bool ITExecutiveMenu::handleOperation(int choice) } return true; } - -void ITExecutiveMenu::searchEmployee() -{ - std::string name; - std::cout << "Enter Employee Name: "; - util::read(name); - searchTheEmployee(name, m_zenvyController); -} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h index fddfb8b..1c5f060 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h @@ -1,6 +1,5 @@ #pragma once #include -#include "MenuHelper.h" #include"ZenvyController.h" class ITExecutiveMenu @@ -11,6 +10,5 @@ public: ITExecutiveMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); - void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h index 16f6958..55eb6f0 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h @@ -11,8 +11,12 @@ #include "ZenvyController.h" #include "Payroll.h" -inline void searchTheEmployee(const std::string& name, std::shared_ptr& m_zenvyController) +inline void searchEmployee(std::shared_ptr& m_zenvyController) { + std::string name; + util::clear(); + std::cout << "Enter Employee Name: "; + util::read(name); std::pair>> searchResults = m_zenvyController->searchEmployee(name); if (!(searchResults.second).empty()) { diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp index 6bfcba0..615a950 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp @@ -2,6 +2,7 @@ #include "TalentExecutiveMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include "MenuHelper.h" void TalentExecutiveMenu::run() { @@ -44,7 +45,7 @@ bool TalentExecutiveMenu::handleOperation(int choice) m_zenvyController.viewEmployees(); break;*/ case 5: - searchEmployee(); + searchEmployee(m_zenvyController); break; /*case 6: m_zenvyController.viewNotifications(); @@ -73,12 +74,4 @@ bool TalentExecutiveMenu::handleOperation(int choice) std::cout << "Enter a valid choice!" << std::endl;*/ } return true; -} - -void TalentExecutiveMenu::searchEmployee() -{ - std::string name; - std::cout << "Enter Employee Name: "; - util::read(name); - searchTheEmployee(name, m_zenvyController); } \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h index 94dd86e..a258eaf 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h @@ -1,6 +1,5 @@ #pragma once #include -#include "MenuHelper.h" #include"ZenvyController.h" class TalentExecutiveMenu @@ -11,6 +10,5 @@ public: TalentExecutiveMenu() : m_zenvyController(std::make_shared < ZenvyController>()) {}; void run(); bool handleOperation(int); - void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp index 6b847a8..10f817b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp @@ -2,6 +2,7 @@ #include "TeamExecutiveMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include "MenuHelper.h" void TeamExecutiveMenu::run() { @@ -44,7 +45,7 @@ bool TeamExecutiveMenu::handleOperation(int choice) m_zenvyController.viewEmployees(); break;*/ case 5: - searchEmployee(); + searchEmployee(m_zenvyController); break; /*case 6: m_zenvyController.viewNotifications(); @@ -76,12 +77,4 @@ bool TeamExecutiveMenu::handleOperation(int choice) std::cout << "Enter a valid choice!" << std::endl;*/ } return true; -} - -void TalentExecutiveMenu::searchEmployee() -{ - std::string name; - std::cout << "Enter Employee Name: "; - util::read(name); - searchTheEmployee(name, m_zenvyController); } \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h index a3d5382..4b5181d 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h @@ -1,6 +1,5 @@ #pragma once #include -#include "MenuHelper.h" #include"ZenvyController.h" class TeamExecutiveMenu @@ -11,6 +10,5 @@ public: TeamExecutiveMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); - void searchEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp index 99fe626..f7b82fc 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp @@ -2,6 +2,7 @@ #include "TeamLeadMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include "MenuHelper.h" void TeamLeadMenu::run() { @@ -53,7 +54,7 @@ bool TeamLeadMenu::handleOperation(int choice) m_zenvyController.viewEmployees(); break;*/ case 8: - searchEmployee(); + searchEmployee(m_zenvyController); break; /*case 9: m_zenvyController.viewTeamMembers(); @@ -82,12 +83,4 @@ bool TeamLeadMenu::handleOperation(int choice) std::cout << "Enter a valid choice!" << std::endl;*/ } return true; -} - -void TeamLeadMenu::searchEmployee() -{ - std::string name; - std::cout << "Enter Employee Name: "; - util::read(name); - searchTheEmployee(name, m_zenvyController); } \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h index 878d961..e1bd45b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h @@ -1,6 +1,5 @@ #pragma once #include -#include "MenuHelper.h" #include"ZenvyController.h" class TeamLeadMenu @@ -11,6 +10,5 @@ public: TeamLeadMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); - void searchEmployee(); }; From 7ffaae37525b91076a8b54d1e1007cdf1919cc41 Mon Sep 17 00:00:00 2001 From: Ajmal Jalaludeen Date: Mon, 13 Apr 2026 17:08:47 +0530 Subject: [PATCH 3/3] Updated Menu Helper EMP006 : Search Employee - Updated searchEmployee method logic in MenuHelper.h helper file. Smitha Mohan --- .../Trenser.Zenvy/views/MenuHelper.h | 79 +++++++++++-------- 1 file changed, 44 insertions(+), 35 deletions(-) diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h index 2d6e595..4c84538 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h @@ -154,28 +154,6 @@ inline void viewEmployees(std::shared_ptr m_zenvyController) util::pressEnter(); } -static void displayPayroll(std::shared_ptr payroll) -{ - std::cout << std::left - << std::setw(10) << payroll->getId() - << std::setw(10) << payroll->getBasicSalary() - << std::setw(10) << payroll->getEmployeePFContribution() - << std::setw(10) << payroll->getEmployerPFContribution() - << std::setw(10) << payroll->getFoodAllowance() - << std::setw(10) << payroll->getHouseRentAllowance() - << std::endl; -} - -static void filterSearchResults(Enums::EmployeeType type, std::shared_ptr employee) -{ - switch (type) - { - case Enums::EmployeeType::FINANCE: - displayPayroll(employee->getPayroll()); - break; - } -} - inline void searchEmployee(std::shared_ptr& m_zenvyController) { std::string name; @@ -185,15 +163,27 @@ inline void searchEmployee(std::shared_ptr& m_zenvyController) std::pair>> searchResults = m_zenvyController->searchEmployee(name); if (!(searchResults.second).empty()) { - std::cout << std::left - << std::setw(10) << "ID" - << std::setw(20) << "Name" - << std::setw(25) << "Email" - << std::setw(15) << "Phone" - << std::setw(15) << "Type" - << std::setw(15) << "Team Status" - << std::setw(10) << "Team ID" - << std::endl; + std::cout << std::left + << std::setw(10) << "ID" + << std::setw(20) << "Name" + << std::setw(25) << "Email" + << std::setw(15) << "Phone" + << std::setw(20) << "Type" + << std::setw(20) << "TeamStatus" + << std::setw(15) << "TeamID"; + if (searchResults.first == Enums::EmployeeType::FINANCE + || searchResults.first == Enums::EmployeeType::HR + || searchResults.first == Enums::EmployeeType::ADMIN) + { + std::cout << std::left + << std::setw(17) << "PayrollID" + << std::setw(20) << "BasicSalary" + << std::setw(15) << "EmployeePF" + << std::setw(15) << "EmployerPF" + << std::setw(15) << "FoodAllowance" + << std::setw(15) << "HouseRentAllowance"; + } + std::cout << std::endl; for (const auto& employee : searchResults.second) { if (employee->getEmployeeAccountStatus() == Enums::AccountStatus::ACTIVE) @@ -203,10 +193,29 @@ inline void searchEmployee(std::shared_ptr& m_zenvyController) << std::setw(20) << employee->getEmployeeName() << std::setw(25) << employee->getEmployeeEmail() << std::setw(15) << employee->getEmployeePhone() - << std::setw(15) << Enums::getEmployeeTypeString(employee->getEmployeeType()) - << std::setw(15) << Enums::getTeamStatusString(employee->getEmployeeTeamStatus()) - << std::setw(10) << employee->getEmployeeTeamId(); - filterSearchResults(searchResults.first, employee); + << std::setw(20) << Enums::getEmployeeTypeString(employee->getEmployeeType()) + << std::setw(20) << Enums::getTeamStatusString(employee->getEmployeeTeamStatus()); + if (employee->getEmployeeTeamId() == "") + { + std::cout << std::setw(15) << "NULL"; + } + else + { + std::cout << std::setw(15) << employee->getEmployeeTeamId(); + } + if (searchResults.first == Enums::EmployeeType::FINANCE + || searchResults.first == Enums::EmployeeType::HR + || searchResults.first == Enums::EmployeeType::ADMIN) + { + std::cout << std::left + << std::setw(17) << employee->getPayroll()->getId() + << std::setw(20) << employee->getPayroll()->getBasicSalary() + << std::setw(15) << employee->getPayroll()->getEmployeePFContribution() + << std::setw(15) << employee->getPayroll()->getEmployerPFContribution() + << std::setw(15) << employee->getPayroll()->getFoodAllowance() + << std::setw(15) << employee->getPayroll()->getHouseRentAllowance(); + } + std::cout << std::endl; } } }