From 11b47d38c18a7ea98d077e279c19c5fdba10c027 Mon Sep 17 00:00:00 2001 From: Joel Thomas Date: Wed, 1 Apr 2026 13:26:58 +0530 Subject: [PATCH] Set up codebase - Define models, factory classes, data store, utility classes (timestamp, io helpers, enums, validator) - Define Model Class Structures - Add new model Log - Add new service LogService - Add Factory class - Add Utilities like Timestamp, Validator, Input/Output Helpers.. Co-authored-by: Tinu Johnson Co-authored-by: Princy Jerin Co-authored-by: Ajmal Jalaludeen Co-authored-by: Jissin Sam Mathew --- .../Trenser.Zenvy/Trenser.Zenvy.vcxproj | 21 +++ .../Trenser.Zenvy.vcxproj.filters | 72 ++++++++++ .../controllers/ZenvyController.cpp | 1 + .../controllers/ZenvyController.h | 5 + .../Trenser.Zenvy/datastores/DataStore.cpp | 1 + .../Trenser.Zenvy/datastores/DataStore.h | 5 + .../Trenser.Zenvy/factories/Factory.cpp | 1 + .../Trenser.Zenvy/factories/Factory.h | 13 ++ Trenser.Zenvy/Trenser.Zenvy/models/Admin.h | 1 + .../Trenser.Zenvy/models/Announcement.cpp | 32 ++++- .../Trenser.Zenvy/models/Announcement.h | 21 ++- .../Trenser.Zenvy/models/Attendance.cpp | 40 ++++++ .../Trenser.Zenvy/models/Attendance.h | 24 +++- .../Trenser.Zenvy/models/Booking.cpp | 60 +++++++++ Trenser.Zenvy/Trenser.Zenvy/models/Booking.h | 34 ++++- .../Trenser.Zenvy/models/Candidate.cpp | 50 +++++++ .../Trenser.Zenvy/models/Candidate.h | 30 ++++- .../Trenser.Zenvy/models/Employee.cpp | 124 ++++++++++++++++++ Trenser.Zenvy/Trenser.Zenvy/models/Employee.h | 62 ++++++++- .../Trenser.Zenvy/models/FinanceExecutive.h | 1 + .../Trenser.Zenvy/models/GeneralEmployee.cpp | 12 +- .../Trenser.Zenvy/models/GeneralEmployee.h | 20 ++- .../Trenser.Zenvy/models/HRManager.h | 1 + .../Trenser.Zenvy/models/ITExecutive.h | 1 + .../Trenser.Zenvy/models/JobListing.cpp | 62 ++++++++- .../Trenser.Zenvy/models/JobListing.h | 39 ++++++ Trenser.Zenvy/Trenser.Zenvy/models/Leave.cpp | 86 ++++++++++++ Trenser.Zenvy/Trenser.Zenvy/models/Leave.h | 40 +++++- Trenser.Zenvy/Trenser.Zenvy/models/Log.cpp | 21 +++ Trenser.Zenvy/Trenser.Zenvy/models/Log.h | 18 +++ .../Trenser.Zenvy/models/Notification.cpp | 52 +++++++- .../Trenser.Zenvy/models/Notification.h | 30 ++++- .../Trenser.Zenvy/models/Payroll.cpp | 55 ++++++++ Trenser.Zenvy/Trenser.Zenvy/models/Payroll.h | 32 ++++- .../Trenser.Zenvy/models/Payslip.cpp | 20 +++ Trenser.Zenvy/Trenser.Zenvy/models/Payslip.h | 15 ++- Trenser.Zenvy/Trenser.Zenvy/models/Room.cpp | 33 +++++ Trenser.Zenvy/Trenser.Zenvy/models/Room.h | 22 +++- .../Trenser.Zenvy/models/TalentExecutive.h | 1 + Trenser.Zenvy/Trenser.Zenvy/models/Team.cpp | 50 +++++++ Trenser.Zenvy/Trenser.Zenvy/models/Team.h | 33 ++++- .../Trenser.Zenvy/models/TeamExecutive.h | 1 + Trenser.Zenvy/Trenser.Zenvy/models/Ticket.cpp | 50 +++++++ Trenser.Zenvy/Trenser.Zenvy/models/Ticket.h | 30 ++++- .../Trenser.Zenvy/services/LogService.cpp | 1 + .../Trenser.Zenvy/services/LogService.h | 5 + .../services/TicketManagementService.h | 1 + .../Trenser.Zenvy/utilities/Enums.cpp | 1 + Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h | 72 ++++++++++ .../Trenser.Zenvy/utilities/InputHelper.cpp | 11 ++ .../Trenser.Zenvy/utilities/InputHelper.h | 23 ++++ .../Trenser.Zenvy/utilities/OutputHelper.cpp | 6 + .../Trenser.Zenvy/utilities/OutputHelper.h | 7 + .../Trenser.Zenvy/utilities/Timestamp.cpp | 86 ++++++++++++ .../Trenser.Zenvy/utilities/Timestamp.h | 26 ++++ .../Trenser.Zenvy/utilities/Validator.cpp | 28 ++++ .../Trenser.Zenvy/utilities/Validator.h | 10 ++ 57 files changed, 1570 insertions(+), 29 deletions(-) create mode 100644 Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/factories/Factory.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/factories/Factory.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/models/Log.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/models/Log.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/services/LogService.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/services/LogService.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/utilities/OutputHelper.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/utilities/OutputHelper.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/utilities/Timestamp.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/utilities/Timestamp.h create mode 100644 Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.cpp create mode 100644 Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.h diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj index e96c07f..88bb765 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj @@ -102,6 +102,7 @@ true _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true + $(ProjectDir)controllers;$(ProjectDir)services;$(ProjectDir)utilities;%(AdditionalIncludeDirectories) Console @@ -123,6 +124,9 @@ + + + @@ -132,6 +136,7 @@ + @@ -145,6 +150,7 @@ + @@ -154,8 +160,16 @@ + + + + + + + + @@ -165,6 +179,7 @@ + @@ -178,11 +193,17 @@ + + + + + + diff --git a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters index 9bf2d28..3c26252 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters +++ b/Trenser.Zenvy/Trenser.Zenvy/Trenser.Zenvy.vcxproj.filters @@ -19,6 +19,18 @@ {62c491e3-6127-40c4-a2d9-fb10b223bb12} + + {e64383cf-bc11-454c-b3ee-b009eff44d92} + + + {060093db-4db8-4e52-9337-59364f6b5581} + + + {d6d09774-b79d-4ec9-a8c5-db90e95350df} + + + {eb93b9d1-08eb-48aa-be2a-e17085ce27bd} + @@ -114,6 +126,36 @@ Models + + Controllers + + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Factories + + + DataStores + + + Services + + + Models + @@ -197,6 +239,36 @@ Models + + Controllers + + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Factories + + + DataStores + + + Services + + + Models + diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp new file mode 100644 index 0000000..aa50123 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.cpp @@ -0,0 +1 @@ +#include "ZenvyController.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h new file mode 100644 index 0000000..7dae696 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/controllers/ZenvyController.h @@ -0,0 +1,5 @@ +#pragma once +class ZenvyController +{ +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp new file mode 100644 index 0000000..e81f26f --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.cpp @@ -0,0 +1 @@ +#include "DataStore.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h new file mode 100644 index 0000000..09042e4 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/datastores/DataStore.h @@ -0,0 +1,5 @@ +#pragma once +class DataStore +{ +}; + diff --git a/Trenser.Zenvy/Trenser.Zenvy/factories/Factory.cpp b/Trenser.Zenvy/Trenser.Zenvy/factories/Factory.cpp new file mode 100644 index 0000000..5b5c707 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/factories/Factory.cpp @@ -0,0 +1 @@ +#include "Factory.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/factories/Factory.h b/Trenser.Zenvy/Trenser.Zenvy/factories/Factory.h new file mode 100644 index 0000000..0c54b81 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/factories/Factory.h @@ -0,0 +1,13 @@ +#pragma once +#include +#include + +class Factory +{ +public: + template + static std::shared_ptr getObject(Args&&... args) + { + return std::make_shared(std::forward(args)...); + } +}; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Admin.h b/Trenser.Zenvy/Trenser.Zenvy/models/Admin.h index d3127d2..97f4f4e 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Admin.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Admin.h @@ -1,5 +1,6 @@ #pragma once #include "Employee.h" + class Admin : public Employee { }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Announcement.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Announcement.cpp index ac2e1f4..01cec1a 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Announcement.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Announcement.cpp @@ -1 +1,31 @@ -#include "Announcement.h" \ No newline at end of file +#include "Announcement.h" + +const std::string& Announcement::getAnnouncementId() const +{ + return m_id; +} + +const util::Timestamp& Announcement::getAnnouncementTimestamp() const +{ + return m_timestamp; +} + +const std::string& Announcement::getAnnouncementMessage() const +{ + return m_message; +} + +void Announcement::setAnnouncementId(const std::string& id) +{ + m_id = id; +} + +void Announcement::setAnnouncementTimestamp(const util::Timestamp& timestamp) +{ + m_timestamp = timestamp; +} + +void Announcement::setAnnouncementMessage(const std::string& message) +{ + m_message = message; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Announcement.h b/Trenser.Zenvy/Trenser.Zenvy/models/Announcement.h index 7f95f37..23e333c 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Announcement.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Announcement.h @@ -1,5 +1,22 @@ #pragma once +#include +#include "Timestamp.h" + class Announcement { -}; - +private: + std::string m_id; + util::Timestamp m_timestamp; + std::string m_message; +public: + Announcement() : m_id(""), m_timestamp(), m_message("") {} + Announcement(const std::string& id, + const std::string& message) + : m_id(id), m_message(message) {} + const std::string& getAnnouncementId() const; + const util::Timestamp& getAnnouncementTimestamp() const; + const std::string& getAnnouncementMessage() const; + void setAnnouncementId(const std::string& id); + void setAnnouncementTimestamp(const util::Timestamp& timestamp); + void setAnnouncementMessage(const std::string& message); +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Attendance.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Attendance.cpp index f22066e..7565537 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Attendance.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Attendance.cpp @@ -1 +1,41 @@ #include "Attendance.h" + +const std::string& Attendance::getAttendanceId() const +{ + return m_id; +} + +const util::Timestamp& Attendance::getLoginTime() const +{ + return m_loginTime; +} + +const util::Timestamp& Attendance::getLogoutTime() const +{ + return m_logoutTime; +} + +void Attendance::setAttendanceId(const std::string& id) +{ + m_id = id; +} + +void Attendance::setLoginTime(const util::Timestamp& loginTime) +{ + m_loginTime = loginTime; +} + +void Attendance::setLogoutTime(const util::Timestamp& logoutTime) +{ + m_logoutTime = logoutTime; +} + +double Attendance::getWorkingHours() const +{ + return util::Timestamp::getDurationInHours(m_loginTime, m_logoutTime); +} + +double Attendance::getWorkingMinutes() const +{ + return util::Timestamp::getDurationInMinutes(m_loginTime, m_logoutTime); +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Attendance.h b/Trenser.Zenvy/Trenser.Zenvy/models/Attendance.h index 8e13375..3b10f5c 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Attendance.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Attendance.h @@ -1,5 +1,25 @@ #pragma once +#include +#include "Timestamp.h" + class Attendance { -}; - +private: + std::string m_id; + util::Timestamp m_loginTime; + util::Timestamp m_logoutTime; +public: + Attendance() : m_id(""), m_loginTime(), m_logoutTime() {} + Attendance(const std::string& id, + const util::Timestamp& loginTime, + const util::Timestamp& logoutTime) + : m_id(id), m_loginTime(loginTime), m_logoutTime(logoutTime) {} + const std::string& getAttendanceId() const; + const util::Timestamp& getLoginTime() const; + const util::Timestamp& getLogoutTime() const; + void setAttendanceId(const std::string& id); + void setLoginTime(const util::Timestamp& loginTime); + void setLogoutTime(const util::Timestamp& logoutTime); + double getWorkingHours() const; + double getWorkingMinutes() const; +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Booking.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Booking.cpp index e0e3e0c..a40ed2b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Booking.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Booking.cpp @@ -1 +1,61 @@ #include "Booking.h" + +const std::string& Booking::getBookingId() const +{ + return m_id; +} + +const util::Timestamp& Booking::getStartTime() const +{ + return m_startTime; +} + +const util::Timestamp& Booking::getEndTime() const +{ + return m_endTime; +} + +const std::string& Booking::getEmployeeId() const +{ + return m_employeeId; +} + +std::shared_ptr Booking::getTeam() const +{ + return m_team; +} + +void Booking::setBookingId(const std::string& id) +{ + m_id = id; +} + +void Booking::setStartTime(const util::Timestamp& startTime) +{ + m_startTime = startTime; +} + +void Booking::setEndTime(const util::Timestamp& endTime) +{ + m_endTime = endTime; +} + +void Booking::setEmployeeId(const std::string& employeeId) +{ + m_employeeId = employeeId; +} + +void Booking::setTeam(std::shared_ptr team) +{ + m_team = team; +} + +double Booking::getDurationInHours() const +{ + return util::Timestamp::getDurationInHours(m_startTime, m_endTime); +} + +double Booking::getDurationInMinutes() const +{ + return util::Timestamp::getDurationInMinutes(m_startTime, m_endTime); +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Booking.h b/Trenser.Zenvy/Trenser.Zenvy/models/Booking.h index 60e6c50..7e99b4a 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Booking.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Booking.h @@ -1,5 +1,35 @@ #pragma once +#include +#include +#include "Team.h" +#include "Timestamp.h" + class Booking { -}; - +private: + std::string m_id; + util::Timestamp m_startTime; + util::Timestamp m_endTime; + std::string m_employeeId; + std::shared_ptr m_team; +public: + Booking() : m_id(""), m_startTime(), m_endTime(), m_employeeId(""), m_team(nullptr) {} + Booking(const std::string& id, + const util::Timestamp& startTime, + const util::Timestamp& endTime, + const std::string& employeeId, + std::shared_ptr team) + : m_id(id), m_startTime(startTime), m_endTime(endTime), m_employeeId(employeeId), m_team(team) {} + const std::string& getBookingId() const; + const util::Timestamp& getStartTime() const; + const util::Timestamp& getEndTime() const; + const std::string& getEmployeeId() const; + std::shared_ptr getTeam() const; + void setBookingId(const std::string& id); + void setStartTime(const util::Timestamp& startTime); + void setEndTime(const util::Timestamp& endTime); + void setEmployeeId(const std::string& employeeId); + void setTeam(std::shared_ptr team); + double getDurationInHours() const; + double getDurationInMinutes() const; +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Candidate.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Candidate.cpp index 8105d03..e4831a4 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Candidate.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Candidate.cpp @@ -1 +1,51 @@ #include "Candidate.h" + +const std::string& Candidate::getCandidateId() const +{ + return m_id; +} + +const std::string& Candidate::getCandidateName() const +{ + return m_name; +} + +long int Candidate::getCandidatePhone() const +{ + return m_phone; +} + +const std::string& Candidate::getCandidateQualification() const +{ + return m_qualification; +} + +Enums::CandidateStatus Candidate::getCandidateStatus() const +{ + return m_status; +} + +void Candidate::setCandidateId(const std::string& id) +{ + m_id = id; +} + +void Candidate::setCandidateName(const std::string& name) +{ + m_name = name; +} + +void Candidate::setCandidatePhone(long int phone) +{ + m_phone = phone; +} + +void Candidate::setCandidateQualification(const std::string& qualification) +{ + m_qualification = qualification; +} + +void Candidate::setCandidateStatus(Enums::CandidateStatus status) +{ + m_status = status; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Candidate.h b/Trenser.Zenvy/Trenser.Zenvy/models/Candidate.h index 9e26890..257c54d 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Candidate.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Candidate.h @@ -1,5 +1,31 @@ #pragma once +#include +#include "Enums.h" + class Candidate { -}; - +private: + std::string m_id; + std::string m_name; + long int m_phone; + std::string m_qualification; + Enums::CandidateStatus m_status; +public: + Candidate() : m_id(""), m_name(""), m_phone(0), m_qualification(""), m_status(Enums::CandidateStatus::PENDING) {} + Candidate(const std::string& id, + const std::string& name, + long int phone, + const std::string& qualification, + Enums::CandidateStatus status) + : m_id(id), m_name(name), m_phone(phone), m_qualification(qualification), m_status(status) {} + const std::string& getCandidateId() const; + const std::string& getCandidateName() const; + long int getCandidatePhone() const; + const std::string& getCandidateQualification() const; + Enums::CandidateStatus getCandidateStatus() const; + void setCandidateId(const std::string& id); + void setCandidateName(const std::string& name); + void setCandidatePhone(long int phone); + void setCandidateQualification(const std::string& qualification); + void setCandidateStatus(Enums::CandidateStatus status); +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Employee.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Employee.cpp index b0c2c2c..d5d4554 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Employee.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Employee.cpp @@ -1 +1,125 @@ #include "Employee.h" + +const std::string& Employee::getEmployeeId() const +{ + return m_id; +} + +const std::string& Employee::getEmployeePassword() const +{ + return m_password; +} + +const std::string& Employee::getEmployeeName() const +{ + return m_name; +} + +const std::string& Employee::getEmployeePhone() const +{ + return m_phone; +} + +const std::string& Employee::getEmployeeEmail() const +{ + return m_email; +} + +Enums::AccountStatus Employee::getEmployeeAccountStatus() const +{ + return m_accountStatus; +} + +Enums::TeamStatus Employee::getEmployeeTeamStatus() const +{ + return m_teamStatus; +} + +const std::string& Employee::getEmployeeTeamId() const +{ + return m_teamId; +} + +std::shared_ptr Employee::getPayroll() const +{ + return m_payroll; +} + +const payslipMap& Employee::getEmployeePayslips() const +{ + return m_payslips; +} + +const attendanceMap& Employee::getEmployeeAttendances() const +{ + return m_attendances; +} + +const leaveMap& Employee::getEmployeeLeaves() const +{ + return m_leaves; +} + +void Employee::setEmployeeId(const std::string& id) +{ + m_id = id; +} + +void Employee::setEmployeePassword(const std::string& password) +{ + m_password = password; +} + +void Employee::setEmployeeName(const std::string& name) +{ + m_name = name; +} + +void Employee::setEmployeePhone(const std::string& phone) +{ + m_phone = phone; +} + +void Employee::setEmployeeAccountStatus(Enums::AccountStatus status) +{ + m_accountStatus = status; +} + +void Employee::setEmployeeTeamStatus(Enums::TeamStatus status) +{ + m_teamStatus = status; +} + +void Employee::setEmployeeTeamId(const std::string& teamId) +{ + m_teamId = teamId; +} + +void Employee::setEmployeePayroll(std::shared_ptr payroll) +{ + m_payroll = payroll; +} + +void Employee::addPayslip(std::shared_ptr payslip) +{ + if (payslip) + { + m_payslips[payslip->getPayslipId()] = payslip; + } +} + +void Employee::addAttendance(std::shared_ptr attendance) +{ + if (attendance) + { + m_attendances[attendance->getLoginTime().getDateAsInt()][attendance->getAttendanceId()] = attendance; + } +} + +void Employee::addLeave(std::shared_ptr leave) +{ + if (leave) + { + m_leaves[leave->getLeaveId()] = leave; + } +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h b/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h index 83f5238..559afba 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Employee.h @@ -1,5 +1,63 @@ #pragma once +#include +#include +#include +#include "Payslip.h" +#include "Attendance.h" +#include "Leave.h" +#include "Payroll.h" +#include "Enums.h" +using payslipMap = std::map>; +using attendanceMap = std::map>>; +using leaveMap = std::map>; + class Employee { -}; - +private: + std::string m_id; + std::string m_password; + std::string m_name; + std::string m_phone; + std::string m_email; + Enums::AccountStatus m_accountStatus; + Enums::TeamStatus m_teamStatus; + std::string m_teamId; + std::shared_ptr m_payroll; + payslipMap m_payslips; + attendanceMap m_attendances; + leaveMap m_leaves; +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(const std::string& id, + const std::string& password, + const std::string& name, + const std::string& phone, + const std::string& email, + const std::string& teamId, + 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) {} + const std::string& getEmployeeId() const; + const std::string& getEmployeePassword() const; + const std::string& getEmployeeName() const; + const std::string& getEmployeePhone() const; + const std::string& getEmployeeEmail() const; + Enums::AccountStatus getEmployeeAccountStatus() const; + Enums::TeamStatus getEmployeeTeamStatus() const; + const std::string& getEmployeeTeamId() const; + std::shared_ptr getPayroll() const; + const payslipMap& getEmployeePayslips() const; + const attendanceMap& getEmployeeAttendances() const; + const leaveMap& getEmployeeLeaves() const; + void setEmployeeId(const std::string& id); + void setEmployeePassword(const std::string& password); + void setEmployeeName(const std::string& name); + void setEmployeePhone(const std::string& phone); + void setEmployeeAccountStatus(Enums::AccountStatus status); + void setEmployeeTeamStatus(Enums::TeamStatus status); + void setEmployeeTeamId(const std::string& teamId); + void setEmployeePayroll(std::shared_ptr payroll); + void addPayslip(std::shared_ptr payslip); + void addAttendance(std::shared_ptr attendance); + void addLeave(std::shared_ptr leave); + ~Employee() = default; +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/FinanceExecutive.h b/Trenser.Zenvy/Trenser.Zenvy/models/FinanceExecutive.h index 03e0bf7..8aafc69 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/FinanceExecutive.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/FinanceExecutive.h @@ -1,5 +1,6 @@ #pragma once #include "Employee.h" + class FinanceExecutive : public Employee { }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.cpp index 89b49dc..46f9e61 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.cpp @@ -1 +1,11 @@ -#include "GeneralEmployee.h" \ No newline at end of file +#include "GeneralEmployee.h" + +Enums::EmployeeDesignation GeneralEmployee::getDesignation() const +{ + return m_designation; +} + +void GeneralEmployee::setDesignation(Enums::EmployeeDesignation designation) +{ + m_designation = designation; +} \ 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 0555bf8..0485bbb 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/GeneralEmployee.h @@ -1,5 +1,23 @@ #pragma once #include "Employee.h" +#include "Enums.h" + class GeneralEmployee : public Employee { -}; +private: + Enums::EmployeeDesignation m_designation; +public: + GeneralEmployee() : m_designation(Enums::EmployeeDesignation::JUNIOR) {} + GeneralEmployee(const std::string& id, + const std::string& password, + const std::string& name, + const std::string& phone, + 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 getDesignation() const; + void setDesignation(Enums::EmployeeDesignation designation); + ~GeneralEmployee() = default; +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/HRManager.h b/Trenser.Zenvy/Trenser.Zenvy/models/HRManager.h index ca1ccd0..5e50a74 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/HRManager.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/HRManager.h @@ -1,5 +1,6 @@ #pragma once #include "Employee.h" + class HRManager : public Employee { }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/ITExecutive.h b/Trenser.Zenvy/Trenser.Zenvy/models/ITExecutive.h index 37839c1..2a61ef8 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/ITExecutive.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/ITExecutive.h @@ -1,5 +1,6 @@ #pragma once #include "Employee.h" + class ITExecutive : public Employee { }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/JobListing.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/JobListing.cpp index 7052169..ba1267c 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/JobListing.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/JobListing.cpp @@ -1 +1,61 @@ -#include "JobListing.h" \ No newline at end of file +#include "JobListing.h" + +const std::string& JobListing::getJobId() const +{ + return m_id; +} + +const std::string& JobListing::getJobName() const +{ + return m_name; +} + +const std::string& JobListing::getJobDescription() const +{ + return m_description; +} + +Enums::JobListingStatus JobListing::getJobStatus() const +{ + return m_status; +} + +int JobListing::getNumberOfVacancies() const +{ + return m_numberOfVacancies; +} + +const candidateMap& JobListing::getCandidates() const +{ + return m_candidates; +} + +void JobListing::setJobId(const std::string& id) +{ + m_id = id; +} + +void JobListing::setJobName(const std::string& name) +{ + m_name = name; +} + +void JobListing::setJobDescription(const std::string& description) +{ + m_description = description; +} + +void JobListing::setJobStatus(Enums::JobListingStatus status) +{ + m_status = status; +} + +void JobListing::setNumberOfVacancies(int numberOfVacancies) +{ + m_numberOfVacancies = numberOfVacancies; +} + +void JobListing::setCandidates(const candidateMap& candidates) +{ + m_candidates = candidates; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/JobListing.h b/Trenser.Zenvy/Trenser.Zenvy/models/JobListing.h index e69de29..3622743 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/JobListing.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/JobListing.h @@ -0,0 +1,39 @@ +#pragma once +#include +#include +#include +#include "Candidate.h" +#include "Enums.h" +using candidateMap = std::map>; + +class JobListing +{ +private: + std::string m_id; + std::string m_name; + std::string m_description; + Enums::JobListingStatus m_status; + int m_numberOfVacancies; + candidateMap m_candidates; +public: + JobListing() : m_id(""), m_name(""), m_description(""), m_status(Enums::JobListingStatus::CLOSED), m_numberOfVacancies(0) {} + JobListing(const std::string& id, + const std::string& name, + const std::string& description, + Enums::JobListingStatus status, + int numberOfVacancies, + const candidateMap& candidates) + : m_id(id), m_name(name), m_description(description), m_status(status), m_numberOfVacancies(numberOfVacancies), m_candidates(candidates) {} + const std::string& getJobId() const; + const std::string& getJobName() const; + const std::string& getJobDescription() const; + Enums::JobListingStatus getJobStatus() const; + int getNumberOfVacancies() const; + const candidateMap& getCandidates() const; + void setJobId(const std::string& id); + void setJobName(const std::string& name); + void setJobDescription(const std::string& description); + void setJobStatus(Enums::JobListingStatus status); + void setNumberOfVacancies(int numberOfVacancies); + void setCandidates(const candidateMap& candidates); +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Leave.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Leave.cpp index d1d79a4..1755bc7 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Leave.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Leave.cpp @@ -1 +1,87 @@ #include "Leave.h" + +const std::string& Leave::getLeaveId() const +{ + return m_id; +} + +const std::string& Leave::getEmployeeId() const +{ + return m_employeeId; +} + +const util::Timestamp& Leave::getTimestamp() const +{ + return m_timestamp; +} + +const std::string& Leave::getLeaveReason() const +{ + return m_reason; +} + +int Leave::getNumberOfGeneralLeave() +{ + return m_numberOfGeneralLeave; +} + +int Leave::getNumberOfRestrictedLeave() +{ + return m_numberOfRestrictedLeave; +} + +int Leave::getNumberOfMedicalLeave() +{ + return m_numberOfMedicalLeave; +} + +Enums::LeaveType Leave::getLeaveType() const +{ + return m_leaveType; +} + +void Leave::setLeaveId(const std::string& id) +{ + m_id = id; +} + +void Leave::setEmployeeId(const std::string& employeeId) +{ + m_employeeId = employeeId; +} + +void Leave::setTimestamp(const util::Timestamp& timestamp) +{ + m_timestamp = timestamp; +} + +void Leave::setLeaveReason(const std::string& reason) +{ + m_reason = reason; +} + +void Leave::setNumberOfGeneralLeave(int value) +{ + m_numberOfGeneralLeave = value; +} + +void Leave::setNumberOfRestrictedLeave(int value) +{ + m_numberOfRestrictedLeave = value; +} + +void Leave::setNumberOfMedicalLeave(int value) +{ + m_numberOfMedicalLeave = value; +} + +void Leave::setLeaveType(Enums::LeaveType type) +{ + m_leaveType = type; +} + +int Leave::m_numberOfGeneralLeave = 12; + +int Leave::m_numberOfRestrictedLeave = 2; + +int Leave::m_numberOfMedicalLeave = 6; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Leave.h b/Trenser.Zenvy/Trenser.Zenvy/models/Leave.h index aa3919f..0133f4a 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Leave.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Leave.h @@ -1,5 +1,41 @@ #pragma once +#include +#include "Enums.h" +#include "Timestamp.h" + class Leave { -}; - +private: + std::string m_id; + std::string m_employeeId; + util::Timestamp m_timestamp; + std::string m_reason; + static int m_numberOfGeneralLeave; + static int m_numberOfRestrictedLeave; + static int m_numberOfMedicalLeave; + Enums::LeaveType m_leaveType; +public: + Leave() : m_id(""), m_employeeId(""), m_timestamp(), m_reason(""), m_leaveType(Enums::LeaveType::GENERAL) {} + Leave(const std::string& id, + const std::string& employeeId, + const util::Timestamp& timestamp, + const std::string& reason, + Enums::LeaveType leaveType) + : m_id(id), m_employeeId(employeeId), m_timestamp(timestamp), m_reason(reason), m_leaveType(leaveType) {} + const std::string& getLeaveId() const; + const std::string& getEmployeeId() const; + const util::Timestamp& getTimestamp() const; + const std::string& getLeaveReason() const; + static int getNumberOfGeneralLeave(); + static int getNumberOfRestrictedLeave(); + static int getNumberOfMedicalLeave(); + Enums::LeaveType getLeaveType() const; + void setLeaveId(const std::string& id); + void setEmployeeId(const std::string& employeeId); + void setTimestamp(const util::Timestamp& timestamp); + void setLeaveReason(const std::string& reason); + void setNumberOfGeneralLeave(int value); + void setNumberOfRestrictedLeave(int value); + void setNumberOfMedicalLeave(int value); + void setLeaveType(Enums::LeaveType type); +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Log.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Log.cpp new file mode 100644 index 0000000..890cfc5 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Log.cpp @@ -0,0 +1,21 @@ +#include "Log.h" + +const util::Timestamp& Log::getTimestamp() const +{ + return m_timestamp; +} + +const std::string& Log::getMessage() const +{ + return m_message; +} + +void Log::setTimestamp(const util::Timestamp& timestamp) +{ + m_timestamp = timestamp; +} + +void Log::setMessage(const std::string& message) +{ + m_message = message; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Log.h b/Trenser.Zenvy/Trenser.Zenvy/models/Log.h new file mode 100644 index 0000000..9f05194 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Log.h @@ -0,0 +1,18 @@ +#pragma once +#include +#include "Timestamp.h" + +class Log +{ +private: + util::Timestamp m_timestamp; + 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) {} + const util::Timestamp& getTimestamp() const; + const std::string& getMessage() const; + void setTimestamp(const util::Timestamp& timestamp); + void setMessage(const std::string& message); +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Notification.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Notification.cpp index 0cf9b2c..f91530a 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Notification.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Notification.cpp @@ -1 +1,51 @@ -#include "Notification.h" \ No newline at end of file +#include "Notification.h" + +const std::string& Notification::getNotificationId() const +{ + return m_id; +} + +const std::string& Notification::getEmployeeId() const +{ + return m_employeeId; +} + +const std::string& Notification::getNotificationMessage() const +{ + return m_message; +} + +const util::Timestamp& Notification::getNotificationTimestamp() const +{ + return m_timestamp; +} + +Enums::NotificationStatus Notification::getNotificationStatus() const +{ + return m_notificationStatus; +} + +void Notification::setNotificationId(const std::string& id) +{ + m_id = id; +} + +void Notification::setEmployeeId(const std::string& employeeId) +{ + m_employeeId = employeeId; +} + +void Notification::setNotificationMessage(const std::string& message) +{ + m_message = message; +} + +void Notification::setNotificationTimestamp(const util::Timestamp& timestamp) +{ + m_timestamp = timestamp; +} + +void Notification::setNotificationStatus(Enums::NotificationStatus status) +{ + m_notificationStatus = status; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Notification.h b/Trenser.Zenvy/Trenser.Zenvy/models/Notification.h index 440d4f0..0cd723c 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Notification.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Notification.h @@ -1,5 +1,31 @@ #pragma once +#include +#include "Enums.h" +#include "Timestamp.h" + class Notification { -}; - +private: + std::string m_id; + std::string m_employeeId; + std::string m_message; + util::Timestamp m_timestamp; + Enums::NotificationStatus m_notificationStatus; +public: + Notification() : m_id(""), m_employeeId(""), m_message(""), m_timestamp(), m_notificationStatus(Enums::NotificationStatus::UNREAD) {} + Notification(const std::string& id, + const std::string& employeeId, + const std::string& message, + Enums::NotificationStatus notificationStatus) + : m_id(id), m_employeeId(employeeId), m_message(message), m_notificationStatus(notificationStatus) {} + const std::string& getNotificationId() const; + const std::string& getEmployeeId() const; + const std::string& getNotificationMessage() const; + const util::Timestamp& getNotificationTimestamp() const; + Enums::NotificationStatus getNotificationStatus() const; + void setNotificationId(const std::string& id); + void setEmployeeId(const std::string& employeeId); + void setNotificationMessage(const std::string& message); + void setNotificationTimestamp(const util::Timestamp& timestamp); + void setNotificationStatus(Enums::NotificationStatus status); +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.cpp index 90b56d0..eae13a1 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.cpp @@ -1 +1,56 @@ #include "Payroll.h" + +const std::string& Payroll::getPayrollId() const +{ + return m_id; +} + +double Payroll::getBasicSalary() const +{ + return m_basicSalary; +} + +double Payroll::getHouseRentAllowance() const +{ + return m_houseRentAllowance; +} + +double Payroll::getFoodAllowance() const +{ + return m_foodAllowance; +} + +double Payroll::getEmployeePFContribution() const +{ + return m_employeePFContribution; +} + +double Payroll::getEmployerPFContribution() const +{ + return m_employerPFContribution; +} + +void Payroll::setPayrollID(const std::string& id) +{ + m_id = id; +} + +void Payroll::setHouseRentAllowance(double value) +{ + m_houseRentAllowance = value; +} + +void Payroll::setFoodAllowance(double value) +{ + m_foodAllowance = value; +} + +void Payroll::setEmployeePFContribution(double value) +{ + m_employeePFContribution = value; +} + +void Payroll::setEmployerPFContribution(double value) +{ + m_employerPFContribution = value; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.h b/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.h index a88f241..498eaf8 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Payroll.h @@ -1,5 +1,33 @@ #pragma once +#include + class Payroll { -}; - +private: + std::string m_id; + double m_basicSalary; + double m_houseRentAllowance; + double m_foodAllowance; + double m_employeePFContribution; + double m_employerPFContribution; +public: + Payroll() : m_id(""), m_basicSalary(0.0), m_houseRentAllowance(0.0), m_foodAllowance(0.0), m_employeePFContribution(0.0), m_employerPFContribution(0.0) {} + Payroll(const std::string& id, + double basicSalary, + double houseRentAllowance, + double foodAllowance, + double employeePFContribution, + double employerPFContribution) + : m_id(id), m_basicSalary(basicSalary), m_houseRentAllowance(houseRentAllowance), m_foodAllowance(foodAllowance), m_employeePFContribution(employeePFContribution), m_employerPFContribution(employerPFContribution) {} + const std::string& getPayrollId() const; + double getBasicSalary() const; + double getHouseRentAllowance() const; + double getFoodAllowance() const; + double getEmployeePFContribution() const; + double getEmployerPFContribution() const; + void setPayrollID(const std::string& id); + void setHouseRentAllowance(double value); + void setFoodAllowance(double value); + void setEmployeePFContribution(double value); + void setEmployerPFContribution(double value); +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Payslip.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Payslip.cpp index 8a586d7..3daf4b9 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Payslip.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Payslip.cpp @@ -1 +1,21 @@ #include "Payslip.h" + +const std::string& Payslip::getPayslipId() const +{ + return m_id; +} + +double Payslip::getSalary() const +{ + return m_salary; +} + +void Payslip::setPayslipId(const std::string& id) +{ + m_id = id; +} + +void Payslip::setSalary(double salary) +{ + m_salary = salary; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Payslip.h b/Trenser.Zenvy/Trenser.Zenvy/models/Payslip.h index b9f2e3c..3f48dd2 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Payslip.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Payslip.h @@ -1,5 +1,16 @@ #pragma once +#include + class Payslip { -}; - +private: + std::string m_id; + double m_salary; +public: + Payslip() : m_id(""), m_salary(0.0) {} + Payslip(const std::string& id, double salary) : m_id(id), m_salary(salary) {} + const std::string& getPayslipId() const; + double getSalary() const; + void setPayslipId(const std::string& id); + void setSalary(double salary); +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Room.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Room.cpp index f412984..9fcd521 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Room.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Room.cpp @@ -1 +1,34 @@ #include "Room.h" + +const std::string& Room::getRoomId() const +{ + return m_id; +} + +const std::string& Room::getRoomName() const +{ + return m_name; +} + +const bookingMap& Room::getBookings() const +{ + return m_bookings; +} + +void Room::setRoomId(const std::string& id) +{ + m_id = id; +} + +void Room::setRoomName(const std::string& name) +{ + m_name = name; +} + +void Room::addBooking(std::shared_ptr booking) +{ + if (booking) + { + m_bookings[booking->getBookingId()] = booking; + } +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Room.h b/Trenser.Zenvy/Trenser.Zenvy/models/Room.h index 17a1778..48a4ba1 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Room.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Room.h @@ -1,5 +1,23 @@ #pragma once +#include +#include +#include +#include "Booking.h" +using bookingMap = std::map>; + class Room { -}; - +private: + std::string m_id; + std::string m_name; + bookingMap m_bookings; +public: + Room() : m_id(""), m_name("") {} + Room(const std::string& id, const std::string& name) : m_id(id), m_name(name) {} + const std::string& getRoomId() const; + const std::string& getRoomName() const; + const bookingMap& getBookings() const; + void setRoomId(const std::string& id); + void setRoomName(const std::string& name); + void addBooking(std::shared_ptr booking); +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/TalentExecutive.h b/Trenser.Zenvy/Trenser.Zenvy/models/TalentExecutive.h index 8b32441..fcbfbcd 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/TalentExecutive.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/TalentExecutive.h @@ -1,5 +1,6 @@ #pragma once #include "Employee.h" + class TalentExecutive : public Employee { }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Team.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Team.cpp index 2bef34b..a6848b3 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Team.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Team.cpp @@ -1 +1,51 @@ #include "Team.h" + +const std::string& Team::getTeamId() const +{ + return m_id; +} + +const std::string& Team::getTeamName() const +{ + return m_name; +} + +std::shared_ptr Team::getTeamLead() const +{ + return m_lead; +} + +const employeeMap& Team::getEmployeesInTeam() const +{ + return m_employees; +} + +int Team::getMaximumNumberOfEmployeesInTeam() const +{ + return m_maximumNumberOfEmployees; +} + +void Team::setTeamId(const std::string& id) +{ + m_id = id; +} + +void Team::setTeamName(const std::string& name) +{ + m_name = name; +} + +void Team::setTeamLead(std::shared_ptr lead) +{ + m_lead = lead; +} + +void Team::setEmployeesInTeam(const employeeMap& employees) +{ + m_employees = employees; +} + +void Team::setMaximumNumberOfEmployeesInTeam(int maximumNumberOfEmployees) +{ + m_maximumNumberOfEmployees = maximumNumberOfEmployees; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Team.h b/Trenser.Zenvy/Trenser.Zenvy/models/Team.h index 3278e14..edb8f44 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Team.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Team.h @@ -1,5 +1,34 @@ #pragma once +#include +#include +#include +#include "Employee.h" +using employeeMap = std::map>; + class Team { -}; - +private: + std::string m_id; + std::string m_name; + std::shared_ptr m_lead; + employeeMap m_employees; + int m_maximumNumberOfEmployees; +public: + Team() : m_id(""), m_name(""), m_lead(nullptr), m_maximumNumberOfEmployees(0) {} + Team(const std::string& id, + const std::string& name, + std::shared_ptr lead, + int maximumNumberOfEmployees) + : m_id(id), m_name(name), m_lead(lead), m_maximumNumberOfEmployees(maximumNumberOfEmployees) { + } + const std::string& getTeamId() const; + const std::string& getTeamName() const; + std::shared_ptr getTeamLead() const; + const employeeMap& getEmployeesInTeam() const; + int getMaximumNumberOfEmployeesInTeam() const; + void setTeamId(const std::string& id); + void setTeamName(const std::string& name); + void setTeamLead(std::shared_ptr lead); + void setEmployeesInTeam(const employeeMap& employees); + void setMaximumNumberOfEmployeesInTeam(int maximumNumberOfEmployees); +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/TeamExecutive.h b/Trenser.Zenvy/Trenser.Zenvy/models/TeamExecutive.h index 3f0ec1d..d7db4e9 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/TeamExecutive.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/TeamExecutive.h @@ -1,5 +1,6 @@ #pragma once #include "Employee.h" + class TeamExecutive : public Employee { }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Ticket.cpp b/Trenser.Zenvy/Trenser.Zenvy/models/Ticket.cpp index 389f489..328421c 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Ticket.cpp +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Ticket.cpp @@ -1 +1,51 @@ #include "Ticket.h" + +const std::string& Ticket::getTicketId() const +{ + return m_id; +} + +const std::string& Ticket::getDescription() const +{ + return m_description; +} + +const std::string& Ticket::getEmployeeId() const +{ + return m_employeeId; +} + +Enums::TicketStatus Ticket::getTicketStatus() const +{ + return m_status; +} + +Enums::TicketType Ticket::getTicketType() const +{ + return m_type; +} + +void Ticket::setTicketId(const std::string& id) +{ + m_id = id; +} + +void Ticket::setTicketDescription(const std::string& description) +{ + m_description = description; +} + +void Ticket::setEmployeeId(const std::string& id) +{ + m_employeeId = id; +} + +void Ticket::setTicketStatus(Enums::TicketStatus status) +{ + m_status = status; +} + +void Ticket::setTicketType(Enums::TicketType type) +{ + m_type = type; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/models/Ticket.h b/Trenser.Zenvy/Trenser.Zenvy/models/Ticket.h index 959b0c7..7d54a6f 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/models/Ticket.h +++ b/Trenser.Zenvy/Trenser.Zenvy/models/Ticket.h @@ -1,5 +1,31 @@ #pragma once +#include +#include "Enums.h" + class Ticket { -}; - +private: + std::string m_id; + Enums::TicketType m_type; + std::string m_description; + Enums::TicketStatus m_status; + std::string m_employeeId; +public: + Ticket() : m_id(""), m_type(Enums::TicketType::UNKNOWN), m_description(""), m_status(Enums::TicketStatus::OPEN), m_employeeId("") {} + Ticket(const std::string& id, + Enums::TicketType type, + const std::string& description, + const std::string& employeeId, + Enums::TicketStatus status) + : m_id(id), m_type(type), m_description(description), m_status(status), m_employeeId(employeeId) {} + const std::string& getTicketId() const; + Enums::TicketType getTicketType() const; + const std::string& getDescription() const; + Enums::TicketStatus getTicketStatus() const; + const std::string& getEmployeeId() const; + void setTicketId(const std::string& id); + void setTicketType(Enums::TicketType type); + void setTicketDescription(const std::string& description); + void setTicketStatus(Enums::TicketStatus status); + void setEmployeeId(const std::string& id); +}; \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/LogService.cpp b/Trenser.Zenvy/Trenser.Zenvy/services/LogService.cpp new file mode 100644 index 0000000..28458fa --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/services/LogService.cpp @@ -0,0 +1 @@ +#include "LogService.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/LogService.h b/Trenser.Zenvy/Trenser.Zenvy/services/LogService.h new file mode 100644 index 0000000..f5b6105 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/services/LogService.h @@ -0,0 +1,5 @@ +#pragma once + +class LogService +{ +}; diff --git a/Trenser.Zenvy/Trenser.Zenvy/services/TicketManagementService.h b/Trenser.Zenvy/Trenser.Zenvy/services/TicketManagementService.h index b847080..1db345b 100644 --- a/Trenser.Zenvy/Trenser.Zenvy/services/TicketManagementService.h +++ b/Trenser.Zenvy/Trenser.Zenvy/services/TicketManagementService.h @@ -1,5 +1,6 @@ #pragma once class TicketManagementService { + }; diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.cpp b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.cpp new file mode 100644 index 0000000..84f4b01 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.cpp @@ -0,0 +1 @@ +#include "Enums.h" diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h new file mode 100644 index 0000000..84f2848 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Enums.h @@ -0,0 +1,72 @@ +#pragma once + +namespace Enums { + + enum class AccountStatus + { + ACTIVE, + INACTIVE + }; + + enum class TeamStatus + { + IN_TEAM, + NOT_IN_TEAM + }; + + enum class CandidateStatus + { + PENDING, + SHORTLISTED, + REJECTED + }; + + enum class NotificationStatus + { + READ, + UNREAD + }; + + enum class LeaveStatus + { + PENDING, + APPROVED, + REJECTED + }; + + enum class LeaveType + { + GENERAL, + MEDICAL, + RESTRICTED + }; + + enum class JobListingStatus + { + OPEN, + CLOSED + }; + + enum class TicketStatus + { + OPEN, + RESOLVED, + CLOSED + }; + + enum class TicketType + { + IT, + FINANCE, + ATTENDANCE, + UNKNOWN + }; + + enum class EmployeeDesignation + { + JUNIOR, + SENIOR, + TEAM_LEAD + }; + +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.cpp b/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.cpp new file mode 100644 index 0000000..8faecf3 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.cpp @@ -0,0 +1,11 @@ +#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 new file mode 100644 index 0000000..604ae31 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/InputHelper.h @@ -0,0 +1,23 @@ +#pragma once +#include +#include +#include +#include + +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"); + } + } + + void readString(std::string&); + void pressEnter(); +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/OutputHelper.cpp b/Trenser.Zenvy/Trenser.Zenvy/utilities/OutputHelper.cpp new file mode 100644 index 0000000..a8e0f7c --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/OutputHelper.cpp @@ -0,0 +1,6 @@ +#include "outputHelper.h" + +void util::clear() +{ + std::cout << "\x1B[2J\x1B[H" << std::flush; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/OutputHelper.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/OutputHelper.h new file mode 100644 index 0000000..a40dbaf --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/OutputHelper.h @@ -0,0 +1,7 @@ +#pragma once +#include + +namespace util +{ + void clear(); +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Timestamp.cpp b/Trenser.Zenvy/Trenser.Zenvy/utilities/Timestamp.cpp new file mode 100644 index 0000000..42d4758 --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Timestamp.cpp @@ -0,0 +1,86 @@ +#include +#include +#include +#include "Timestamp.h" + +util::Timestamp::Timestamp() +{ + m_time = std::time(nullptr); +} + +util::Timestamp::Timestamp(std::time_t timeValue) +{ + m_time = timeValue; +} + +util::Timestamp util::Timestamp::fromString(const std::string& timeString) +{ + std::tm timeStruct = {}; + std::istringstream inputStream(timeString); + inputStream >> std::get_time(&timeStruct, "%Y-%m-%d %H:%M:%S"); + if (inputStream.fail()) + { + throw std::runtime_error("Invalid time format"); + } + std::time_t parsedTimestamp = std::mktime(&timeStruct); + return Timestamp(parsedTimestamp); +} + +std::string util::Timestamp::toString() const +{ + std::tm timeStruct = {}; + localtime_s(&timeStruct, &m_time); + std::ostringstream outputStream; + outputStream << std::put_time(&timeStruct, "%Y-%m-%d %H:%M:%S"); + return outputStream.str(); +} + +double util::Timestamp::getDurationInSeconds(const Timestamp& startTimestamp, const Timestamp& endTimestamp) +{ + return std::difftime(endTimestamp.m_time, startTimestamp.m_time); +} + +int util::Timestamp::getDateAsInt() const +{ + std::tm timeStruct{}; + localtime_s(&timeStruct, &m_time); + int year = timeStruct.tm_year + 1900; + int month = timeStruct.tm_mon + 1; + int day = timeStruct.tm_mday; + return year * 10000 + month * 100 + day; +} + +double util::Timestamp::getDurationInMinutes(const Timestamp& startTimestamp, const Timestamp& endTimestamp) +{ + return getDurationInSeconds(startTimestamp, endTimestamp) / 60.0; +} + +double util::Timestamp::getDurationInHours(const Timestamp& startTimestamp, const Timestamp& endTimestamp) +{ + return getDurationInSeconds(startTimestamp, endTimestamp) / 3600.0; +} + +bool util::Timestamp::operator<(const Timestamp& other) const +{ + return m_time < other.m_time; +} + +bool util::Timestamp::operator>(const Timestamp& other) const +{ + return m_time > other.m_time; +} + +bool util::Timestamp::operator<=(const Timestamp& other) const +{ + return m_time <= other.m_time; +} + +bool util::Timestamp::operator>=(const Timestamp& other) const +{ + return m_time >= other.m_time; +} + +bool util::Timestamp::operator==(const Timestamp& other) const +{ + return m_time == other.m_time; +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Timestamp.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/Timestamp.h new file mode 100644 index 0000000..abbc58f --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Timestamp.h @@ -0,0 +1,26 @@ +#pragma once +#include +#include + +namespace util +{ + class Timestamp + { + private: + std::time_t m_time; + Timestamp(std::time_t time); + public: + Timestamp(); + static Timestamp fromString(const std::string& timeString); + std::string toString() const; + static double getDurationInHours(const Timestamp&, const Timestamp&); + static double getDurationInMinutes(const Timestamp&, const Timestamp&); + static double getDurationInSeconds(const Timestamp&, const Timestamp&); + int getDateAsInt() const; + bool operator>(const Timestamp&) const; + bool operator<(const Timestamp&) const; + bool operator>=(const Timestamp&) const; + bool operator<=(const Timestamp&) const; + bool operator==(const Timestamp&) const; + }; +} \ No newline at end of file diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.cpp b/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.cpp new file mode 100644 index 0000000..fa7707e --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.cpp @@ -0,0 +1,28 @@ +#include "Validator.h" + +bool util::isPhoneNumberValid(const std::string& phoneNumber) { + if (phoneNumber.size() != 10) + { + return false; + } + return std::all_of(phoneNumber.begin(), phoneNumber.end(), + [](char character) + { + return std::isdigit(character); + } + ); +} + +bool util::isEmailValid(const std::string& email) { + size_t index = email.find('@'); + if (index == std::string::npos) return false; + if (email.find('@', index + 1) != std::string::npos) + { + return false; + } + if (index == 0 || index == email.size() - 1) + { + return false; + } + return true; +} diff --git a/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.h b/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.h new file mode 100644 index 0000000..d5fd36d --- /dev/null +++ b/Trenser.Zenvy/Trenser.Zenvy/utilities/Validator.h @@ -0,0 +1,10 @@ +#pragma once +#include +#include +#include + +namespace util +{ + bool isPhoneNumberValid(const std::string&); + bool isEmailValid(const std::string&); +} \ No newline at end of file