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 _oBudgetComponentIndivisuals; public ObjectsTemplate OBudgetComponentIndivisuals { get { if (_oBudgetComponentIndivisuals == null) { //_oBudgetComponentIndivisuals = new ObjectsTemplate(); //if (!this.ID.IsUnassigned && _oBudgetComponentIndivisuals.Count>=0) //{ // if (this.ID.Integer > 0) // _oBudgetComponentIndivisuals = Service.GetBudgetComponentIndivisuals(this.ID); //} _oBudgetComponentIndivisuals = new ObjectsTemplate(); } return _oBudgetComponentIndivisuals; } set { _oBudgetComponentIndivisuals = value; } } #endregion #region BudgetComponentGrade Property private ObjectsTemplate _oBudgetComponentGrades; public ObjectsTemplate OBudgetComponentGrades { get { if (_oBudgetComponentGrades == null) { _oBudgetComponentGrades = new ObjectsTemplate(); //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 Get() { #region Cache Header ObjectsTemplate oBudgetComponents = _cache["Get"] as ObjectsTemplate; 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 Get(int BudgetID) { #region Cache Header ObjectsTemplate oBudgetComponents = _cache["Get"] as ObjectsTemplate; 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(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 Get(); ObjectsTemplate Get(int BudgetID); ID Save(BudgetComponent item); void Delete(ID nID); #endregion #region child's function Definition ObjectsTemplate GetBudgetComponentIndivisuals(ID id); ObjectsTemplate GetBudgetComponentGrades(ID id); #endregion } #endregion }