From a925fe63fbb3978e86a2c591429acccf8f1bc6da Mon Sep 17 00:00:00 2001 From: Joel Thomas Date: Thu, 2 Apr 2026 19:58:59 +0530 Subject: [PATCH 1/9] Add logging service and datastore setup, refactor inputHelper SRS01 : Authentication - Set up DataStore singleton and added basic employee + log storage - Added LogService - Refactor InputHelper - Updated include paths in project config Smitha Mohan --- Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp | 4 ++ .../Trenser.Zenvy/Trenser.Zenvy.vcxproj | 2 +- .../Trenser.Zenvy/datastores/DataStore.cpp | 16 ++++++++ .../Trenser.Zenvy/datastores/DataStore.h | 38 ++++++++++++++++++- Trenser.Zenvy/Trenser.Zenvy/models/Log.h | 4 +- .../Trenser.Zenvy/services/LogService.cpp | 11 ++++++ .../Trenser.Zenvy/services/LogService.h | 3 ++ .../Trenser.Zenvy/utilities/InputHelper.cpp | 10 ----- .../Trenser.Zenvy/utilities/InputHelper.h | 33 +++++++++------- 9 files changed, 93 insertions(+), 28 deletions(-) diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp index e69de29..5aa1174 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp @@ -0,0 +1,4 @@ +int main() +{ + +} \ 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..cf0bec3 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;%(AdditionalIncludeDirectories) Console diff --git a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp index e81f26f..80f370f 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp @@ -1 +1,17 @@ #include "DataStore.h" + +DataStore& DataStore::getInstance() +{ + static DataStore dataStore; + return dataStore; +} + +logMap& DataStore::getLogs() +{ + return m_logs; +} + +employeeMap& DataStore::getEmployees() +{ + return m_employees; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h index 09042e4..a9b8033 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h @@ -1,5 +1,39 @@ #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" + +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(); + logMap& getLogs(); +}; \ No newline at end of file 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/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/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 From 676c5ce13284af9d82cc409777533f70732155df Mon Sep 17 00:00:00 2001 From: Ajmal Jalaludeen Date: Thu, 2 Apr 2026 20:11:27 +0530 Subject: [PATCH 2/9] Setup basic UI and controller for authentication SRS01 : Authentication - Added basic UI structure with UserInterface and role-based menus - Created menu classes for different roles (Admin, HR, IT, etc.) - Connected ZenvyController with all required services - Updated AuthenticationManagementService - Added FAQ model Smitha Mohan --- .../Trenser.Zenvy/Trenser.Zenvy.vcxproj | 20 +++++ .../Trenser.Zenvy.vcxproj.filters | 86 +++++++++++++++++-- .../controllers/ZenvyController.h | 36 ++++++++ .../Trenser.Zenvy/datastores/DataStore.h | 1 + Trenser.Zenvy/Trenser.Zenvy/models/FAQ.cpp | 1 + Trenser.Zenvy/Trenser.Zenvy/models/FAQ.h | 6 ++ .../AuthenticationManagementService.cpp | 1 + .../AuthenticationManagementService.h | 11 +++ .../Trenser.Zenvy/views/AdminMenu.cpp | 1 + Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h | 5 ++ .../Trenser.Zenvy/views/EmployeeMenu.cpp | 1 + .../Trenser.Zenvy/views/EmployeeMenu.h | 5 ++ .../views/FinanceExecutiveMenu.cpp | 1 + .../views/FinanceExecutiveMenu.h | 5 ++ .../Trenser.Zenvy/views/HRManagerMenu.cpp | 1 + .../Trenser.Zenvy/views/HRManagerMenu.h | 5 ++ .../Trenser.Zenvy/views/ITExecutiveMenu.cpp | 1 + .../Trenser.Zenvy/views/ITExecutiveMenu.h | 5 ++ .../views/TalentExecutiveMenu.cpp | 1 + .../Trenser.Zenvy/views/TalentExecutiveMenu.h | 5 ++ .../Trenser.Zenvy/views/TeamExecutiveMenu.cpp | 1 + .../Trenser.Zenvy/views/TeamExecutiveMenu.h | 5 ++ .../Trenser.Zenvy/views/TeamLeadMenu.cpp | 1 + .../Trenser.Zenvy/views/TeamLeadMenu.h | 5 ++ .../Trenser.Zenvy/views/UserInterface.cpp | 45 ++++++++++ .../Trenser.Zenvy/views/UserInterface.h | 43 ++++++++++ 26 files changed, 291 insertions(+), 7 deletions(-) create mode 100644 Trenser.Zenvy/Trenser.Zenvy/models/FAQ.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/models/FAQ.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.h diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj index cf0bec3..a90e70f 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj @@ -131,6 +131,7 @@ + @@ -165,6 +166,15 @@ + + + + + + + + + @@ -174,6 +184,7 @@ + @@ -204,6 +215,15 @@ + + + + + + + + + diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters index 3c26252..c4168cc 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 + + + Views + + + Models + @@ -269,6 +305,42 @@ Models + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Views + + + Models + diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h index 7dae696..956e962 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h @@ -1,5 +1,41 @@ #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" + 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()) {}; }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h index a9b8033..b89e335 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h @@ -17,6 +17,7 @@ #include "JobListing.h" #include "Notification.h" #include "Announcement.h" +#include "Faq.h" using employeeMap = std::map>; using logMap = std::map>; 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/services/AuthenticationManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp index 2143fb2..7225c9d 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp @@ -1 +1,2 @@ #include "AuthenticationManagementService.h" + diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h index fe2e0af..b7d6463 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h @@ -1,5 +1,16 @@ #pragma once +#include +#include +#include +#include "DataStore.h" + class AuthenticationManagementService { +private: + DataStore& m_dataStore; +public: + AuthenticationManagementService() : m_dataStore(DataStore::getInstance()) {}; + void logout(); + void changePassword(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp new file mode 100644 index 0000000..bf4d089 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp @@ -0,0 +1 @@ +#include "AdminMenu.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h new file mode 100644 index 0000000..8c0d340 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h @@ -0,0 +1,5 @@ +#pragma once +class AdminMenu +{ +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp new file mode 100644 index 0000000..0b6c6bf --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp @@ -0,0 +1 @@ +#include "EmployeeMenu.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h new file mode 100644 index 0000000..a789739 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h @@ -0,0 +1,5 @@ +#pragma once +class EmployeeMenu +{ +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp new file mode 100644 index 0000000..45f0ba9 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp @@ -0,0 +1 @@ +#include "FinanceExecutiveMenu.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h new file mode 100644 index 0000000..109ff36 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h @@ -0,0 +1,5 @@ +#pragma once +class FinanceExecutiveMenu +{ +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp new file mode 100644 index 0000000..efaec07 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp @@ -0,0 +1 @@ +#include "HRManagerMenu.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h new file mode 100644 index 0000000..5ea4230 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h @@ -0,0 +1,5 @@ +#pragma once +class HRManagerMenu +{ +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp new file mode 100644 index 0000000..45ccf1f --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp @@ -0,0 +1 @@ +#include "ITExecutiveMenu.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h new file mode 100644 index 0000000..abc8201 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h @@ -0,0 +1,5 @@ +#pragma once +class ITExecutiveMenu +{ +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp new file mode 100644 index 0000000..a561bc9 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp @@ -0,0 +1 @@ +#include "TalentExecutiveMenu.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h new file mode 100644 index 0000000..6461f74 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h @@ -0,0 +1,5 @@ +#pragma once +class TalentExecutiveMenu +{ +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp new file mode 100644 index 0000000..614ea00 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp @@ -0,0 +1 @@ +#include "TeamExecutiveMenu.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h new file mode 100644 index 0000000..cfd38be --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h @@ -0,0 +1,5 @@ +#pragma once +class TeamExecutiveMenu +{ +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp new file mode 100644 index 0000000..1cc3c0d --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp @@ -0,0 +1 @@ +#include "TeamLeadMenu.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h new file mode 100644 index 0000000..7ac3b19 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h @@ -0,0 +1,5 @@ +#pragma once +class TeamLeadMenu +{ +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp new file mode 100644 index 0000000..6614f05 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp @@ -0,0 +1,45 @@ +#include "UserInterface.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; + } + return true; +} + +void UserInterface::login() +{ +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.h b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.h new file mode 100644 index 0000000..9be7028 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.h @@ -0,0 +1,43 @@ +#pragma once +#include +#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" +#include "InputHelper.h" +#include "OutputHelper.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(); +}; + From 02c4f1a954cad0f12167714189831a2975c27e46 Mon Sep 17 00:00:00 2001 From: Joel Thomas Date: Mon, 6 Apr 2026 09:39:14 +0530 Subject: [PATCH 3/9] Add EmployeeType and LoginStatus enums, extend Employee model SRS01 : Authentication - Added EmployeeType and LoginStatus enums - Extended Employee model to store employee type - Updated Employee constructors to initialize employee type - Added getter for employee type in Employee model Smitha Mohan --- .../Trenser.Zenvy/models/Employee.cpp | 7 ++++++- Trenser.Zenvy/Trenser.Zenvy/models/Employee.h | 7 +++++-- Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) 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..ef6e6b0 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); + Enums::EmployeeType getEmployeeType() const; ~Employee() = default; }; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h index 84f2848..40b8f02 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h @@ -69,4 +69,22 @@ namespace Enums { TEAM_LEAD }; + enum class EmployeeType + { + GENERAL, + IT, + FINANCE, + TAG, + HR, + ADMIN, + INVALID + }; + + enum class LoginStatus + { + SUCCESS, + FIRST_LOGIN, + USER_NOT_FOUND, + INVALID_PASSWORD + }; } From d76def42e904b8b55098d2860866b7f739a06d01 Mon Sep 17 00:00:00 2001 From: Joel Thomas Date: Mon, 6 Apr 2026 11:49:57 +0530 Subject: [PATCH 4/9] Add authentication flow, UI menu routing, and application config AUTH001 : Login - Introduced ApplicationConfig for default configuration values - Implemented authentication flow in AuthenticationManagementService - Added login and logout handling in ZenvyController - Updated enums to include INVALID values and TEAM employee type - Implemented login UI flow with role-based menu routing Smitha Mohan --- .../Trenser.Zenvy/Trenser.Zenvy.vcxproj | 2 + .../controllers/ZenvyController.cpp | 14 +++ .../controllers/ZenvyController.h | 7 ++ .../Trenser.Zenvy/datastores/DataStore.cpp | 5 + .../Trenser.Zenvy/datastores/DataStore.h | 1 + .../services/ApplicationConfig.cpp | 1 + .../services/ApplicationConfig.h | 6 + .../AuthenticationManagementService.cpp | 46 ++++++++ .../AuthenticationManagementService.h | 2 + Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h | 4 +- .../Trenser.Zenvy/views/UserInterface.cpp | 108 +++++++++++++++++- .../Trenser.Zenvy/views/UserInterface.h | 14 --- 12 files changed, 194 insertions(+), 16 deletions(-) create mode 100644 Trenser.Zenvy/Trenser.Zenvy/services/ApplicationConfig.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/services/ApplicationConfig.h diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj index a90e70f..d128542 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj @@ -146,6 +146,7 @@ + @@ -199,6 +200,7 @@ + diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp index aa50123..c1b4287 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp @@ -1 +1,15 @@ #include "ZenvyController.h" + +//Authentication +AuthenticationContext ZenvyController::login(const std::string& email, const std::string& password) +{ + return m_authenticationManagementService->login(email, password); +} + +void ZenvyController::logout() +{ +} + +void AuthenticationManagementService::changePassword() +{ +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h index 956e962..3dc3575 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h @@ -11,6 +11,9 @@ #include "TalentAcquisitionManagementService.h" #include "TeamManagementService.h" #include "TicketManagementService.h" +#include "Enums.h" + +using AuthenticationContext = std::tuple; class ZenvyController { @@ -37,5 +40,9 @@ public: 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(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp index 80f370f..7fcd993 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp @@ -11,6 +11,11 @@ logMap& DataStore::getLogs() return m_logs; } +void DataStore::setAuthenticatedEmployee(std::shared_ptr authenticatedEmployee) +{ + m_authenticatedEmployee = authenticatedEmployee; +} + employeeMap& DataStore::getEmployees() { return m_employees; diff --git a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h index b89e335..ca2bd63 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h @@ -37,4 +37,5 @@ public: DataStore& operator=(DataStore&&) = delete; employeeMap& getEmployees(); logMap& getLogs(); + void setAuthenticatedEmployee(std::shared_ptr < Employee>); }; \ No newline at end of file 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 7225c9d..9f60c05 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp @@ -1,2 +1,48 @@ +#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); +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h index b7d6463..5790978 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h @@ -3,6 +3,7 @@ #include #include #include "DataStore.h" +#include "Enums.h" class AuthenticationManagementService { @@ -10,6 +11,7 @@ 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(); }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h index 40b8f02..ace8792 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h @@ -66,7 +66,8 @@ namespace Enums { { JUNIOR, SENIOR, - TEAM_LEAD + TEAM_LEAD, + INVALID }; enum class EmployeeType @@ -76,6 +77,7 @@ namespace Enums { FINANCE, TAG, HR, + TEAM, ADMIN, INVALID }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp index 6614f05..c320701 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp @@ -1,4 +1,19 @@ +#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" void UserInterface::run() { @@ -42,4 +57,95 @@ bool UserInterface::handleOperation(int choice) 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"; + // TODO: Password reset flow (to be implemented) + util::pressEnter(); + } + 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 index 9be7028..9d69aba 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.h @@ -1,18 +1,4 @@ #pragma once -#include -#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" -#include "InputHelper.h" -#include "OutputHelper.h" class UserInterface { From c2fbfa2d03f65d6a3c04ad49069528ae90c9286b Mon Sep 17 00:00:00 2001 From: Ajmal Jalaludeen Date: Mon, 6 Apr 2026 12:05:22 +0530 Subject: [PATCH 5/9] Add changePassword method in controller and authenticated user accessor AUTH004 : Change Password - Added changePassword method in ZenvyController to move to AuthenticationManagementService - Declared changePassword in ZenvyController.h - Introduced getAuthenticatedUser() in DataStore for accessing authenticated employee - Updated DataStore.h with getAuthenticatedUser() method - Prepared AuthenticationManagementService.cpp for password change implementation Smitha Mohan --- .../Trenser.Zenvy/controllers/ZenvyController.cpp | 3 ++- .../Trenser.Zenvy/controllers/ZenvyController.h | 2 ++ .../Trenser.Zenvy/datastores/DataStore.cpp | 5 +++++ Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h | 1 + .../services/AuthenticationManagementService.cpp | 13 +++++++++++++ .../services/AuthenticationManagementService.h | 3 ++- 6 files changed, 25 insertions(+), 2 deletions(-) diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp index c1b4287..4efe6f2 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp @@ -10,6 +10,7 @@ void ZenvyController::logout() { } -void AuthenticationManagementService::changePassword() +void ZenvyController::changePassword(const std::string& password) const { + m_authenticationManagementService->changePassword(password); } diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h index 3dc3575..6413723 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h @@ -44,5 +44,7 @@ public: //Authentication AuthenticationContext login(const std::string& email, const std::string& password); void logout(); + void changePassword(const std::string&) const; }; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp index 7fcd993..71f6d56 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp @@ -11,6 +11,11 @@ logMap& DataStore::getLogs() return m_logs; } +std::shared_ptr& DataStore::getAuthenticatedEmployee() +{ + return m_authenticatedEmployee; +} + void DataStore::setAuthenticatedEmployee(std::shared_ptr authenticatedEmployee) { m_authenticatedEmployee = authenticatedEmployee; diff --git a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h index ca2bd63..750d741 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h @@ -37,5 +37,6 @@ public: DataStore& operator=(DataStore&&) = delete; employeeMap& getEmployees(); 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/services/AuthenticationManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp index 9f60c05..bf98c64 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp @@ -46,3 +46,16 @@ std::tuple } 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"); + } +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h index 5790978..9c65eae 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h @@ -2,6 +2,7 @@ #include #include #include +#include #include "DataStore.h" #include "Enums.h" @@ -13,6 +14,6 @@ public: AuthenticationManagementService() : m_dataStore(DataStore::getInstance()) {}; std::tuple login(const std::string& username, const std::string& password); void logout(); - void changePassword(); + void changePassword(std::string); }; From 45d00d89645ac07ddb85854d5e3b7db409d404d9 Mon Sep 17 00:00:00 2001 From: Jissin Sam Mathew Date: Mon, 6 Apr 2026 11:56:47 +0530 Subject: [PATCH 6/9] Add logout functionality in controller and datastore access AUTH003: Logout User - Added logout() method in ZenvyController and AuthenticationManagementService - Implemented logout handling in AuthenticationManagementService Smitha Mohan --- .../Trenser.Zenvy/controllers/ZenvyController.cpp | 1 + Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp | 8 +++++++- Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h | 1 + .../services/AuthenticationManagementService.cpp | 9 +++++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp index 4efe6f2..39d42dd 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp @@ -8,6 +8,7 @@ AuthenticationContext ZenvyController::login(const std::string& email, const std void ZenvyController::logout() { + m_authenticationManagementService->logout(); } void ZenvyController::changePassword(const std::string& password) const diff --git a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp index 71f6d56..16ddca1 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp @@ -24,4 +24,10 @@ void DataStore::setAuthenticatedEmployee(std::shared_ptr authenticated employeeMap& DataStore::getEmployees() { return m_employees; -} \ No newline at end of file +} + +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 750d741..5ecfb70 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h @@ -36,6 +36,7 @@ public: 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>); diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp index bf98c64..5c0511a 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.cpp @@ -59,3 +59,12 @@ void AuthenticationManagementService::changePassword(const std::string& password 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 From 1c22c14f3278580c31f6c2b4c0d6a61a187bddbc Mon Sep 17 00:00:00 2001 From: Princy Jerin Date: Mon, 6 Apr 2026 15:06:55 +0530 Subject: [PATCH 7/9] Add reset initial password AUTH002 : Reset Initial Password - Added logic for resetting initial password - Code Cleanup Smitha Mohan --- .../Trenser.Zenvy.vcxproj.filters | 15 +++---- .../controllers/ZenvyController.cpp | 2 +- .../controllers/ZenvyController.h | 4 +- .../AuthenticationManagementService.h | 2 +- .../Trenser.Zenvy/utilities/Validator.cpp | 43 +++++++++++++++++++ .../Trenser.Zenvy/utilities/Validator.h | 1 + .../Trenser.Zenvy/views/UserInterface.cpp | 18 ++++++-- 7 files changed, 67 insertions(+), 18 deletions(-) diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters index c4168cc..8a20aa6 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters @@ -174,9 +174,6 @@ Views - - Views - Views @@ -192,6 +189,9 @@ Models + + Services + @@ -320,12 +320,6 @@ Views - - Views - - - Views - Views @@ -341,6 +335,9 @@ Models + + Services + diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp index 39d42dd..1f26894 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp @@ -11,7 +11,7 @@ void ZenvyController::logout() m_authenticationManagementService->logout(); } -void ZenvyController::changePassword(const std::string& password) const +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 6413723..11a609d 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h @@ -44,7 +44,5 @@ public: //Authentication AuthenticationContext login(const std::string& email, const std::string& password); void logout(); - void changePassword(const std::string&) const; + void changePassword(const std::string&); }; - - diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h index 9c65eae..2f812d6 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/AuthenticationManagementService.h @@ -14,6 +14,6 @@ public: AuthenticationManagementService() : m_dataStore(DataStore::getInstance()) {}; std::tuple login(const std::string& username, const std::string& password); void logout(); - void changePassword(std::string); + void changePassword(const std::string&); }; 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/UserInterface.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp index c320701..3bc4e6e 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp @@ -14,6 +14,7 @@ #include "ZenvyController.h" #include "InputHelper.h" #include "OutputHelper.h" +#include "Validator.h" void UserInterface::run() { @@ -82,11 +83,20 @@ void UserInterface::login() if (loginStatus == Enums::LoginStatus::FIRST_LOGIN) { util::clear(); - std::cout - << "Warning: You're using the default password!\n" + std::cout << "Warning: You're using the default password!\n" << "Please change it.\n"; - // TODO: Password reset flow (to be implemented) - util::pressEnter(); + 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 From 719bf5e7b3755a7ce547422b41ade2fa853647e6 Mon Sep 17 00:00:00 2001 From: Tinu Johnson Date: Mon, 6 Apr 2026 16:32:18 +0530 Subject: [PATCH 8/9] Setup basic UI and controller for authentication SRS01 : Authentication - Added basic UI structure with UserInterface and role-based menus (Admin, HR, IT, Finance, Talent, Team, TeamLead, Employee). - Created menu classes for different roles, each with run() and handleOperation() methods. Smitha Mohan --- .../Trenser.Zenvy/views/AdminMenu.cpp | 51 +++++++++++ Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h | 9 ++ .../Trenser.Zenvy/views/EmployeeMenu.cpp | 78 +++++++++++++++++ .../Trenser.Zenvy/views/EmployeeMenu.h | 9 ++ .../views/FinanceExecutiveMenu.cpp | 69 +++++++++++++++ .../views/FinanceExecutiveMenu.h | 9 ++ .../Trenser.Zenvy/views/HRManagerMenu.cpp | 72 ++++++++++++++++ .../Trenser.Zenvy/views/HRManagerMenu.h | 9 ++ .../Trenser.Zenvy/views/ITExecutiveMenu.cpp | 63 ++++++++++++++ .../Trenser.Zenvy/views/ITExecutiveMenu.h | 9 ++ .../views/TalentExecutiveMenu.cpp | 75 +++++++++++++++++ .../Trenser.Zenvy/views/TalentExecutiveMenu.h | 9 ++ .../Trenser.Zenvy/views/TeamExecutiveMenu.cpp | 78 +++++++++++++++++ .../Trenser.Zenvy/views/TeamExecutiveMenu.h | 9 ++ .../Trenser.Zenvy/views/TeamLeadMenu.cpp | 84 +++++++++++++++++++ .../Trenser.Zenvy/views/TeamLeadMenu.h | 9 ++ .../Trenser.Zenvy/views/UserInterface.h | 11 +++ 17 files changed, 653 insertions(+) diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp index bf4d089..2f6c762 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp @@ -1 +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 index 8c0d340..dab23c5 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.h @@ -1,5 +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 index 0b6c6bf..ab5f108 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp @@ -1 +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 index a789739..f082b66 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.h @@ -1,5 +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 index 45f0ba9..c4b3578 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp @@ -1 +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 index 109ff36..825322f 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.h @@ -1,5 +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 index efaec07..283812a 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp @@ -1 +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 index 5ea4230..05e1f41 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.h @@ -1,5 +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 index 45ccf1f..de23bbe 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp @@ -1 +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 index abc8201..1c5f060 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.h @@ -1,5 +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 index a561bc9..9e6cc7d 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp @@ -1 +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 index 6461f74..a258eaf 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.h @@ -1,5 +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 index 614ea00..0f0c197 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp @@ -1 +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 index cfd38be..4b5181d 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.h @@ -1,5 +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 index 1cc3c0d..35e89cd 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp @@ -1 +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 index 7ac3b19..e1bd45b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.h @@ -1,5 +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.h b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.h index 9d69aba..c346301 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.h +++ b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.h @@ -1,4 +1,15 @@ #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 { From 18afdc4189d92c91a3dddc5ca634e7517002ffd1 Mon Sep 17 00:00:00 2001 From: Tinu Johnson Date: Mon, 6 Apr 2026 17:39:09 +0530 Subject: [PATCH 9/9] Error fixes and added main method function and objects SRS01 : Authentication - Fixed polymorphism errors in Employee base class by adding virtual destructor. - Corrected constructor mismatch in GeneralEmployee to properly call Employee constructor with EmployeeType. - Created UserInterface object in main() and invoked run() to start role-based menus. Smitha Mohan --- Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp | 5 +- .../Trenser.Zenvy/Trenser.Zenvy.vcxproj | 2 +- Trenser.Zenvy/Trenser.Zenvy/models/Employee.h | 2 +- .../Trenser.Zenvy/models/GeneralEmployee.h | 3 +- .../Trenser.Zenvy/views/AdminMenu.cpp | 4 +- .../Trenser.Zenvy/views/EmployeeMenu.cpp | 4 +- .../views/FinanceExecutiveMenu.cpp | 4 +- .../Trenser.Zenvy/views/HRManagerMenu.cpp | 66 ++++++++-------- .../Trenser.Zenvy/views/ITExecutiveMenu.cpp | 4 +- .../views/TalentExecutiveMenu.cpp | 72 ++++++++--------- .../Trenser.Zenvy/views/TeamExecutiveMenu.cpp | 78 +++++++++---------- .../Trenser.Zenvy/views/TeamLeadMenu.cpp | 4 +- .../Trenser.Zenvy/views/UserInterface.cpp | 1 + 13 files changed, 126 insertions(+), 123 deletions(-) diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp index 5aa1174..4413069 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.cpp @@ -1,4 +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 d128542..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)models;$(ProjectDir)controllers;$(ProjectDir)services;$(ProjectDir)utilities;$(ProjectDir)factories;$(ProjectDir)datastores;%(AdditionalIncludeDirectories) + $(ProjectDir)models;$(ProjectDir)controllers;$(ProjectDir)services;$(ProjectDir)utilities;$(ProjectDir)factories;$(ProjectDir)datastores;$(ProjectDir)views;%(AdditionalIncludeDirectories) Console diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h b/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h index ef6e6b0..3509db1 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h @@ -62,5 +62,5 @@ public: void addAttendance(std::shared_ptr attendance); void addLeave(std::shared_ptr leave); Enums::EmployeeType getEmployeeType() const; - ~Employee() = default; + virtual ~Employee() = default; }; \ No newline at end of file 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/views/AdminMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp index 2f6c762..ecad349 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/AdminMenu.cpp @@ -31,7 +31,7 @@ bool AdminMenu::handleOperation(int choice) { switch (choice) { - case 1: + /*case 1: m_zenvyController.createHRManager(); break; case 2: @@ -42,7 +42,7 @@ bool AdminMenu::handleOperation(int choice) break; case 4: m_zenvyController.deactivateEmployee(); - break; + break;*/ case 5: return false; default: diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp index ab5f108..99e3bc0 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/EmployeeMenu.cpp @@ -31,7 +31,7 @@ bool EmployeeMenu::handleOperation(int choice) { switch (choice) { - case 1: + /*case 1: m_zenvyController.applyLeave(); break; case 2: @@ -69,7 +69,7 @@ bool EmployeeMenu::handleOperation(int choice) break; case 13: m_zenvyController.viewAnnouncements(); - break; + break;*/ case 14: return false; default: diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp index c4b3578..081d281 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/FinanceExecutiveMenu.cpp @@ -31,7 +31,7 @@ bool FinanceExecutiveMenu::handleOperation(int choice) { switch (choice) { - case 1: + /*case 1: m_zenvyController.applyLeave(); break; case 2: @@ -60,7 +60,7 @@ bool FinanceExecutiveMenu::handleOperation(int choice) break; case 10: m_zenvyController.updatePayroll(); - break; + break;*/ case 11: return false; default: diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp index 283812a..7bf812c 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/HRManagerMenu.cpp @@ -31,39 +31,39 @@ 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 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: diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp index de23bbe..836ca39 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/ITExecutiveMenu.cpp @@ -31,7 +31,7 @@ bool ITExecutiveMenu::handleOperation(int choice) { switch (choice) { - case 1: + /*case 1: m_zenvyController.applyLeave(); break; case 2: @@ -54,7 +54,7 @@ bool ITExecutiveMenu::handleOperation(int choice) break; case 8: m_zenvyController.resolveTicket(); - break; + break;*/ case 9: return false; default: diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp index 9e6cc7d..45fbfba 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TalentExecutiveMenu.cpp @@ -31,42 +31,42 @@ 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 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: diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp index 0f0c197..12c300b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamExecutiveMenu.cpp @@ -31,45 +31,45 @@ 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 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: diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp index 35e89cd..4204fb7 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/TeamLeadMenu.cpp @@ -31,7 +31,7 @@ bool TeamLeadMenu::handleOperation(int choice) { switch (choice) { - case 1: + /*case 1: m_zenvyController.applyLeave(); break; case 2: @@ -75,7 +75,7 @@ bool TeamLeadMenu::handleOperation(int choice) break; case 15: m_zenvyController.updateLeaveRequest(); - break; + break;*/ case 16: return false; default: diff --git a/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp index 3bc4e6e..3429c22 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/views/UserInterface.cpp @@ -52,6 +52,7 @@ bool UserInterface::handleOperation(int choice) return false; default: std::cout << "Enter a valid choice!" << std::endl; + util::pressEnter(); } return true; }