diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp index 0e9ef77..144f6d4 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp @@ -27,11 +27,16 @@ bool ZenvyController::deactivateEmployee(const std::string& id) return m_employeeManagementService->deactivateEmployee(id); } -void ZenvyController::updateProfile(const std::string& name,const std::string& phone) +void ZenvyController::updateProfile(const std::string& name, const std::string& phone) { m_employeeManagementService->updateProfile(name,phone); } +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); +} + std::shared_ptr ZenvyController::getCurrentEmployee() { return m_employeeManagementService->getCurrentEmployee(); @@ -40,6 +45,12 @@ std::shared_ptr ZenvyController::getCurrentEmployee() std::shared_ptr ZenvyController::getEmployee(const std::string& id) { } + Employees ZenvyController::getEmployees() { + return m_employeeManagementService->getEmployees(); +} + +std::shared_ptr ZenvyController::getEmployee(const std::string&) { + } diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h index d1404d5..cb355c6 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h @@ -51,4 +51,7 @@ public: std::shared_ptr getEmployee(const std::string&); std::shared_ptr getCurrentEmployee(); void updateProfile(const std::string&,const std::string&); + + //Payslip management + void updateSalary(const std::string&, double, double, double, double, double); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp index e4f3c0c..40b473f 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp @@ -27,8 +27,4 @@ employeeMap& DataStore::getEmployees() return m_employees; } -std::shared_ptr& DataStore::getAuthenticatedUser() -{ - return m_authenticatedEmployee; -} diff --git a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h index 5ecfb70..750d741 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h @@ -36,7 +36,6 @@ public: DataStore(DataStore&&) = delete; DataStore& operator=(DataStore&&) = delete; employeeMap& getEmployees(); - std::shared_ptr& getAuthenticatedUser(); logMap& getLogs(); std::shared_ptr& getAuthenticatedEmployee(); void setAuthenticatedEmployee(std::shared_ptr < Employee>); diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.cpp index 71a3d5a..fe439d6 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.cpp @@ -32,9 +32,9 @@ double Payroll::getEmployerPFContribution() const return m_employerPFContribution; } -void Payroll::setPayrollID(const std::string& id) +void Payroll::setBasicSalary(double basicSalary) { - m_id = id; + m_basicSalary = basicSalary; } void Payroll::setHouseRentAllowance(double value) diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.h b/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.h index 48215f5..8aaae92 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.h @@ -25,9 +25,9 @@ public: double getFoodAllowance() const; double getEmployeePFContribution() const; double getEmployerPFContribution() const; - void setPayrollID(const std::string& id); - void setHouseRentAllowance(double value); - void setFoodAllowance(double value); - void setEmployeePFContribution(double value); - void setEmployerPFContribution(double value); + void setBasicSalary(double); + void setHouseRentAllowance(double); + void setFoodAllowance(double); + void setEmployeePFContribution(double); + void setEmployerPFContribution(double); }; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp index 9d7fc4f..952b832 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp @@ -61,8 +61,8 @@ void AuthenticationManagementService::changePassword(const std::string& password } void AuthenticationManagementService::logout() { - if (m_dataStore.getAuthenticatedUser()) { - m_dataStore.getAuthenticatedUser() = nullptr; + if (m_dataStore.getAuthenticatedEmployee()) { + m_dataStore.getAuthenticatedEmployee() = nullptr; } else { throw std::runtime_error("No user currently logged In..."); diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp index 49a86cc..21fd3df 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp @@ -102,6 +102,7 @@ bool EmployeeManagementService::deactivateEmployee(const std::string& id) Employees EmployeeManagementService::getEmployees() { + } std::shared_ptr EmployeeManagementService::getEmployee(const std::string& id) diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.cpp index 154cf1f..6e4bc99 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.cpp @@ -1 +1,21 @@ #include "PayslipManagementService.h" +#include "AuthorizationHelper.h" +#include "Enums.h" + +void PayslipManagementService::updateSalary(const std::string& employeeId, double basicSalary, double houseRentAllowance, double foodAllowance, double employeePFContribution, double employerPFContribution) +{ + util::enforceAuthorization(m_dataStore.getAuthenticatedEmployee()->getEmployeeType(), Enums::EmployeeType::FINANCE); + auto employee = m_dataStore.getEmployees().find(employeeId); + if (employee != m_dataStore.getEmployees().end() && employee->second->getEmployeeType() != Enums::EmployeeType::ADMIN) + { + (employee->second)->getPayroll()->setBasicSalary(basicSalary); + (employee->second)->getPayroll()->setHouseRentAllowance(houseRentAllowance); + (employee->second)->getPayroll()->setFoodAllowance(foodAllowance); + (employee->second)->getPayroll()->setEmployeePFContribution(employeePFContribution); + (employee->second)->getPayroll()->setEmployerPFContribution(employerPFContribution); + } + else + { + throw std::runtime_error("Employee not found, unable to update the salary"); + } +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.h b/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.h index fb51a34..768c2a3 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.h @@ -1,5 +1,7 @@ #pragma once -#include "DataStore.h" +#include +#include +#include"DataStore.h" class PayslipManagementService { @@ -7,4 +9,5 @@ private: DataStore& m_dataStore; public: PayslipManagementService() : m_dataStore(DataStore::getInstance()) {}; + void updateSalary(const std::string&, double, double, double, double, double); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp index 7b3f248..285c3c3 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp @@ -28,47 +28,110 @@ void FinanceExecutiveMenu::run() } } +std::string FinanceExecutiveMenu::getSelectedUserId() +{ + int choice; + std::map> employeeList; + int index = 0; + auto allEmployees = m_zenvyController->getEmployees(); + for (auto& currentEmployee : allEmployees) + { + if (currentEmployee->getEmployeeType() == Enums::EmployeeType::ADMIN) + { + continue; + } + employeeList[++index] = currentEmployee; + } + std::cout << std::left + << std::setw(6) << "Index" + << std::setw(15) << "Employee Id" + << std::setw(25) << "Name" << std::endl; + for (const auto& employee : employeeList) + { + std::cout << std::left << std::setw(6) << employee.first + << std::setw(15) << employee.second->getEmployeeId() + << std::setw(25) << employee.second->getEmployeeName() + << std::endl; + } + std::cout << "Enter the Index: "; + util::read(choice); + auto employeeIterator = employeeList.find(choice); + if (employeeIterator != employeeList.end()) + { + return (employeeIterator->second->getEmployeeId()); + } + else + { + throw std::runtime_error("Invalid Index"); + } +} + +void FinanceExecutiveMenu::updatePayroll() +{ + std::string employeeId; + double basicSalary, houseRentAllowance, foodAllowance, employeePFContribution, employerPFContribution; + employeeId = getSelectedUserId(); + if (employeeId != "") { + std::cout << "Enter the New Basic Salary: "; + util::read(basicSalary); + std::cout << "Enter the New House Rent Allowance: "; + util::read(houseRentAllowance); + std::cout << "Enter the New Food Allowance: "; + util::read(foodAllowance); + std::cout << "Enter the New EmployeePFContribution: "; + util::read(employeePFContribution); + std::cout << "Enter the New EmplyerPFContribution: "; + util::read(employerPFContribution); + m_zenvyController->updateSalary(employeeId, basicSalary, houseRentAllowance, foodAllowance, employeePFContribution, employerPFContribution); + } + else { + throw std::runtime_error("Unexpected error occured"); + } +} + 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: - 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.resolveTicket(); - break; - case 9: - m_zenvyController.generatePayslip(); - break; + //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: + // m_zenvyController.resolveTicket(); + // break; + //case 9: + // m_zenvyController.generatePayslip(); + // break; case 10: - m_zenvyController.updatePayroll(); - break;*/ - case 10: - updateProfile(m_zenvyController); + updatePayroll(); break; case 11: + updateProfile(m_zenvyController); + break; + case 12: return false; default: std::cout << "Enter a valid choice!" << std::endl; } return true; } + + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h index 825322f..1b3ad71 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h @@ -1,5 +1,8 @@ #pragma once #include +#include +#include +#include #include"ZenvyController.h" class FinanceExecutiveMenu @@ -10,5 +13,7 @@ public: FinanceExecutiveMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); + std::string getSelectedUserId(); + void updatePayroll(); };