Merged PR 952: SRS01 Authentication

Implemented Authentication Logic

Related work items: #930, #932, #933, #935, #936
This commit is contained in:
2026-04-17 13:28:49 +05:30
committed by Ajmal Jalaludeen
103 changed files with 2589 additions and 87 deletions
@@ -0,0 +1,15 @@
/*
* File: Trenser.Zenvy.cpp
* Description: Zenvy Main
* Author: Trenser
* Created: 30-Mar-2026
*/
#include "UserInterface.h"
int main()
{
UserInterface userInterFace;
userInterFace.run();
return 0;
}
@@ -102,7 +102,7 @@
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)controllers;$(ProjectDir)services;$(ProjectDir)utilities;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)models;$(ProjectDir)controllers;$(ProjectDir)services;$(ProjectDir)utilities;$(ProjectDir)factories;$(ProjectDir)datastores;$(ProjectDir)views;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
@@ -131,6 +131,7 @@
<ClCompile Include="models\Attendance.cpp" /> <ClCompile Include="models\Attendance.cpp" />
<ClCompile Include="models\Booking.cpp" /> <ClCompile Include="models\Booking.cpp" />
<ClCompile Include="models\Candidate.cpp" /> <ClCompile Include="models\Candidate.cpp" />
<ClCompile Include="models\Faq.cpp" />
<ClCompile Include="models\FinanceExecutive.cpp" /> <ClCompile Include="models\FinanceExecutive.cpp" />
<ClCompile Include="models\GeneralEmployee.cpp" /> <ClCompile Include="models\GeneralEmployee.cpp" />
<ClCompile Include="models\ITExecutive.cpp" /> <ClCompile Include="models\ITExecutive.cpp" />
@@ -145,6 +146,7 @@
<ClCompile Include="models\Team.cpp" /> <ClCompile Include="models\Team.cpp" />
<ClCompile Include="models\TeamExecutive.cpp" /> <ClCompile Include="models\TeamExecutive.cpp" />
<ClCompile Include="models\Ticket.cpp" /> <ClCompile Include="models\Ticket.cpp" />
<ClCompile Include="services\ApplicationConfig.cpp" />
<ClCompile Include="services\AttendanceManagementService.cpp" /> <ClCompile Include="services\AttendanceManagementService.cpp" />
<ClCompile Include="services\AuthenticationManagementService.cpp" /> <ClCompile Include="services\AuthenticationManagementService.cpp" />
<ClCompile Include="services\BookingManagementService.cpp" /> <ClCompile Include="services\BookingManagementService.cpp" />
@@ -165,6 +167,15 @@
<ClCompile Include="utilities\OutputHelper.cpp" /> <ClCompile Include="utilities\OutputHelper.cpp" />
<ClCompile Include="utilities\Timestamp.cpp" /> <ClCompile Include="utilities\Timestamp.cpp" />
<ClCompile Include="utilities\Validator.cpp" /> <ClCompile Include="utilities\Validator.cpp" />
<ClCompile Include="views\AdminMenu.cpp" />
<ClCompile Include="views\EmployeeMenu.cpp" />
<ClCompile Include="views\FinanceExecutiveMenu.cpp" />
<ClCompile Include="views\HRManagerMenu.cpp" />
<ClCompile Include="views\ITExecutiveMenu.cpp" />
<ClCompile Include="views\TalentExecutiveMenu.cpp" />
<ClCompile Include="views\TeamExecutiveMenu.cpp" />
<ClCompile Include="views\TeamLeadMenu.cpp" />
<ClCompile Include="views\UserInterface.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="controllers\ZenvyController.h" /> <ClInclude Include="controllers\ZenvyController.h" />
@@ -174,6 +185,7 @@
<ClInclude Include="models\Attendance.h" /> <ClInclude Include="models\Attendance.h" />
<ClInclude Include="models\Booking.h" /> <ClInclude Include="models\Booking.h" />
<ClInclude Include="models\Candidate.h" /> <ClInclude Include="models\Candidate.h" />
<ClInclude Include="models\Faq.h" />
<ClInclude Include="models\FinanceExecutive.h" /> <ClInclude Include="models\FinanceExecutive.h" />
<ClInclude Include="models\GeneralEmployee.h" /> <ClInclude Include="models\GeneralEmployee.h" />
<ClInclude Include="models\ITExecutive.h" /> <ClInclude Include="models\ITExecutive.h" />
@@ -188,6 +200,7 @@
<ClInclude Include="models\Team.h" /> <ClInclude Include="models\Team.h" />
<ClInclude Include="models\TeamExecutive.h" /> <ClInclude Include="models\TeamExecutive.h" />
<ClInclude Include="models\Ticket.h" /> <ClInclude Include="models\Ticket.h" />
<ClInclude Include="services\ApplicationConfig.h" />
<ClInclude Include="services\AttendanceManagementService.h" /> <ClInclude Include="services\AttendanceManagementService.h" />
<ClInclude Include="services\AuthenticationManagementService.h" /> <ClInclude Include="services\AuthenticationManagementService.h" />
<ClInclude Include="services\BookingManagementService.h" /> <ClInclude Include="services\BookingManagementService.h" />
@@ -204,6 +217,15 @@
<ClInclude Include="utilities\OutputHelper.h" /> <ClInclude Include="utilities\OutputHelper.h" />
<ClInclude Include="utilities\Timestamp.h" /> <ClInclude Include="utilities\Timestamp.h" />
<ClInclude Include="utilities\Validator.h" /> <ClInclude Include="utilities\Validator.h" />
<ClInclude Include="views\AdminMenu.h" />
<ClInclude Include="views\EmployeeMenu.h" />
<ClInclude Include="views\FinanceExecutiveMenu.h" />
<ClInclude Include="views\HRManagerMenu.h" />
<ClInclude Include="views\ITExecutiveMenu.h" />
<ClInclude Include="views\TalentExecutiveMenu.h" />
<ClInclude Include="views\TeamExecutiveMenu.h" />
<ClInclude Include="views\TeamLeadMenu.h" />
<ClInclude Include="views\UserInterface.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="models\Admin.h" /> <ClInclude Include="models\Admin.h" />
@@ -5,10 +5,6 @@
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions> <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter> </Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files"> <Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
@@ -31,11 +27,15 @@
<Filter Include="DataStores"> <Filter Include="DataStores">
<UniqueIdentifier>{eb93b9d1-08eb-48aa-be2a-e17085ce27bd}</UniqueIdentifier> <UniqueIdentifier>{eb93b9d1-08eb-48aa-be2a-e17085ce27bd}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Views">
<UniqueIdentifier>{84db0710-2b0f-48bc-a72f-bd10c29954fc}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="Trenser.Zenvy.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="services\AuthenticationManagementService.cpp"> <ClCompile Include="services\AuthenticationManagementService.cpp">
<Filter>Services</Filter> <Filter>Services</Filter>
</ClCompile> </ClCompile>
@@ -156,6 +156,42 @@
<ClCompile Include="models\Log.cpp"> <ClCompile Include="models\Log.cpp">
<Filter>Models</Filter> <Filter>Models</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Trenser.Zenvy.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="views\AdminMenu.cpp">
<Filter>Views</Filter>
</ClCompile>
<ClCompile Include="views\EmployeeMenu.cpp">
<Filter>Views</Filter>
</ClCompile>
<ClCompile Include="views\FinanceExecutiveMenu.cpp">
<Filter>Views</Filter>
</ClCompile>
<ClCompile Include="views\HRManagerMenu.cpp">
<Filter>Views</Filter>
</ClCompile>
<ClCompile Include="views\ITExecutiveMenu.cpp">
<Filter>Views</Filter>
</ClCompile>
<ClCompile Include="views\TalentExecutiveMenu.cpp">
<Filter>Views</Filter>
</ClCompile>
<ClCompile Include="views\TeamExecutiveMenu.cpp">
<Filter>Views</Filter>
</ClCompile>
<ClCompile Include="views\TeamLeadMenu.cpp">
<Filter>Views</Filter>
</ClCompile>
<ClCompile Include="views\UserInterface.cpp">
<Filter>Views</Filter>
</ClCompile>
<ClCompile Include="models\Faq.cpp">
<Filter>Models</Filter>
</ClCompile>
<ClCompile Include="services\ApplicationConfig.cpp">
<Filter>Services</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="services\AuthenticationManagementService.h"> <ClInclude Include="services\AuthenticationManagementService.h">
@@ -269,6 +305,39 @@
<ClInclude Include="models\Log.h"> <ClInclude Include="models\Log.h">
<Filter>Models</Filter> <Filter>Models</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="views\AdminMenu.h">
<Filter>Views</Filter>
</ClInclude>
<ClInclude Include="views\EmployeeMenu.h">
<Filter>Views</Filter>
</ClInclude>
<ClInclude Include="views\FinanceExecutiveMenu.h">
<Filter>Views</Filter>
</ClInclude>
<ClInclude Include="views\HRManagerMenu.h">
<Filter>Views</Filter>
</ClInclude>
<ClInclude Include="views\ITExecutiveMenu.h">
<Filter>Views</Filter>
</ClInclude>
<ClInclude Include="views\TalentExecutiveMenu.h">
<Filter>Views</Filter>
</ClInclude>
<ClInclude Include="views\TeamExecutiveMenu.h">
<Filter>Views</Filter>
</ClInclude>
<ClInclude Include="views\TeamLeadMenu.h">
<Filter>Views</Filter>
</ClInclude>
<ClInclude Include="views\UserInterface.h">
<Filter>Views</Filter>
</ClInclude>
<ClInclude Include="models\Faq.h">
<Filter>Models</Filter>
</ClInclude>
<ClInclude Include="services\ApplicationConfig.h">
<Filter>Services</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="models\Employee.h"> <ClInclude Include="models\Employee.h">
@@ -1 +1,68 @@
/*
* File: ZenvyController.cpp
* Description : Controls data flow between UI and Service Layers.
* Author: Trenser
* Created : 01-Apr-2026
*/
#include "ZenvyController.h" #include "ZenvyController.h"
/*
* Function: login
* Description: authenticates the employee based on email and password
* Parameters:
* email - email of the employee
* password - password of the employee
* Returns:
* Tuple - login status, employee type, employee designation
* login status - success or failed
* employee type - type of the employee logged in
* employee designation - designation if employee type is GENERAL.
*/
AuthenticationDTO ZenvyController::login(const std::string& email, const std::string& password)
{
return m_authenticationManagementService->login(email, password);
}
/*
* Function: changePassword
* Description: updates the password of the currently authenticated employee.
* Parameters:
* password - the new password to be set for the employee
* Returns:
* void - no return value
*/
void ZenvyController::logout()
{
m_authenticationManagementService->logout();
}
/*
* Function: changePassword
* Description: updates the password of the currently authenticated employee.
* Parameters:
* password - the new password to be set for the employee
* Returns:
* void - no return value
*/
void ZenvyController::changePassword(const std::string& password)
{
m_authenticationManagementService->changePassword(password);
}
ZenvyController::~ZenvyController()
{
delete m_authenticationManagementService;
delete m_attendanceManagementService;
delete m_bookingManagementService;
delete m_employeeManagememtService;
delete m_leaveManagementService;
delete m_notificationManagementService;
delete m_payslipManagementService;
delete m_talentAcquisitionManagementService;
delete m_teamManagementService;
delete m_ticketManagementService;
}
@@ -1,5 +1,51 @@
/*
* File: ZenvyController.h
* Description : Controls data flow between UI and Service Layers.
* Author: Trenser
* Created : 01-Apr-2026
*/
#pragma once #pragma once
#include <utility>
#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"
class ZenvyController class ZenvyController
{ {
private:
AuthenticationManagementService* m_authenticationManagementService;
AttendanceManagementService* m_attendanceManagementService;
BookingManagementService* m_bookingManagementService;
EmployeeManagememtService* m_employeeManagememtService;
LeaveManagementService* m_leaveManagementService;
NotificationManagementService* m_notificationManagementService;
PayslipManagementService* m_payslipManagementService;
TalentAcquisitionManagementService* m_talentAcquisitionManagementService;
TeamManagementService* m_teamManagementService;
TicketManagementService* m_ticketManagementService;
public:
ZenvyController() :
m_authenticationManagementService(new AuthenticationManagementService()),
m_attendanceManagementService(new AttendanceManagementService()),
m_bookingManagementService(new BookingManagementService()),
m_employeeManagememtService(new EmployeeManagememtService()),
m_leaveManagementService(new LeaveManagementService()),
m_notificationManagementService(new NotificationManagementService()),
m_payslipManagementService(new PayslipManagementService()),
m_talentAcquisitionManagementService(new TalentAcquisitionManagementService()),
m_teamManagementService(new TeamManagementService()),
m_ticketManagementService(new TicketManagementService()) {};
AuthenticationDTO login(const std::string& email, const std::string& password);
void logout();
void changePassword(const std::string&);
~ZenvyController();
}; };
@@ -1 +1,112 @@
/*
* File: DataStore.cpp
* Description: Central Storage for all the System Data.
* Author: Trenser
* Created: 01-Apr-2026
*/
#include "DataStore.h" #include "DataStore.h"
/*
* Function: getInstance
* Description: provides a singleton instance of the DataStore.
* Parameters:
* None
* Returns:
* DataStore& - reference to the single DataStore object.
*/
DataStore& DataStore::getInstance()
{
static DataStore dataStore;
return dataStore;
}
/*
* Function: getLogs
* Description: retrieves the log map containing system logs.
* Parameters:
* None
* Returns:
* logMap& - reference to the log map.
*/
logMap& DataStore::getLogs()
{
return m_logs;
}
/*
* Function: getAuthenticatedEmployee
* Description: returns the currently authenticated employee.
* Parameters:
* None
* Returns:
* std::shared_ptr<Employee>& - reference to the authenticated employee object.
*/
Employee*& DataStore::getAuthenticatedEmployee()
{
return m_authenticatedEmployee;
}
/*
* Function: setAuthenticatedEmployee
* Description: sets the currently authenticated employee.
* Parameters:
* authenticatedEmployee - shared pointer to the employee object to be set as authenticated.
* Returns:
* void - no return value.
*/
void DataStore::setAuthenticatedEmployee(Employee* authenticatedEmployee)
{
m_authenticatedEmployee = authenticatedEmployee;
}
/*
* Function: getEmployees
* Description: retrieves the employee map containing all employees.
* Parameters:
* None
* Returns:
* employeeMap& - reference to the employee map.
*/
employeeMap& DataStore::getEmployees()
{
return m_employees;
}
/*
* Function: getAuthenticatedUser
* Description: alias for getAuthenticatedEmployee, returns the currently authenticated employee.
* Parameters:
* None
* Returns:
* std::shared_ptr<Employee>& - reference to the authenticated employee object.
*/
Employee* DataStore::getAuthenticatedUser()
{
return m_authenticatedEmployee;
}
DataStore::~DataStore()
{
for (auto& pair : m_employees)
{
delete pair.second;
}
m_employees.clear();
for (auto& pair : m_logs)
{
delete pair.second;
}
m_logs.clear();
if (m_authenticatedEmployee)
{
delete m_authenticatedEmployee;
m_authenticatedEmployee = nullptr;
}
}
@@ -1,5 +1,50 @@
/*
* File: DataStore.h
* Description: Central Storage for all the System Data.
* Author: Trenser
* Created: 01-Apr-2026
*/
#pragma once #pragma once
#include <map>
#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<std::string,Employee*>;
using logMap = std::map<util::Timestamp, Log*>;
class DataStore class DataStore
{ {
private:
Employee* m_authenticatedEmployee;
employeeMap m_employees;
logMap m_logs;
DataStore() : m_authenticatedEmployee(nullptr) {};
public:
static DataStore& getInstance();
DataStore(const DataStore&) = delete;
DataStore& operator=(const DataStore&) = delete;
DataStore(DataStore&&) = delete;
DataStore& operator=(DataStore&&) = delete;
employeeMap& getEmployees();
Employee* getAuthenticatedUser();
logMap& getLogs();
Employee*& getAuthenticatedEmployee();
void setAuthenticatedEmployee(Employee*);
~DataStore();
}; };
@@ -1,13 +1,30 @@
/*
* File: Factory.h
* Description: Provides a generic factory utility to create shared_ptr instances of objects.
* Author: Ajmal J S
* Created: 01-Apr-2026
*/
#pragma once #pragma once
#include <memory>
#include <utility> #include <utility>
class Factory class Factory
{ {
public: public:
/*
* Function: getObject
* Description: Creates and returns a shared_ptr to an object of type T.
* Parameters:
* T - the type of object to be created
* Args - constructor arguments forwarded to T's constructor
* Returns:
* std::shared_ptr<T> - a shared pointer managing the newly created object
*/
template<typename T, typename... Args> template<typename T, typename... Args>
static std::shared_ptr<T> getObject(Args&&... args) static T* getObject(Args&&... args)
{ {
return std::make_shared<T>(std::forward<Args>(args)...); return T*(std::forward<Args>(args)...);
} }
}; };
@@ -1 +1,7 @@
/*
* File: Admin.cpp
* Description: Admin model class
* Author: Trenser
* Created: 31-Mar-2026
*/
#include "Admin.h" #include "Admin.h"
@@ -1,3 +1,10 @@
/*
* File: Admin.h
* Description: Admin model class
* Author: Trenser
* Created: 31-Mar-2026
*/
#pragma once #pragma once
#include "Employee.h" #include "Employee.h"
@@ -1,5 +1,12 @@
/*
* File: Announcement.cpp
* Description: The Announcement class defines a simple object for managing announcement details.
* Author: Trenser
* Created: 31-Mar-2026
*/
#include "Announcement.h" #include "Announcement.h"
//Getters and Setters
const std::string& Announcement::getAnnouncementId() const const std::string& Announcement::getAnnouncementId() const
{ {
return m_id; return m_id;
@@ -1,3 +1,9 @@
/*
* File: Announcement.h
* Description: The Announcement class defines a simple object for managing announcement details.
* Author: Trenser
* Created: 31-Mar-2026
*/
#pragma once #pragma once
#include <string> #include <string>
#include "Timestamp.h" #include "Timestamp.h"
@@ -1,5 +1,12 @@
/*
* File: Attendance.cpp
* Description: The Attendance class represents an attendance record by storing an ID, login and logout timestamps.
* Author: Trenser
* Created: 31-Mar-2026
*/
#include "Attendance.h" #include "Attendance.h"
//Getters and Setters
const std::string& Attendance::getAttendanceId() const const std::string& Attendance::getAttendanceId() const
{ {
return m_id; return m_id;
@@ -1,3 +1,9 @@
/*
* File: Attendance.h
* Description: The Attendance class represents an attendance record by storing an ID, login and logout timestamps.
* Author: Trenser
* Created: 31-Mar-2026
*/
#pragma once #pragma once
#include <string> #include <string>
#include "Timestamp.h" #include "Timestamp.h"
@@ -1,5 +1,12 @@
/*
* File: Booking.cpp
* Description: The Booking class represents a timebased booking with employee and team details and supports duration calculation.
* Author: Trenser
* Created: 31-Mar-2026
*/
#include "Booking.h" #include "Booking.h"
//Getters and Setters
const std::string& Booking::getBookingId() const const std::string& Booking::getBookingId() const
{ {
return m_id; return m_id;
@@ -20,7 +27,7 @@ const std::string& Booking::getEmployeeId() const
return m_employeeId; return m_employeeId;
} }
std::shared_ptr<Team> Booking::getTeam() const Team* Booking::getTeam() const
{ {
return m_team; return m_team;
} }
@@ -45,7 +52,7 @@ void Booking::setEmployeeId(const std::string& employeeId)
m_employeeId = employeeId; m_employeeId = employeeId;
} }
void Booking::setTeam(std::shared_ptr<Team> team) void Booking::setTeam(Team* team)
{ {
m_team = team; m_team = team;
} }
+11 -7
View File
@@ -1,6 +1,11 @@
/*
* File: Booking.h
* Description: The Booking class represents a time?based booking with employee and team details and supports duration calculation.
* Author: Trenser
* Created: 31-Mar-2026
*/
#pragma once #pragma once
#include <string> #include <string>
#include <memory>
#include "Team.h" #include "Team.h"
#include "Timestamp.h" #include "Timestamp.h"
@@ -11,25 +16,24 @@ private:
util::Timestamp m_startTime; util::Timestamp m_startTime;
util::Timestamp m_endTime; util::Timestamp m_endTime;
std::string m_employeeId; std::string m_employeeId;
std::shared_ptr<Team> m_team; Team* m_team;
public: public:
Booking() : m_id(""), m_startTime(), m_endTime(), m_employeeId(""), m_team(nullptr) {} Booking() : m_id(""), m_startTime(), m_endTime(), m_employeeId(""), m_team(nullptr) {};
Booking(const std::string& id, Booking(const std::string& id,
const util::Timestamp& startTime, const util::Timestamp& startTime,
const util::Timestamp& endTime, const util::Timestamp& endTime,
const std::string& employeeId, const std::string& employeeId,
std::shared_ptr<Team> team) Team* team) : m_id(id), m_startTime(startTime), m_endTime(endTime), m_employeeId(employeeId), m_team(team) {};
: m_id(id), m_startTime(startTime), m_endTime(endTime), m_employeeId(employeeId), m_team(team) {}
const std::string& getBookingId() const; const std::string& getBookingId() const;
const util::Timestamp& getStartTime() const; const util::Timestamp& getStartTime() const;
const util::Timestamp& getEndTime() const; const util::Timestamp& getEndTime() const;
const std::string& getEmployeeId() const; const std::string& getEmployeeId() const;
std::shared_ptr<Team> getTeam() const; Team* getTeam() const;
void setBookingId(const std::string& id); void setBookingId(const std::string& id);
void setStartTime(const util::Timestamp& startTime); void setStartTime(const util::Timestamp& startTime);
void setEndTime(const util::Timestamp& endTime); void setEndTime(const util::Timestamp& endTime);
void setEmployeeId(const std::string& employeeId); void setEmployeeId(const std::string& employeeId);
void setTeam(std::shared_ptr<Team> team); void setTeam(Team* team);
double getDurationInHours() const; double getDurationInHours() const;
double getDurationInMinutes() const; double getDurationInMinutes() const;
}; };
@@ -1,5 +1,12 @@
/*
* File: Candidate.cpp
* Description: The Candidate class stores and manages a candidates information.
* Author: Trenser
* Created: 31-Mar-2026
*/
#include "Candidate.h" #include "Candidate.h"
//Getters and Setters
const std::string& Candidate::getCandidateId() const const std::string& Candidate::getCandidateId() const
{ {
return m_id; return m_id;
@@ -1,3 +1,9 @@
/*
* File: Candidate.h
* Description: The Candidate class stores and manages a candidates information.
* Author: Trenser
* Created: 31-Mar-2026
*/
#pragma once #pragma once
#include <string> #include <string>
#include "Enums.h" #include "Enums.h"
@@ -1,5 +1,12 @@
/*
* File: Employee.cpp
* Description: The Employee class manages employee information and associated work records such as payroll, attendance, leaves, and payslips.
* Author: Trenser
* Created: 31-Mar-2026
*/
#include "Employee.h" #include "Employee.h"
//Getters and Setters
const std::string& Employee::getEmployeeId() const const std::string& Employee::getEmployeeId() const
{ {
return m_id; return m_id;
@@ -40,7 +47,7 @@ const std::string& Employee::getEmployeeTeamId() const
return m_teamId; return m_teamId;
} }
std::shared_ptr<Payroll> Employee::getPayroll() const Payroll* Employee::getPayroll() const
{ {
return m_payroll; return m_payroll;
} }
@@ -95,12 +102,12 @@ void Employee::setEmployeeTeamId(const std::string& teamId)
m_teamId = teamId; m_teamId = teamId;
} }
void Employee::setEmployeePayroll(std::shared_ptr<Payroll> payroll) void Employee::setEmployeePayroll(Payroll* payroll)
{ {
m_payroll = payroll; m_payroll = payroll;
} }
void Employee::addPayslip(std::shared_ptr<Payslip> payslip) void Employee::addPayslip(Payslip* payslip)
{ {
if (payslip) if (payslip)
{ {
@@ -108,7 +115,7 @@ void Employee::addPayslip(std::shared_ptr<Payslip> payslip)
} }
} }
void Employee::addAttendance(std::shared_ptr<Attendance> attendance) void Employee::addAttendance(Attendance* attendance)
{ {
if (attendance) if (attendance)
{ {
@@ -116,10 +123,15 @@ void Employee::addAttendance(std::shared_ptr<Attendance> attendance)
} }
} }
void Employee::addLeave(std::shared_ptr<Leave> leave) void Employee::addLeave(Leave* leave)
{ {
if (leave) if (leave)
{ {
m_leaves[leave->getLeaveId()] = leave; m_leaves[leave->getLeaveId()] = leave;
} }
} }
Enums::EmployeeType Employee::getEmployeeType() const
{
return m_employeeType;
}
+22 -14
View File
@@ -1,15 +1,20 @@
/*
* File: Employee.h
* Description: The Employee class manages employee information and associated work records such as payroll, attendance, leaves, and payslips.
* Author: Trenser
* Created: 31-Mar-2026
*/
#pragma once #pragma once
#include <string> #include <string>
#include <memory>
#include <map> #include <map>
#include "Payslip.h" #include "Payslip.h"
#include "Attendance.h" #include "Attendance.h"
#include "Leave.h" #include "Leave.h"
#include "Payroll.h" #include "Payroll.h"
#include "Enums.h" #include "Enums.h"
using payslipMap = std::map<std::string, std::shared_ptr<Payslip>>; using payslipMap = std::map<std::string, Payslip*>;
using attendanceMap = std::map<int, std::map<std::string, std::shared_ptr<Attendance>>>; using attendanceMap = std::map<int, std::map<std::string, Attendance*>>;
using leaveMap = std::map<std::string, std::shared_ptr<Leave>>; using leaveMap = std::map<std::string, Leave*>;
class Employee class Employee
{ {
@@ -22,20 +27,22 @@ private:
Enums::AccountStatus m_accountStatus; Enums::AccountStatus m_accountStatus;
Enums::TeamStatus m_teamStatus; Enums::TeamStatus m_teamStatus;
std::string m_teamId; std::string m_teamId;
std::shared_ptr<Payroll> m_payroll; Payroll* m_payroll;
payslipMap m_payslips; payslipMap m_payslips;
attendanceMap m_attendances; attendanceMap m_attendances;
leaveMap m_leaves; leaveMap m_leaves;
Enums::EmployeeType m_employeeType;
public: 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, Employee(const std::string& id,
const std::string& password, const std::string& password,
const std::string& name, const std::string& name,
const std::string& phone, const std::string& phone,
const std::string& email, const std::string& email,
const std::string& teamId, const std::string& teamId,
std::shared_ptr<Payroll> payroll) Enums::EmployeeType employeeType,
: 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) {} 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& getEmployeeId() const;
const std::string& getEmployeePassword() const; const std::string& getEmployeePassword() const;
const std::string& getEmployeeName() const; const std::string& getEmployeeName() const;
@@ -44,7 +51,7 @@ public:
Enums::AccountStatus getEmployeeAccountStatus() const; Enums::AccountStatus getEmployeeAccountStatus() const;
Enums::TeamStatus getEmployeeTeamStatus() const; Enums::TeamStatus getEmployeeTeamStatus() const;
const std::string& getEmployeeTeamId() const; const std::string& getEmployeeTeamId() const;
std::shared_ptr<Payroll> getPayroll() const; Payroll* getPayroll() const;
const payslipMap& getEmployeePayslips() const; const payslipMap& getEmployeePayslips() const;
const attendanceMap& getEmployeeAttendances() const; const attendanceMap& getEmployeeAttendances() const;
const leaveMap& getEmployeeLeaves() const; const leaveMap& getEmployeeLeaves() const;
@@ -55,9 +62,10 @@ public:
void setEmployeeAccountStatus(Enums::AccountStatus status); void setEmployeeAccountStatus(Enums::AccountStatus status);
void setEmployeeTeamStatus(Enums::TeamStatus status); void setEmployeeTeamStatus(Enums::TeamStatus status);
void setEmployeeTeamId(const std::string& teamId); void setEmployeeTeamId(const std::string& teamId);
void setEmployeePayroll(std::shared_ptr<Payroll> payroll); void setEmployeePayroll(Payroll* payroll);
void addPayslip(std::shared_ptr<Payslip> payslip); void addPayslip(Payslip* payslip);
void addAttendance(std::shared_ptr<Attendance> attendance); void addAttendance(Attendance* attendance);
void addLeave(std::shared_ptr<Leave> leave); void addLeave(Leave* leave);
~Employee() = default; Enums::EmployeeType getEmployeeType() const;
virtual ~Employee() = default;
}; };
@@ -0,0 +1,7 @@
/*
* File: Faq.h
* Description: Faq model class.
* Author: Trenser
* Created: 02-Apr-2026
*/
#include "Faq.h"
+12
View File
@@ -0,0 +1,12 @@
/*
* File: Faq.h
* Description: Faq model class.
* Author: Trenser
* Created: 02-Apr-2026
*/
#pragma once
class Faq
{
};
@@ -1 +1,7 @@
/*
* File: FinanceExecutive.h
* Description: FinanceExecutive model class.
* Author: Trenser
* Created: 31-Mar-2026
*/
#include "FinanceExecutive.h" #include "FinanceExecutive.h"
@@ -1,3 +1,9 @@
/*
* File: FinanceExecutive.h
* Description: FinanceExecutive model class.
* Author: Trenser
* Created: 31-Mar-2026
*/
#pragma once #pragma once
#include "Employee.h" #include "Employee.h"
@@ -1,5 +1,12 @@
/*
* File: GeneralEmployee.h
* Description: The GeneralEmployee class represents a general employee with a specific designation.
* Author: Trenser
* Created: 31-Mar-2026
*/
#include "GeneralEmployee.h" #include "GeneralEmployee.h"
//Getters and Setters
Enums::EmployeeDesignation GeneralEmployee::getDesignation() const Enums::EmployeeDesignation GeneralEmployee::getDesignation() const
{ {
return m_designation; return m_designation;
@@ -1,3 +1,9 @@
/*
* File: GeneralEmployee.h
* Description: The GeneralEmployee class represents a general employee with a specific designation.
* Author: Trenser
* Created: 31-Mar-2026
*/
#pragma once #pragma once
#include "Employee.h" #include "Employee.h"
#include "Enums.h" #include "Enums.h"
@@ -14,9 +20,8 @@ public:
const std::string& phone, const std::string& phone,
const std::string& email, const std::string& email,
const std::string& teamId, const std::string& teamId,
std::shared_ptr<Payroll> payroll, Payroll* payroll,
Enums::EmployeeDesignation designation) Enums::EmployeeDesignation designation) : Employee(id, password, name, phone, email, teamId,Enums::EmployeeType::GENERAL, payroll), m_designation(designation) {}
: Employee(id, password, name, phone, email, teamId, payroll), m_designation(designation) {}
Enums::EmployeeDesignation getDesignation() const; Enums::EmployeeDesignation getDesignation() const;
void setDesignation(Enums::EmployeeDesignation designation); void setDesignation(Enums::EmployeeDesignation designation);
~GeneralEmployee() = default; ~GeneralEmployee() = default;
@@ -1 +1,7 @@
/*
* File: HRManager.cpp
* Description: HRManager model class.
* Author: Trenser
* Created: 31-Mar-2026
*/
#include "HRManager.h" #include "HRManager.h"
@@ -1,3 +1,9 @@
/*
* File: HRManager.h
* Description: HRManager model class.
* Author: Trenser
* Created: 31-Mar-2026
*/
#pragma once #pragma once
#include "Employee.h" #include "Employee.h"
@@ -1 +1,7 @@
/*
* File: ITExecutive.cpp
* Description: ITExecutive model class.
* Author: Trenser
* Created: 31-Mar-2026
*/
#include "ITExecutive.h" #include "ITExecutive.h"
@@ -1,3 +1,9 @@
/*
* File: ITExecutive.h
* Description: ITExecutive model class.
* Author: Trenser
* Created: 31-Mar-2026
*/
#pragma once #pragma once
#include "Employee.h" #include "Employee.h"
@@ -1,5 +1,13 @@
/*
File: JobListing.cpp
* Description : Represents a job opening along with its details and applied candidates.
* Author : Trenser
* Created : 01-Apr-2026
*/
#include "JobListing.h" #include "JobListing.h"
//Getters and setters
const std::string& JobListing::getJobId() const const std::string& JobListing::getJobId() const
{ {
return m_id; return m_id;
@@ -1,10 +1,17 @@
/*
File: JobListing.h
* Description : Represents a job opening along with its details and applied candidates.
* Author : Trenser
* Created : 01-Apr-2026
*/
#pragma once #pragma once
#include <string> #include <string>
#include <map> #include <map>
#include <memory> #include <memory>
#include "Candidate.h" #include "Candidate.h"
#include "Enums.h" #include "Enums.h"
using candidateMap = std::map<std::string, std::shared_ptr<Candidate>>; using candidateMap = std::map<std::string, Candidate*>;
class JobListing class JobListing
{ {
@@ -1,5 +1,13 @@
/*
File: Leave.cpp
* Description : Stores information related to an employees leave application.
* Author : Trenser
* Created : 31-Mar-2026
*/
#include "Leave.h" #include "Leave.h"
//Getters and setters
const std::string& Leave::getLeaveId() const const std::string& Leave::getLeaveId() const
{ {
return m_id; return m_id;
@@ -1,3 +1,10 @@
/*
File: Leave.h
* Description : Stores information related to an employees leave application.
* Author : Trenser
* Created : 31-Mar-2026
*/
#pragma once #pragma once
#include <string> #include <string>
#include "Enums.h" #include "Enums.h"
@@ -1,5 +1,13 @@
/*
File: Log.cpp
* Description : Represents a log entry containing a timestamp and an associated message.
* Author : Trenser
* Created : 01-Apr-2026
*/
#include "Log.h" #include "Log.h"
//Getters and setters
const util::Timestamp& Log::getTimestamp() const const util::Timestamp& Log::getTimestamp() const
{ {
return m_timestamp; return m_timestamp;
+9 -2
View File
@@ -1,3 +1,10 @@
/*
File: Log.h
* Description : Represents a log entry containing a timestamp and an associated message.
* Author : Trenser
* Created : 01-Apr-2026
*/
#pragma once #pragma once
#include <string> #include <string>
#include "Timestamp.h" #include "Timestamp.h"
@@ -9,8 +16,8 @@ private:
std::string m_message; std::string m_message;
public: public:
Log() : m_timestamp(), m_message("") {} Log() : m_timestamp(), m_message("") {}
Log(const util::Timestamp& timestamp, const std::string& message) Log(const std::string& message)
: m_timestamp(timestamp), m_message(message) {} : m_timestamp(), m_message(message) {}
const util::Timestamp& getTimestamp() const; const util::Timestamp& getTimestamp() const;
const std::string& getMessage() const; const std::string& getMessage() const;
void setTimestamp(const util::Timestamp& timestamp); void setTimestamp(const util::Timestamp& timestamp);
@@ -1,5 +1,13 @@
/*
File: Notification.cpp
* Description : Represents an employee notification with message and status details.
* Author : Trenser
* Created : 31-Mar-2026
*/
#include "Notification.h" #include "Notification.h"
//Getters and setters
const std::string& Notification::getNotificationId() const const std::string& Notification::getNotificationId() const
{ {
return m_id; return m_id;
@@ -1,3 +1,10 @@
/*
File: Notification.h
* Description : Represents an employee notification with message and status details.
* Author : Trenser
* Created : 31-Mar-2026
*/
#pragma once #pragma once
#include <string> #include <string>
#include "Enums.h" #include "Enums.h"
@@ -1,5 +1,13 @@
/*
File: Payroll.cpp
* Description : Stores payroll and salary breakdown details for an employee.
* Author : Trenser
* Created : 31-Mar-2026
*/
#include "Payroll.h" #include "Payroll.h"
//Getters and setters
const std::string& Payroll::getPayrollId() const const std::string& Payroll::getPayrollId() const
{ {
return m_id; return m_id;
@@ -1,3 +1,10 @@
/*
File: Payroll.h
* Description : Stores payroll and salary breakdown details for an employee.
* Author : Trenser
* Created : 31-Mar-2026
*/
#pragma once #pragma once
#include <string> #include <string>
@@ -1,5 +1,13 @@
/*
File: Payslip.cpp
* Description : Models a payslip entity that stores salary information.
* Author : Trenser
* Created : 31-Mar-2026
*/
#include "Payslip.h" #include "Payslip.h"
//Getters and setters
const std::string& Payslip::getPayslipId() const const std::string& Payslip::getPayslipId() const
{ {
return m_id; return m_id;
@@ -1,3 +1,10 @@
/*
File: Payslip.h
* Description : Models a payslip entity that stores salary information.
* Author : Trenser
* Created : 31-Mar-2026
*/
#pragma once #pragma once
#include <string> #include <string>
+9 -1
View File
@@ -1,5 +1,13 @@
/*
File: Room.cpp
* Description : Models a room entity that maintains room details and manages its bookings.
* Author : Trenser
* Created : 31-Mar-2026
*/
#include "Room.h" #include "Room.h"
//Getters and setters
const std::string& Room::getRoomId() const const std::string& Room::getRoomId() const
{ {
return m_id; return m_id;
@@ -25,7 +33,7 @@ void Room::setRoomName(const std::string& name)
m_name = name; m_name = name;
} }
void Room::addBooking(std::shared_ptr<Booking> booking) void Room::addBooking(Booking* booking)
{ {
if (booking) if (booking)
{ {
+9 -2
View File
@@ -1,9 +1,16 @@
/*
File: Room.h
* Description : Models a room entity that maintains room details and manages its bookings.
* Author : Trenser
* Created : 31-Mar-2026
*/
#pragma once #pragma once
#include <string> #include <string>
#include <map> #include <map>
#include <memory> #include <memory>
#include "Booking.h" #include "Booking.h"
using bookingMap = std::map<std::string, std::shared_ptr<Booking>>; using bookingMap = std::map<std::string, Booking*>;
class Room class Room
{ {
@@ -19,5 +26,5 @@ public:
const bookingMap& getBookings() const; const bookingMap& getBookings() const;
void setRoomId(const std::string& id); void setRoomId(const std::string& id);
void setRoomName(const std::string& name); void setRoomName(const std::string& name);
void addBooking(std::shared_ptr<Booking> booking); void addBooking(Booking* booking);
}; };
@@ -1 +1,8 @@
/*
File: TalentExecutive.cpp
* Description : Represents information related to a talent executive in the system.
* Author : Trenser
* Created : 31-Mar-2026
*/
#include "TalentExecutive.h" #include "TalentExecutive.h"
@@ -1,3 +1,10 @@
/*
File: TalentExecutive.h
* Description : Represents information related to a talent executive in the system.
* Author : Trenser
* Created : 31-Mar-2026
*/
#pragma once #pragma once
#include "Employee.h" #include "Employee.h"
+10 -2
View File
@@ -1,5 +1,13 @@
/*
File: Team.cpp
* Description : Models a team entity that maintains team identity, leadership, employee list, and size limitations.
* Author : Trenser
* Created : 31-Mar-2026
*/
#include "Team.h" #include "Team.h"
//Getters and setters
const std::string& Team::getTeamId() const const std::string& Team::getTeamId() const
{ {
return m_id; return m_id;
@@ -10,7 +18,7 @@ const std::string& Team::getTeamName() const
return m_name; return m_name;
} }
std::shared_ptr<Employee> Team::getTeamLead() const Employee* Team::getTeamLead() const
{ {
return m_lead; return m_lead;
} }
@@ -35,7 +43,7 @@ void Team::setTeamName(const std::string& name)
m_name = name; m_name = name;
} }
void Team::setTeamLead(std::shared_ptr<Employee> lead) void Team::setTeamLead(Employee* lead)
{ {
m_lead = lead; m_lead = lead;
} }
+12 -5
View File
@@ -1,34 +1,41 @@
/*
File: Team.h
* Description : Models a team entity that maintains team identity, leadership, employee list, and size limitations.
* Author : Trenser
* Created : 31-Mar-2026
*/
#pragma once #pragma once
#include <string> #include <string>
#include <map> #include <map>
#include <memory> #include <memory>
#include "Employee.h" #include "Employee.h"
using employeeMap = std::map<std::string, std::shared_ptr<Employee>>; using employeeMap = std::map<std::string, Employee*>;
class Team class Team
{ {
private: private:
std::string m_id; std::string m_id;
std::string m_name; std::string m_name;
std::shared_ptr<Employee> m_lead; Employee* m_lead;
employeeMap m_employees; employeeMap m_employees;
int m_maximumNumberOfEmployees; int m_maximumNumberOfEmployees;
public: public:
Team() : m_id(""), m_name(""), m_lead(nullptr), m_maximumNumberOfEmployees(0) {} Team() : m_id(""), m_name(""), m_lead(nullptr), m_maximumNumberOfEmployees(0) {}
Team(const std::string& id, Team(const std::string& id,
const std::string& name, const std::string& name,
std::shared_ptr<Employee> lead, Employee* lead,
int maximumNumberOfEmployees) int maximumNumberOfEmployees)
: m_id(id), m_name(name), m_lead(lead), m_maximumNumberOfEmployees(maximumNumberOfEmployees) { : m_id(id), m_name(name), m_lead(lead), m_maximumNumberOfEmployees(maximumNumberOfEmployees) {
} }
const std::string& getTeamId() const; const std::string& getTeamId() const;
const std::string& getTeamName() const; const std::string& getTeamName() const;
std::shared_ptr<Employee> getTeamLead() const; Employee* getTeamLead() const;
const employeeMap& getEmployeesInTeam() const; const employeeMap& getEmployeesInTeam() const;
int getMaximumNumberOfEmployeesInTeam() const; int getMaximumNumberOfEmployeesInTeam() const;
void setTeamId(const std::string& id); void setTeamId(const std::string& id);
void setTeamName(const std::string& name); void setTeamName(const std::string& name);
void setTeamLead(std::shared_ptr<Employee> lead); void setTeamLead(Employee* lead);
void setEmployeesInTeam(const employeeMap& employees); void setEmployeesInTeam(const employeeMap& employees);
void setMaximumNumberOfEmployeesInTeam(int maximumNumberOfEmployees); void setMaximumNumberOfEmployeesInTeam(int maximumNumberOfEmployees);
}; };
@@ -1 +1,8 @@
/*
File: TeamExecutive.cpp
* Description : Represents information related to a team executive within the system.
* Author : Trenser
* Created : 31-Mar-2026
*/
#include "TeamExecutive.h" #include "TeamExecutive.h"
@@ -1,3 +1,10 @@
/*
File: TeamExecutive.h
* Description : Represents information related to a team executive within the system.
* Author : Trenser
* Created : 31-Mar-2026
*/
#pragma once #pragma once
#include "Employee.h" #include "Employee.h"
@@ -1,5 +1,13 @@
/*
File: Ticket.cpp
* Description : Represents a support ticket with its associated details and status.
* Author : Trenser
* Created : 31-Mar-2026
*/
#include "Ticket.h" #include "Ticket.h"
//Getters and setters
const std::string& Ticket::getTicketId() const const std::string& Ticket::getTicketId() const
{ {
return m_id; return m_id;
@@ -1,3 +1,10 @@
/*
File: Ticket.h
* Description : Represents a support ticket with its associated details and status.
* Author : Trenser
* Created : 31-Mar-2026
*/
#pragma once #pragma once
#include <string> #include <string>
#include "Enums.h" #include "Enums.h"
@@ -0,0 +1,8 @@
/*
* File: ApplicationConfig.cpp
* Description: Global Application Config
* Author: Trenser
* Created: 06-Apr-2026
*/
#include "ApplicationConfig.h"
@@ -0,0 +1,16 @@
/*
* File: ApplicationConfig.h
* Description: Global Application Config
* Author: Trenser
* Created: 06-Apr-2026
*/
#pragma once
namespace Config
{
namespace Authentication
{
constexpr const char* DEFAULT_PASSWORD = "password";
}
}
@@ -1 +1,8 @@
/*
* File: AttendanceManagementService.cpp
* Description: Handles Attendance related operations
* Author: Trenser
* Created: 30-Apr-2026
*/
#include "AttendanceManagementService.h" #include "AttendanceManagementService.h"
@@ -1,3 +1,10 @@
/*
* File: AttendanceManagementService.h
* Description: Handles Attendance related operations
* Author: Trenser
* Created: 30-Apr-2026
*/
#pragma once #pragma once
class AttendanceManagementService class AttendanceManagementService
{ {
@@ -1 +1,110 @@
/*
* File: AuthenticationManagementService.cpp
* Description: Handles authentication related operations
* Author: Trenser
* Created: 30-Mar-2026
*/
#include <stdexcept>
#include "AuthenticationManagementService.h" #include "AuthenticationManagementService.h"
#include "ApplicationConfig.h"
/*
* Function: login
* Description: Authenticates a user using email and password, determines login status,
* employee type, and designation, and sets the authenticated employee
* in the data store.
* Parameters:
* email - employee email address
* password - employee password
* Returns:
* AuthenticationDTO containing login status, employee type, and employee designation
*/
AuthenticationDTO 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::Authentication::DEFAULT_PASSWORD)
{
loginStatus = Enums::LoginStatus::FIRST_LOGIN;
}
else
{
loginStatus = Enums::LoginStatus::SUCCESS;
}
employeeType = employee.second->getEmployeeType();
if (employeeType == Enums::EmployeeType::GENERAL)
{
GeneralEmployee* generalEmployee = dynamic_cast<GeneralEmployee*>(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);
}
/*
* Function: changePassword
* Description: Updates the password of the currently authenticated user.
* Parameters:
* password - new password to be set
* Returns:
* None
* Throws:
* runtime_error if no authenticated user is found
*/
void AuthenticationManagementService::changePassword(const std::string& password)
{
Employee* authenticatedUser = m_dataStore.getAuthenticatedUser();
if (authenticatedUser)
{
authenticatedUser->setEmployeePassword(password);
}
else
{
throw std::runtime_error("User not found");
}
}
/*
* Function: logout
* Description: Logs out the currently authenticated user by clearing authentication data.
* Parameters:
* None
* Returns:
* None
* Throws:
* runtime_error if no user is currently logged in
*/
void AuthenticationManagementService::logout() {
if (m_dataStore.getAuthenticatedEmployee())
{
m_dataStore.getAuthenticatedEmployee() = nullptr;
}
else
{
throw std::runtime_error("No user currently logged In...");
}
}
@@ -1,5 +1,28 @@
/*
* File: AuthenticationManagementService.h
* Description: Handles authentication related operations
* Author: Trenser
* Created: 30-Mar-2026
*/
#pragma once #pragma once
#include <string>
#include <map>
#include <tuple>
#include <utility>
#include <stdexcept>
#include "DataStore.h"
#include "Enums.h"
using AuthenticationDTO = std::tuple<Enums::LoginStatus, Enums::EmployeeType, Enums::EmployeeDesignation>;
class AuthenticationManagementService class AuthenticationManagementService
{ {
private:
DataStore& m_dataStore;
public:
AuthenticationManagementService() : m_dataStore(DataStore::getInstance()) {};
AuthenticationDTO login(const std::string& username, const std::string& password);
void logout();
void changePassword(const std::string&);
}; };
@@ -1 +1,8 @@
/*
* File: BookingManagementService.cpp
* Description: Handle operations related to booking meetings
* Author: Trenser
* Created: 30-Mar-2026
*/
#include "BookingManagementService.h" #include "BookingManagementService.h"
@@ -1,3 +1,10 @@
/*
* File: BookingManagementService.h
* Description: Handle operations related to booking meetings
* Author: Trenser
* Created: 30-Mar-2026
*/
#pragma once #pragma once
class BookingManagementService class BookingManagementService
{ {
@@ -1 +1,8 @@
/*
* File: EmployeeManagementService.cpp
* Description: Handle operations related to employees
* Author: Trenser
* Created: 30-Mar-2026
*/
#include "EmployeeManagememtService.h" #include "EmployeeManagememtService.h"
@@ -1,3 +1,10 @@
/*
* File: EmployeeManagementService.h
* Description: Handle operations related to employees
* Author: Trenser
* Created: 30-Mar-2026
*/
#pragma once #pragma once
class EmployeeManagememtService class EmployeeManagememtService
{ {
@@ -1 +1,8 @@
/*
* File: LeaveManagementService.cpp
* Description: Handle operations related to leaves
* Author: Trenser
* Created: 30-Mar-2026
*/
#include "LeaveManagementService.h" #include "LeaveManagementService.h"
@@ -1,3 +1,10 @@
/*
* File: LeaveManagementService.h
* Description: Handle operations related to leaves
* Author: Trenser
* Created: 30-Mar-2026
*/
#pragma once #pragma once
class LeaveManagementService class LeaveManagementService
{ {
@@ -1 +1,19 @@
/*
* File: Log.cpp
* Description: Handle operations related to logging
* Author: Trenser
* Created: 01-Apr-2026
*/
#include "LogService.h" #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();
Log* log = Factory::getObject<Log>(message);
logs.emplace(std::make_pair(log->getTimestamp(), log));
}
@@ -1,5 +1,15 @@
/*
* File: Log.h
* Description: Handle operations related to logging
* Author: Trenser
* Created: 01-Apr-2026
*/
#pragma once #pragma once
#include "Log.h"
class LogService class LogService
{ {
public:
static void log(const std::string&);
}; };
@@ -1 +1,8 @@
/*
* File: NotificationManagementService.cpp
* Description: Handle operations related to notifications
* Author: Trenser
* Created: 30-Mar-2026
*/
#include "NotificationManagementService.h" #include "NotificationManagementService.h"
@@ -1,5 +1,11 @@
/*
* File: NotificationManagementService.h
* Description: Handle operations related to notifications
* Author: Trenser
* Created: 30-Mar-2026
*/
#pragma once #pragma once
class NotificationManagementService class NotificationManagementService
{ {
}; };
@@ -1 +1,8 @@
/*
* File: PayslipManagementService.cpp
* Description: Handle operations related to employee payslips
* Author: Trenser
* Created: 30-Mar-2026
*/
#include "PayslipManagementService.h" #include "PayslipManagementService.h"
@@ -1,3 +1,10 @@
/*
* File: PayslipManagementService.h
* Description: Handle operations related to employee payslips
* Author: Trenser
* Created: 30-Mar-2026
*/
#pragma once #pragma once
class PayslipManagementService class PayslipManagementService
{ {
@@ -1 +1,8 @@
/*
* File: TalentAcquisitionManagementService.cpp
* Description: Handle operations related to Talent Acquisition
* Author: Trenser
* Created: 30-Mar-2026
*/
#include "TalentAcquisitionManagementService.h" #include "TalentAcquisitionManagementService.h"
@@ -1,5 +1,11 @@
/*
* File: TalentAcquisitionManagementService.h
* Description: Handle operations related to Talent Acquisition
* Author: Trenser
* Created: 30-Mar-2026
*/
#pragma once #pragma once
class TalentAcquisitionManagementService class TalentAcquisitionManagementService
{ {
}; };
@@ -1 +1,8 @@
/*
* File: TeamManagementService.cpp
* Description: Handle operations related to Team Management
* Author: Trenser
* Created: 30-Mar-2026
*/
#include "TeamManagementService.h" #include "TeamManagementService.h"
@@ -1,3 +1,10 @@
/*
* File: TeamManagementService.h
* Description: Handle operations related to Team Management
* Author: Trenser
* Created: 30-Mar-2026
*/
#pragma once #pragma once
class TeamManagementService class TeamManagementService
{ {
@@ -1 +1,8 @@
/*
* File: TicketManagementService.h
* Description: Handle operations related to Ticket Management
* Author: Trenser
* Created: 30-Mar-2026
*/
#include "TicketManagementService.h" #include "TicketManagementService.h"
@@ -1,3 +1,10 @@
/*
* File: TicketManagementService.h
* Description: Handle operations related to Ticket Management
* Author: Trenser
* Created: 30-Mar-2026
*/
#pragma once #pragma once
class TicketManagementService class TicketManagementService
{ {
+28 -1
View File
@@ -1,3 +1,10 @@
/*
* File: Enums.h
* Description: Defines strongly typed enumerations for statuses, types, and designations used across the HRMS system.
* Author: Smitha
* Created: 01-04-2026
*/
#pragma once #pragma once
namespace Enums { namespace Enums {
@@ -66,7 +73,27 @@ namespace Enums {
{ {
JUNIOR, JUNIOR,
SENIOR, 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
};
} }
@@ -1,11 +1 @@
#include "inputHelper.h" #include "inputHelper.h"
void util::readString(std::string& value)
{
getline(std::cin >> std::ws, value);
}
void util::pressEnter()
{
system("pause");
}
@@ -1,3 +1,10 @@
/*
* File: InputHelper.h
* Description: Handles input validation and error handling
* Author: Smitha
* Created: 08-Apr-2026
*/
#pragma once #pragma once
#include <iostream> #include <iostream>
#include <limits> #include <limits>
@@ -6,18 +13,49 @@
namespace util namespace util
{ {
template <typename T> /*
void readValue(T& value) * Function: read
{ * Description: Reads input from console into a variable of type T.
std::cin >> value; * Parameters:
if (std::cin.fail()) * value - reference to a variable of type T where the input will be stored
{ * Returns:
std::cin.clear(); * void - throws runtime_error if input is invalid
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); */
throw std::runtime_error("Invalid Console Input");
}
}
void readString(std::string&); template <typename T>
void pressEnter(); inline void read(T& value)
{
if (!(std::cin >> value))
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
throw std::runtime_error("Invalid console input");
}
}
/*
* Function: read
* Description: Reads a line of text input from console into a string.
* Parameters:
* value - reference to a string where the input will be stored
* Returns:
* void - no return value
*/
inline void read(std::string& value)
{
std::getline(std::cin >> std::ws, value);
}
/*
* Function: pressEnter
* Description: Pauses execution until the user presses Enter.
* Parameters: None
* Returns: void - no return value
*/
inline void pressEnter()
{
system("pause");
}
} }
@@ -1,5 +1,20 @@
/*
* File: OutputHelper.cpp
* Description: Provides functions to help with console output.
* Author: Trenser
* Created: 01-04-2026
*/
#include "outputHelper.h" #include "outputHelper.h"
/*
* Function: clear
* Description: Clears the console screen output.
* Parameters: None
* Returns:
* void - no return value
*/
void util::clear() void util::clear()
{ {
std::cout << "\x1B[2J\x1B[H" << std::flush; std::cout << "\x1B[2J\x1B[H" << std::flush;
@@ -1,3 +1,10 @@
/*
* File: OutputHelper.h
* Description: Provides functions to help with console output.
* Author: Trenser
* Created: 01-04-2026
*/
#pragma once #pragma once
#include <iostream> #include <iostream>
@@ -1,18 +1,56 @@
/*
* File: Timestamp.cpp
* Description: Provides a utility class for representing and manipulating time values.
* Supports conversion between string and time formats, duration calculations
* (hours, minutes, seconds), date extraction, and comparison operators.
* Author: Trenser
* Created: 01-Apr-2026
*/
#include <sstream> #include <sstream>
#include <iomanip> #include <iomanip>
#include <stdexcept> #include <stdexcept>
#include "Timestamp.h" #include "Timestamp.h"
/*
* Function: Timestamp
* Description: Default constructor that initializes the timestamp to the current system time.
* Parameters:
* None
* Returns:
* Timestamp object
*/
util::Timestamp::Timestamp() util::Timestamp::Timestamp()
{ {
m_time = std::time(nullptr); m_time = std::time(nullptr);
} }
/*
* Function: Timestamp (overloaded)
* Description: Constructor that initializes the timestamp with a given time value.
* Parameters:
* timeValue - time_t value representing a specific time
* Returns:
* Timestamp object
*/
util::Timestamp::Timestamp(std::time_t timeValue) util::Timestamp::Timestamp(std::time_t timeValue)
{ {
m_time = timeValue; m_time = timeValue;
} }
/*
* Function: fromString
* Description: Creates a Timestamp object from a formatted string.
* Parameters:
* timeString - string in the format "YYYY-MM-DD HH:MM:SS"
* Returns:
* Timestamp object representing the parsed time
* Throws:
* runtime_error if the string format is invalid
*/
util::Timestamp util::Timestamp::fromString(const std::string& timeString) util::Timestamp util::Timestamp::fromString(const std::string& timeString)
{ {
std::tm timeStruct = {}; std::tm timeStruct = {};
@@ -26,6 +64,15 @@ util::Timestamp util::Timestamp::fromString(const std::string& timeString)
return Timestamp(parsedTimestamp); return Timestamp(parsedTimestamp);
} }
/*
* Function: toString
* Description: Converts the Timestamp object into a formatted string.
* Parameters:
* None
* Returns:
* string - formatted as "YYYY-MM-DD HH:MM:SS"
*/
std::string util::Timestamp::toString() const std::string util::Timestamp::toString() const
{ {
std::tm timeStruct = {}; std::tm timeStruct = {};
@@ -35,11 +82,30 @@ std::string util::Timestamp::toString() const
return outputStream.str(); return outputStream.str();
} }
/*
* Function: getDurationInSeconds
* Description: Calculates the duration between two timestamps in seconds.
* Parameters:
* startTimestamp - starting time
* endTimestamp - ending time
* Returns:
* double - duration in seconds
*/
double util::Timestamp::getDurationInSeconds(const Timestamp& startTimestamp, const Timestamp& endTimestamp) double util::Timestamp::getDurationInSeconds(const Timestamp& startTimestamp, const Timestamp& endTimestamp)
{ {
return std::difftime(endTimestamp.m_time, startTimestamp.m_time); return std::difftime(endTimestamp.m_time, startTimestamp.m_time);
} }
/*
* Function: getDateAsInt
* Description: Returns the date portion of the timestamp as an integer in YYYYMMDD format.
* Parameters:
* None
* Returns:
* int - date as YYYYMMDD
*/
int util::Timestamp::getDateAsInt() const int util::Timestamp::getDateAsInt() const
{ {
std::tm timeStruct{}; std::tm timeStruct{};
@@ -50,36 +116,101 @@ int util::Timestamp::getDateAsInt() const
return year * 10000 + month * 100 + day; return year * 10000 + month * 100 + day;
} }
/*
* Function: getDurationInMinutes
* Description: Calculates the duration between two timestamps in minutes.
* Parameters:
* startTimestamp - starting time
* endTimestamp - ending time
* Returns:
* double - duration in minutes
*/
double util::Timestamp::getDurationInMinutes(const Timestamp& startTimestamp, const Timestamp& endTimestamp) double util::Timestamp::getDurationInMinutes(const Timestamp& startTimestamp, const Timestamp& endTimestamp)
{ {
return getDurationInSeconds(startTimestamp, endTimestamp) / 60.0; return getDurationInSeconds(startTimestamp, endTimestamp) / 60.0;
} }
/*
* Function: getDurationInHours
* Description: Calculates the duration between two timestamps in hours.
* Parameters:
* startTimestamp - starting time
* endTimestamp - ending time
* Returns:
* double - duration in hours
*/
double util::Timestamp::getDurationInHours(const Timestamp& startTimestamp, const Timestamp& endTimestamp) double util::Timestamp::getDurationInHours(const Timestamp& startTimestamp, const Timestamp& endTimestamp)
{ {
return getDurationInSeconds(startTimestamp, endTimestamp) / 3600.0; return getDurationInSeconds(startTimestamp, endTimestamp) / 3600.0;
} }
/*
* Function: operator<
* Description: Compares two timestamps to check if one is earlier than the other.
* Parameters:
* other - Timestamp to compare against
* Returns:
* bool - true if current timestamp is earlier
*/
bool util::Timestamp::operator<(const Timestamp& other) const bool util::Timestamp::operator<(const Timestamp& other) const
{ {
return m_time < other.m_time; return m_time < other.m_time;
} }
/*
* Function: operator>
* Description: Compares two timestamps to check if one is later than the other.
* Parameters:
* other - Timestamp to compare against
* Returns:
* bool - true if current timestamp is later
*/
bool util::Timestamp::operator>(const Timestamp& other) const bool util::Timestamp::operator>(const Timestamp& other) const
{ {
return m_time > other.m_time; return m_time > other.m_time;
} }
/*
* Function: operator<=
* Description: Compares two timestamps to check if one is earlier or equal.
* Parameters:
* other - Timestamp to compare against
* Returns:
* bool - true if current timestamp is earlier or equal
*/
bool util::Timestamp::operator<=(const Timestamp& other) const bool util::Timestamp::operator<=(const Timestamp& other) const
{ {
return m_time <= other.m_time; return m_time <= other.m_time;
} }
/*
* Function: operator>=
* Description: Compares two timestamps to check if one is later or equal.
* Parameters:
* other - Timestamp to compare against
* Returns:
* bool - true if current timestamp is later or equal
*/
bool util::Timestamp::operator>=(const Timestamp& other) const bool util::Timestamp::operator>=(const Timestamp& other) const
{ {
return m_time >= other.m_time; return m_time >= other.m_time;
} }
/*
* Function: operator==
* Description: Compares two timestamps for equality.
* Parameters:
* other - Timestamp to compare against
* Returns:
* bool - true if both timestamps are equal
*/
bool util::Timestamp::operator==(const Timestamp& other) const bool util::Timestamp::operator==(const Timestamp& other) const
{ {
return m_time == other.m_time; return m_time == other.m_time;
@@ -1,3 +1,12 @@
/*
* File: Timestamp.h
* Description: Provides a utility class for representing and manipulating time values.
* Supports conversion between string and time formats, duration calculations
* (hours, minutes, seconds), date extraction, and comparison operators.
* Author: Trenser
* Created: 01-Apr-2026
*/
#pragma once #pragma once
#include <ctime> #include <ctime>
#include <string> #include <string>
@@ -1,4 +1,23 @@
/*
* File: Validator.cpp
* Description: Validates inputs like phone number, email, password
* Author: Trenser
* Created: 01-Apr-2026
*/
#include <string>
#include <cctype>
#include "Validator.h" #include "Validator.h"
#include "ApplicationConfig.h"
/*
* Function: isPhoneNumberValid
* Description: Validates whether the given string is a valid phone number.
* Parameters:
* phoneNumber - string containing the phone number to validate
* Returns:
* bool - true if the phone number is valid (10 digits, all numeric), false otherwise
*/
bool util::isPhoneNumberValid(const std::string& phoneNumber) { bool util::isPhoneNumberValid(const std::string& phoneNumber) {
if (phoneNumber.size() != 10) if (phoneNumber.size() != 10)
@@ -13,6 +32,15 @@ bool util::isPhoneNumberValid(const std::string& phoneNumber) {
); );
} }
/*
* Function: isEmailValid
* Description: Validates whether the given string is a properly formatted email address.
* Parameters:
* email - string containing the email address to validate
* Returns:
* bool - true if the email contains exactly one '@' character and is not at the start or end, false otherwise
*/
bool util::isEmailValid(const std::string& email) { bool util::isEmailValid(const std::string& email) {
size_t index = email.find('@'); size_t index = email.find('@');
if (index == std::string::npos) return false; if (index == std::string::npos) return false;
@@ -26,3 +54,56 @@ bool util::isEmailValid(const std::string& email) {
} }
return true; return true;
} }
/*
* Function: isPasswordValid
* Description: Validates whether the given string meets password requirements.
* Parameters:
* password - string containing the password to validate
* Returns:
* bool - true if the password is valid, false otherwise
* Notes:
* - Must not equal the default password
* - Must be at least 8 characters long
* - Must contain at least one uppercase letter, one lowercase letter, one digit, and one special character
* - Must not contain whitespace
*/
bool util::isPasswordValid(const std::string& password)
{
if (password == Config::Authentication::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<unsigned char>(character)))
{
return false;
}
if (std::isupper(static_cast<unsigned char>(character)))
{
hasUpper = true;
}
else if (std::islower(static_cast<unsigned char>(character)))
{
hasLower = true;
}
else if (std::isdigit(static_cast<unsigned char>(character)))
{
hasDigit = true;
}
else
{
hasSpecial = true;
}
}
return hasUpper && hasLower && hasDigit && hasSpecial;
}
@@ -1,3 +1,10 @@
/*
* File: Validator.h
* Description: Validates inputs like phone number, email, password
* Author: Trenser
* Created: 01-Apr-2026
*/
#pragma once #pragma once
#include<string> #include<string>
#include<algorithm> #include<algorithm>
@@ -7,4 +14,5 @@ namespace util
{ {
bool isPhoneNumberValid(const std::string&); bool isPhoneNumberValid(const std::string&);
bool isEmailValid(const std::string&); bool isEmailValid(const std::string&);
bool isPasswordValid(const std::string&);
} }
@@ -0,0 +1,77 @@
/*
* File: AdminMenu.cpp
* Description: Handles user-related operations such as creation, authentication, and validation.
* Author: Trenser
* Created: 02-Apr-2026
*/
#include <iostream>
#include "AdminMenu.h"
#include"InputHelper.h"
#include"OutputHelper.h"
/*
* Function: AdminMenu::run
* Description: Starts and manages the administrator menu loop. Continuously displays
* options to the administrator until logout is selected or an exception occurs.
* Parameters:
* None
* Returns:
* None
*/
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();
}
}
}
/*
* Function: AdminMenu::handleOperation
* Description: Processes the administrators menu choice and executes the corresponding action.
* Parameters:
* choice - integer representing the selected menu option
* Returns:
* true - if the menu should remain active
* false - if the administrator chooses to logout
*/
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;
}
@@ -0,0 +1,20 @@
/*
* File: AdminMenu.h
* Description: Declaration of the AdminMenu class and related functions.
* Author: Trenser
* Created: 02-Apr-2026
*/
#pragma once
#include"ZenvyController.h"
class AdminMenu
{
private:
ZenvyController* m_zenvyController;
public:
AdminMenu() :m_zenvyController(new ZenvyController()) {};
void run();
bool handleOperation(int);
};
@@ -0,0 +1,103 @@
/*
* File: EmployeeMenu.cpp
* Description: Implements the EmployeeMenu class functions including menu loop and operation handling.
* Author: Trenser
* Created: 02-Apr-2026
*/
#include <iostream>
#include "EmployeeMenu.h"
#include"InputHelper.h"
#include"OutputHelper.h"
/*
* Function: EmployeeMenu::run
* Description: Starts the employee menu loop and displays available options until logout is selected
* Parameters:
* None
* Returns:
* None
*/
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();
}
}
}
/*
* Function: EmployeeMenu::handleOperation
* Description: Handles the employees menu choice and executes the corresponding action
* Parameters:
* choice - integer representing the selected menu option
* Returns:
* true - if the menu should remain active
* false - if the employee chooses to logout
*/
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;
}
@@ -0,0 +1,20 @@
/*
* File: EmployeeMenu.h
* Description: Declaration of the EmployeeMenu class and related functions.
* Author: Trenser
* Created: 02-Apr-2026
*/
#pragma once
#include"ZenvyController.h"
class EmployeeMenu
{
private:
ZenvyController m_zenvyController;
public:
EmployeeMenu() : m_zenvyController(new ZenvyController()) {};
void run();
bool handleOperation(int);
};
@@ -0,0 +1,94 @@
/*
* File: FinanceExecutiveMenu.cpp
* Description: Implements the FinanceExecutiveMenu class functions including menu loop and operation handling.
* Author: Trenser
* Created: 02-Apr-2026
*/
#include <iostream>
#include "FinanceExecutiveMenu.h"
#include"InputHelper.h"
#include"OutputHelper.h"
/*
* Function: FinanceExecutiveMenu::run
* Description: Starts the finance executive menu loop and displays available options until logout is selected
* Parameters:
* None
* Returns:
* None
*/
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();
}
}
}
/*
* Function: FinanceExecutiveMenu::handleOperation
* Description: Handles the finance executives menu choice and executes the corresponding action
* Parameters:
* choice - integer representing the selected menu option
* Returns:
* true - if the menu should remain active
* false - if the finance executive chooses to logout
*/
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;
}
@@ -0,0 +1,20 @@
/*
* File: FinanceExecutiveMenu.h
* Description: Declaration of the FinanceExecutiveMenu class and related functions.
* Author: Trenser
* Created: 02-Apr-2026
*/
#pragma once
#include"ZenvyController.h"
class FinanceExecutiveMenu
{
private:
ZenvyController* m_zenvyController;
public:
FinanceExecutiveMenu() : m_zenvyController(new ZenvyController()) {};
void run();
bool handleOperation(int);
};
@@ -0,0 +1,97 @@
/*
* File: HRManagerMenu.cpp
* Description: Implements the HRManagerMenu class functions including menu loop and operation handling.
* Author: Trenser
* Created: 02-Apr-2026
*/
#include <iostream>
#include "HRManagerMenu.h"
#include"InputHelper.h"
#include"OutputHelper.h"
/*
* Function: HRManagerMenu::run
* Description: Starts the HR manager menu loop and displays available options until logout is selected
* Parameters:
* None
* Returns:
* None
*/
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();
}
}
}
/*
* Function: HRManagerMenu::handleOperation
* Description: Handles the HR managers menu choice and executes the corresponding action
* Parameters:
* choice - integer representing the selected menu option
* Returns:
* true - if the menu should remain active
* false - if the HR manager chooses to logout
*/
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;
}
@@ -0,0 +1,20 @@
/*
* File: HRManagerMenu.h
* Description: Declaration of the EmployeeMenu class and related functions.
* Author: Trenser
* Created: 02-Apr-2026
*/
#pragma once
#include"ZenvyController.h"
class HRManagerMenu
{
private:
ZenvyController* m_zenvyController;
public:
HRManagerMenu() : m_zenvyController(new ZenvyController()) {};
void run();
bool handleOperation(int);
};
@@ -0,0 +1,88 @@
/*
* File: ITExecutiveMenu.cpp
* Description: Implements the ITExecutiveMenu class functions including menu loop and operation handling.
* Author: Trenser
* Created: 02-Apr-2026
*/
#include <iostream>
#include "ITExecutiveMenu.h"
#include"InputHelper.h"
#include"OutputHelper.h"
/*
* Function: ITExecutiveMenu::run
* Description: Starts the IT executive menu loop and displays available options until logout is selected
* Parameters:
* None
* Returns:
* None
*/
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();
}
}
}
/*
* Function: ITExecutiveMenu::handleOperation
* Description: Handles the IT executives menu choice and executes the corresponding action
* Parameters:
* choice - integer representing the selected menu option
* Returns:
* true - if the menu should remain active
* false - if the IT executive chooses to logout
*/
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;
}
@@ -0,0 +1,20 @@
/*
* File: ITExecutiveMenu.h
* Description: Declaration of the ITExecutiveMenu class and related functions.
* Author: Trenser
* Created: 02-Apr-2026
*/
#pragma once
#include"ZenvyController.h"
class ITExecutiveMenu
{
private:
ZenvyController* m_zenvyController;
public:
ITExecutiveMenu() : m_zenvyController(new ZenvyController()) {};
void run();
bool handleOperation(int);
};
@@ -0,0 +1,100 @@
/*
* File: TalentExecutiveMenu.cpp
* Description: Implements the TalentExecutiveMenu class functions including menu loop and operation handling.
* Author: Trenser
* Created: 02-Apr-2026
*/
#include <iostream>
#include "TalentExecutiveMenu.h"
#include"InputHelper.h"
#include"OutputHelper.h"
/*
* Function: TalentExecutiveMenu::run
* Description: Starts the talent executive menu loop and displays available options until logout is selected
* Parameters:
* None
* Returns:
* None
*/
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();
}
}
}
/*
* Function: TalentExecutiveMenu::handleOperation
* Description: Handles the talent executives menu choice and executes the corresponding action
* Parameters:
* choice - integer representing the selected menu option
* Returns:
* true - if the menu should remain active
* false - if the talent executive chooses to logout
*/
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;
}
@@ -0,0 +1,20 @@
/*
* File: TalentExecutiveMenu.h
* Description: Declaration of the TalentExecutiveMenu class and related functions.
* Author: Trenser
* Created: 02-Apr-2026
*/
#pragma once
#include"ZenvyController.h"
class TalentExecutiveMenu
{
private:
ZenvyController* m_zenvyController;
public:
TalentExecutiveMenu() : m_zenvyController(new ZenvyController()) {};
void run();
bool handleOperation(int);
};
@@ -0,0 +1,103 @@
/*
* File: TeamExecutiveMenu.cpp
* Description: Implements the TeamExecutiveMenu class functions including menu loop and operation handling.
* Author: Trenser
* Created: 02-Apr-2026
*/
#include <iostream>
#include "TeamExecutiveMenu.h"
#include"InputHelper.h"
#include"OutputHelper.h"
/*
* Function: TeamExecutiveMenu::run
* Description: Starts the team executive menu loop and displays available options until logout is selected
* Parameters:
* None
* Returns:
* None
*/
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();
}
}
}
/*
* Function: TeamExecutiveMenu::handleOperation
* Description: Handles the team executives menu choice and executes the corresponding action
* Parameters:
* choice - integer representing the selected menu option
* Returns:
* true - if the menu should remain active
* false - if the team executive chooses to logout
*/
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;
}
@@ -0,0 +1,20 @@
/*
* File: TeamExecutiveMenu.h
* Description: Declaration of the TeamExecutiveMenu and related functions.
* Author: Trenser
* Created: 02-Apr-2026
*/
#pragma once
#include"ZenvyController.h"
class TeamExecutiveMenu
{
private:
ZenvyController* m_zenvyController;
public:
TeamExecutiveMenu() : m_zenvyController(new ZenvyController()) {};
void run();
bool handleOperation(int);
};
@@ -0,0 +1,109 @@
/*
* File: TeamLeadMenu.cpp
* Description: Implements the TeamLeadMenu class functions including menu loop and operation handling.
* Author: Trenser
* Created: 02-Apr-2026
*/
#include <iostream>
#include "TeamLeadMenu.h"
#include"InputHelper.h"
#include"OutputHelper.h"
/*
* Function: TeamLeadMenu::run
* Description: Starts the team lead menu loop and displays available options until logout is selected
* Parameters:
* None
* Returns:
* None
*/
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();
}
}
}
/*
* Function: TeamLeadMenu::handleOperation
* Description: Handles the team leads menu choice and executes the corresponding action
* Parameters:
* choice - integer representing the selected menu option
* Returns:
* true - if the menu should remain active
* false - if the team lead chooses to logout
*/
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;
}

Some files were not shown because too many files have changed in this diff Show More