From 1785660e9430352838304d8ce58bb11fa1010dda Mon Sep 17 00:00:00 2001 From: Tinu Johnson Date: Tue, 7 Apr 2026 17:38:53 +0530 Subject: [PATCH 1/6] Add Employee Listing Feature EMP007 : View All Employees - Implemented getEmployees() in ZenvyController to return list of employees - Added working getEmployees() implementation in EmployeeManagementService - Fixed iterator usage to correctly extract map values into Employees vector - Added viewEmployees() UI flow in EmployeeMenu - Integrated employee listing into EmployeeMenu option flow - Added enumToString() helper for printing employee roles - Improved formatting and filtering of ACTIVE employees in employee listing - Performed minor code cleanup and consistency adjustments in controller and menu Smitha Mohan --- .../controllers/ZenvyController.cpp | 4 +- .../controllers/ZenvyController.h | 2 +- .../services/EmployeeManagementService.cpp | 15 +++++-- .../Trenser.Zenvy/views/EmployeeMenu.cpp | 45 +++++++++++++++++-- .../Trenser.Zenvy/views/EmployeeMenu.h | 1 + 5 files changed, 58 insertions(+), 9 deletions(-) diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp index e7f4e30..ec1e7b1 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp @@ -27,10 +27,12 @@ bool ZenvyController::deactivateEmployee(const std::string& id) return m_employeeManagementService->deactivateEmployee(id); } -Employees EmployeeManagementService::getEmployees() +Employees ZenvyController::getEmployee() { + return m_employeeManagementService->getEmployees(); } + std::shared_ptr EmployeeManagementService::getEmployee(const std::string& id) { } diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h index 89ba319..29ce7d3 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h @@ -47,6 +47,6 @@ public: //Employee Management void createEmployee(Enums::EmployeeType, const std::string&, const std::string&, const std::string&, const std::string&); bool deactivateEmployee(const std::string&); - Employees getEmployees(); std::shared_ptr getEmployee(const std::string&); + Employees getEmployee(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp index 56e27b0..cce72f7 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp @@ -8,10 +8,17 @@ bool EmployeeManagementService::deactivateEmployee(const std::string& id) { } -Employees EmployeeManagementService::getEmployees() -{ -} - std::shared_ptr EmployeeManagementService::getEmployee(const std::string& id) { } + +Employees EmployeeManagementService::getEmployees() +{ + Employees result; + auto& employee = m_dataStore.getEmployees(); + for (const auto& iterator : employee) + { + result.push_back(iterator.second); + } + return result; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp index 99e3bc0..b3f6ec1 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp @@ -48,11 +48,11 @@ bool EmployeeMenu::handleOperation(int choice) break; case 6: m_zenvyController.viewTicketHistory(); - break; + break;*/ case 7: - m_zenvyController.viewEmployees(); + viewEmployees(); break; - case 8: + /*case 8: m_zenvyController.searchEmployee(); break; case 9: @@ -76,4 +76,43 @@ bool EmployeeMenu::handleOperation(int choice) std::cout << "Enter a valid choice!" << std::endl; } return true; +} + +void EmployeeMenu::viewEmployees() +{ + std::cout << "EMPID\t\tName\t\tRole\t\tTeamId\t\tEmail\t\tPhone\t\t"; + auto employee = m_zenvyController->getEmployee(); + for (const auto& iterator : employee) + { + if (iterator->getEmployeeAccountStatus() == Enums::AccountStatus::ACTIVE) + { + std::cout << iterator->getEmployeeId() << "\t" + << iterator->getEmployeeName() << "\t" + << enumToString(iterator->getEmployeeType()) << "\t" + << iterator->getEmployeeTeamId() << "\t" + << iterator->getEmployeeEmail() << "\t" + << iterator->getEmployeePhone() << std::endl; + } + } +} + +std::string enumToString(Enums::EmployeeType type) +{ + switch (type) + { + case Enums::EmployeeType::IT: + return "IT Executive"; + case Enums::EmployeeType::FINANCE: + return "Finance Executive"; + case Enums::EmployeeType::GENERAL: + return "General Employee"; + case Enums::EmployeeType::HR: + return "HR"; + case Enums::EmployeeType::TAG: + return "Talent Acquacition Executive"; + case Enums::EmployeeType::TEAM: + return "Team Executive"; + case Enums::EmployeeType::INVALID: + return "Invalid"; + } } \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h index f082b66..3ed9b3a 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h @@ -10,5 +10,6 @@ public: EmployeeMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); + void viewEmployees(); }; From 6256b9ea82ed7d0bdda0fb7d9e82361e2e940bdb Mon Sep 17 00:00:00 2001 From: Tinu Johnson Date: Tue, 7 Apr 2026 19:19:08 +0530 Subject: [PATCH 2/6] Implement Review fixes EMP007 : View All Employees - Added check for empty employee map - Filtered only ACTIVE employees - Added formatted table using in EmplopyeeMenu::viewEmployee() - Added check for empty employee list Smitha Mohan --- .../services/EmployeeManagementService.cpp | 13 +++++-- .../Trenser.Zenvy/views/EmployeeMenu.cpp | 36 ++++++++++++------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp index cce72f7..29a7363 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp @@ -15,10 +15,17 @@ std::shared_ptr EmployeeManagementService::getEmployee(const std Employees EmployeeManagementService::getEmployees() { Employees result; - auto& employee = m_dataStore.getEmployees(); - for (const auto& iterator : employee) + auto& employees = m_dataStore.getEmployees(); + if (employees.size() <= 0) { - result.push_back(iterator.second); + return result; + } + for (const auto& iterator : employees) + { + if (iterator.second->getEmployeeAccountStatus() == Enums::AccountStatus::ACTIVE) + { + result.push_back(iterator.second); + } } return result; } \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp index b3f6ec1..02c903f 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp @@ -1,4 +1,5 @@ #include +#include #include "EmployeeMenu.h" #include"InputHelper.h" #include"OutputHelper.h" @@ -80,19 +81,30 @@ bool EmployeeMenu::handleOperation(int choice) void EmployeeMenu::viewEmployees() { - std::cout << "EMPID\t\tName\t\tRole\t\tTeamId\t\tEmail\t\tPhone\t\t"; - auto employee = m_zenvyController->getEmployee(); - for (const auto& iterator : employee) + std::cout << std::left + << std::setw(10) << "EMPID" + << std::setw(20) << "Name" + << std::setw(15) << "Role" + << std::setw(10) << "TeamId" + << std::setw(25) << "Email" + << std::setw(15) << "Phone" + << std::endl; + auto employees = m_zenvyController->getEmployee(); + if (employees.empty()) { - if (iterator->getEmployeeAccountStatus() == Enums::AccountStatus::ACTIVE) - { - std::cout << iterator->getEmployeeId() << "\t" - << iterator->getEmployeeName() << "\t" - << enumToString(iterator->getEmployeeType()) << "\t" - << iterator->getEmployeeTeamId() << "\t" - << iterator->getEmployeeEmail() << "\t" - << iterator->getEmployeePhone() << std::endl; - } + std::cout << "No employees found\n"; + return; + } + for (const auto& iterator : employees) + { + std::cout << std::left + << std::setw(10) << iterator->getEmployeeId() + << std::setw(20) << iterator->getEmployeeName() + << std::setw(15) << enumToString(iterator->getEmployeeType()) + << std::setw(10) << iterator->getEmployeeTeamId() + << std::setw(25) << iterator->getEmployeeEmail() + << std::setw(15) << iterator->getEmployeePhone() + << std::endl; } } From c27ca5240a76428e1181265b1af6d364a4ad524a Mon Sep 17 00:00:00 2001 From: Tinu Johnson Date: Tue, 7 Apr 2026 20:32:30 +0530 Subject: [PATCH 3/6] Added MenuHelper feature for ViewEmployee MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EMP007 : View Employees - Added MenuHelper.cpp and MenuHelper.h to project configuration - Moved viewEmployees() implementation from individual menu classes into MenuHelper - Added inline viewEmployees(shared_ptr) helper with formatted output - Added enumToString() to MenuHelper for employee role display - Updated AdminMenu, EmployeeMenu, FinanceExecutiveMenu, HRManagerMenu, ITExecutiveMenu, TalentExecutiveMenu, TeamExecutiveMenu, and TeamLeadMenu to use viewEmployees(m_zenvyController) instead of per‑menu implementations - Removed old viewEmployees() method from EmployeeMenu - Updated menu options to reflect new centralized viewEmployees() function Smitha Mohan --- .../Trenser.Zenvy/Trenser.Zenvy.vcxproj | 2 + .../Trenser.Zenvy/views/AdminMenu.cpp | 7 ++- .../Trenser.Zenvy/views/EmployeeMenu.cpp | 56 ++----------------- .../Trenser.Zenvy/views/EmployeeMenu.h | 1 - .../views/FinanceExecutiveMenu.cpp | 7 ++- .../Trenser.Zenvy/views/HRManagerMenu.cpp | 7 ++- .../Trenser.Zenvy/views/ITExecutiveMenu.cpp | 7 ++- .../Trenser.Zenvy/views/MenuHelper.cpp | 1 + .../Trenser.Zenvy/views/MenuHelper.h | 54 ++++++++++++++++++ .../views/TalentExecutiveMenu.cpp | 7 ++- .../Trenser.Zenvy/views/TeamExecutiveMenu.cpp | 7 ++- .../Trenser.Zenvy/views/TeamLeadMenu.cpp | 7 ++- 12 files changed, 89 insertions(+), 74 deletions(-) create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj index 7b35079..3116d41 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj @@ -172,6 +172,7 @@ + @@ -222,6 +223,7 @@ + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp index ecad349..d0c9d1f 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp @@ -2,6 +2,7 @@ #include "AdminMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include "MenuHelper.h" void AdminMenu::run() { @@ -36,11 +37,11 @@ bool AdminMenu::handleOperation(int choice) break; case 2: m_zenvyController.createEmployee(); - break; + break;*/ case 3: - m_zenvyController.viewEmployee(); + viewEmployees(m_zenvyController); break; - case 4: + /*case 4: m_zenvyController.deactivateEmployee(); break;*/ case 5: diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp index 02c903f..c80732b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp @@ -1,8 +1,9 @@ #include #include #include "EmployeeMenu.h" -#include"InputHelper.h" -#include"OutputHelper.h" +#include "InputHelper.h" +#include "OutputHelper.h" +#include "MenuHelper.h" void EmployeeMenu::run() { @@ -51,7 +52,7 @@ bool EmployeeMenu::handleOperation(int choice) m_zenvyController.viewTicketHistory(); break;*/ case 7: - viewEmployees(); + viewEmployees(m_zenvyController); break; /*case 8: m_zenvyController.searchEmployee(); @@ -79,52 +80,3 @@ bool EmployeeMenu::handleOperation(int choice) return true; } -void EmployeeMenu::viewEmployees() -{ - std::cout << std::left - << std::setw(10) << "EMPID" - << std::setw(20) << "Name" - << std::setw(15) << "Role" - << std::setw(10) << "TeamId" - << std::setw(25) << "Email" - << std::setw(15) << "Phone" - << std::endl; - auto employees = m_zenvyController->getEmployee(); - if (employees.empty()) - { - std::cout << "No employees found\n"; - return; - } - for (const auto& iterator : employees) - { - std::cout << std::left - << std::setw(10) << iterator->getEmployeeId() - << std::setw(20) << iterator->getEmployeeName() - << std::setw(15) << enumToString(iterator->getEmployeeType()) - << std::setw(10) << iterator->getEmployeeTeamId() - << std::setw(25) << iterator->getEmployeeEmail() - << std::setw(15) << iterator->getEmployeePhone() - << std::endl; - } -} - -std::string enumToString(Enums::EmployeeType type) -{ - switch (type) - { - case Enums::EmployeeType::IT: - return "IT Executive"; - case Enums::EmployeeType::FINANCE: - return "Finance Executive"; - case Enums::EmployeeType::GENERAL: - return "General Employee"; - case Enums::EmployeeType::HR: - return "HR"; - case Enums::EmployeeType::TAG: - return "Talent Acquacition Executive"; - case Enums::EmployeeType::TEAM: - return "Team Executive"; - case Enums::EmployeeType::INVALID: - return "Invalid"; - } -} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h index 3ed9b3a..f082b66 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h @@ -10,6 +10,5 @@ public: EmployeeMenu() : m_zenvyController(std::make_shared()) {}; void run(); bool handleOperation(int); - void viewEmployees(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp index 081d281..edb0b4d 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp @@ -2,6 +2,7 @@ #include "FinanceExecutiveMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include"MenuHelper.h" void FinanceExecutiveMenu::run() { @@ -39,11 +40,11 @@ bool FinanceExecutiveMenu::handleOperation(int choice) break; case 3: m_zenvyController.viewPayslipHistory(); - break; + break;*/ case 4: - m_zenvyController.viewEmployees(); + viewEmployees(m_zenvyController); break; - case 5: + /*case 5: m_zenvyController.searchEmployee(); break; case 6: diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp index 7bf812c..d1fe2b3 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp @@ -2,6 +2,7 @@ #include "HRManagerMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include"MenuHelper.h" void HRManagerMenu::run() { @@ -40,9 +41,9 @@ bool HRManagerMenu::handleOperation(int choice) //case 3: // m_zenvyController.viewPayslipHistory(); // break; - //case 4: - // m_zenvyController.viewEmployees(); - // break; + case 4: + viewEmployees(m_zenvyController); + break; //case 5: // m_zenvyController.searchEmployee(); // break; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp index 836ca39..3823d53 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp @@ -2,6 +2,7 @@ #include "ITExecutiveMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include"MenuHelper.h" void ITExecutiveMenu::run() { @@ -39,11 +40,11 @@ bool ITExecutiveMenu::handleOperation(int choice) break; case 3: m_zenvyController.viewPayslipHistory(); - break; + break;*/ case 4: - m_zenvyController.viewEmployees(); + viewEmployees(m_zenvyController); break; - case 5: + /*case 5: m_zenvyController.searchEmployee(); break; case 6: diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.cpp new file mode 100644 index 0000000..36b2e02 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.cpp @@ -0,0 +1 @@ +#include "MenuHelper.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h new file mode 100644 index 0000000..83c6d69 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h @@ -0,0 +1,54 @@ +#pragma once +#include +#include "InputHelper.h" +#include "OutputHelper.h" + +inline void viewEmployees(std::shared_ptr m_zenvyController) +{ + std::cout << std::left + << std::setw(10) << "EMPID" + << std::setw(20) << "Name" + << std::setw(15) << "Role" + << std::setw(10) << "TeamId" + << std::setw(25) << "Email" + << std::setw(15) << "Phone" + << std::endl; + auto employees = m_zenvyController->getEmployee(); + if (employees.empty()) + { + std::cout << "No employees found\n"; + return; + } + for (const auto& iterator : employees) + { + std::cout << std::left + << std::setw(10) << iterator->getEmployeeId() + << std::setw(20) << iterator->getEmployeeName() + << std::setw(15) << enumToString(iterator->getEmployeeType()) + << std::setw(10) << iterator->getEmployeeTeamId() + << std::setw(25) << iterator->getEmployeeEmail() + << std::setw(15) << iterator->getEmployeePhone() + << std::endl; + } +} + +std::string enumToString(Enums::EmployeeType type) +{ + switch (type) + { + case Enums::EmployeeType::IT: + return "IT Executive"; + case Enums::EmployeeType::FINANCE: + return "Finance Executive"; + case Enums::EmployeeType::GENERAL: + return "General Employee"; + case Enums::EmployeeType::HR: + return "HR"; + case Enums::EmployeeType::TAG: + return "Talent Acquacition Executive"; + case Enums::EmployeeType::TEAM: + return "Team Executive"; + case Enums::EmployeeType::INVALID: + return "Invalid"; + } +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp index 45fbfba..686c74c 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp @@ -2,6 +2,7 @@ #include "TalentExecutiveMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include"MenuHelper.h" void TalentExecutiveMenu::run() { @@ -40,9 +41,9 @@ bool TalentExecutiveMenu::handleOperation(int choice) //case 3: // m_zenvyController.viewPayslipHistory(); // break; - //case 4: - // m_zenvyController.viewEmployees(); - // break; + case 4: + viewEmployees(m_zenvyController); + break; //case 5: // m_zenvyController.searchEmployee(); // break; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp index 12c300b..a2c3232 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp @@ -2,6 +2,7 @@ #include "TeamExecutiveMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include"MenuHelper.h" void TeamExecutiveMenu::run() { @@ -40,9 +41,9 @@ bool TeamExecutiveMenu::handleOperation(int choice) //case 3: // m_zenvyController.viewPayslipHistory(); // break; - //case 4: - // m_zenvyController.viewEmployees(); - // break; + case 4: + viewEmployees(m_zenvyController); + break; //case 5: // m_zenvyController.searchEmployee(); // break; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp index 4204fb7..3a581e6 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp @@ -2,6 +2,7 @@ #include "TeamLeadMenu.h" #include"InputHelper.h" #include"OutputHelper.h" +#include"MenuHelper.h" void TeamLeadMenu::run() { @@ -48,11 +49,11 @@ bool TeamLeadMenu::handleOperation(int choice) break; case 6: m_zenvyController.viewTicketHistory(); - break; + break;*/ case 7: - m_zenvyController.viewEmployees(); + viewEmployees(m_zenvyController); break; - case 8: + /*case 8: m_zenvyController.searchEmployee(); break; case 9: From e470dbc791df4f7f888b58a80fb7861149fb1507 Mon Sep 17 00:00:00 2001 From: Tinu Johnson Date: Wed, 8 Apr 2026 11:04:09 +0530 Subject: [PATCH 4/6] Updated MenuHelper.h EMP007 : View Employees - Updated logic in viewEmployees() method. Smitha Mohan --- Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h index 83c6d69..0adf3be 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h @@ -1,10 +1,17 @@ #pragma once #include +#include "ZenvyController.h" #include "InputHelper.h" #include "OutputHelper.h" inline void viewEmployees(std::shared_ptr m_zenvyController) { + auto employees = m_zenvyController->getEmployee(); + if (employees.empty()) + { + std::cout << "No employees found\n"; + return; + } std::cout << std::left << std::setw(10) << "EMPID" << std::setw(20) << "Name" @@ -13,12 +20,6 @@ inline void viewEmployees(std::shared_ptr m_zenvyController) << std::setw(25) << "Email" << std::setw(15) << "Phone" << std::endl; - auto employees = m_zenvyController->getEmployee(); - if (employees.empty()) - { - std::cout << "No employees found\n"; - return; - } for (const auto& iterator : employees) { std::cout << std::left From 282ab721b5bd69843850306bec9af827d8c6fac5 Mon Sep 17 00:00:00 2001 From: Joel Thomas Date: Sat, 11 Apr 2026 17:54:20 +0530 Subject: [PATCH 5/6] Improved employee view formatting and menu text SRS02 : Employee Management - Updated "View Employee" to "View Employees" in Admin Menu - Added clear screen and header for employee list display - Improved column spacing and alignment for better readability - Reordered fields for a cleaner layout - Added pressEnter prompt after viewing employees Smitha Mohan --- .../Trenser.Zenvy/views/AdminMenu.cpp | 2 +- .../Trenser.Zenvy/views/MenuHelper.h | 20 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp index df11eea..59bbadc 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp @@ -13,7 +13,7 @@ void AdminMenu::run() { int choice; util::clear(); - std::cout << "Admin Menu\n1. Create User\n2. View Employee\n3. Deactivate Employee\n4. Search Employee\n5. Update Profile\n6. Logout\nEnter your Choice: "; + std::cout << "Admin Menu\n1. Create User\n2. View Employees\n3. Deactivate Employee\n4. Search Employee\n5. Update Profile\n6. Logout\nEnter your Choice: "; util::read(choice); if (!handleOperation(choice)) { diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h index 2165868..ae51660 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h @@ -122,29 +122,33 @@ inline void deactivateEmployee(const std::shared_ptr& controlle inline void viewEmployees(std::shared_ptr m_zenvyController) { + util::clear(); + std::cout << "Employee List\n"; auto employees = m_zenvyController->getEmployees(); if (employees.empty()) { std::cout << "No employees found\n"; + util::pressEnter(); return; } std::cout << std::left - << std::setw(10) << "EMPID" - << std::setw(20) << "Name" - << std::setw(15) << "Role" - << std::setw(10) << "TeamId" + << std::setw(15) << "Employee ID" + << std::setw(25) << "Name" + << std::setw(25) << "Role" << std::setw(25) << "Email" << std::setw(15) << "Phone" + << std::setw(10) << "TeamId" << std::endl; for (const auto& iterator : employees) { std::cout << std::left - << std::setw(10) << iterator->getId() - << std::setw(20) << iterator->getEmployeeName() - << std::setw(15) << Enums::getEmployeeTypeString(iterator->getEmployeeType()) - << std::setw(10) << iterator->getEmployeeTeamId() + << std::setw(15) << iterator->getId() + << std::setw(25) << iterator->getEmployeeName() + << std::setw(25) << Enums::getEmployeeTypeString(iterator->getEmployeeType()) << std::setw(25) << iterator->getEmployeeEmail() << std::setw(15) << iterator->getEmployeePhone() + << std::setw(10) << iterator->getEmployeeTeamId() << std::endl; } + util::pressEnter(); } From ed1cf4e30668ea10e9d41bd21a4cbe517165b08e Mon Sep 17 00:00:00 2001 From: Joel Thomas Date: Mon, 13 Apr 2026 11:46:55 +0530 Subject: [PATCH 6/6] Minor fixes and formatting updates in payroll, enums, and menus SRS02 : Employee Management - Fixed variable naming issue in Payroll deserialization - Added braces for consistency in enum string-to-value helpers - Improved readability in validation logic - Corrected typo in Finance Executive payroll menu text Smitha Mohan --- .../Trenser.Zenvy/models/Payroll.cpp | 6 ++-- Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h | 28 +++++++++++++++++++ .../Trenser.Zenvy/utilities/Validator.cpp | 5 +++- .../views/FinanceExecutiveMenu.cpp | 2 +- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.cpp index 3291519..b145a4f 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.cpp @@ -109,11 +109,11 @@ std::string Payroll::serialize() const std::shared_ptr Payroll::deserialize(const std::string& record) { std::string id, employeeId; - std::string basicSalaryStr, houseRentAllowanceString, foodAllowanceString, employeePFString, employerPFString; + std::string basicSalaryString, houseRentAllowanceString, foodAllowanceString, employeePFString, employerPFString; std::istringstream serializedPayroll(record); std::getline(serializedPayroll, id, ','); std::getline(serializedPayroll, employeeId, ','); - std::getline(serializedPayroll, basicSalaryStr, ','); + std::getline(serializedPayroll, basicSalaryString, ','); std::getline(serializedPayroll, houseRentAllowanceString, ','); std::getline(serializedPayroll, foodAllowanceString, ','); std::getline(serializedPayroll, employeePFString, ','); @@ -121,7 +121,7 @@ std::shared_ptr Payroll::deserialize(const std::string& record) try { - double basicSalary = std::stod(basicSalaryStr); + double basicSalary = std::stod(basicSalaryString); double houseRentAllowance = std::stod(houseRentAllowanceString); double foodAllowance = std::stod(foodAllowanceString); double employeePFContribution = std::stod(employeePFString); diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h index 2021b68..d54cb0b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h @@ -162,48 +162,76 @@ namespace Enums { inline AccountStatus getAccountStatus(const std::string& input) { if (input == "ACTIVE") + { return AccountStatus::ACTIVE; + } if (input == "INACTIVE") + { return AccountStatus::INACTIVE; + } return AccountStatus::INACTIVE; } inline EmployeeType getEmployeeType(const std::string& input) { if (input == "GENERAL") + { return EmployeeType::GENERAL; + } if (input == "IT") + { return EmployeeType::IT; + } if (input == "FINANCE") + { return EmployeeType::FINANCE; + } if (input == "TALENT_ACQUISITION") + { return EmployeeType::TALENT_ACQUISITION; + } if (input == "HR") + { return EmployeeType::HR; + } if (input == "TEAM") + { return EmployeeType::TEAM; + } if (input == "ADMIN") + { return EmployeeType::ADMIN; + } return EmployeeType::INVALID; } inline TeamStatus getTeamStatus(const std::string& str) { if (str == "IN_TEAM") + { return TeamStatus::IN_TEAM; + } if (str == "NOT_IN_TEAM") + { return TeamStatus::NOT_IN_TEAM; + } return TeamStatus::NOT_IN_TEAM; } inline EmployeeDesignation getEmployeeDesignation(const std::string& input) { if (input == "JUNIOR") + { return EmployeeDesignation::JUNIOR; + } if (input == "SENIOR") + { return EmployeeDesignation::SENIOR; + } if (input == "TEAM_LEAD") + { return EmployeeDesignation::TEAM_LEAD; + } return EmployeeDesignation::INVALID; } } diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.cpp b/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.cpp index dd52e33..ee99e68 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.cpp @@ -18,7 +18,10 @@ bool util::isPhoneNumberValid(const std::string& phoneNumber) { bool util::isEmailValid(const std::string& email) { size_t index = email.find('@'); - if (index == std::string::npos) return false; + if (index == std::string::npos) + { + return false; + } if (email.find('@', index + 1) != std::string::npos) { return false; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp index bc8db4e..4702ff3 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp @@ -43,7 +43,7 @@ void FinanceExecutiveMenu::updatePayroll() util::read(foodAllowance); std::cout << "Enter the New EmployeePFContribution: "; util::read(employeePFContribution); - std::cout << "Enter the New EmplyerPFContribution: "; + std::cout << "Enter the New EmployerPFContribution: "; util::read(employerPFContribution); m_zenvyController->updateSalary(employeeId, basicSalary, houseRentAllowance, foodAllowance, employeePFContribution, employerPFContribution); std::cout << "Payroll Updated";