diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp index bc34097..da75688 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp @@ -47,11 +47,6 @@ std::shared_ptr ZenvyController::getCurrentEmployee() return m_employeeManagementService->getCurrentEmployee(); } -Employees ZenvyController::getEmployees() -{ - return m_employeeManagementService->getEmployees(); -} - void ZenvyController::loadStates() { m_employeeManagementService->loadEmployees(); diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h index 424e386..c2bcc84 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h @@ -47,11 +47,16 @@ public: //Employee Management void createEmployee(Enums::EmployeeType, Enums::EmployeeDesignation, const std::string&, const std::string&, const std::string&); bool deactivateEmployee(const std::string&); - Employees getEmployees(); std::shared_ptr getCurrentEmployee(); void updateProfile(const std::string&,const std::string&); std::pair>> searchEmployee(const std::string&); + template + Employees getEmployees(Types ...types) + { + return m_employeeManagementService->getEmployees(types...); + } + //Payslip management void updateSalary(const std::string&, double, double, double, double, double); diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp index 613cc90..ccb90fb 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp @@ -14,6 +14,10 @@ AuthenticationDTO AuthenticationManagementService::login(const std::string& emai { if (employee.second->getEmployeePassword() == password) { + if (employee.second->getEmployeeAccountStatus() == Enums::AccountStatus::INACTIVE) + { + throw std::runtime_error("Your account has been disabled! Please contact your Administrator."); + } if (password == Config::Authentication::DEFAULT_PASSWORD) { loginStatus = Enums::LoginStatus::FIRST_LOGIN; diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp index b6376ab..5f639da 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp @@ -14,7 +14,6 @@ #include "GeneralEmployee.h" #include "FileManager.h" #include "ApplicationConfig.h" -#include "StringHelper.h" void EmployeeManagementService::createEmployee(Enums::EmployeeType employeeType, Enums::EmployeeDesignation employeeDesignation, const std::string& email, const std::string& name, const std::string& phone) { @@ -132,35 +131,6 @@ bool EmployeeManagementService::deactivateEmployee(const std::string& id) return true; } -Employees EmployeeManagementService::getEmployees() -{ - Employees activeEmployees; - auto& employees = m_dataStore.getEmployees(); - if (employees.size() <= 0) - { - return activeEmployees; - } - for (const auto& iterator : employees) - { - if (iterator.second->getEmployeeAccountStatus() == Enums::AccountStatus::ACTIVE) - { - activeEmployees.push_back(iterator.second); - } - } - std::sort( - activeEmployees.begin(), - activeEmployees.end(), - [](std::shared_ptr employeeOne, - std::shared_ptr employeeTwo) -> bool - { - int employeeOneId = util::extractNumber(employeeOne->getId()); - int employeeTwoId = util::extractNumber(employeeTwo->getId()); - return employeeOneId < employeeTwoId; - } - ); - return activeEmployees; -} - std::shared_ptr EmployeeManagementService::getCurrentEmployee() { return m_dataStore.getAuthenticatedEmployee(); diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h index 8c24d2b..4551b6f 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h @@ -5,6 +5,7 @@ #include #include "DataStore.h" #include "Enums.h" +#include "StringHelper.h" using Employees = std::vector>; @@ -16,10 +17,46 @@ 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&); - Employees getEmployees(); void updateProfile(const std::string&,const std::string&); std::pair>> searchEmployee(const std::string&); std::shared_ptr getCurrentEmployee(); void loadEmployees(); void saveEmployees(); + + template + Employees getEmployees(Types... types) + { + Employees filteredEmployees; + const auto& employees = m_dataStore.getEmployees(); + std::vector 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& employeeOne, + const std::shared_ptr& employeeTwo) + { + return util::extractNumber(employeeOne->getId()) < + util::extractNumber(employeeTwo->getId()); + } + ); + return filteredEmployees; + } };