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
@@ -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();
};