diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp index d3d8a51..bc34097 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp @@ -32,6 +32,11 @@ void ZenvyController::updateProfile(const std::string& name, const std::string& m_employeeManagementService->updateProfile(name,phone); } +std::pair>> ZenvyController::searchEmployee(const std::string& name) +{ + return m_employeeManagementService->searchEmployee(name); +} + 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); diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h index 1ed7415..424e386 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h @@ -50,6 +50,7 @@ public: Employees getEmployees(); std::shared_ptr getCurrentEmployee(); void updateProfile(const std::string&,const std::string&); + std::pair>> searchEmployee(const std::string&); //Payslip management void updateSalary(const std::string&, double, double, double, double, double); diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp index ae453c7..09906fd 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp @@ -112,7 +112,6 @@ void EmployeeManagementService::createEmployee(Enums::EmployeeType employeeType, m_dataStore.getPayrolls().emplace(std::make_pair(payroll->getId(), payroll)); m_dataStore.getEmployees().emplace(std::make_pair(employee->getId(), employee)); } - bool EmployeeManagementService::deactivateEmployee(const std::string& id) { auto& authenticatedEmployee = m_dataStore.getAuthenticatedEmployee(); @@ -161,6 +160,34 @@ void EmployeeManagementService::updateProfile(const std::string& name,const std: employee->setEmployeePhone(phone); } +std::pair>> EmployeeManagementService::searchEmployee(const std::string& name) +{ + std::shared_ptr currentUser = m_dataStore.getAuthenticatedEmployee(); + Enums::EmployeeType employeeType = currentUser->getEmployeeType(); + employeeMap& employees = m_dataStore.getEmployees(); + std::vector> employeeList; + if (employees.empty()) + { + return std::make_pair(employeeType, employeeList); + } + for (const auto& employeePair : employees) { + const auto& employee = employeePair.second; + if (!employee) + { + continue; + } + std::string employeeName = employee->getEmployeeName(); + std::transform(employeeName.begin(), employeeName.end(), employeeName.begin(), ::tolower); + std::string searchName = name; + std::transform(searchName.begin(), searchName.end(), searchName.begin(), ::tolower); + if (employeeName.find(searchName) != std::string::npos) + { + employeeList.push_back(employee); + } + } + return { employeeType, employeeList }; +} + void EmployeeManagementService::loadEmployees() { FileManager employeeFileManager(Config::File::EMPLOYEES_FILE); diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h index 03f3848..8c24d2b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h @@ -1,6 +1,8 @@ #pragma once #include #include +#include +#include #include "DataStore.h" #include "Enums.h" @@ -16,6 +18,7 @@ public: 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(); diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h index d54cb0b..1539ee9 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h @@ -159,6 +159,17 @@ namespace Enums { } } + inline std::string getCandidateStatusString(CandidateStatus status) + { + switch (status) + { + case CandidateStatus::PENDING: return "Pending"; + case CandidateStatus::SHORTLISTED: return "Shortlisted"; + case CandidateStatus::REJECTED: return "Rejected"; + default: return "Unknown"; + } + } + inline AccountStatus getAccountStatus(const std::string& input) { if (input == "ACTIVE") diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h index 26128c1..a82c0a3 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h @@ -1,5 +1,4 @@ #pragma once - #include #include #include diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp index 59bbadc..6c3c0d5 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp @@ -41,6 +41,9 @@ bool AdminMenu::handleOperation(int choice) case 3: deactivateEmployee(m_zenvyController); break; + case 4: + searchEmployee(m_zenvyController); + break; case 5: updateProfile(m_zenvyController); break; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp index da9741d..98be55b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp @@ -55,24 +55,9 @@ bool EmployeeMenu::handleOperation(int choice) case 7: viewEmployees(m_zenvyController); break; - /*case 8: - m_zenvyController.searchEmployee(); + case 8: + searchEmployee(m_zenvyController); break; - case 9: - m_zenvyController.viewTeamMembers(); - break; - case 10: - m_zenvyController.bookMeetingRoom(); - break; - case 11: - m_zenvyController.viewBookingHistory(); - break; - case 12: - m_zenvyController.viewNotifications(); - break; - case 13: - m_zenvyController.viewAnnouncements(); - break;*/ case 14: updateProfile(m_zenvyController); break; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp index 4702ff3..3626596 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp @@ -58,33 +58,12 @@ 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: viewEmployees(m_zenvyController); 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 5: + searchEmployee(m_zenvyController); + break; case 10: updatePayroll(); break; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp index c3e1d0d..bcf6ce8 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp @@ -32,39 +32,15 @@ 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: viewEmployees(m_zenvyController); break; - //case 5: - // m_zenvyController.searchEmployee(); - // break; - //case 6: - // m_zenvyController.viewNotifications(); - // break; - //case 7: - // m_zenvyController.viewAnnouncements(); - // break; + case 5: + searchEmployee(m_zenvyController); + break; case 8: createEmployee(m_zenvyController); 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; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp index 3e4079d..f9aa3d3 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp @@ -32,30 +32,12 @@ bool ITExecutiveMenu::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: viewEmployees(m_zenvyController); break; - /*case 5: - m_zenvyController.searchEmployee(); + case 5: + searchEmployee(m_zenvyController); break; - case 6: - m_zenvyController.viewNotifications(); - break; - case 7: - m_zenvyController.viewAnnouncements(); - break; - case 8: - m_zenvyController.resolveTicket(); - break;*/ case 9: updateProfile(m_zenvyController); break; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h index ae51660..4c84538 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/MenuHelper.h @@ -4,13 +4,14 @@ #include #include #include +#include +#include "Enums.h" +#include"InputHelper.h" +#include"OutputHelper.h" #include "Employee.h" #include "ZenvyController.h" #include "MenuHelper.h" -#include "InputHelper.h" -#include "OutputHelper.h" #include "Validator.h" -#include "Enums.h" void createEmployee(std::shared_ptr controller); @@ -152,3 +153,75 @@ inline void viewEmployees(std::shared_ptr m_zenvyController) } util::pressEnter(); } + +inline void searchEmployee(std::shared_ptr& m_zenvyController) +{ + std::string name; + util::clear(); + std::cout << "Enter Employee Name: "; + util::read(name); + std::pair>> searchResults = m_zenvyController->searchEmployee(name); + if (!(searchResults.second).empty()) + { + std::cout << std::left + << std::setw(10) << "ID" + << std::setw(20) << "Name" + << std::setw(25) << "Email" + << std::setw(15) << "Phone" + << std::setw(20) << "Type" + << std::setw(20) << "TeamStatus" + << std::setw(15) << "TeamID"; + if (searchResults.first == Enums::EmployeeType::FINANCE + || searchResults.first == Enums::EmployeeType::HR + || searchResults.first == Enums::EmployeeType::ADMIN) + { + std::cout << std::left + << std::setw(17) << "PayrollID" + << std::setw(20) << "BasicSalary" + << std::setw(15) << "EmployeePF" + << std::setw(15) << "EmployerPF" + << std::setw(15) << "FoodAllowance" + << std::setw(15) << "HouseRentAllowance"; + } + std::cout << std::endl; + for (const auto& employee : searchResults.second) + { + if (employee->getEmployeeAccountStatus() == Enums::AccountStatus::ACTIVE) + { + std::cout << std::left + << std::setw(10) << employee->getId() + << std::setw(20) << employee->getEmployeeName() + << std::setw(25) << employee->getEmployeeEmail() + << std::setw(15) << employee->getEmployeePhone() + << std::setw(20) << Enums::getEmployeeTypeString(employee->getEmployeeType()) + << std::setw(20) << Enums::getTeamStatusString(employee->getEmployeeTeamStatus()); + if (employee->getEmployeeTeamId() == "") + { + std::cout << std::setw(15) << "NULL"; + } + else + { + std::cout << std::setw(15) << employee->getEmployeeTeamId(); + } + if (searchResults.first == Enums::EmployeeType::FINANCE + || searchResults.first == Enums::EmployeeType::HR + || searchResults.first == Enums::EmployeeType::ADMIN) + { + std::cout << std::left + << std::setw(17) << employee->getPayroll()->getId() + << std::setw(20) << employee->getPayroll()->getBasicSalary() + << std::setw(15) << employee->getPayroll()->getEmployeePFContribution() + << std::setw(15) << employee->getPayroll()->getEmployerPFContribution() + << std::setw(15) << employee->getPayroll()->getFoodAllowance() + << std::setw(15) << employee->getPayroll()->getHouseRentAllowance(); + } + std::cout << std::endl; + } + } + } + else + { + std::cout << "No Employee found with this name" << std::endl; + } + util::pressEnter(); +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp index d46f810..18afc15 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp @@ -32,42 +32,12 @@ bool TalentExecutiveMenu::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: viewEmployees(m_zenvyController); break; - //case 5: - // m_zenvyController.searchEmployee(); - // break; - //case 6: - // m_zenvyController.viewNotifications(); - // break; - //case 7: - // m_zenvyController.viewAnnouncements(); - // break; - //case 8: - // m_zenvyController.createNewJob(); - // break; - //case 9: - // m_zenvyController.viewJobOpenings(); - // break; - //case 10: - // m_zenvyController.addCandidate(); - // break; - //case 11: - // m_zenvyController.updateCandidateStatus(); - // break; - //case 12: - // m_zenvyController.viewShortlistedCandidates(); - // break; + case 5: + searchEmployee(m_zenvyController); + break; case 13: updateProfile(m_zenvyController); break; @@ -78,4 +48,4 @@ bool TalentExecutiveMenu::handleOperation(int choice) util::pressEnter(); } return true; -} +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp index feba35c..d0fd1f9 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp @@ -32,45 +32,12 @@ bool TeamExecutiveMenu::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: viewEmployees(m_zenvyController); break; - //case 5: - // m_zenvyController.searchEmployee(); - // break; - //case 6: - // m_zenvyController.viewNotifications(); - // break; - //case 7: - // m_zenvyController.viewAnnouncements(); - // break; - //case 8: - // m_zenvyController.createTeam(); - // break; - //case 9: - // m_zenvyController.updateTeam(); - // break; - //case 10: - // m_zenvyController.removeTeam(); - // break; - //case 11: - // m_zenvyController.assignEmployee(); - // break; - //case 12: - // m_zenvyController.unassignEmployee(); - // break; - //case 13: - // m_zenvyController.viewTeams(); - // break; + case 5: + searchEmployee(m_zenvyController); + break; case 14: updateProfile(m_zenvyController); break; @@ -81,4 +48,4 @@ bool TeamExecutiveMenu::handleOperation(int choice) util::pressEnter(); } return true; -} +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp index 767eef1..694b509 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp @@ -32,51 +32,12 @@ bool TeamLeadMenu::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.raiseTicket(); - break; - case 5: - m_zenvyController.viewTicket(); - break; - case 6: - m_zenvyController.viewTicketHistory(); - break;*/ case 7: viewEmployees(m_zenvyController); break; - /*case 8: - m_zenvyController.searchEmployee(); + case 8: + searchEmployee(m_zenvyController); break; - case 9: - m_zenvyController.viewTeamMembers(); - break; - case 10: - m_zenvyController.bookMeetingRoom(); - break; - case 11: - m_zenvyController.viewBookingHistory(); - break; - case 12: - m_zenvyController.viewNotifications(); - break; - case 13: - m_zenvyController.viewAnnouncements(); - break; - case 14: - m_zenvyController.regularizeAttendance(); - break; - case 15: - m_zenvyController.updateLeaveRequest(); - break;*/ case 16: updateProfile(m_zenvyController); break; @@ -87,4 +48,4 @@ bool TeamLeadMenu::handleOperation(int choice) util::pressEnter(); } return true; -} +} \ No newline at end of file