From a1c9edce31908a5627e62a3e070d16b6e6bf2bd7 Mon Sep 17 00:00:00 2001 From: Jissin Sam Mathew Date: Thu, 16 Apr 2026 12:36:13 +0530 Subject: [PATCH] Implement View Payslip History EMP011 : View Payslip History - Implemented Enums::Month enum and helper functions getMonth() and getMonthString() for month formatting. - Created viewPayslipHistory() helper in MenuHelper.h to display payslip history in aligned tabular format. - Integrated viewPayslipHistory() option into EmployeeMenu, FinanceExecutiveMenu, HRManagerMenu, ITExecutiveMenu, TalentExecutiveMenu, TeamExecutiveMenu, and TeamLeadMenu. Smitha Mohan --- .../controllers/ZenvyController.cpp | 5 ++ .../controllers/ZenvyController.h | 1 + .../services/PayslipManagementService.cpp | 4 ++ .../services/PayslipManagementService.h | 3 + Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h | 60 +++++++++++++++++++ .../Trenser.Zenvy/views/EmployeeMenu.cpp | 9 ++- .../views/FinanceExecutiveMenu.cpp | 3 + .../Trenser.Zenvy/views/HRManagerMenu.cpp | 3 + .../Trenser.Zenvy/views/ITExecutiveMenu.cpp | 3 + .../Trenser.Zenvy/views/MenuHelper.h | 29 +++++++++ .../views/TalentExecutiveMenu.cpp | 3 + .../Trenser.Zenvy/views/TeamExecutiveMenu.cpp | 3 + .../Trenser.Zenvy/views/TeamLeadMenu.cpp | 3 + 13 files changed, 124 insertions(+), 5 deletions(-) diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp index aced692..071a4c2 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp @@ -53,6 +53,11 @@ void ZenvyController::generatePayslips() m_payslipManagementService->generatePayslips(); } +payslipMap& ZenvyController::getPayslips() +{ + return m_payslipManagementService->getPayslips(); +} + 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 56140de..09b61bf 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h @@ -60,6 +60,7 @@ public: //Payslip management void updateSalary(const std::string&, double, double, double, double, double); void generatePayslips(); + payslipMap& getPayslips(); //File Management void loadStates(); diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.cpp index 0d43120..82519cf 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.cpp @@ -26,6 +26,10 @@ void PayslipManagementService::updateSalary(const std::string& employeeId, doubl } } +payslipMap& PayslipManagementService::getPayslips() { + return m_dataStore.getPayslips(); +} + void PayslipManagementService::generatePayslips() { util::enforceAuthorization(m_dataStore.getAuthenticatedEmployee()->getEmployeeType(), Enums::EmployeeType::FINANCE); diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.h b/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.h index 298c248..69bd7f7 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.h @@ -3,6 +3,8 @@ #include #include"DataStore.h" +using payslipMap = std::map>; + class PayslipManagementService { private: @@ -10,6 +12,7 @@ private: public: PayslipManagementService() : m_dataStore(DataStore::getInstance()) {}; void updateSalary(const std::string&, double, double, double, double, double); + payslipMap& getPayslips(); void generatePayslips(); void loadPayrolls(); void savePayrolls(); diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h index 1539ee9..89f78a7 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h @@ -91,6 +91,23 @@ namespace Enums { INVALID_PASSWORD }; + enum class Month + { + JANUARY, + FEBRUARY, + MARCH, + APRIL, + MAY, + JUNE, + JULY, + AUGUST, + SEPTEMBER, + OCTOBER, + NOVEMBER, + DECEMBER, + INVALID + }; + inline std::string getAccountStatusString(AccountStatus status) { switch (status) @@ -170,6 +187,27 @@ namespace Enums { } } + inline std::string getMonthString(Month month) + { + switch (month) + { + case Month::JANUARY : return "January"; + case Month::FEBRUARY: return "February"; + case Month::MARCH: return "March"; + case Month::APRIL: return "April"; + case Month::MAY: return "May"; + case Month::JUNE: return "June"; + case Month::JULY: return "July"; + case Month::AUGUST: return "August"; + case Month::SEPTEMBER: return "September"; + case Month::OCTOBER: return "October"; + case Month::NOVEMBER: return "November"; + case Month::DECEMBER: return "December"; + case Month::INVALID: return "Invalid Month"; + default: return "Unknown"; + } + } + inline AccountStatus getAccountStatus(const std::string& input) { if (input == "ACTIVE") @@ -245,4 +283,26 @@ namespace Enums { } return EmployeeDesignation::INVALID; } + + inline Month getMonth(const int inputMonth) + { + switch (inputMonth) + { + case 1: return Month::JANUARY; + case 2: return Month::FEBRUARY; + case 3: return Month::MARCH; + case 4: return Month::APRIL; + case 5: return Month::MAY; + case 6: return Month::JUNE; + case 7: return Month::JULY; + case 8: return Month::AUGUST; + case 9: return Month::SEPTEMBER; + case 10: return Month::OCTOBER; + case 11: return Month::NOVEMBER; + case 12: return Month::DECEMBER; + default: return Month::INVALID; + } + } + } + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp index a2f2a56..9239fca 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp @@ -33,17 +33,16 @@ bool EmployeeMenu::handleOperation(int choice) { switch (choice) { - /* - case 1: + /*case 1: m_zenvyController.applyLeave(); break; case 2: m_zenvyController.viewPayslip(); - break; + break;*/ case 3: - m_zenvyController.viewPayslipHistory(); + viewPayslipHistory(m_zenvyController); break; - case 4 : + /*case 4 : m_zenvyController.raiseTicket(); break; case 5 : diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp index 74aadbc..5fbb32f 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp @@ -65,6 +65,9 @@ bool FinanceExecutiveMenu::handleOperation(int choice) { switch (choice) { + case 3: + viewPayslipHistory(m_zenvyController); + break; case 4: viewEmployees(m_zenvyController); break; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp index 0709976..0ae8a81 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp @@ -32,6 +32,9 @@ bool HRManagerMenu::handleOperation(int choice) { switch (choice) { + case 3: + viewPayslipHistory(m_zenvyController); + break; case 4: viewEmployees(m_zenvyController); break; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp index d691228..161ec9d 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp @@ -32,6 +32,9 @@ bool ITExecutiveMenu::handleOperation(int choice) { switch (choice) { + case 3: + viewPayslipHistory(m_zenvyController); + break; case 4: viewEmployees(m_zenvyController); break; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h index 09b084e..0ceac6e 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h @@ -2,7 +2,9 @@ #include #include #include +#include #include +#include #include #include #include "Enums.h" @@ -15,6 +17,33 @@ void createEmployee(std::shared_ptr controller); +inline void viewPayslipHistory(std::shared_ptr controller) +{ + auto employeePayslips = controller->getCurrentEmployee()->getEmployeePayslips(); + util::clear(); + std::cout << "Payslips\n" << std::endl; + std::cout << std::left + << std::setw(15) << "Date" + << std::setw(15) << "Payslip ID" + << std::setw(15) << "Employee ID" + << std::setw(12) << "Salary" + << std::setw(25) << "TimeStamp" + << std::endl; + for (const auto& payslip : employeePayslips) + { + std::ostringstream dateStream; + dateStream << payslip.second->getTimestamp().getYear() << " - " << Enums::getMonthString(Enums::getMonth(payslip.second->getTimestamp().getMonth())); + std::cout << std::left + << std::setw(15) << dateStream.str() + << std::setw(15) << payslip.first + << std::setw(15) << payslip.second->getEmployeeId() + << std::setw(12) << payslip.second->getSalary() + << std::setw(25) << payslip.second->getTimestamp().toString() + << std::endl; + } + util::pressEnter(); +} + inline void viewProfile(std::shared_ptr controller) { util::clear(); diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp index 1c28319..4e52414 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp @@ -32,6 +32,9 @@ bool TalentExecutiveMenu::handleOperation(int choice) { switch (choice) { + case 3: + viewPayslipHistory(m_zenvyController); + break; case 4: viewEmployees(m_zenvyController); break; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp index 89ebf9d..8a67820 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp @@ -32,6 +32,9 @@ bool TeamExecutiveMenu::handleOperation(int choice) { switch (choice) { + case 3: + viewPayslipHistory(m_zenvyController); + break; case 4: viewEmployees(m_zenvyController); break; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp index 0084158..7f5af31 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp @@ -32,6 +32,9 @@ bool TeamLeadMenu::handleOperation(int choice) { switch (choice) { + case 3: + viewPayslipHistory(m_zenvyController); + break; case 7: viewEmployees(m_zenvyController); break;