Files
Training-Team2-Zenvy-Jan26/Trenser.Zenvy/Trenser.Zenvy/models/Payslip.cpp
T

101 lines
2.1 KiB
C++

/*
File: Payslip.cpp
* Description : Models a payslip entity that stores salary information.
* Author : Trenser
* Created : 31-Mar-2026
*/
#include <sstream>
#include "Payslip.h"
#include "StringHelper.h"
#include "Factory.h"
int Payslip::m_uid = 0;
Payslip::Payslip(const std::string& id,
const std::string& employeeId,
double salary,
util::Timestamp timestamp)
: m_id(id),
m_employeeId(employeeId),
m_salary(salary),
m_timestamp(timestamp)
{
int idNumber = util::extractNumber(m_id);
if (idNumber > m_uid)
{
m_uid = idNumber;
}
}
const std::string& Payslip::getId() 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;
}
const util::Timestamp& Payslip::getTimestamp() const
{
return m_timestamp;
}
const std::string& Payslip::getEmployeeId() const
{
return m_employeeId;
}
std::string Payslip::serialize() const
{
std::ostringstream serializedPayslip;
serializedPayslip << m_id << ','
<< m_employeeId << ','
<< m_salary << ','
<< m_timestamp.toString();
return serializedPayslip.str();
}
Payslip* Payslip::deserialize(const std::string& record)
{
std::string id, employeeId, timestampString;
std::string salaryString;
std::istringstream serializedPayslip(record);
std::getline(serializedPayslip, id, ',');
std::getline(serializedPayslip, employeeId, ',');
std::getline(serializedPayslip, salaryString, ',');
std::getline(serializedPayslip, timestampString, ',');
try
{
double salary = std::stod(salaryString);
util::Timestamp timestamp = util::Timestamp::fromString(timestampString);
return Factory::getObject<Payslip>(
id,
employeeId,
salary,
timestamp
);
}
catch (...)
{
throw std::runtime_error("Failed to deserialize Payslip object");
}
}
std::string Payslip::getHeaders()
{
return "PayslipId,EmployeeId,Salary,Timestamp";
}