using System; using System.Collections.Generic; using System.Linq; using System.Text; using Ease.CoreV35; using Ease.CoreV35.Model; using Ease.CoreV35.Caching; using System.Data.Linq.Mapping; namespace Payroll.BO { #region TermParameter [Serializable] public class TermParameter : AuditTrailBase, ISetupManager { #region Cache Store private static Cache _cache = new Cache(typeof(TermParameter)); #endregion #region Constructor public TermParameter() { _termID = ID.FromInteger(0); _effectDate = DateTime.MinValue; _amount = 0; _type = EnumOverTimeType.NONE; _term = null; _TermEntityGrades = null; //_manager = null; _payrollTypeID = 0; } #endregion #region Internal Class public class TermEntityGrade : AuditTrailBase { #region Cache Store private static Cache _cache = new Cache(typeof(TermEntityGrade)); #endregion #region Constructor public TermEntityGrade() { _termEntityID = ID.FromInteger(0); _gradeID = ID.FromInteger(0); _grade = null; } #endregion #region Properties #region termEntityID : ID private ID _termEntityID; public ID TermEntityID { get { return _termEntityID; } set { base.OnPropertyChange("termEntityID", _termEntityID, value); _termEntityID = value; } } #endregion #region gradeID : ID private ID _gradeID; public ID GradeID { get { return _gradeID; } set { base.OnPropertyChange("gradeID", _gradeID, value); _gradeID = value; } } #endregion #region Grade: Grade private Grade _grade; public Grade Grade { get { if (_gradeID.Integer > 0 && _grade == null) { _grade = new Grade(); _grade = Grade.Get(_gradeID); } return this._grade; } set { _grade = value; } } #endregion #endregion } #endregion #region Properties #region TermID : ID private ID _termID; public ID TermID { get { return _termID; } set { base.OnPropertyChange("TermID", _termID, value); _termID = value; } } #endregion #region effectDate : DateTime private DateTime _effectDate; public DateTime EffectDate { get { return _effectDate; } set { base.OnPropertyChange("effectDate", _effectDate, value); _effectDate = value; } } #endregion #region amount : double private double _amount; public double Amount { get { return _amount; } set { base.OnPropertyChange("amount", _amount, value); _amount = value; } } #endregion #region type : EnumOverTimeType private EnumOverTimeType _type; public EnumOverTimeType Type { get { return _type; } set { base.OnPropertyChange("type",(short) _type, (short)value); _type = value; } } #endregion #region EntryType : String private static string _EntryType = string.Empty; public static string EntryType { get { return _EntryType; } set { _EntryType = value; } } #endregion #region PayrollTypeID : int private int _payrollTypeID; public int PayrollTypeID { get { return _payrollTypeID; } set { base.OnPropertyChange("PayrollTypeID", _payrollTypeID, value); _payrollTypeID = value; } } #endregion #region Term: Term private Term _term; public Term Term { get { if (_termID.Integer > 0 && _term == null) { _term = new Term(); _term = Term.Get(_termID); } return this._term; } set { _term = value; } } #endregion #region TermEntityGrade : TermEntityGrade private ObjectsTemplate _TermEntityGrades = null; public ObjectsTemplate TermEntityGrades { get { if (_TermEntityGrades == null && !this.ID.IsUnassigned && this.ID.Integer > 0) { _TermEntityGrades = TermParameter.GetGrades(this.ID); } return this._TermEntityGrades; } set { _TermEntityGrades = value; } } #endregion #region Service Factory ITermParameterService : ITermParameterService internal static ITermParameterService Service { get { return Services.Factory.CreateService(typeof(ITermParameterService)); } } #endregion #endregion #region Functions public double ConvertToDailyRate(double nBasic, DateTime dMonthDate) { double amount = 0; amount = nBasic / Convert.ToDouble(DateTime.DaysInMonth(dMonthDate.Year,dMonthDate.Month)); return amount; } public double ConvertToHourlyRate(double nBasic, DateTime dMonthDate) { double amount = 0; int hours = ConfigurationManager.GetIntValue("overtime", "hoursonmonth", EnumConfigurationType.Logic); if (hours <= 0) hours = 176; double doubleHOur = Convert.ToDouble(hours); amount = nBasic / doubleHOur; return amount; } public double GetPayableAmount(EmployeeOverTime ot,double nBasic) { double nHour = ot.OTHours; //switch (TermParameter.EntryType.ToUpper()) //{ // case "MINUTE": // nHour = Math.Floor(ot.OTHours); // nHour += (ot.OTHours - nHour) / 100 * 60; // break; // default: // nHour = Math.Floor(ot.OTHours); // nHour += (ot.OTHours - nHour) / 100 * 60; // break; //} ot.OTHours = nHour; switch (this.Type) { case EnumOverTimeType.AnyAmount: return ot.OTHours; case EnumOverTimeType.DailyBasicPercent: return (this.ConvertToDailyRate(nBasic, ot.OTMonth) * ot.OTHours * ot.Value / 100); case EnumOverTimeType.DailyFlatAmount: return ot.OTHours*ot.Value; case EnumOverTimeType.FixedAmount: return ot.OTHours; case EnumOverTimeType.HourlyBasicPercent: return this.ConvertToHourlyRate(nBasic, ot.OTMonth) * ot.OTHours * ot.Value / 100; case EnumOverTimeType.HourlyFlatAmount: return ot.OTHours * this.Amount; case EnumOverTimeType.HoursOfMonth: break; case EnumOverTimeType.Slab: ObjectsTemplate slabs= OTSlab.GetByTermID(ot.TermID); double amount = 0; if (slabs != null) { for (int i = 1; i < slabs.Count; i++) { amount = slabs[i].Amount; if (slabs[i].Hours > Math.Round(ot.OTHours,0)) { amount = slabs[i-1].Amount; break; } } } return amount; } return 0; } public static TermParameter Get(ID nID) { TermParameter oTermParameter = null; #region Cache Header oTermParameter = (TermParameter)_cache["Get", nID]; if (oTermParameter != null) return oTermParameter; #endregion oTermParameter = TermParameter.Service.Get(nID); #region Cache Footer _cache.Add(oTermParameter, "Get", nID); #endregion return oTermParameter; } public static ObjectsTemplate GetGrades(ID tpID) { #region Cache Header ObjectsTemplate termEntityGrades = _cache["Get", tpID] as ObjectsTemplate; if (termEntityGrades != null) return termEntityGrades; #endregion try { termEntityGrades = Service.GetGrades(tpID); } catch (ServiceException e) { throw new Exception(e.Message, e); } #region Cache Footer _cache.Add(termEntityGrades, "Get", tpID); #endregion return termEntityGrades; } public static ObjectsTemplate Get() { #region Cache Header ObjectsTemplate termParams = _cache["Get"] as ObjectsTemplate; if (termParams != null) return termParams; #endregion try { termParams = Service.Get2(SystemInformation.CurrentSysInfo.PayrollTypeID); } catch (ServiceException e) { throw new Exception(e.Message, e); } #region Cache Footer _cache.Add(termParams, "Get"); #endregion return termParams; } public static ObjectsTemplate GetByGradeID(ID nGradeID) { #region Cache Header ObjectsTemplate termParams = _cache["Get",nGradeID] as ObjectsTemplate; if (termParams != null) return termParams; #endregion try { termParams = Service.GetByGradeID(nGradeID); } catch (ServiceException e) { throw new Exception(e.Message, e); } #region Cache Footer _cache.Add(termParams, "Get",nGradeID); #endregion return termParams; } public ID Save() { this.SetAuditTrailProperties(); return TermParameter.Service.Save(this); } public void Delete() { TermParameter.Service.Delete(ID); } /// /// /// /// All paramters of current payroll type /// employee /// Term/OT basic IS /// public static TermParameter GetParameter(ObjectsTemplate parameters, Employee employee, ID TermID) { // Get applicable parameter for the employee List paramerIDs = SetupManager.ApplicableParameters(employee, EnumParameterSetup.OT); foreach (int i in paramerIDs) { foreach (TermParameter param in parameters) { if (param.ID.Integer == i && param.TermID.Integer == TermID.Integer) return param; } } return null; } #endregion #region ISetupManager Members private ObjectsTemplate _setupDetails; public ObjectsTemplate SetupDetails { get { return _setupDetails; } set { _setupDetails = value; } } public EmployeeSetupParameter ApplicableParameters(Employee employee) { EmployeeSetupParameter empParameter = new EmployeeSetupParameter(EnumParameterSetup.OT); empParameter.Employee = employee; empParameter.ParameterIDs = SetupManager.ApplicableParameters(employee, EnumParameterSetup.OT); return empParameter; } public List ApplicableParameters(ObjectsTemplate employees) { ObjectsTemplate details = SetupDetail.GetParameters(EnumParameterSetup.OT); List types = SetupDetail.GetTypes(EnumParameterSetup.OT); List empParametes = new List(); foreach (Employee emp in employees) { EmployeeSetupParameter empparameter = new EmployeeSetupParameter(EnumParameterSetup.OT); empparameter.Employee = emp; empparameter.ParameterIDs = SetupManager.ApplicableParameters(emp, EnumParameterSetup.OT, types, details); empParametes.Add(empparameter); } return empParametes; } public void FillMe(ID id) { TermParameter tpm = TermParameter.Get(id); this.TermID = tpm.TermID; this.EffectDate = tpm.EffectDate; this.Amount = tpm.Amount; this.Type = tpm.Type; this.CreatedBy = tpm.CreatedBy; this.CreatedDate = tpm.CreatedDate; this.ModifiedBy = tpm.ModifiedBy; this.ModifiedDate = tpm.ModifiedDate; this.SetID(tpm.ID); this.SetState(ObjectState.Saved); } #endregion } #endregion #region ITermParameter Service public interface ITermParameterService { TermParameter Get(ID id); ObjectsTemplate Get2(ID payrollTypeID); ObjectsTemplate GetByGradeID(ID nGradeID); ObjectsTemplate GetGrades(ID ntpID); ID Save(TermParameter item); void Delete(ID id); } #endregion }