Add View Payslip feature for employees

<UserStory> EMP010 : View Payslip </UserStory>

<Changes>
- Added Timestamp support to Payroll and Payslip models
- Implemented getPayslipForMonth flow from Controller to Service
- Enabled payslip retrieval based on year and month
- Updated menus to allow payslip viewing
- Enhanced MenuHelper with a unified viewPayslip helper
- Added date-based filtering using Timestamp utilities
</Changes>

<Review>
Smitha Mohan
</Review>
This commit is contained in:
Princy Jerin
2026-04-14 18:11:29 +05:30
committed by Joel Thomas
parent 5318b9eed6
commit b9b83ad429
15 changed files with 118 additions and 9 deletions
@@ -33,14 +33,14 @@ bool EmployeeMenu::handleOperation(int choice)
{
switch (choice)
{
/*
case 1:
/*case 1:
m_zenvyController.applyLeave();
break;
break;*/
case 2:
m_zenvyController.viewPayslip();
viewPayslip(m_zenvyController);
break;
case 3:
/*case 3:
m_zenvyController.viewPayslipHistory();
break;
case 4 :
@@ -32,6 +32,9 @@ bool HRManagerMenu::handleOperation(int choice)
{
switch (choice)
{
case 2:
viewPayslip(m_zenvyController);
break;
case 4:
viewEmployees(m_zenvyController);
break;
@@ -32,6 +32,9 @@ bool ITExecutiveMenu::handleOperation(int choice)
{
switch (choice)
{
case 2:
viewPayslip(m_zenvyController);
break;
case 4:
viewEmployees(m_zenvyController);
break;
+40 -1
View File
@@ -296,4 +296,43 @@ inline void searchEmployee(std::shared_ptr<ZenvyController> m_zenvyController)
std::cout << "No Employee found with this name" << std::endl;
}
util::pressEnter();
}
}
inline void viewPayslip(std::shared_ptr<ZenvyController> controller)
{
int year, month;
util::clear();
std::cout << "Enter the year: ";
util::read(year);
std::cout << "\nEnter the month: ";
util::read(month);
auto employee = controller->getCurrentEmployee();
if (!employee)
{
std::cout << "No authenticated employee.\n";
util::pressEnter();
return;
}
auto result = controller->getPayslipForMonth(employee->getId(), year, month);
auto payroll = result.first;
auto payslip = result.second;
if (payroll && payslip)
{
std::cout << "\nPayslip for " << employee->getEmployeeName()
<< " (" << year << "-" << std::setw(2) << std::setfill('0') << month << ")\n\n";
std::cout << "Basic Salary : " << payroll->getBasicSalary() << "\n";
std::cout << "House Rent Allowance : " << payroll->getHouseRentAllowance() << "\n";
std::cout << "Food Allowance : " << payroll->getFoodAllowance() << "\n";
std::cout << "Employee PF Contribution : " << payroll->getEmployeePFContribution() << "\n";
std::cout << "Employer PF Contribution : " << payroll->getEmployerPFContribution() << "\n";
std::cout << "----------------------------------------\n";
std::cout << "Net Salary (after deductions): " << payslip->getSalary() << "\n";
std::cout << "Generated on: " << payslip->getTimestamp().toString() << "\n";
}
else
{
std::cout << "Payslip not available for " << year << "-" << month << ".\n";
}
util::pressEnter();
}
@@ -32,6 +32,9 @@ bool TalentExecutiveMenu::handleOperation(int choice)
{
switch (choice)
{
case 2:
viewPayslip(m_zenvyController);
break;
case 4:
viewEmployees(m_zenvyController);
break;
@@ -32,6 +32,9 @@ bool TeamExecutiveMenu::handleOperation(int choice)
{
switch (choice)
{
case 2:
viewPayslip(m_zenvyController);
break;
case 4:
viewEmployees(m_zenvyController);
break;
@@ -32,6 +32,9 @@ bool TeamLeadMenu::handleOperation(int choice)
{
switch (choice)
{
case 2:
viewPayslip(m_zenvyController);
break;
case 7:
viewEmployees(m_zenvyController);
break;