7351186baf
<UserStory> EMP0012 : Employee Management </UserStory> <Changes> - Changed getShorlistedCandidates() to return by value instead of reference - Updated controller and service method signatures accordingly - Fixed off-by-one error when selecting shortlisted candidate </Changes> <Review> Smitha Mohan </Review>
65 lines
2.3 KiB
C++
65 lines
2.3 KiB
C++
#pragma once
|
|
#include <vector>
|
|
#include <tuple>
|
|
#include <algorithm>
|
|
#include <utility>
|
|
#include "DataStore.h"
|
|
#include "Enums.h"
|
|
#include "StringHelper.h"
|
|
|
|
using Employees = std::vector<std::shared_ptr<const Employee>>;
|
|
|
|
class EmployeeManagementService
|
|
{
|
|
private:
|
|
DataStore& m_dataStore;
|
|
public:
|
|
EmployeeManagementService() : m_dataStore(DataStore::getInstance()) {};
|
|
void createEmployee(Enums::EmployeeType, Enums::EmployeeDesignation, const std::string&, const std::string&, const std::string&);
|
|
bool deactivateEmployee(const std::string&);
|
|
bool updateDesignation(const std::string&,Enums::EmployeeDesignation);
|
|
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();
|
|
std::vector<std::shared_ptr<Candidate>> getShorlistedCandidates();
|
|
void loadEmployees();
|
|
void saveEmployees();
|
|
|
|
template<typename... Types>
|
|
Employees getEmployees(Types... types)
|
|
{
|
|
Employees filteredEmployees;
|
|
const auto& employees = m_dataStore.getEmployees();
|
|
std::vector<Enums::EmployeeType> filterTypes = { types... };
|
|
for (const auto& employeePair : employees)
|
|
{
|
|
const auto& employee = employeePair.second;
|
|
if (employee->getEmployeeAccountStatus() != Enums::AccountStatus::ACTIVE)
|
|
continue;
|
|
auto employeeType = employee->getEmployeeType();
|
|
if (filterTypes.empty())
|
|
{
|
|
if (employeeType == Enums::EmployeeType::ADMIN)
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
if (std::find(filterTypes.begin(), filterTypes.end(), employeeType) == filterTypes.end())
|
|
continue;
|
|
}
|
|
filteredEmployees.push_back(employee);
|
|
}
|
|
std::sort(
|
|
filteredEmployees.begin(),
|
|
filteredEmployees.end(),
|
|
[](const std::shared_ptr<const Employee>& employeeOne,
|
|
const std::shared_ptr<const Employee>& employeeTwo)
|
|
{
|
|
return util::extractNumber(employeeOne->getId()) <
|
|
util::extractNumber(employeeTwo->getId());
|
|
}
|
|
);
|
|
return filteredEmployees;
|
|
}
|
|
};
|