diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj index 7b35079..a5591c2 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj @@ -162,6 +162,7 @@ + @@ -212,6 +213,7 @@ + diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp index e7f4e30..73cbac4 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp @@ -17,9 +17,9 @@ void ZenvyController::changePassword(const std::string& password) } //Employee Management -void ZenvyController::createEmployee(Enums::EmployeeType employeeType, const std::string& email, const std::string& password, const std::string& name, const std::string& phone) +void ZenvyController::createEmployee(Enums::EmployeeType employeeType, Enums::EmployeeDesignation employeeDesignation, const std::string& email, const std::string& name, const std::string& phone) { - m_employeeManagementService->createEmployee(employeeType, email, password, name, phone); + m_employeeManagementService->createEmployee(employeeType, employeeDesignation, email, name, phone); } bool ZenvyController::deactivateEmployee(const std::string& id) diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h index 89ba319..390976b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h @@ -45,7 +45,7 @@ public: void changePassword(const std::string&); //Employee Management - void createEmployee(Enums::EmployeeType, const std::string&, const std::string&, const std::string&, const std::string&); + void createEmployee(Enums::EmployeeType, Enums::EmployeeDesignation, const std::string&, const std::string&, const std::string&); bool deactivateEmployee(const std::string&); Employees getEmployees(); std::shared_ptr getEmployee(const std::string&); diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Admin.h b/Trenser.Zenvy/Trenser.Zenvy/models/Admin.h index 5233d8d..5b869b0 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Admin.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Admin.h @@ -3,15 +3,13 @@ class Admin : public Employee { +public: Admin() = default; Admin( - const std::string& password, const std::string& name, const std::string& phone, const std::string& email, - const std::string& teamId, std::shared_ptr payroll - ) :Employee(password, name, phone, email, teamId, Enums::EmployeeType::GENERAL, payroll) { - }; + ) :Employee(name, phone, email, Enums::EmployeeType::GENERAL, payroll) {}; ~Admin() = default; }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h b/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h index 4b26cd0..b690f7c 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h @@ -7,6 +7,7 @@ #include "Leave.h" #include "Payroll.h" #include "Enums.h" +#include "ApplicationConfig.h" using payslipMap = std::map>; using attendanceMap = std::map>>; using leaveMap = std::map>; @@ -29,15 +30,13 @@ private: leaveMap m_leaves; Enums::EmployeeType m_employeeType; public: - Employee() : m_id("EMP" + std::to_string(++m_uid)), m_password(""), m_name(""), m_phone(""), m_email(""), m_accountStatus(Enums::AccountStatus::ACTIVE), m_teamStatus(Enums::TeamStatus::NOT_IN_TEAM), m_teamId(""), m_employeeType(Enums::EmployeeType::GENERAL) {} - Employee(const std::string& password, - const std::string& name, + Employee() : m_id("EMP" + std::to_string(++m_uid)), m_password(Config::Authentication::DEFAULT_PASSWORD), m_name(""), m_phone(""), m_email(""), m_accountStatus(Enums::AccountStatus::ACTIVE), m_teamStatus(Enums::TeamStatus::NOT_IN_TEAM), m_teamId(""), m_employeeType(Enums::EmployeeType::GENERAL) {} + Employee(const std::string& name, const std::string& phone, const std::string& email, - const std::string& teamId, Enums::EmployeeType employeeType, std::shared_ptr payroll) - : m_id("EMP" + std::to_string(++m_uid)), m_password(password), m_name(name), m_phone(phone), m_email(email), m_accountStatus(Enums::AccountStatus::ACTIVE), m_teamStatus(Enums::TeamStatus::NOT_IN_TEAM), m_teamId(teamId), m_employeeType(employeeType), m_payroll(payroll) { } + : m_id("EMP" + std::to_string(++m_uid)), m_password(Config::Authentication::DEFAULT_PASSWORD), m_name(name), m_phone(phone), m_email(email), m_accountStatus(Enums::AccountStatus::ACTIVE), m_teamStatus(Enums::TeamStatus::NOT_IN_TEAM), m_teamId(""), m_employeeType(employeeType), m_payroll(payroll) { } const std::string& getEmployeeId() const; const std::string& getEmployeePassword() const; const std::string& getEmployeeName() const; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/FinanceExecutive.h b/Trenser.Zenvy/Trenser.Zenvy/models/FinanceExecutive.h index 8956d13..6713881 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/FinanceExecutive.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/FinanceExecutive.h @@ -7,13 +7,11 @@ class FinanceExecutive : public Employee public: FinanceExecutive() = default; FinanceExecutive( - const std::string& password, const std::string& name, const std::string& phone, const std::string& email, - const std::string& teamId, std::shared_ptr payroll - ) :Employee(password, name, phone, email, teamId, Enums::EmployeeType::GENERAL, payroll) {}; + ) :Employee(name, phone, email, Enums::EmployeeType::FINANCE, payroll) {}; ~FinanceExecutive() = default; }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.h b/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.h index 14b33a4..c413eac 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.h @@ -8,14 +8,11 @@ private: Enums::EmployeeDesignation m_designation; public: GeneralEmployee() : m_designation(Enums::EmployeeDesignation::JUNIOR) {} - GeneralEmployee(const std::string& id, - const std::string& password, - const std::string& name, + GeneralEmployee(const std::string& name, const std::string& phone, const std::string& email, - const std::string& teamId, std::shared_ptr payroll, - Enums::EmployeeDesignation designation) : Employee(password, name, phone, email, teamId,Enums::EmployeeType::GENERAL, payroll), m_designation(designation) {} + Enums::EmployeeDesignation designation) : Employee(name, phone, email, Enums::EmployeeType::GENERAL, payroll), m_designation(designation) {} Enums::EmployeeDesignation getDesignation() const; void setDesignation(Enums::EmployeeDesignation designation); ~GeneralEmployee() = default; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/HRManager.h b/Trenser.Zenvy/Trenser.Zenvy/models/HRManager.h index 5ace8bc..1c9ae17 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/HRManager.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/HRManager.h @@ -3,16 +3,14 @@ class HRManager : public Employee { +public: HRManager() = default; HRManager( - const std::string& password, const std::string& name, const std::string& phone, const std::string& email, - const std::string& teamId, std::shared_ptr payroll - ) :Employee(password, name, phone, email, teamId, Enums::EmployeeType::GENERAL, payroll) { - }; + ) :Employee(name, phone, email, Enums::EmployeeType::HR, payroll) {}; ~HRManager() = default; }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/ITExecutive.h b/Trenser.Zenvy/Trenser.Zenvy/models/ITExecutive.h index c8b1c0f..7cecff3 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/ITExecutive.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/ITExecutive.h @@ -3,16 +3,14 @@ class ITExecutive : public Employee { +public: ITExecutive() = default; ITExecutive( - const std::string& password, const std::string& name, const std::string& phone, const std::string& email, - const std::string& teamId, std::shared_ptr payroll - ) :Employee(password, name, phone, email, teamId, Enums::EmployeeType::GENERAL, payroll) { - }; + ) :Employee(name, phone, email, Enums::EmployeeType::GENERAL, payroll) {}; ~ITExecutive() = default; }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/TalentExecutive.h b/Trenser.Zenvy/Trenser.Zenvy/models/TalentExecutive.h index 88c5018..2352f7a 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/TalentExecutive.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/TalentExecutive.h @@ -3,16 +3,14 @@ class TalentExecutive : public Employee { +public: TalentExecutive() = default; TalentExecutive( - const std::string& password, const std::string& name, const std::string& phone, const std::string& email, - const std::string& teamId, std::shared_ptr payroll - ) :Employee(password, name, phone, email, teamId, Enums::EmployeeType::GENERAL, payroll) { - }; + ) :Employee(name, phone, email, Enums::EmployeeType::TAG, payroll) {}; ~TalentExecutive() = default; }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/TeamExecutive.h b/Trenser.Zenvy/Trenser.Zenvy/models/TeamExecutive.h index e948a78..03f321b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/TeamExecutive.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/TeamExecutive.h @@ -3,16 +3,14 @@ class TeamExecutive : public Employee { +public: TeamExecutive() = default; TeamExecutive( - const std::string& password, const std::string& name, const std::string& phone, const std::string& email, - const std::string& teamId, std::shared_ptr payroll - ) :Employee(password, name, phone, email, teamId, Enums::EmployeeType::GENERAL, payroll) { - }; + ) :Employee(name, phone, email, Enums::EmployeeType::TEAM, payroll) {}; ~TeamExecutive() = default; }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/ApplicationConfig.h b/Trenser.Zenvy/Trenser.Zenvy/services/ApplicationConfig.h index 0f3ab3d..15f54e6 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/ApplicationConfig.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/ApplicationConfig.h @@ -9,11 +9,6 @@ namespace Config namespace Payroll { - constexpr double TEAM_LEAD_BASIC_SALARY = 0.0; - constexpr double TEAM_LEAD_HOUSE_RENT_ALLOWANCE = 0.0; - constexpr double TEAM_LEAD_FOOD_ALLOWANCE = 0.0; - constexpr double TEAM_LEAD_EMPLOYEE_PF_CONTRIBUTION = 0.0; - constexpr double TEAM_LEAD_EMPLOYER_PF_CONTRIBUTION = 0.0; constexpr double SENIOR_BASIC_SALARY = 0.0; constexpr double SENIOR_HOUSE_RENT_ALLOWANCE = 0.0; constexpr double SENIOR_FOOD_ALLOWANCE = 0.0; diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp index 56e27b0..6b019ac 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.cpp @@ -1,7 +1,99 @@ +#include #include "EmployeeManagementService.h" +#include "Factory.h" +#include "Validator.h" +#include "AuthorizationHelper.h" +#include "Enums.h" +#include "HRManager.h" +#include "ITExecutive.h" +#include "TalentExecutive.h" +#include "TeamExecutive.h" +#include "FinanceExecutive.h" +#include "GeneralEmployee.h" -void EmployeeManagementService::createEmployee(Enums::EmployeeType, const std::string& email, const std::string& password, const std::string& name, const std::string& phone) +void EmployeeManagementService::createEmployee(Enums::EmployeeType employeeType, Enums::EmployeeDesignation employeeDesignation, const std::string& email, const std::string& name, const std::string& phone) { + std::shared_ptr authenticatedEmployee = m_dataStore.getAuthenticatedEmployee(); + if (!authenticatedEmployee) + { + throw std::runtime_error("No authenticated user"); + } + Enums::EmployeeType authenticatedEmployeeType = authenticatedEmployee->getEmployeeType(); + std::shared_ptr employee; + std::shared_ptr payroll; + if (!util::isEmailValid(email)) + { + throw std::runtime_error("Invalid Email"); + } + if (!util::isPhoneNumberValid(phone)) + { + throw std::runtime_error("Invalid Phone"); + } + switch (employeeType) + { + case Enums::EmployeeType::HR: + util::enforceAuthorization(authenticatedEmployeeType, Enums::EmployeeType::ADMIN); + payroll = Factory::getObject(Config::Payroll::HR_MANAGER_BASIC_SALARY, + Config::Payroll::HR_MANAGER_HOUSE_RENT_ALLOWANCE, + Config::Payroll::HR_MANAGER_FOOD_ALLOWANCE, + Config::Payroll::HR_MANAGER_EMPLOYEE_PF_CONTRIBUTION, + Config::Payroll::HR_MANAGER_EMPLOYER_PF_CONTRIBUTION); + employee = Factory::getObject(name, phone, email, payroll); + break; + + case Enums::EmployeeType::IT: + case Enums::EmployeeType::FINANCE: + case Enums::EmployeeType::TEAM: + case Enums::EmployeeType::TAG: + util::enforceAuthorization(authenticatedEmployeeType, Enums::EmployeeType::ADMIN, Enums::EmployeeType::HR); + payroll = Factory::getObject(Config::Payroll::EXECUTIVE_BASIC_SALARY, + Config::Payroll::EXECUTIVE_HOUSE_RENT_ALLOWANCE, + Config::Payroll::EXECUTIVE_FOOD_ALLOWANCE, + Config::Payroll::EXECUTIVE_EMPLOYEE_PF_CONTRIBUTION, + Config::Payroll::EXECUTIVE_EMPLOYER_PF_CONTRIBUTION); + switch (employeeType) + { + case Enums::EmployeeType::IT: + employee = Factory::getObject(name, phone, email, payroll); + break; + case Enums::EmployeeType::FINANCE: + employee = Factory::getObject(name, phone, email, payroll); + break; + case Enums::EmployeeType::TEAM: + employee = Factory::getObject(name, phone, email, payroll); + break; + case Enums::EmployeeType::TAG: + employee = Factory::getObject (name, phone, email, payroll); + break; + } + break; + case Enums::EmployeeType::GENERAL: + util::enforceAuthorization(authenticatedEmployeeType, Enums::EmployeeType::ADMIN, Enums::EmployeeType::HR); + switch (employeeDesignation) + { + case Enums::EmployeeDesignation::JUNIOR: + payroll = Factory::getObject(Config::Payroll::JUNIOR_BASIC_SALARY, + Config::Payroll::JUNIOR_HOUSE_RENT_ALLOWANCE, + Config::Payroll::JUNIOR_FOOD_ALLOWANCE, + Config::Payroll::JUNIOR_EMPLOYEE_PF_CONTRIBUTION, + Config::Payroll::JUNIOR_EMPLOYER_PF_CONTRIBUTION); + break; + case Enums::EmployeeDesignation::SENIOR: + payroll = Factory::getObject(Config::Payroll::SENIOR_BASIC_SALARY, + Config::Payroll::SENIOR_HOUSE_RENT_ALLOWANCE, + Config::Payroll::SENIOR_FOOD_ALLOWANCE, + Config::Payroll::SENIOR_EMPLOYEE_PF_CONTRIBUTION, + Config::Payroll::SENIOR_EMPLOYER_PF_CONTRIBUTION); + break; + default: + throw std::runtime_error("Invalid General Employee Designation"); + } + employee = Factory::getObject(name, phone, email, payroll, employeeDesignation); + break; + default: + throw std::runtime_error("Invalid Employee Type"); + } + m_dataStore.getEmployees().emplace(std::make_pair(employee->getEmployeeId(), employee)); } bool EmployeeManagementService::deactivateEmployee(const std::string& id) diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h index 5ff7613..b7ac0f1 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h @@ -12,7 +12,7 @@ private: DataStore& m_dataStore; public: EmployeeManagementService() : m_dataStore(DataStore::getInstance()) {}; - void createEmployee(Enums::EmployeeType, const std::string&, const std::string&, const std::string&, const std::string&); + void createEmployee(Enums::EmployeeType, Enums::EmployeeDesignation, const std::string&, const std::string&, const std::string&); bool deactivateEmployee(const std::string&); Employees getEmployees(); std::shared_ptr getEmployee(const std::string&); diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.h b/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.h index 510ffe3..fb51a34 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/PayslipManagementService.h @@ -1,4 +1,5 @@ #pragma once +#include "DataStore.h" class PayslipManagementService { diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/AuthorizationHelper.cpp b/Trenser.Zenvy/Trenser.Zenvy/utilities/AuthorizationHelper.cpp new file mode 100644 index 0000000..d021692 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/AuthorizationHelper.cpp @@ -0,0 +1 @@ +#include "AuthorizationHelper.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/AuthorizationHelper.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/AuthorizationHelper.h new file mode 100644 index 0000000..e9c4d4b --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/AuthorizationHelper.h @@ -0,0 +1,31 @@ +#pragma once +#include +#include "Enums.h" + +namespace util +{ + inline bool isAuthorized(Enums::EmployeeType current, Enums::EmployeeType first) + { + return current == first; + } + + template + inline bool isAuthorized(Enums::EmployeeType current, Enums::EmployeeType first, + Rest... rest) + { + if (current == first) + { + return true; + } + return isAuthorized(current, rest...); + } + + template + inline void enforceAuthorization(Enums::EmployeeType current, Allowed... allowed) + { + if (!isAuthorized(current, allowed...)) + { + throw std::runtime_error("You are unauthorized to perform this operation!"); + } + } +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp index ecad349..35dd209 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp @@ -3,6 +3,87 @@ #include"InputHelper.h" #include"OutputHelper.h" +static Enums::EmployeeType getEmployeeType() +{ + int choice; + util::clear(); + std::cout << "Select Employee Type" + "\n1. HR Employee" + "\n2. IT Executive" + "\n3. Team Executive" + "\n4. Finance Executive" + "\n5. Talent Executive" + "\n6. General Employee"; + util::read(choice); + switch (choice) + { + case 1: + return Enums::EmployeeType::HR; + case 2: + return Enums::EmployeeType::IT; + case 3: + return Enums::EmployeeType::TEAM; + case 4: + return Enums::EmployeeType::FINANCE; + case 5: + return Enums::EmployeeType::TAG; + case 6: + return Enums::EmployeeType::GENERAL; + default: + return Enums::EmployeeType::INVALID; + } +} + +static Enums::EmployeeDesignation getEmployeeDesignation() +{ + int choice; + util::clear(); + std::cout << "Select Employee Designation" + "\n1. SENIOR" + "\n2. JUNIOR"; + util::read(choice); + switch (choice) + { + case 1: + return Enums::EmployeeDesignation::SENIOR; + case 2: + return Enums::EmployeeDesignation::JUNIOR; + default: + return Enums::EmployeeDesignation::INVALID; + } +} + +static void createEmployee(std::shared_ptr controller) +{ + Enums::EmployeeType employeeType = getEmployeeType(); + Enums::EmployeeDesignation employeeDesignation = Enums::EmployeeDesignation::INVALID; + std::string name, email, phone; + switch (employeeType) + { + case Enums::EmployeeType::INVALID: + std::cout << "Invalid Choice"; + util::pressEnter(); + return; + case Enums::EmployeeType::GENERAL: + employeeDesignation = getEmployeeDesignation(); + if (employeeDesignation == Enums::EmployeeDesignation::INVALID) + { + std::cout << "Invalid Choice"; + util::pressEnter(); + return; + } + break; + } + std::cout << "Enter Name: "; + util::read(name); + std::cout << "Enter Email: "; + util::read(email); + std::cout << "Enter Phone: "; + util::read(phone); + controller->createEmployee(employeeType, employeeDesignation, name, email, phone); + std::cout << "\nCreated Employee Successfully."; +} + void AdminMenu::run() { bool isMenuActive = true; @@ -12,7 +93,7 @@ void AdminMenu::run() { int choice; util::clear(); - std::cout << "Zenvy - HR Management System\n1. Create HRManager\n2. Create Employee\n3. View Employee\n4. Deactivate Employee\n5. Logout\nEnter your Choice: "; + std::cout << "Admin Menu\n1. Create User\n2. View Employee\n3. Deactivate Employee\n4. Logout\nEnter your Choice: "; util::read(choice); if (!handleOperation(choice)) { @@ -31,22 +112,19 @@ bool AdminMenu::handleOperation(int choice) { switch (choice) { - /*case 1: - m_zenvyController.createHRManager(); + case 1: + createEmployee(m_zenvyController); break; - case 2: - m_zenvyController.createEmployee(); - break; - case 3: + /*case 2: m_zenvyController.viewEmployee(); break; - case 4: + case 3: m_zenvyController.deactivateEmployee(); break;*/ - case 5: + case 4: return false; default: std::cout << "Enter a valid choice!" << std::endl; } return true; -} \ No newline at end of file +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp index 7bf812c..fa3ffbd 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp @@ -3,6 +3,84 @@ #include"InputHelper.h" #include"OutputHelper.h" +static Enums::EmployeeType getEmployeeType() +{ + int choice; + util::clear(); + std::cout << "Select Employee Type" + "\n1. IT Executive" + "\n2. Team Executive" + "\n3. Finance Executive" + "\n4. Talent Executive" + "\n5. General Employee"; + util::read(choice); + switch (choice) + { + case 1: + return Enums::EmployeeType::IT; + case 2: + return Enums::EmployeeType::TEAM; + case 3: + return Enums::EmployeeType::FINANCE; + case 4: + return Enums::EmployeeType::TAG; + case 5: + return Enums::EmployeeType::GENERAL; + default: + return Enums::EmployeeType::INVALID; + } +} + +static Enums::EmployeeDesignation getEmployeeDesignation() +{ + int choice; + util::clear(); + std::cout << "Select Employee Designation" + "\n1. SENIOR" + "\n2. JUNIOR"; + util::read(choice); + switch (choice) + { + case 1: + return Enums::EmployeeDesignation::SENIOR; + case 2: + return Enums::EmployeeDesignation::JUNIOR; + default: + return Enums::EmployeeDesignation::INVALID; + } +} + +static void createEmployee(std::shared_ptr controller) +{ + Enums::EmployeeType employeeType = getEmployeeType(); + Enums::EmployeeDesignation employeeDesignation = Enums::EmployeeDesignation::INVALID; + std::string name, email, phone; + switch (employeeType) + { + case Enums::EmployeeType::INVALID: + std::cout << "Invalid Choice"; + util::pressEnter(); + return; + case Enums::EmployeeType::GENERAL: + employeeDesignation = getEmployeeDesignation(); + if (employeeDesignation == Enums::EmployeeDesignation::INVALID) + { + std::cout << "Invalid Choice"; + util::pressEnter(); + return; + } + break; + } + std::cout << "Enter Name: "; + util::read(name); + std::cout << "Enter Email: "; + util::read(email); + std::cout << "Enter Phone: "; + util::read(phone); + controller->createEmployee(employeeType, employeeDesignation, name, email, phone); + std::cout << "\nCreated Employee Successfully."; +} + void HRManagerMenu::run() { bool isMenuActive = true; @@ -52,9 +130,9 @@ bool HRManagerMenu::handleOperation(int choice) //case 7: // m_zenvyController.viewAnnouncements(); // break; - //case 8: - // m_zenvyController.createEmployee(); - // break; + case 8: + createEmployee(m_zenvyController); + break; //case 9: // m_zenvyController.regularizeAttenance(); // break;