CEL_Payroll/Payroll.BO/Budget/BudgetComponent.cs
2024-09-17 14:30:13 +06:00

617 lines
18 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ease.CoreV35.Caching;
using Ease.CoreV35.Model;
namespace Payroll.BO
{
#region BudgetComponent BaseObject
[Serializable]
public class BudgetComponent : BasicBaseObject
{
#region Cache Store
private static Cache _cache = new Cache(typeof(BudgetComponent));
#endregion
#region Constructor
public BudgetComponent()
{
_basedOn = EnumBasedOnPercent.None;
_budgetID = null;
_componentType = EnumBudgetComponent.None;
_flatAmount = 0;
_name = string.Empty;
_originID = null;
_parameterID = null;
_percentage = 0;
_periodicity = 0;
_taxable = false;
_payrollTypeID = null;
#region Child Variables
_oBudgetComponentIndivisuals = null;
_oBudgetComponentGrades = null;
#endregion
}
#endregion
#region Properties
#region Parent Properties
#region BasedOn : EnumBasedOnPercent
private EnumBasedOnPercent _basedOn;
public EnumBasedOnPercent BasedOn
{
get { return _basedOn; }
set { _basedOn = value; }
}
#endregion
#region BudgetID : ID
private ID _budgetID;
public ID BudgetID
{
get { return _budgetID; }
set { _budgetID = value; }
}
#endregion
#region PayrollTypeID : ID
private ID _payrollTypeID;
public ID PayrollTypeID
{
get { return _payrollTypeID; }
set { _payrollTypeID = value; }
}
#endregion
#region ComponentType : EnumBudgetComponent
private EnumBudgetComponent _componentType;
public EnumBudgetComponent ComponentType
{
get { return _componentType; }
set { _componentType = value; }
}
#endregion
#region FlatAmount : double
private double _flatAmount;
public double FlatAmount
{
get { return _flatAmount; }
set { _flatAmount = value; }
}
#endregion
#region Name : string
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
#endregion
#region OriginID : ID
private ID _originID;
public ID OriginID
{
get { return _originID; }
set { _originID = value; }
}
#endregion
#region ParameterID : ID
private ID _parameterID;
public ID ParameterID
{
get { return _parameterID; }
set { _parameterID = value; }
}
#endregion
#region Percentage : double
private double _percentage;
public double Percentage
{
get { return _percentage; }
set { _percentage = value; }
}
#endregion
#region Periodicity : double
private double _periodicity;
public double Periodicity
{
get { return _periodicity; }
set { _periodicity = value; }
}
#endregion
#region Taxable : bool
private bool _taxable;
public bool Taxable
{
get { return _taxable; }
set { _taxable = value; }
}
#endregion
#region IndivisuallyDefined : bool
private bool _indivisuallyDefined;
public bool IndivisuallyDefined
{
get { return _indivisuallyDefined; }
set { _indivisuallyDefined = value; }
}
#endregion
#region allowanceDeduction : AllowanceDeduction
private AllowanceDeduction _allowanceDeduction;
public AllowanceDeduction AllowanceDeduction
{
get
{
if (_originID.Integer > 0 && _allowanceDeduction == null)
{
_allowanceDeduction = new AllowanceDeduction();
_allowanceDeduction = AllowanceDeduction.Get(_originID);
}
return this._allowanceDeduction;
}
set
{
_allowanceDeduction = value;
}
}
#endregion
#endregion
#region Child Properties
#region BudgetComponentIndivisual Property
private ObjectsTemplate<BudgetComponentIndivisual> _oBudgetComponentIndivisuals;
public ObjectsTemplate<BudgetComponentIndivisual> OBudgetComponentIndivisuals
{
get
{
if (_oBudgetComponentIndivisuals == null)
{
//_oBudgetComponentIndivisuals = new ObjectsTemplate<BudgetComponentIndivisual>();
//if (!this.ID.IsUnassigned && _oBudgetComponentIndivisuals.Count>=0)
//{
// if (this.ID.Integer > 0)
// _oBudgetComponentIndivisuals = Service.GetBudgetComponentIndivisuals(this.ID);
//}
_oBudgetComponentIndivisuals = new ObjectsTemplate<BudgetComponentIndivisual>();
}
return _oBudgetComponentIndivisuals;
}
set { _oBudgetComponentIndivisuals = value; }
}
#endregion
#region BudgetComponentGrade Property
private ObjectsTemplate<BudgetComponentGrade> _oBudgetComponentGrades;
public ObjectsTemplate<BudgetComponentGrade> OBudgetComponentGrades
{
get
{
if (_oBudgetComponentGrades == null)
{
_oBudgetComponentGrades = new ObjectsTemplate<BudgetComponentGrade>();
//if (!this.ID.IsUnassigned)
// _oBudgetComponentGrades = Service.GetBudgetComponentGrades(this.ID);
}
return _oBudgetComponentGrades;
}
set { _oBudgetComponentGrades = value; }
}
#endregion
#endregion
#endregion
public double CalculateAmount(Employee oEmp)
{
double amount = 0;
switch (_basedOn)
{
case EnumBasedOnPercent.None:
break;
case EnumBasedOnPercent.Basic:
amount = this.FlatAmount + (this.Percentage * oEmp.BasicSalary) / 100;
break;
case EnumBasedOnPercent.Base:
amount = 0;//(this.Percentage * oEmp.GrossSalary) / 100;
break;
case EnumBasedOnPercent.Gross:
amount = this.FlatAmount + (this.Percentage * oEmp.GrossSalary) / 100;
break;
case EnumBasedOnPercent.Fixed_Amount:
amount = this.FlatAmount;
break;
default:
break;
}
return amount;
}
public double CalculateExceptionAmount(Employee oEmp, DateTime processMonth)
{
double amount = 0;
switch (_basedOn)
{
case EnumBasedOnPercent.None:
break;
case EnumBasedOnPercent.Basic:
if (this.IndivisuallyDefined)
{
amount = GetIndvAmt(processMonth, oEmp.BasicSalary);
}
if(amount==0)
amount = this.FlatAmount + (this.Percentage * oEmp.BasicSalary) / 100;
break;
case EnumBasedOnPercent.Base:
amount = 0;//(this.Percentage * oEmp.GrossSalary) / 100;
break;
case EnumBasedOnPercent.Gross:
if (this.IndivisuallyDefined)
{
amount = GetIndvAmt(processMonth, oEmp.GrossSalary);
}
if (amount == 0)
amount = this.FlatAmount + (this.Percentage * oEmp.GrossSalary) / 100;
break;
case EnumBasedOnPercent.Fixed_Amount:
amount = this.FlatAmount;
break;
default:
break;
}
if (!this.IndivisuallyDefined)
{
if(GetExceptionAmt(oEmp)!=0)
amount = GetExceptionAmt(oEmp);
if (GetNotAppAmt(oEmp) != null)
amount = 0;
}
return amount;
}
private double GetIndvAmt(DateTime dMonth,double nAmount)
{
double amount = 0.0;
BudgetComponentIndivisual budIndv = this.OBudgetComponentIndivisuals.Find(delegate(BudgetComponentIndivisual item) { return item.FromDate.Date >= dMonth.Date && item.ToDate.Date <= dMonth.Date && item.DetailType == EnumADEmpType.AppliedToIndividual; });
if (budIndv != null)
{
if (budIndv.ValueType == EnumValueType.Amount)
{
amount = budIndv.Amount;
}
else
{
amount = (budIndv.Amount * nAmount) / 100;
}
}
return amount;
}
private double GetExceptionAmt(Employee oEmp)
{
double amount = 0.0;
BudgetComponentIndivisual budIndv = this.OBudgetComponentIndivisuals.Find(delegate(BudgetComponentIndivisual item) { return item.EmployeeID==oEmp.ID && item.DetailType==EnumADEmpType.Exception; });
if (budIndv != null)
{
if (budIndv.ValueType == EnumValueType.Amount)
{
amount = budIndv.Amount;
}
else
{
amount = (oEmp.BasicSalary * budIndv.Amount) / 100;
}
}
return amount;
}
private BudgetComponentIndivisual GetNotAppAmt(Employee oEmp)
{
BudgetComponentIndivisual budIndv = this.OBudgetComponentIndivisuals.Find(delegate(BudgetComponentIndivisual item) { return item.EmployeeID == oEmp.ID && item.DetailType == EnumADEmpType.NotApplicable; });
return budIndv;
}
#region Function(s)
#region Get
public static BudgetComponent Get(ID nID)
{
BudgetComponent oBudgetComponent = null;
#region Cache Header
oBudgetComponent = (BudgetComponent)_cache["Get", nID];
if (oBudgetComponent != null)
return oBudgetComponent;
#endregion
try
{
oBudgetComponent = Service.Get(nID);
}
catch (ServiceException e)
{
throw new Exception(e.Message, e);
}
#region Cache Footer
_cache.Add(oBudgetComponent, "Get", nID);
#endregion
return oBudgetComponent;
}
public static ObjectsTemplate<BudgetComponent> Get()
{
#region Cache Header
ObjectsTemplate<BudgetComponent> oBudgetComponents = _cache["Get"] as ObjectsTemplate<BudgetComponent>;
if (oBudgetComponents != null)
return oBudgetComponents;
#endregion
try
{
oBudgetComponents = Service.Get();
}
catch (ServiceException e)
{
throw new Exception(e.Message, e);
}
#region Cache Footer
_cache.Add(oBudgetComponents, "Get");
#endregion
return oBudgetComponents;
}
public static ObjectsTemplate<BudgetComponent> Get(int BudgetID)
{
#region Cache Header
ObjectsTemplate<BudgetComponent> oBudgetComponents = _cache["Get"] as ObjectsTemplate<BudgetComponent>;
if (oBudgetComponents != null)
return oBudgetComponents;
#endregion
try
{
oBudgetComponents = Service.Get(BudgetID);
}
catch (ServiceException e)
{
throw new Exception(e.Message, e);
}
#region Cache Footer
_cache.Add(oBudgetComponents, "Get");
#endregion
return oBudgetComponents;
}
#endregion
#region Save
public ID Save()
{
//SetAuditTrailProperties();
return Service.Save(this);
}
#endregion
#region Delete
public void Delete(ID id)
{
Service.Delete(id);
}
#endregion
#endregion
#region Service Factory
internal static IBudgetComponentService Service
{
get { return Services.Factory.CreateService<IBudgetComponentService>(typeof(IBudgetComponentService)); }
}
#endregion
}
#endregion
#region child Objects
#region BudgetComponentIndivisual
[Serializable]
public class BudgetComponentIndivisual : ObjectTemplate
{
#region Cache Store
private static Cache _cache = new Cache(typeof(BudgetComponentIndivisual));
#endregion
#region Constructor
public BudgetComponentIndivisual()
{
_amount = 0;
_budgetComponentID = null;
_employeeID = null;
_detailType = EnumADEmpType.AppliedToIndividual;
_fromDate = DateTime.MinValue;
_toDate = DateTime.MinValue;
_valueType = EnumValueType.Amount;
}
#endregion
#region Properties
#region Amount : double
private double _amount;
public double Amount
{
get { return _amount; }
set { _amount = value; }
}
#endregion
#region BudgetComponentID : ID
private ID _budgetComponentID;
public ID BudgetComponentID
{
get { return _budgetComponentID; }
set { _budgetComponentID = value; }
}
#endregion
#region DetailType : EnumBudgetDetailType
private EnumADEmpType _detailType;
public EnumADEmpType DetailType
{
get { return _detailType; }
set { _detailType = value; }
}
#endregion
#region EmployeeID : ID
private ID _employeeID;
public ID EmployeeID
{
get { return _employeeID; }
set { _employeeID = value; }
}
#endregion
#region FromDate : DateTime
private DateTime _fromDate;
public DateTime FromDate
{
get { return _fromDate; }
set { _fromDate = value; }
}
#endregion
#region ToDate : DateTime
private DateTime _toDate;
public DateTime ToDate
{
get { return _toDate; }
set { _toDate = value; }
}
#endregion
#region ValueType : EnumValueType
private EnumValueType _valueType;
public EnumValueType ValueType
{
get { return _valueType; }
set { _valueType = value; }
}
#endregion
#region Employee : Employee
private Employee _employee;
public Employee Employee
{
get
{
if (_employeeID != null)
{
if (_employee == null && !_employeeID.IsUnassigned)
{
_employee = new Employee();
_employee = Employee.Get(_employeeID);
}
}
return this._employee;
}
set
{
_employee = value;
}
}
#endregion
#endregion
}
#endregion
#region BudgetComponentGrade
[Serializable]
public class BudgetComponentGrade : ObjectTemplate
{
#region Cache Store
private static Cache _cache = new Cache(typeof(BudgetComponentGrade));
#endregion
#region Constructor
public BudgetComponentGrade()
{
_budgetComponentID = null;
_gradeID = null;
}
#endregion
#region Properties
#region BudgetComponentID : ID
private ID _budgetComponentID;
public ID BudgetComponentID
{
get { return _budgetComponentID; }
set { _budgetComponentID = value; }
}
#endregion
#region GradeID : ID
private ID _gradeID;
public ID GradeID
{
get { return _gradeID; }
set { _gradeID = value; }
}
#endregion
#endregion
}
#endregion
#endregion
#region IBudgetComponentService
public interface IBudgetComponentService
{
#region parent's function definition
BudgetComponent Get(ID nID);
ObjectsTemplate<BudgetComponent> Get();
ObjectsTemplate<BudgetComponent> Get(int BudgetID);
ID Save(BudgetComponent item);
void Delete(ID nID);
#endregion
#region child's function Definition
ObjectsTemplate<BudgetComponentIndivisual> GetBudgetComponentIndivisuals(ID id);
ObjectsTemplate<BudgetComponentGrade> GetBudgetComponentGrades(ID id);
#endregion
}
#endregion
}