Add Search Employee for All Users

<UserStory> EMP006 : Search Employee </UserStory>

<Changes>
 - 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
</Changes>

<Review>
Smitha Mohan
</Review>
This commit is contained in:
Ajmal Jalaludeen
2026-04-07 20:11:20 +05:30
parent 07bd979685
commit 47a9065c3b
26 changed files with 482 additions and 140 deletions
@@ -172,6 +172,7 @@
<ClCompile Include="views\FinanceExecutiveMenu.cpp" />
<ClCompile Include="views\HRManagerMenu.cpp" />
<ClCompile Include="views\ITExecutiveMenu.cpp" />
<ClCompile Include="views\MenuHelper.cpp" />
<ClCompile Include="views\TalentExecutiveMenu.cpp" />
<ClCompile Include="views\TeamExecutiveMenu.cpp" />
<ClCompile Include="views\TeamLeadMenu.cpp" />
@@ -222,6 +223,7 @@
<ClInclude Include="views\FinanceExecutiveMenu.h" />
<ClInclude Include="views\HRManagerMenu.h" />
<ClInclude Include="views\ITExecutiveMenu.h" />
<ClInclude Include="views\MenuHelper.h" />
<ClInclude Include="views\TalentExecutiveMenu.h" />
<ClInclude Include="views\TeamExecutiveMenu.h" />
<ClInclude Include="views\TeamLeadMenu.h" />
@@ -192,6 +192,9 @@
<ClCompile Include="services\EmployeeManagementService.cpp">
<Filter>Services</Filter>
</ClCompile>
<ClCompile Include="views\MenuHelper.cpp">
<Filter>Views</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="services\AuthenticationManagementService.h">
@@ -338,6 +341,9 @@
<ClInclude Include="services\EmployeeManagementService.h">
<Filter>Services</Filter>
</ClInclude>
<ClInclude Include="views\MenuHelper.h">
<Filter>Views</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClInclude Include="models\Employee.h">
@@ -27,10 +27,15 @@ bool ZenvyController::deactivateEmployee(const std::string& id)
return m_employeeManagementService->deactivateEmployee(id);
}
Employees EmployeeManagementService::getEmployees()
std::pair<Enums::EmployeeType, std::vector<std::shared_ptr<const Employee>>> ZenvyController::searchEmployee(const std::string& name)
{
m_employeeManagementService->searchEmployee(name);
}
Employees ZenvyController::getEmployees()
{
}
std::shared_ptr<const Employee> EmployeeManagementService::getEmployee(const std::string& id)
std::shared_ptr<const Employee> ZenvyController::getEmployee(const std::string& id)
{
}
@@ -49,4 +49,5 @@ public:
bool deactivateEmployee(const std::string&);
Employees getEmployees();
std::shared_ptr<const Employee> getEmployee(const std::string&);
std::pair<Enums::EmployeeType, std::vector<std::shared_ptr<const Employee>>> searchEmployee(const std::string&);
};
@@ -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<const Employee> EmployeeManagementService::getEmployee(const std::string& id)
{
}
std::pair<Enums::EmployeeType, std::vector<std::shared_ptr<const Employee>>> EmployeeManagementService::searchEmployee(const std::string& name)
{
std::shared_ptr<Employee> currentUser = m_dataStore.getAuthenticatedEmployee();
Enums::EmployeeType employeeType = currentUser->getEmployeeType();
employeeMap& employees = m_dataStore.getEmployees();
std::vector<std::shared_ptr<const Employee>> 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 };
}
@@ -1,6 +1,8 @@
#pragma once
#include <vector>
#include <tuple>
#include <algorithm>
#include <utility>
#include "DataStore.h"
#include "Enums.h"
@@ -16,4 +18,5 @@ public:
bool deactivateEmployee(const std::string&);
Employees getEmployees();
std::shared_ptr<const Employee> getEmployee(const std::string&);
std::pair<Enums::EmployeeType, std::vector<std::shared_ptr<const Employee>>> searchEmployee(const std::string&);
};
@@ -1,4 +1,5 @@
#pragma once
#include <string>
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 {
}
@@ -1,5 +1,4 @@
#pragma once
#include <iostream>
#include <limits>
#include <string>
@@ -1,7 +1,8 @@
#include <iostream>
#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);
}
@@ -1,5 +1,6 @@
#pragma once
#include<memory>
#include "MenuHelper.h"
#include"ZenvyController.h"
class AdminMenu
@@ -10,5 +11,6 @@ public:
AdminMenu() :m_zenvyController(std::make_shared<ZenvyController>()) {};
void run();
bool handleOperation(int);
void searchEmployee();
};
@@ -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;
}
void EmployeeMenu::searchEmployee()
{
std::string name;
std::cout << "Enter Employee Name: ";
util::read(name);
searchTheEmployee(name, m_zenvyController);
}
@@ -1,5 +1,7 @@
#pragma once
#include<memory>
#include <iomanip>
#include "MenuHelper.h"
#include"ZenvyController.h"
class EmployeeMenu
@@ -10,5 +12,6 @@ public:
EmployeeMenu() : m_zenvyController(std::make_shared<ZenvyController>()) {};
void run();
bool handleOperation(int);
void searchEmployee();
};
@@ -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);
}
@@ -1,5 +1,6 @@
#pragma once
#include<memory>
#include "MenuHelper.h"
#include"ZenvyController.h"
class FinanceExecutiveMenu
@@ -10,5 +11,6 @@ public:
FinanceExecutiveMenu() : m_zenvyController(std::make_shared<ZenvyController>()) {};
void run();
bool handleOperation(int);
void searchEmployee();
};
@@ -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);
}
@@ -1,5 +1,6 @@
#pragma once
#include<memory>
#include "MenuHelper.h"
#include"ZenvyController.h"
class HRManagerMenu
@@ -10,5 +11,6 @@ public:
HRManagerMenu() : m_zenvyController(std::make_shared<ZenvyController>()) {};
void run();
bool handleOperation(int);
void searchEmployee();
};
@@ -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);
}
@@ -1,5 +1,6 @@
#pragma once
#include<memory>
#include "MenuHelper.h"
#include"ZenvyController.h"
class ITExecutiveMenu
@@ -10,5 +11,6 @@ public:
ITExecutiveMenu() : m_zenvyController(std::make_shared<ZenvyController>()) {};
void run();
bool handleOperation(int);
void searchEmployee();
};
@@ -0,0 +1,3 @@
#include "MenuHelper.h"
@@ -0,0 +1,69 @@
#pragma once
#include <algorithm>
#include <iomanip>
#include<memory>
#include <vector>
#include <utility>
#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<ZenvyController>& m_zenvyController)
{
std::pair<Enums::EmployeeType, std::vector<std::shared_ptr<const Employee>>> 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<const Employee> employee)
{
switch (type)
{
case Enums::EmployeeType::FINANCE:
displayPayroll(employee->getPayroll());
break;
}
}
void displayPayroll(std::shared_ptr<Payroll> 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;
}
@@ -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);
}
@@ -1,5 +1,6 @@
#pragma once
#include<memory>
#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();
};
@@ -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);
}
@@ -1,5 +1,6 @@
#pragma once
#include<memory>
#include "MenuHelper.h"
#include"ZenvyController.h"
class TeamExecutiveMenu
@@ -10,5 +11,6 @@ public:
TeamExecutiveMenu() : m_zenvyController(std::make_shared<ZenvyController>()) {};
void run();
bool handleOperation(int);
void searchEmployee();
};
@@ -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);
}
@@ -1,5 +1,6 @@
#pragma once
#include<memory>
#include "MenuHelper.h"
#include"ZenvyController.h"
class TeamLeadMenu
@@ -10,5 +11,6 @@ public:
TeamLeadMenu() : m_zenvyController(std::make_shared<ZenvyController>()) {};
void run();
bool handleOperation(int);
void searchEmployee();
};