EchoTex_Payroll/HRM.BO/OPI/OPIProcessDetail.cs
2024-10-14 10:01:49 +06:00

514 lines
21 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ease.Core;
using Ease.Core.Model;
using System.Data;
namespace HRM.BO
{
#region OPIProcessDetail
public class OPIProcessDetail : BasicBaseObject
{
private List<Employee> _employees;
private List<OPIProcessDetail> _processDetails;
private List<OpiParameter> _opiParameters;
private List<OpiItem> _opiItems;
// private DataSet _dsOPIRegister;
// private List<ProcessItem> _processItems;
//private List<SalaryProcessStatus> _processStatuses;
public DateTime _processMonth;
//public event ProcessStatus ProcessStatus;
//public event ProgressStatus ProgressStatus;
#region Constructor
public OPIProcessDetail()
{
//_accountNo = string.Empty;
//_bankID = null;
//_branchID = null;
//_categoryID = null;
//_departmentID = null;
//_designationID = null;
//_employeeID = null;
//_gender = EnumGender.None;
//_gradeID = null;
//_isConfirmed = false;
//_isFinalize = false;
//_locationID = null;
//_oPIProcessID = null;
//_payrollTypeID = null;
//_pfMemberType = EnumPFMembershipType.Live;
//_religionID = null;
//_remarks = string.Empty;
//_oPIProcessDetailItems = null;
//_gradeSalaries = null;
//_employee = null;
//_arreargradeSalaries = null;
//_arrearPaidgradeSalaries = null;
this.opiProcessDetailItems = new List<OPIProcessDetailItem>();
}
#endregion
#region Properties
public string AccountNo { get; set; }
public int? BankID { get; set; }
public int? BranchID { get; set; }
public int? CategoryID { get; set; }
public int? DepartmentID { get; set; }
public int? DesignationID { get; set; }
public int EmployeeID { get; set; }
public EnumGender Gender { get; set; }
public int? GradeID { get; set; }
public bool IsConfirmed { get; set; }
public bool IsFinalize { get; set; }
public int? LocationID { get; set; }
public int OPIProcessID { get; set; }
public int PayrollTypeID { get; set; }
public EnumPFMembershipType PFMemberType { get; set; }
public int ReligionID { get; set; }
public string Remarks { get; set; }
public List<OPIProcessDetailItem> opiProcessDetailItems { get; set; }
public Employee Employee { get; set; }
//#region Employee : Employee
//private Employee _employee;
//public Employee Employee
//{
// get
// {
// if (_employeeID.Integer > 0 && _employee == null)
// {
// _employee = new Employee();
// _employee = Payroll.BO.Employee.Get(_employeeID);
// }
// return this._employee;
// }
// set
// {
// _employee = value;
// }
//}
//#endregion
public List<EmployeeGradeSalary> GradeSalaries { get; set; }
public List<EmployeeGradeSalary> ArrearGradeSalaries { get; set; }
public List<EmployeeGradeSalary> ArrearPaidGradeSalaries { get; set; }
//#region Service Factory IOPIProcessDetailService : IOPIProcessDetailService
//internal static IOPIProcessDetailService Service
//{
// get
// {
// return Services.Factory.CreateService<IOPIProcessDetailService>(typeof(IOPIProcessDetailService));
// }
//}
//#endregion
//public List<SalaryProcessStatus> Errors
//{
// get
// {
// return _processStatuses;
// }
//}
#endregion
//#region Functions
//public static OPIProcessDetail Get(ID nOPIProcessDetailID)
//{
// OPIProcessDetail oOPIProcessDetail = null;
// #region Cache Header
// oOPIProcessDetail = (OPIProcessDetail)_cache["Get", nOPIProcessDetailID];
// if (oOPIProcessDetail != null)
// return oOPIProcessDetail;
// #endregion
// oOPIProcessDetail = OPIProcessDetail.Service.Get(nOPIProcessDetailID);
// #region Cache Footer
// _cache.Add(oOPIProcessDetail, "Get", nOPIProcessDetailID);
// #endregion
// return oOPIProcessDetail;
//}
//public static List<OPIProcessDetail> Get()
//{
// #region Cache Header
// List<OPIProcessDetail> oOPIProcessDetails = _cache["Get"] as List<OPIProcessDetail>;
// if (oOPIProcessDetails != null)
// return oOPIProcessDetails;
// #endregion
// try
// {
// oOPIProcessDetails = Service.Get();
// }
// catch (ServiceException e)
// {
// throw new Exception(e.Message, e);
// }
// #region Cache Footer
// _cache.Add(oOPIProcessDetails, "Get");
// #endregion
// return oOPIProcessDetails;
//}
//public ID Save()
//{
// this.SetAuditTrailProperties();
// return OPIProcessDetail.Service.Save(this);
//}
//public void Delete(ID id)
//{
// OPIProcessDetail.Service.Delete(id);
//}
//#region ProgressBar
//private void UpdateprocessStatus(string statusString)
//{
// if (ProcessStatus != null) ProcessStatus(statusString);
//}
//private void UpdateProgressStatus(EnumProcessStatus status)
//{
// if (ProgressStatus != null) ProgressStatus(status);
//}
//#endregion
//public List<OPIProcessDetail> Process(List<Employee> employees, DateTime processMonth)
//{
// //SalaryException oSException = new SalaryException();
// _employees = employees;
// _processMonth = processMonth;
// UpdateprocessStatus("Collecting Employee basic information....");
// //this.Initialize();
// this.AddEmployeeToProcessDetail();
// //if (_processStatuses.Count > 0) return;
// UpdateprocessStatus("Calculating Employee basic Salary....");
// this.BasicSalary();
// UpdateprocessStatus("Calculating Employees benifits and deduction....");
// this.OPIItems();
// //this.LeavePrepare(oSException.GetEmpLeaveStatus());
// return _processDetails;
//}
//private void AddEmployeeToProcessDetail()
//{
// _processDetails = new List<OPIProcessDetail>();
// UpdateProgressStatus(EnumProcessStatus.Start);
// foreach (Employee employee in _employees)
// {
// UpdateProgressStatus(EnumProcessStatus.PerformStep);
// PayrollPayrollGlobalFunctions.UpdateStatus(" Collecting information for the employee " + employee.Name + " ( " + employee.EmployeeNo + ")");
// OPIProcessDetail procDetail = new OPIProcessDetail();
// procDetail.CategoryID = employee.CategoryID;
// procDetail.EmployeeID = employee.ID;
// procDetail.Gender = employee.Gender;
// procDetail.IsConfirmed = employee.IsConfirmed;
// procDetail.PayrollTypeID = employee.PayrollTypeID;
// procDetail.PFMemberType = employee.PFMemberType;
// procDetail.ReligionID = employee.ReligionID;
// procDetail.GradeID = employee.GradeID;
// procDetail.DepartmentID = employee.DepartmentID;
// procDetail.DesignationID = employee.DesignationID;
// procDetail.LocationID = employee.LocationID;
// if (employee.PaymentMode == EnumPaymentMode.BankTransfer)
// {
// procDetail.BranchID = employee.BranchID;
// Branch branch = new Branch();
// branch = Branch.Get(employee.BranchID);
// procDetail.BankID = branch.BankID;
// procDetail.AccountNo = employee.AccountNo;
// }
// else
// {
// procDetail.BranchID = ID.FromInteger(0);
// procDetail.BankID = ID.FromInteger(0);
// }
// procDetail.Employee = employee;
// _processDetails.Add(procDetail);
// }
// UpdateProgressStatus(EnumProcessStatus.End);
//}
//private void AddProcessStatus(Employee employee, string remarks)
//{
// SalaryProcessStatus status = new SalaryProcessStatus();
// status.EmployeeNo = employee.EmployeeNo;
// status.Name = employee.Name;
// status.Remarks = remarks;
// _processStatuses.Add(status);
//}
//private void BasicSalary()
//{
// //GetCurrentMonthSalaryItems function return current month's employee grade, salary and effect date.
// //effect date must sorted, otherwise error will be generated from next function.
// #region Calculate Normal Salary
// List<EmployeeGradeSalary> gradeSalaryItems = EmployeeGradeSalary.Service.GetCurrMonthSalaryItems(SystemInformation.CurrentSysInfo.NextPayProcessDate);
// foreach (OPIProcessDetail opiProcess in _processDetails )
// {
// opiProcess.GradeSalaries = EmployeeGradeSalary.Get(gradeSalaryItems, opiProcess.EmployeeID);
// if (opiProcess.GradeSalaries.Count == 0) continue;
// EmployeeGradeSalary.PrepareDataForCurrentSalary(opiProcess.Employee, opiProcess.GradeSalaries);
// }
// #endregion Calculate Normal Salary
// #region calculate arrear amount
// List<EmployeeGradeSalary> arrearItems = EmployeeGradeSalary.Service.GetArrearItems(SystemInformation.CurrentSysInfo.PayrollTypeID.Integer);
// foreach (OPIProcessDetail opiProcess in _processDetails)
// {
// opiProcess.ArrearGradeSalaries = EmployeeGradeSalary.Get(arrearItems, opiProcess.EmployeeID);
// if (opiProcess.ArrearGradeSalaries.Count > 0)
// {
// DateTime arrearPaidFrom = opiProcess.ArrearGradeSalaries[0].EffectDate;
// opiProcess.ArrearPaidGradeSalaries = EmployeeGradeSalary.Service.GetArrearPaidItems(opiProcess.EmployeeID, arrearPaidFrom,SystemInformation.CurrentSysInfo.PayrollTypeID.Integer);
// }
// }
// #endregion calculate arrear amount
//}
//private void OPIItems()
//{
// _opiParameters = OpiParameter.Get(EnumStatus.Active);
// if (_opiParameters == null || _opiParameters.Count == 0) return;
// List<OpiParameterIndividual> opiIndividuals = OpiParameterIndividual.Service.Get(
// PayrollPayrollGlobalFunctions.PayrollFirstDateOfMonth(_processMonth),
// PayrollPayrollGlobalFunctions.PayrollLastDateOfMonth(_processMonth));
// OpiParameter paramter = new OpiParameter();
// List<OpiParameter> paramters;
// foreach (OPIProcessDetail detail in _processDetails)
// {
// // Regular Grade defined parameters
// paramters = paramter.ApplicableParameters(detail.Employee,
// detail, _opiParameters, detail.GradeSalaries);
// this.GradeDefinedOpiItem(detail, detail.GradeSalaries, paramters);
// // Arrear Grade defined parameters
// paramters = paramter.ApplicableParameters(detail.Employee,
// detail, _opiParameters, detail.ArrearGradeSalaries);
// this.GradeDefinedOpiItem(detail, detail.GradeSalaries, paramters);
// // Arrear already paid parameters
// paramters = paramter.ApplicableParameters(detail.Employee,
// detail, _opiParameters, detail.ArrearPaidGradeSalaries);
// this.GradeDefinedOpiItem(detail, detail.GradeSalaries, paramters);
// //this.IndividualOpiItem(detail, opiIndividuals);
// }
//}
//private void Add(OPIProcessDetail processDetail, OPIProcessDetailItem item)
//{
// OPIProcessDetailItem existItem = processDetail.OPIProcessDetailItems.Find(delegate(OPIProcessDetailItem fItem) { return fItem.OPIItemID == item.OPIItemID; });
// if (existItem == null)
// {
// processDetail.OPIProcessDetailItems.Add(item);
// }
// else
// {
// existItem.NetAmount = existItem.NetAmount + item.NetAmount;
// existItem.ChangeNetAmount = existItem.ChangeNetAmount + item.ChangeNetAmount;
// existItem.Description = item.Description;
// }
//}
//private void GradeDefinedOpiItem(OPIProcessDetail detail, List<EmployeeGradeSalary> gradeSalaries,
// List<OpiParameter> paramters)
//{
// double amount = 0, totalAmount = 0, paidAmount = 0, remainingAmount;
// int totalMonth = 12, paidMonth = 0, remainingMonth = 0;
// //int randomEmployee = (new Random()).Next(1, _employees.Count);
// int empNumber = 1;
// foreach (EmployeeGradeSalary empGradeSalary in gradeSalaries)
// {
// foreach (OpiParameter parameter in paramters)
// {
// if (parameter.EntitleType == EnumEntitleType.Grade)
// {
// //amount = parameter.GetGradeDefinedAmount(detail.Employee, empGradeSalary.BasicSalary, empGradeSalary.GrossSalary);
// if (parameter.IsFlatAmount == true) amount = amount * empGradeSalary.FractionofFromTo;
// }
// else continue;
// OPIProcessDetailItem opdItem = new OPIProcessDetailItem();
// switch (parameter.OpiPeriodicity)
// {
// case EnumOpiPeriodicity.Monthly:
// opdItem.NetAmount = amount;
// opdItem.ChangeNetAmount = amount;
// //opdItem.TaxAmount =
// break;
// case EnumOpiPeriodicity.OnceOff:
// opdItem.NetAmount = amount;
// opdItem.ChangeNetAmount = amount;
// //opdItem.TaxAmount =
// break;
// case EnumOpiPeriodicity.Annual:
// paidMonth = Convert.ToInt32(Payroll.BO.SystemInformation.CurrentSysInfo.NextPayProcessDate.Date.Month);
// remainingMonth = totalMonth - (paidMonth);
// totalAmount = amount * totalMonth;
// paidAmount = paidMonth * amount;
// remainingAmount = totalAmount - paidAmount;
// opdItem.NetAmount = remainingAmount / remainingMonth;
// opdItem.ChangeNetAmount = remainingAmount / remainingMonth;
// //opdItem.TaxAmount =
// break;
// //case EnumOpiPeriodicity.AveragePayment:
// // break;
// //case EnumOpiPeriodicity.OnAmount:
// // indvAmnt = amount / _processDetails.Count;
// // fractionAmount = (indvAmnt - Math.Round(indvAmnt, 0)) * _processDetails.Count;
// // if (empNumber == gradeSalaries.Count)
// // {
// // opdItem.NetAmount = Math.Round(indvAmnt, 0) + fractionAmount;
// // opdItem.ChangeNetAmount = Math.Round(indvAmnt, 0) + fractionAmount;
// // }
// // else
// // {
// // opdItem.NetAmount = Math.Round(indvAmnt, 0);
// // opdItem.ChangeNetAmount = Math.Round(indvAmnt, 0);
// // }
// // //opdItem.TaxAmount =
// // break;
// default:
// break;
// }
// opdItem.Description = parameter.OpiItem.Name;
// opdItem.OPIItemID = parameter.OpiItemID;
// opdItem.OPIProcessDetailID = this.ID;
// opdItem.OPIType = parameter.OpiItem.OpiType;
// _opiItems = OpiItem.Get();
// if (_opiItems != null && _opiItems.Count > 0)
// opdItem.Sequence = _opiItems.GetItem(parameter.OpiItem.ID).Sequence;
// this.Add(detail, opdItem); // add the item in the collection
// }
// empNumber++;
// }
//}
//private void IndividualOpiItem(OPIProcessDetail detail, List<OpiParameterIndividual> opiIndividuals)
//{
// //double amount = 0;
// //EnumSalaryGroup groupCode = EnumSalaryGroup.Gross;
// //#region Individual Allowance
// //List<OpiParameterIndividual> items = opiIndividuals.FindAll(delegate(OpiParameterIndividual item)
// //{
// // return item.EmployeeId.Integer == detail.Employee.ID.Integer && item.IndividualType == EnumOPIIndivdualType.AppliedToIndividual;
// //});
// //foreach (OpiParameterIndividual item in items)
// //{
// // amount = 0;
// // OpiParameter parameter = _opiParameters.GetItem(item.OpiParameterID);
// // amount = parameter.GetIndividualAmount(detail.Employee, _processMonth, item,
// // detail.Employee.GrossSalary, detail.GetGrossAmount(EnumSalaryItemCode.Basic_Salary, (int)EnumSalaryItemCode.Basic_Salary));
// // EnumSalaryItemCode itemCode = EnumSalaryItemCode.Allowance;
// // groupCode = EnumSalaryGroup.Gross;
// // if (parameter.AllowOrDeductType == EnumAllowOrDeduct.Deduction)
// // {
// // itemCode = EnumSalaryItemCode.Deduction;
// // groupCode = EnumSalaryGroup.Deductions;
// // }
// // if (item.Arreartype == EnumArrearType.ToCalculate) groupCode = EnumSalaryGroup.Arrear;
// // SalaryMonthlyDetail detail = salary.GetDetail(groupCode, itemCode, parameter.AllowDeductID.Integer);
// // if (detail == null)
// // detail = this.AddDetail(salary, groupCode, itemCode, parameter.AllowDeductID.Integer, parameter.ID.Integer, parameter.AllowanceDeduction.Name, amount);
// // else
// // {
// // detail.CalculatedAmount = detail.CalculatedAmount + amount;
// // detail.CalculatedAmount = PayrollPayrollGlobalFunctions.Round(detail.CalculatedAmount);
// // detail.ChangedAmount = detail.CalculatedAmount;
// // }
// // detail.Position = item.AllowDeduct.Sequence + 1;
// //}
// //#endregion Individual Allowance
//}
//#endregion
//public static List<OPIProcessDetail> GetDetail(DateTime _SalaryMonth)
//{
// #region Cache Header
// List<OPIProcessDetail> oOPIProcessDetails = _cache["Get"] as List<OPIProcessDetail>;
// if (oOPIProcessDetails != null)
// return oOPIProcessDetails;
// #endregion
// try
// {
// oOPIProcessDetails = Service.Get(_SalaryMonth);
// }
// catch (ServiceException e)
// {
// throw new Exception(e.Message, e);
// }
// #region Cache Footer
// _cache.Add(oOPIProcessDetails, "Get");
// #endregion
// return oOPIProcessDetails;
//}
}
#endregion
//#region IOPIProcessDetail Service
//public interface IOPIProcessDetailService
//{
// OPIProcessDetail Get(ID id);
// List<OPIProcessDetail> Get();
// ID Save(OPIProcessDetail item);
// void Save(OPIProcess oProcess, List<OPIProcessDetail> oPDetails);
// void Delete(ID id);
// List<OPIProcessDetail> Get(DateTime _SalaryMonth);
//}
//#endregion
}