81 lines
2.9 KiB
C++
81 lines
2.9 KiB
C++
/*
|
|
* File: EmployeeManagementService.h
|
|
* Description: Provides services for managing employees, including creation, deactivation,
|
|
* designation updates, profile modifications, searching, and retrieval of
|
|
* shortlisted candidates.
|
|
* Author: Trenser
|
|
* Created: 07-Apr-2026
|
|
*/
|
|
#pragma once
|
|
#include <vector>
|
|
#include <tuple>
|
|
#include <algorithm>
|
|
#include <utility>
|
|
#include "DataStore.h"
|
|
#include "Enums.h"
|
|
#include "StringHelper.h"
|
|
|
|
using Employees = std::vector<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<const Employee*>> searchEmployee(const std::string&);
|
|
const Employee* getCurrentEmployee();
|
|
std::vector<Candidate*> getShorlistedCandidates();
|
|
void loadEmployees();
|
|
void saveEmployees();
|
|
|
|
/*
|
|
* Function: getEmployees (template)
|
|
* Description: Retrieves active employees filtered by specified types. Excludes admin employees
|
|
* if no filter is provided.
|
|
* Parameters:
|
|
* types... - variadic list of employee types
|
|
* Returns:
|
|
* Employees - vector of pointers to filtered employees
|
|
*/
|
|
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 Employee* employeeOne,
|
|
const Employee* employeeTwo)
|
|
{
|
|
return util::extractNumber(employeeOne->getId()) <
|
|
util::extractNumber(employeeTwo->getId());
|
|
}
|
|
);
|
|
return filteredEmployees;
|
|
}
|
|
}; |