Merged PR 932: UserStory EMP002 Deactivate Employee

Related work items: #946
This commit is contained in:
Princy Jerin
2026-04-08 11:50:23 +05:30
committed by Joel Thomas
8 changed files with 139 additions and 54 deletions
@@ -192,6 +192,9 @@
<ClCompile Include="services\EmployeeManagementService.cpp">
<Filter>Services</Filter>
</ClCompile>
<ClCompile Include="views\MenuHelper.cpp">
<Filter>Views</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="services\AuthenticationManagementService.h">
@@ -338,6 +341,9 @@
<ClInclude Include="services\EmployeeManagementService.h">
<Filter>Services</Filter>
</ClInclude>
<ClInclude Include="views\MenuHelper.h">
<Filter>Views</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClInclude Include="models\Employee.h">
@@ -50,7 +50,3 @@ Employees ZenvyController::getEmployees()
{
return m_employeeManagementService->getEmployees();
}
std::shared_ptr<const Employee> ZenvyController::getEmployee(const std::string&) {
}
@@ -49,7 +49,7 @@ AuthenticationDTO AuthenticationManagementService::login(const std::string& emai
void AuthenticationManagementService::changePassword(const std::string& password)
{
std::shared_ptr<Employee> authenticatedUser = m_dataStore.getAuthenticatedUser();
std::shared_ptr<Employee> authenticatedUser = m_dataStore.getAuthenticatedEmployee();
if (authenticatedUser)
{
authenticatedUser->setEmployeePassword(password);
@@ -98,6 +98,20 @@ void EmployeeManagementService::createEmployee(Enums::EmployeeType employeeType,
bool EmployeeManagementService::deactivateEmployee(const std::string& id)
{
auto& authenticatedEmployee = m_dataStore.getAuthenticatedEmployee();
util::enforceAuthorization(authenticatedEmployee->getEmployeeType(), Enums::EmployeeType::ADMIN, Enums::EmployeeType::HR);
auto& employee = m_dataStore.getEmployees();
auto iterator = employee.find(id);
if (iterator == employee.end())
{
return false;
}
if (iterator->second->getEmployeeType() == Enums::EmployeeType::ADMIN)
{
throw std::runtime_error("Cannot deactivate Admin Account");
}
iterator->second->setEmployeeAccountStatus(Enums::AccountStatus::INACTIVE);
return true;
}
Employees EmployeeManagementService::getEmployees()
@@ -118,10 +118,10 @@ bool AdminMenu::handleOperation(int choice)
break;
/*case 2:
m_zenvyController.viewEmployee();
break;
case 3:
m_zenvyController.deactivateEmployee();
break;*/
case 3:
deactivateEmployee(m_zenvyController);
break;
case 5:
updateProfile(m_zenvyController);
break;
@@ -32,7 +32,8 @@ bool EmployeeMenu::handleOperation(int choice)
{
switch (choice)
{
/*case 1:
/*
case 1:
m_zenvyController.applyLeave();
break;
case 2:
@@ -49,11 +50,11 @@ bool EmployeeMenu::handleOperation(int choice)
break;
case 6:
m_zenvyController.viewTicketHistory();
break;*/
/*case 7:
break;
case 7:
viewEmployees();
break;*/
/*case 8:
break;
case 8:
m_zenvyController.searchEmployee();
break;
case 9:
@@ -91,7 +91,7 @@ void HRManagerMenu::run()
{
int choice;
util::clear();
std::cout << "Zenvy - The HR Management System\n1. Apply Leave\n2. View Payslip\n3. View Payslip History\n4. View Employees\n5. Search Employee\n6. View Notification\n7. View Announcements\n8. Create Employee\n9. Regularize Attendance\n10. Update Leave Request\n11. Register CandidateAsEmployee\n12. Update Profile\n13. Logout\nEnter your Choice: ";
std::cout << "Zenvy - The HR Management System\n1. Apply Leave\n2. View Payslip\n3. View Payslip History\n4. View Employees\n5. Search Employee\n6. View Notification\n7. View Announcements\n8. Create Employee\n9. Regularize Attendance\n10. Update Leave Request\n11. Register CandidateAsEmployee\n12. Update Profile\n13. Deactivate Employee\n14. Logout\nEnter your Choice: ";
util::read(choice);
if (!handleOperation(choice))
{
@@ -110,43 +110,45 @@ 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:
createEmployee(m_zenvyController);
/*case 1:
m_zenvyController.applyLeave();
break;
//case 9:
// m_zenvyController.regularizeAttenance();
// break;
//case 10:
// m_zenvyController.updateLeaveRequest();
// break;
//case 11:
// m_zenvyController.registercandidateAsEmployee();
// 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 12:
updateProfile(m_zenvyController);
break;
case 13:
deactivateEmployee(m_zenvyController);
case 14:
return false;
default:
std::cout << "Enter a valid choice!" << std::endl;
@@ -1,5 +1,12 @@
#pragma once
#include <map>
#include <memory>
#include <vector>
#include <iostream>
#include <iomanip>
#include "Employee.h"
#include "ZenvyController.h"
#include "MenuHelper.h"
#include "InputHelper.h"
#include "OutputHelper.h"
@@ -40,3 +47,62 @@ inline void updateProfile(std::shared_ptr<ZenvyController> m_zenvyController)
}
}
}
inline std::map<int, std::shared_ptr<const Employee>> listEmployees(const std::shared_ptr<ZenvyController>& controller)
{
auto employees = controller->getEmployees();
std::map<int, std::shared_ptr<const Employee>> employeeList;
std::cout << std::left
<< std::setw(5) << "Index"
<< std::setw(15) << "ID"
<< std::setw(25) << "Name"
<< "\n";
int index = 1;
for (auto& activeEmployees : employees)
{
std::cout << std::left
<< std::setw(5) << index
<< std::setw(15) << activeEmployees->getEmployeeId()
<< std::setw(25) << activeEmployees->getEmployeeName()
<< "\n";
employeeList[index] = activeEmployees;
++index;
}
if (employeeList.empty())
{
std::cout << "No active employees available.\n";
}
return employeeList;
}
void deactivateEmployee(const std::shared_ptr<ZenvyController>& controller)
{
auto employeeList = listEmployees(controller);
if (employeeList.empty())
{
return;
}
int choice;
util::clear();
std::cout << "\nEnter the index of the employee to deactivate: ";
util::read(choice);
auto iterator = employeeList.find(choice);
if (iterator != employeeList.end())
{
std::string id = iterator->second->getEmployeeId();
bool success = controller->deactivateEmployee(id);
if (success)
{
std::cout << "Employee deactivated successfully\n";
}
else
{
std::cout << "Employee not found\n";
}
}
else
{
std::cout << "Invalid index.\n";
}
}