diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp index e69de29..4413069 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp @@ -0,0 +1,7 @@ +#include "UserInterface.h" +int main() +{ + UserInterface userInterFace; + userInterFace.run(); + return 0; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj index 88bb765..4424458 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj @@ -102,7 +102,7 @@ true _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - $(ProjectDir)controllers;$(ProjectDir)services;$(ProjectDir)utilities;%(AdditionalIncludeDirectories) + $(ProjectDir)models;$(ProjectDir)controllers;$(ProjectDir)services;$(ProjectDir)utilities;$(ProjectDir)factories;$(ProjectDir)datastores;$(ProjectDir)views;%(AdditionalIncludeDirectories) Console @@ -131,6 +131,7 @@ + @@ -145,6 +146,7 @@ + @@ -165,6 +167,15 @@ + + + + + + + + + @@ -174,6 +185,7 @@ + @@ -188,6 +200,7 @@ + @@ -204,6 +217,15 @@ + + + + + + + + + diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters index 3c26252..8a20aa6 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters @@ -5,10 +5,6 @@ {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms @@ -31,11 +27,15 @@ {eb93b9d1-08eb-48aa-be2a-e17085ce27bd} + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {84db0710-2b0f-48bc-a72f-bd10c29954fc} + - - Source Files - Services @@ -156,6 +156,42 @@ Models + + Source Files + + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Models + + + Services + @@ -269,6 +305,39 @@ Models + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Models + + + Services + diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp index aa50123..1f26894 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp @@ -1 +1,17 @@ #include "ZenvyController.h" + +//Authentication +AuthenticationContext ZenvyController::login(const std::string& email, const std::string& password) +{ + return m_authenticationManagementService->login(email, password); +} + +void ZenvyController::logout() +{ + m_authenticationManagementService->logout(); +} + +void ZenvyController::changePassword(const std::string& password) +{ + m_authenticationManagementService->changePassword(password); +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h index 7dae696..11a609d 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h @@ -1,5 +1,48 @@ #pragma once +#include +#include +#include "AuthenticationManagementService.h" +#include "AttendanceManagementService.h" +#include "BookingManagementService.h" +#include "EmployeeManagememtService.h" +#include "LeaveManagementService.h" +#include "NotificationManagementService.h" +#include "PayslipManagementService.h" +#include "TalentAcquisitionManagementService.h" +#include "TeamManagementService.h" +#include "TicketManagementService.h" +#include "Enums.h" + +using AuthenticationContext = std::tuple; + class ZenvyController { +private: + std::shared_ptr m_authenticationManagementService; + std::shared_ptr m_attendanceManagementService; + std::shared_ptr m_bookingManagementService; + std::shared_ptr m_employeeManagememtService; + std::shared_ptr m_leaveManagementService; + std::shared_ptr m_notificationManagementService; + std::shared_ptr m_payslipManagementService; + std::shared_ptr m_talentAcquisitionManagementService; + std::shared_ptr m_teamManagementService; + std::shared_ptr m_ticketManagementService; +public: + ZenvyController() : + m_authenticationManagementService(std::make_shared()), + m_attendanceManagementService(std::make_shared()), + m_bookingManagementService(std::make_shared()), + m_employeeManagememtService(std::make_shared()), + m_leaveManagementService(std::make_shared()), + m_notificationManagementService(std::make_shared()), + m_payslipManagementService(std::make_shared()), + m_talentAcquisitionManagementService(std::make_shared()), + m_teamManagementService(std::make_shared()), + m_ticketManagementService(std::make_shared()) {}; + + //Authentication + AuthenticationContext login(const std::string& email, const std::string& password); + void logout(); + void changePassword(const std::string&); }; - diff --git a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp index e81f26f..16ddca1 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp @@ -1 +1,33 @@ #include "DataStore.h" + +DataStore& DataStore::getInstance() +{ + static DataStore dataStore; + return dataStore; +} + +logMap& DataStore::getLogs() +{ + return m_logs; +} + +std::shared_ptr& DataStore::getAuthenticatedEmployee() +{ + return m_authenticatedEmployee; +} + +void DataStore::setAuthenticatedEmployee(std::shared_ptr authenticatedEmployee) +{ + m_authenticatedEmployee = authenticatedEmployee; +} + +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 09042e4..5ecfb70 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h @@ -1,5 +1,43 @@ #pragma once +#include +#include +#include "Employee.h" +#include "Log.h" +#include "Timestamp.h" +#include "Admin.h" +#include "HRManager.h" +#include "GeneralEmployee.h" +#include "ITExecutive.h" +#include "FinanceExecutive.h" +#include "TeamExecutive.h" +#include "TalentExecutive.h" +#include "Team.h" +#include "Room.h" +#include "Ticket.h" +#include "JobListing.h" +#include "Notification.h" +#include "Announcement.h" +#include "Faq.h" + +using employeeMap = std::map>; +using logMap = std::map>; + class DataStore { -}; - +private: + std::shared_ptr m_authenticatedEmployee; + employeeMap m_employees; + logMap m_logs; + DataStore() = default; +public: + static DataStore& getInstance(); + DataStore(const DataStore&) = delete; + DataStore& operator=(const DataStore&) = delete; + 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>); +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Employee.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Employee.cpp index d5d4554..4bd8c3b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Employee.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Employee.cpp @@ -122,4 +122,9 @@ void Employee::addLeave(std::shared_ptr leave) { m_leaves[leave->getLeaveId()] = leave; } -} \ No newline at end of file +} + +Enums::EmployeeType Employee::getEmployeeType() const +{ + return m_employeeType; +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h b/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h index 559afba..3509db1 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h @@ -26,16 +26,18 @@ private: payslipMap m_payslips; attendanceMap m_attendances; leaveMap m_leaves; + Enums::EmployeeType m_employeeType; public: - Employee() : m_id(""), m_password(""), m_name(""), m_phone(""), m_email(""), m_accountStatus(Enums::AccountStatus::ACTIVE), m_teamStatus(Enums::TeamStatus::NOT_IN_TEAM), m_teamId("") {} + Employee() : m_id(""), 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& id, const std::string& password, 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(id), 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_payroll(payroll) {} + : m_id(id), 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) { } const std::string& getEmployeeId() const; const std::string& getEmployeePassword() const; const std::string& getEmployeeName() const; @@ -59,5 +61,6 @@ public: void addPayslip(std::shared_ptr payslip); void addAttendance(std::shared_ptr attendance); void addLeave(std::shared_ptr leave); - ~Employee() = default; + Enums::EmployeeType getEmployeeType() const; + virtual ~Employee() = default; }; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/FAQ.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/FAQ.cpp new file mode 100644 index 0000000..63a403f --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/models/FAQ.cpp @@ -0,0 +1 @@ +#include "Faq.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/FAQ.h b/Trenser.Zenvy/Trenser.Zenvy/models/FAQ.h new file mode 100644 index 0000000..b90edff --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/models/FAQ.h @@ -0,0 +1,6 @@ +#pragma once + +class Faq +{ +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.h b/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.h index 0485bbb..6307e28 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.h @@ -15,8 +15,7 @@ public: const std::string& email, const std::string& teamId, std::shared_ptr payroll, - Enums::EmployeeDesignation designation) - : Employee(id, password, name, phone, email, teamId, payroll), m_designation(designation) {} + Enums::EmployeeDesignation designation) : Employee(id, password, name, phone, email, teamId,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/Log.h b/Trenser.Zenvy/Trenser.Zenvy/models/Log.h index 9f05194..f2350b2 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Log.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Log.h @@ -9,8 +9,8 @@ private: std::string m_message; public: Log() : m_timestamp(), m_message("") {} - Log(const util::Timestamp& timestamp, const std::string& message) - : m_timestamp(timestamp), m_message(message) {} + Log(const std::string& message) + : m_timestamp(), m_message(message) {} const util::Timestamp& getTimestamp() const; const std::string& getMessage() const; void setTimestamp(const util::Timestamp& timestamp); diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/ApplicationConfig.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/ApplicationConfig.cpp new file mode 100644 index 0000000..cb68b98 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/services/ApplicationConfig.cpp @@ -0,0 +1 @@ +#include "ApplicationConfig.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/ApplicationConfig.h b/Trenser.Zenvy/Trenser.Zenvy/services/ApplicationConfig.h new file mode 100644 index 0000000..4d7db21 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/services/ApplicationConfig.h @@ -0,0 +1,6 @@ +#pragma once + +namespace Config +{ + constexpr const char* DEFAULT_PASSWORD = "password"; +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp index 2143fb2..5c0511a 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp @@ -1 +1,70 @@ +#include #include "AuthenticationManagementService.h" +#include "ApplicationConfig.h" + +std::tuple AuthenticationManagementService::login(const std::string& email, const std::string& password) +{ + employeeMap& employees = m_dataStore.getEmployees(); + Enums::LoginStatus loginStatus = Enums::LoginStatus::USER_NOT_FOUND; + Enums::EmployeeType employeeType = Enums::EmployeeType::INVALID; + Enums::EmployeeDesignation employeeDesignation = Enums::EmployeeDesignation::INVALID; + for (const auto& employee : employees) + { + if (employee.second->getEmployeeEmail() == email) + { + if (employee.second->getEmployeePassword() == password) + { + if (password == Config::DEFAULT_PASSWORD) + { + loginStatus = Enums::LoginStatus::FIRST_LOGIN; + } + else + { + loginStatus = Enums::LoginStatus::SUCCESS; + } + employeeType = employee.second->getEmployeeType(); + if (employeeType == Enums::EmployeeType::GENERAL) + { + std::shared_ptr generalEmployee = std::dynamic_pointer_cast(employee.second); + if (generalEmployee) + { + employeeDesignation = generalEmployee->getDesignation(); + } + else + { + throw std::runtime_error("Invalid Employee Type"); + } + } + m_dataStore.setAuthenticatedEmployee(employee.second); + } + else + { + loginStatus = Enums::LoginStatus::INVALID_PASSWORD; + } + break; + } + } + return std::make_tuple(loginStatus, employeeType, employeeDesignation); +} + +void AuthenticationManagementService::changePassword(const std::string& password) +{ + std::shared_ptr authenticatedUser = m_dataStore.getAuthenticatedUser(); + if (authenticatedUser) + { + authenticatedUser->setEmployeePassword(password); + } + else + { + throw std::runtime_error("User not found"); + } +} + +void AuthenticationManagementService::logout() { + if (m_dataStore.getAuthenticatedUser()) { + m_dataStore.getAuthenticatedUser() = nullptr; + } + else { + throw std::runtime_error("No user currently logged In..."); + } +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h index fe2e0af..2f812d6 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h @@ -1,5 +1,19 @@ #pragma once +#include +#include +#include +#include +#include "DataStore.h" +#include "Enums.h" + class AuthenticationManagementService { +private: + DataStore& m_dataStore; +public: + AuthenticationManagementService() : m_dataStore(DataStore::getInstance()) {}; + std::tuple login(const std::string& username, const std::string& password); + void logout(); + void changePassword(const std::string&); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/LogService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/LogService.cpp index 28458fa..1742a3d 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/LogService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/LogService.cpp @@ -1 +1,12 @@ #include "LogService.h" +#include "Log.h" +#include "Factory.h" +#include "DataStore.h" + +void LogService::log(const std::string& message) +{ + DataStore& dataStore = DataStore::getInstance(); + logMap& logs = dataStore.getLogs(); + std::shared_ptr log = Factory::getObject(message); + logs.emplace(std::make_pair(log->getTimestamp(), log)); +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/LogService.h b/Trenser.Zenvy/Trenser.Zenvy/services/LogService.h index f5b6105..6918b25 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/LogService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/LogService.h @@ -1,5 +1,8 @@ #pragma once +#include "Log.h" class LogService { +public: + static void log(const std::string&); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h index 84f2848..ace8792 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h @@ -66,7 +66,27 @@ namespace Enums { { JUNIOR, SENIOR, - TEAM_LEAD + TEAM_LEAD, + INVALID }; + enum class EmployeeType + { + GENERAL, + IT, + FINANCE, + TAG, + HR, + TEAM, + ADMIN, + INVALID + }; + + enum class LoginStatus + { + SUCCESS, + FIRST_LOGIN, + USER_NOT_FOUND, + INVALID_PASSWORD + }; } diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.cpp b/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.cpp index 8faecf3..0f3b773 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.cpp @@ -1,11 +1 @@ #include "inputHelper.h" - -void util::readString(std::string& value) -{ - getline(std::cin >> std::ws, value); -} - -void util::pressEnter() -{ - system("pause"); -} diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h index 604ae31..559acda 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h @@ -1,4 +1,5 @@ #pragma once + #include #include #include @@ -6,18 +7,24 @@ namespace util { - template - void readValue(T& value) - { - std::cin >> value; - if (std::cin.fail()) - { - std::cin.clear(); - std::cin.ignore(std::numeric_limits::max(), '\n'); - throw std::runtime_error("Invalid Console Input"); - } - } + template + inline void read(T& value) + { + if (!(std::cin >> value)) + { + std::cin.clear(); + std::cin.ignore(std::numeric_limits::max(), '\n'); + throw std::runtime_error("Invalid console input"); + } + } - void readString(std::string&); - void pressEnter(); + inline void read(std::string& value) + { + std::getline(std::cin >> std::ws, value); + } + + inline void pressEnter() + { + system("pause"); + } } \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.cpp b/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.cpp index fa7707e..f6c4306 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.cpp @@ -1,4 +1,7 @@ +#include +#include #include "Validator.h" +#include "ApplicationConfig.h" bool util::isPhoneNumberValid(const std::string& phoneNumber) { if (phoneNumber.size() != 10) @@ -26,3 +29,43 @@ bool util::isEmailValid(const std::string& email) { } return true; } + + +bool util::isPasswordValid(const std::string& password) +{ + if (password == Config::DEFAULT_PASSWORD) + { + return false; + } + if (password.length() < 8) + return false; + bool hasUpper = false; + bool hasLower = false; + bool hasDigit = false; + bool hasSpecial = false; + + for (char character : password) + { + if (std::isspace(static_cast(character))) + { + return false; + } + if (std::isupper(static_cast(character))) + { + hasUpper = true; + } + else if (std::islower(static_cast(character))) + { + hasLower = true; + } + else if (std::isdigit(static_cast(character))) + { + hasDigit = true; + } + else + { + hasSpecial = true; + } + } + return hasUpper && hasLower && hasDigit && hasSpecial; +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.h index d5fd36d..fbdf962 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.h +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.h @@ -7,4 +7,5 @@ namespace util { bool isPhoneNumberValid(const std::string&); bool isEmailValid(const std::string&); + bool isPasswordValid(const std::string&); } \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp new file mode 100644 index 0000000..ecad349 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp @@ -0,0 +1,52 @@ +#include +#include "AdminMenu.h" +#include"InputHelper.h" +#include"OutputHelper.h" + +void AdminMenu::run() +{ + bool isMenuActive = true; + while (isMenuActive) + { + try + { + 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: "; + util::read(choice); + if (!handleOperation(choice)) + { + isMenuActive = false; + } + } + catch (const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + util::pressEnter(); + } + } +} + +bool AdminMenu::handleOperation(int choice) +{ + switch (choice) + { + /*case 1: + m_zenvyController.createHRManager(); + break; + case 2: + m_zenvyController.createEmployee(); + break; + case 3: + m_zenvyController.viewEmployee(); + break; + case 4: + m_zenvyController.deactivateEmployee(); + break;*/ + case 5: + 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/AdminMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h new file mode 100644 index 0000000..dab23c5 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h @@ -0,0 +1,14 @@ +#pragma once +#include +#include"ZenvyController.h" + +class AdminMenu +{ +private: + std::shared_ptr m_zenvyController; +public: + AdminMenu() :m_zenvyController(std::make_shared()) {}; + void run(); + bool handleOperation(int); +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp new file mode 100644 index 0000000..99e3bc0 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp @@ -0,0 +1,79 @@ +#include +#include "EmployeeMenu.h" +#include"InputHelper.h" +#include"OutputHelper.h" + +void EmployeeMenu::run() +{ + bool isMenuActive = true; + while (isMenuActive) + { + try + { + int choice; + util::clear(); + std::cout << "Zenvy - The HR Management System\n1. Apply Leave\n2. View Payslip\n3. View Payslip History\n4. Raise Ticke\n5. View Ticket\n6. View Ticket History\n7. View Employees\n8. Search Employee\n9. View Team Members\n10. Book Meeting Room\n11. View Booking History\n12. View Notification\n13. View Announcements\n14. Logout\nEnter your Choice: "; + util::read(choice); + if (!handleOperation(choice)) + { + isMenuActive = false; + } + } + catch (const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + util::pressEnter(); + } + } +} + +bool EmployeeMenu::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: + m_zenvyController.viewEmployees(); + break; + case 8: + m_zenvyController.searchEmployee(); + 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: + 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/EmployeeMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h new file mode 100644 index 0000000..f082b66 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h @@ -0,0 +1,14 @@ +#pragma once +#include +#include"ZenvyController.h" + +class EmployeeMenu +{ +private: + std::shared_ptr m_zenvyController; +public: + EmployeeMenu() : m_zenvyController(std::make_shared()) {}; + void run(); + bool handleOperation(int); +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp new file mode 100644 index 0000000..081d281 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp @@ -0,0 +1,70 @@ +#include +#include "FinanceExecutiveMenu.h" +#include"InputHelper.h" +#include"OutputHelper.h" + +void FinanceExecutiveMenu::run() +{ + bool isMenuActive = true; + while (isMenuActive) + { + try + { + int choice; + util::clear(); + std::cout << "Zenvy - The HR Management System\n1. Apply Leave\n2. View Payslip\n3. View Payslip History\n4. View Employees\n5. Search Employee\n6. View Notification\n7. View Announcements\n8. Resolve Ticket\n9. Generate Payslip\n10. Update Payroll\n11. Logout\nEnter your Choice: "; + util::read(choice); + if (!handleOperation(choice)) + { + isMenuActive = false; + } + } + catch (const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + util::pressEnter(); + } + } +} + +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 10: + m_zenvyController.updatePayroll(); + break;*/ + case 11: + 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 new file mode 100644 index 0000000..825322f --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h @@ -0,0 +1,14 @@ +#pragma once +#include +#include"ZenvyController.h" + +class FinanceExecutiveMenu +{ +private: + std::shared_ptr m_zenvyController; +public: + FinanceExecutiveMenu() : m_zenvyController(std::make_shared()) {}; + void run(); + bool handleOperation(int); +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp new file mode 100644 index 0000000..7bf812c --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp @@ -0,0 +1,73 @@ +#include +#include "HRManagerMenu.h" +#include"InputHelper.h" +#include"OutputHelper.h" + +void HRManagerMenu::run() +{ + bool isMenuActive = true; + while (isMenuActive) + { + try + { + int choice; + util::clear(); + std::cout << "Zenvy - The HR Management System\n1. Apply Leave\n2. View Payslip\n3. View Payslip History\n4. View Employees\n5. Search Employee\n6. View Notification\n7. View Announcements\n8. Create Employee\n9. Regularize Attendance\n10. Update Leave Request\n11. Register CandidateAsEmployee\n12. Logout\nEnter your Choice: "; + util::read(choice); + if (!handleOperation(choice)) + { + isMenuActive = false; + } + } + catch (const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + util::pressEnter(); + } + } +} + +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: + // 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.createEmployee(); + // break; + //case 9: + // m_zenvyController.regularizeAttenance(); + // break; + //case 10: + // m_zenvyController.updateLeaveRequest(); + // break; + //case 11: + // m_zenvyController.registercandidateAsEmployee(); + // break; + case 12: + return false; + default: + std::cout << "Enter a valid choice!" << std::endl; + } + return true; +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h new file mode 100644 index 0000000..05e1f41 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h @@ -0,0 +1,14 @@ +#pragma once +#include +#include"ZenvyController.h" + +class HRManagerMenu +{ +private: + std::shared_ptr m_zenvyController; +public: + HRManagerMenu() : m_zenvyController(std::make_shared()) {}; + void run(); + bool handleOperation(int); +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp new file mode 100644 index 0000000..836ca39 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp @@ -0,0 +1,64 @@ +#include +#include "ITExecutiveMenu.h" +#include"InputHelper.h" +#include"OutputHelper.h" + +void ITExecutiveMenu::run() +{ + bool isMenuActive = true; + while (isMenuActive) + { + try + { + int choice; + util::clear(); + std::cout << "Zenvy - The HR Management System\n1. Apply Leave\n2. View Payslip\n3. View Payslip History\n4. View Employees\n5. Search Employee\n6. View Notification\n7. View Announcements\n8. Resolve Ticket\n9. Logout\nEnter your Choice: "; + util::read(choice); + if (!handleOperation(choice)) + { + isMenuActive = false; + } + } + catch (const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + util::pressEnter(); + } + } +} + +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: + 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: + return false; + default: + std::cout << "Enter a valid choice!" << std::endl; + } + return true; +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h new file mode 100644 index 0000000..1c5f060 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h @@ -0,0 +1,14 @@ +#pragma once +#include +#include"ZenvyController.h" + +class ITExecutiveMenu +{ +private: + std::shared_ptr m_zenvyController; +public: + ITExecutiveMenu() : m_zenvyController(std::make_shared()) {}; + void run(); + bool handleOperation(int); +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp new file mode 100644 index 0000000..45fbfba --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp @@ -0,0 +1,76 @@ +#include +#include "TalentExecutiveMenu.h" +#include"InputHelper.h" +#include"OutputHelper.h" + +void TalentExecutiveMenu::run() +{ + bool isMenuActive = true; + while (isMenuActive) + { + try + { + int choice; + util::clear(); + std::cout << "Zenvy - The HR Management System\n1. Apply Leave\n2. View Payslip\n3. View Payslip History\n4. View Employees\n5. Search Employee\n6. View Notification\n7. View Announcements\n8. Create New Job\n9. View Job Opening\n10. Add Candidate\n11. UpdateCandidate Status\n12. View Shortlisted Candidate\n13. Logout\nEnter your Choice: "; + util::read(choice); + if (!handleOperation(choice)) + { + isMenuActive = false; + } + } + catch (const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + util::pressEnter(); + } + } +} + +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: + // 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.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 13: + return false; + default: + std::cout << "Enter a valid choice!" << std::endl; + } + return true; +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h new file mode 100644 index 0000000..a258eaf --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h @@ -0,0 +1,14 @@ +#pragma once +#include +#include"ZenvyController.h" + +class TalentExecutiveMenu +{ +private: + std::shared_ptr m_zenvyController; +public: + TalentExecutiveMenu() : m_zenvyController(std::make_shared < ZenvyController>()) {}; + void run(); + bool handleOperation(int); +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp new file mode 100644 index 0000000..12c300b --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp @@ -0,0 +1,79 @@ +#include +#include "TeamExecutiveMenu.h" +#include"InputHelper.h" +#include"OutputHelper.h" + +void TeamExecutiveMenu::run() +{ + bool isMenuActive = true; + while (isMenuActive) + { + try + { + int choice; + util::clear(); + std::cout << "Zenvy - The HR Management System\n1. Apply Leave\n2. View Payslip\n3. View Payslip History\n4. View Employees\n5. Search Employee\n6. View Notification\n7. View Announcements\n8. Create Team\n9. Update Team\n10. Remove Team\n11. Assign Employee\n12. Unassign Employee\n13. View Teams\n14. Logout\nEnter your Choice: "; + util::read(choice); + if (!handleOperation(choice)) + { + isMenuActive = false; + } + } + catch (const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + util::pressEnter(); + } + } +} + +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: + // 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.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 14: + return false; + default: + std::cout << "Enter a valid choice!" << std::endl; + } + return true; +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h new file mode 100644 index 0000000..4b5181d --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h @@ -0,0 +1,14 @@ +#pragma once +#include +#include"ZenvyController.h" + +class TeamExecutiveMenu +{ +private: + std::shared_ptr m_zenvyController; +public: + TeamExecutiveMenu() : m_zenvyController(std::make_shared()) {}; + void run(); + bool handleOperation(int); +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp new file mode 100644 index 0000000..4204fb7 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp @@ -0,0 +1,85 @@ +#include +#include "TeamLeadMenu.h" +#include"InputHelper.h" +#include"OutputHelper.h" + +void TeamLeadMenu::run() +{ + bool isMenuActive = true; + while (isMenuActive) + { + try + { + int choice; + util::clear(); + std::cout << "Zenvy - The HR Management System\n1. Apply Leave\n2. View Payslip\n3. View Payslip History\n4. Raise Ticke\n5. View Ticket\n6. View Ticket History\n7. View Employees\n8. Search Employee\n9. View Team Members\n10. Book Meeting Room\n11. View Booking History\n12. View Notification\n13. View Announcements\n4. Regularize Attendance\n15. Update Leave Request\n16. Logout\nEnter your Choice: "; + util::read(choice); + if (!handleOperation(choice)) + { + isMenuActive = false; + } + } + catch (const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + util::pressEnter(); + } + } +} + +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: + m_zenvyController.viewEmployees(); + break; + case 8: + m_zenvyController.searchEmployee(); + 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: + return false; + default: + std::cout << "Enter a valid choice!" << std::endl; + } + return true; +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h new file mode 100644 index 0000000..e1bd45b --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h @@ -0,0 +1,14 @@ +#pragma once +#include +#include"ZenvyController.h" + +class TeamLeadMenu +{ +private: + std::shared_ptr m_zenvyController; +public: + TeamLeadMenu() : m_zenvyController(std::make_shared()) {}; + void run(); + bool handleOperation(int); +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp new file mode 100644 index 0000000..3429c22 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp @@ -0,0 +1,162 @@ +#include +#include +#include +#include +#include "UserInterface.h" +#include "AdminMenu.h" +#include "EmployeeMenu.h" +#include "FinanceExecutiveMenu.h" +#include "HRManagerMenu.h" +#include "ITExecutiveMenu.h" +#include "TalentExecutiveMenu.h" +#include "TeamExecutiveMenu.h" +#include "TeamLeadMenu.h" +#include "ZenvyController.h" +#include "InputHelper.h" +#include "OutputHelper.h" +#include "Validator.h" + +void UserInterface::run() +{ + bool isMenuActive = true; + while (isMenuActive) + { + try + { + int choice; + util::clear(); + std::cout << "Zenvy - HR Management System\n1. Login\n2. Exit\nEnter your Choice: "; + util::read(choice); + if (!handleOperation(choice)) + { + isMenuActive = false; + } + } + catch (const std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + util::pressEnter(); + } + } +} + +bool UserInterface::handleOperation(int choice) +{ + switch (choice) + { + case 1: + login(); + break; + case 2: + std::cout << "Exiting..." << std::endl; + return false; + default: + std::cout << "Enter a valid choice!" << std::endl; + util::pressEnter(); + } + return true; +} + +void UserInterface::login() +{ + std::string email, password; + util::clear(); + std::cout << "Enter email: "; + util::read(email); + std::cout << "Enter password: "; + util::read(password); + AuthenticationContext authenticationContext = m_controller->login(email, password); + Enums::LoginStatus loginStatus = std::get<0>(authenticationContext); + Enums::EmployeeType employeeType = std::get<1>(authenticationContext); + Enums::EmployeeDesignation employeeDesignation = std::get<2>(authenticationContext); + if (loginStatus == Enums::LoginStatus::USER_NOT_FOUND) + { + std::cout << "Error: User Not Found! Try Again\n"; + util::pressEnter(); + return; + } + if (loginStatus == Enums::LoginStatus::INVALID_PASSWORD) + { + std::cout << "Error: Invalid Password! Try Again\n"; + util::pressEnter(); + return; + } + if (loginStatus == Enums::LoginStatus::FIRST_LOGIN) + { + util::clear(); + std::cout << "Warning: You're using the default password!\n" + << "Please change it.\n"; + std::cout << "Enter new password: \n"; + util::read(password); + if (util::isPasswordValid(password)) + { + m_controller->changePassword(password); + } + else + { + std::cout << "\nInvalid Password"; + util::pressEnter(); + return; + } + } + util::clear(); + // Route to appropriate menu + switch (employeeType) + { + case Enums::EmployeeType::ADMIN: + { + AdminMenu menu; + menu.run(); + break; + } + case Enums::EmployeeType::HR: + { + HRManagerMenu menu; + menu.run(); + break; + } + case Enums::EmployeeType::FINANCE: + { + FinanceExecutiveMenu menu; + menu.run(); + break; + } + case Enums::EmployeeType::IT: + { + ITExecutiveMenu menu; + menu.run(); + break; + } + case Enums::EmployeeType::TEAM: + { + TeamExecutiveMenu menu; + menu.run(); + break; + } + case Enums::EmployeeType::TAG: + { + TalentExecutiveMenu menu; + menu.run(); + break; + } + case Enums::EmployeeType::GENERAL: + { + if (employeeDesignation == Enums::EmployeeDesignation::TEAM_LEAD) + { + TeamLeadMenu menu; + menu.run(); + } + else + { + EmployeeMenu menu; + menu.run(); + } + break; + } + default: + throw std::runtime_error("Error: Unsupported employee type!\n"); + util::pressEnter(); + break; + } + m_controller->logout(); +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.h b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.h new file mode 100644 index 0000000..c346301 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.h @@ -0,0 +1,40 @@ +#pragma once +#include +#include +#include "AdminMenu.h" +#include "EmployeeMenu.h" +#include "FinanceExecutiveMenu.h" +#include "HRManagerMenu.h" +#include "ITExecutiveMenu.h" +#include "TalentExecutiveMenu.h" +#include "TeamExecutiveMenu.h" +#include "TeamLeadMenu.h" +#include "ZenvyController.h" + +class UserInterface +{ +private: + std::shared_ptr m_controller; + std::shared_ptr m_employeeMenu; + std::shared_ptr m_adminMenu; + std::shared_ptr m_financeExecutiveMenu; + std::shared_ptr m_hrManagerMenu; + std::shared_ptr m_itExecutiveMenu; + std::shared_ptr m_talentExecutiveMenu; + std::shared_ptr m_teamExecutiveMenu; + std::shared_ptr m_teamLeadMenu; +public: + UserInterface() : m_controller(std::make_shared()), + m_employeeMenu(std::make_shared()), + m_adminMenu(std::make_shared()), + m_financeExecutiveMenu(std::make_shared()), + m_hrManagerMenu(std::make_shared()), + m_itExecutiveMenu(std::make_shared()), + m_talentExecutiveMenu(std::make_shared()), + m_teamExecutiveMenu(std::make_shared()), + m_teamLeadMenu(std::make_shared()) {}; + void run(); + bool handleOperation(int choice); + void login(); +}; +