Merged PR 935: UserStory EMP006 Search Employee
Related work items: #951
This commit is contained in:
@@ -32,6 +32,11 @@ void ZenvyController::updateProfile(const std::string& name, const std::string&
|
||||
m_employeeManagementService->updateProfile(name,phone);
|
||||
}
|
||||
|
||||
std::pair<Enums::EmployeeType, std::vector<std::shared_ptr<const Employee>>> ZenvyController::searchEmployee(const std::string& name)
|
||||
{
|
||||
return m_employeeManagementService->searchEmployee(name);
|
||||
}
|
||||
|
||||
void ZenvyController::updateSalary(const std::string& employeeId, double basicSalary, double houseRentAllowance, double foodAllowance, double employeePFContribution, double employerPFContribution)
|
||||
{
|
||||
m_payslipManagementService->updateSalary(employeeId, basicSalary, houseRentAllowance, foodAllowance, employeePFContribution, employerPFContribution);
|
||||
|
||||
@@ -50,6 +50,7 @@ public:
|
||||
Employees getEmployees();
|
||||
std::shared_ptr<const Employee> getCurrentEmployee();
|
||||
void updateProfile(const std::string&,const std::string&);
|
||||
std::pair<Enums::EmployeeType, std::vector<std::shared_ptr<const Employee>>> searchEmployee(const std::string&);
|
||||
|
||||
//Payslip management
|
||||
void updateSalary(const std::string&, double, double, double, double, double);
|
||||
|
||||
@@ -112,7 +112,6 @@ void EmployeeManagementService::createEmployee(Enums::EmployeeType employeeType,
|
||||
m_dataStore.getPayrolls().emplace(std::make_pair(payroll->getId(), payroll));
|
||||
m_dataStore.getEmployees().emplace(std::make_pair(employee->getId(), employee));
|
||||
}
|
||||
|
||||
bool EmployeeManagementService::deactivateEmployee(const std::string& id)
|
||||
{
|
||||
auto& authenticatedEmployee = m_dataStore.getAuthenticatedEmployee();
|
||||
@@ -161,6 +160,34 @@ void EmployeeManagementService::updateProfile(const std::string& name,const std:
|
||||
employee->setEmployeePhone(phone);
|
||||
}
|
||||
|
||||
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& employeePair : employees) {
|
||||
const auto& employee = employeePair.second;
|
||||
if (!employee)
|
||||
{
|
||||
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.find(searchName) != std::string::npos)
|
||||
{
|
||||
employeeList.push_back(employee);
|
||||
}
|
||||
}
|
||||
return { employeeType, employeeList };
|
||||
}
|
||||
|
||||
void EmployeeManagementService::loadEmployees()
|
||||
{
|
||||
FileManager<Employee> employeeFileManager(Config::File::EMPLOYEES_FILE);
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include <tuple>
|
||||
#include <algorithm>
|
||||
#include <utility>
|
||||
#include "DataStore.h"
|
||||
#include "Enums.h"
|
||||
|
||||
@@ -16,6 +18,7 @@ public:
|
||||
bool deactivateEmployee(const std::string&);
|
||||
Employees getEmployees();
|
||||
void updateProfile(const std::string&,const std::string&);
|
||||
std::pair<Enums::EmployeeType, std::vector<std::shared_ptr<const Employee>>> searchEmployee(const std::string&);
|
||||
std::shared_ptr<const Employee> getCurrentEmployee();
|
||||
void loadEmployees();
|
||||
void saveEmployees();
|
||||
|
||||
@@ -159,6 +159,17 @@ namespace Enums {
|
||||
}
|
||||
}
|
||||
|
||||
inline std::string getCandidateStatusString(CandidateStatus status)
|
||||
{
|
||||
switch (status)
|
||||
{
|
||||
case CandidateStatus::PENDING: return "Pending";
|
||||
case CandidateStatus::SHORTLISTED: return "Shortlisted";
|
||||
case CandidateStatus::REJECTED: return "Rejected";
|
||||
default: return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
inline AccountStatus getAccountStatus(const std::string& input)
|
||||
{
|
||||
if (input == "ACTIVE")
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#pragma once
|
||||
|
||||
#include <iostream>
|
||||
#include <limits>
|
||||
#include <string>
|
||||
|
||||
@@ -41,6 +41,9 @@ bool AdminMenu::handleOperation(int choice)
|
||||
case 3:
|
||||
deactivateEmployee(m_zenvyController);
|
||||
break;
|
||||
case 4:
|
||||
searchEmployee(m_zenvyController);
|
||||
break;
|
||||
case 5:
|
||||
updateProfile(m_zenvyController);
|
||||
break;
|
||||
|
||||
@@ -55,24 +55,9 @@ bool EmployeeMenu::handleOperation(int choice)
|
||||
case 7:
|
||||
viewEmployees(m_zenvyController);
|
||||
break;
|
||||
/*case 8:
|
||||
m_zenvyController.searchEmployee();
|
||||
case 8:
|
||||
searchEmployee(m_zenvyController);
|
||||
break;
|
||||
case 9:
|
||||
m_zenvyController.viewTeamMembers();
|
||||
break;
|
||||
case 10:
|
||||
m_zenvyController.bookMeetingRoom();
|
||||
break;
|
||||
case 11:
|
||||
m_zenvyController.viewBookingHistory();
|
||||
break;
|
||||
case 12:
|
||||
m_zenvyController.viewNotifications();
|
||||
break;
|
||||
case 13:
|
||||
m_zenvyController.viewAnnouncements();
|
||||
break;*/
|
||||
case 14:
|
||||
updateProfile(m_zenvyController);
|
||||
break;
|
||||
|
||||
@@ -58,33 +58,12 @@ bool FinanceExecutiveMenu::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:
|
||||
viewEmployees(m_zenvyController);
|
||||
break;
|
||||
//case 5:
|
||||
// m_zenvyController.searchEmployee();
|
||||
// break;
|
||||
//case 6:
|
||||
// m_zenvyController.viewNotifications();
|
||||
// break;
|
||||
//case 7:
|
||||
// m_zenvyController.viewAnnouncements();
|
||||
// break;
|
||||
//case 8:
|
||||
// m_zenvyController.resolveTicket();
|
||||
// break;
|
||||
//case 9:
|
||||
// m_zenvyController.generatePayslip();
|
||||
// break;
|
||||
case 5:
|
||||
searchEmployee(m_zenvyController);
|
||||
break;
|
||||
case 10:
|
||||
updatePayroll();
|
||||
break;
|
||||
|
||||
@@ -32,39 +32,15 @@ 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:
|
||||
viewEmployees(m_zenvyController);
|
||||
break;
|
||||
//case 5:
|
||||
// m_zenvyController.searchEmployee();
|
||||
// break;
|
||||
//case 6:
|
||||
// m_zenvyController.viewNotifications();
|
||||
// break;
|
||||
//case 7:
|
||||
// m_zenvyController.viewAnnouncements();
|
||||
// break;
|
||||
case 5:
|
||||
searchEmployee(m_zenvyController);
|
||||
break;
|
||||
case 8:
|
||||
createEmployee(m_zenvyController);
|
||||
break;
|
||||
//case 9:
|
||||
// m_zenvyController.regularizeAttenance();
|
||||
// break;
|
||||
//case 10:
|
||||
// m_zenvyController.updateLeaveRequest();
|
||||
// break;
|
||||
//case 11:
|
||||
// m_zenvyController.registercandidateAsEmployee();
|
||||
// break;
|
||||
case 12:
|
||||
updateProfile(m_zenvyController);
|
||||
break;
|
||||
|
||||
@@ -32,30 +32,12 @@ bool ITExecutiveMenu::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:
|
||||
viewEmployees(m_zenvyController);
|
||||
break;
|
||||
/*case 5:
|
||||
m_zenvyController.searchEmployee();
|
||||
case 5:
|
||||
searchEmployee(m_zenvyController);
|
||||
break;
|
||||
case 6:
|
||||
m_zenvyController.viewNotifications();
|
||||
break;
|
||||
case 7:
|
||||
m_zenvyController.viewAnnouncements();
|
||||
break;
|
||||
case 8:
|
||||
m_zenvyController.resolveTicket();
|
||||
break;*/
|
||||
case 9:
|
||||
updateProfile(m_zenvyController);
|
||||
break;
|
||||
|
||||
@@ -4,13 +4,14 @@
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <utility>
|
||||
#include "Enums.h"
|
||||
#include"InputHelper.h"
|
||||
#include"OutputHelper.h"
|
||||
#include "Employee.h"
|
||||
#include "ZenvyController.h"
|
||||
#include "MenuHelper.h"
|
||||
#include "InputHelper.h"
|
||||
#include "OutputHelper.h"
|
||||
#include "Validator.h"
|
||||
#include "Enums.h"
|
||||
|
||||
void createEmployee(std::shared_ptr<ZenvyController> controller);
|
||||
|
||||
@@ -152,3 +153,75 @@ inline void viewEmployees(std::shared_ptr<ZenvyController> m_zenvyController)
|
||||
}
|
||||
util::pressEnter();
|
||||
}
|
||||
|
||||
inline void searchEmployee(std::shared_ptr<ZenvyController>& m_zenvyController)
|
||||
{
|
||||
std::string name;
|
||||
util::clear();
|
||||
std::cout << "Enter Employee Name: ";
|
||||
util::read(name);
|
||||
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(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)
|
||||
{
|
||||
std::cout << std::left
|
||||
<< std::setw(10) << employee->getId()
|
||||
<< std::setw(20) << employee->getEmployeeName()
|
||||
<< std::setw(25) << employee->getEmployeeEmail()
|
||||
<< std::setw(15) << employee->getEmployeePhone()
|
||||
<< 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "No Employee found with this name" << std::endl;
|
||||
}
|
||||
util::pressEnter();
|
||||
}
|
||||
|
||||
@@ -32,42 +32,12 @@ 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:
|
||||
viewEmployees(m_zenvyController);
|
||||
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 5:
|
||||
searchEmployee(m_zenvyController);
|
||||
break;
|
||||
case 13:
|
||||
updateProfile(m_zenvyController);
|
||||
break;
|
||||
@@ -78,4 +48,4 @@ bool TalentExecutiveMenu::handleOperation(int choice)
|
||||
util::pressEnter();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -32,45 +32,12 @@ 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:
|
||||
viewEmployees(m_zenvyController);
|
||||
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 5:
|
||||
searchEmployee(m_zenvyController);
|
||||
break;
|
||||
case 14:
|
||||
updateProfile(m_zenvyController);
|
||||
break;
|
||||
@@ -81,4 +48,4 @@ bool TeamExecutiveMenu::handleOperation(int choice)
|
||||
util::pressEnter();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -32,51 +32,12 @@ bool TeamLeadMenu::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.raiseTicket();
|
||||
break;
|
||||
case 5:
|
||||
m_zenvyController.viewTicket();
|
||||
break;
|
||||
case 6:
|
||||
m_zenvyController.viewTicketHistory();
|
||||
break;*/
|
||||
case 7:
|
||||
viewEmployees(m_zenvyController);
|
||||
break;
|
||||
/*case 8:
|
||||
m_zenvyController.searchEmployee();
|
||||
case 8:
|
||||
searchEmployee(m_zenvyController);
|
||||
break;
|
||||
case 9:
|
||||
m_zenvyController.viewTeamMembers();
|
||||
break;
|
||||
case 10:
|
||||
m_zenvyController.bookMeetingRoom();
|
||||
break;
|
||||
case 11:
|
||||
m_zenvyController.viewBookingHistory();
|
||||
break;
|
||||
case 12:
|
||||
m_zenvyController.viewNotifications();
|
||||
break;
|
||||
case 13:
|
||||
m_zenvyController.viewAnnouncements();
|
||||
break;
|
||||
case 14:
|
||||
m_zenvyController.regularizeAttendance();
|
||||
break;
|
||||
case 15:
|
||||
m_zenvyController.updateLeaveRequest();
|
||||
break;*/
|
||||
case 16:
|
||||
updateProfile(m_zenvyController);
|
||||
break;
|
||||
@@ -87,4 +48,4 @@ bool TeamLeadMenu::handleOperation(int choice)
|
||||
util::pressEnter();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user