600 lines
31 KiB
C#
600 lines
31 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Data;
|
|||
|
|
|||
|
|
|||
|
using Ease.Core.Model;
|
|||
|
using System.ComponentModel.DataAnnotations;
|
|||
|
using System.ComponentModel.DataAnnotations.Schema;
|
|||
|
|
|||
|
namespace HRM.BO
|
|||
|
{
|
|||
|
#region EmployeeGradeSalary
|
|||
|
public class EmployeeGradeSalary : AuditTrailBase
|
|||
|
{
|
|||
|
#region Constructor
|
|||
|
|
|||
|
public EmployeeGradeSalary()
|
|||
|
{
|
|||
|
EmployeeID = 0;
|
|||
|
TillDate = DateTime.MinValue;
|
|||
|
EffectDate = DateTime.MinValue;
|
|||
|
BasicSalary = 0;
|
|||
|
GradeID = 0;
|
|||
|
GrossSalary = 0;
|
|||
|
PayScaleDetailID = 0;
|
|||
|
ArrearType = EnumArrearType.NotPresent;
|
|||
|
GradeSalaryTypeID = 0;
|
|||
|
//Employee = null;
|
|||
|
//Grade = null;
|
|||
|
//PayScaleDetail = null;
|
|||
|
FractionofFromTo = 1;
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Properties
|
|||
|
public int EmployeeID { get; set; }
|
|||
|
public DateTime? TillDate { get; set; }
|
|||
|
public DateTime EffectDate { get; set; }
|
|||
|
public double BasicSalary { get; set; }
|
|||
|
public int GradeID { get; set; }
|
|||
|
public double GrossSalary { get; set; }
|
|||
|
public double? Increment { get; set; }
|
|||
|
public int PayScaleDetailID { get; set; }
|
|||
|
public EnumArrearType ArrearType { get; set; }
|
|||
|
public int GradeSalaryTypeID { get; set; }
|
|||
|
public GradeSalaryChangeType gradeSalaryType { get; set; }
|
|||
|
public double FractionofFromTo { get; set; }
|
|||
|
public int EmployeeSerial { get; set; }
|
|||
|
public Employee Employee { get; set; }
|
|||
|
public Grade Grade { get; set; }
|
|||
|
public PayScaleDetail PayScaleDetail { get; set; }
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
public EmployeeGradeSalary GetClone()
|
|||
|
{
|
|||
|
EmployeeGradeSalary oItem = new EmployeeGradeSalary();
|
|||
|
oItem.EmployeeID = this.EmployeeID;
|
|||
|
oItem.TillDate = this.TillDate;
|
|||
|
oItem.EffectDate = this.EffectDate;
|
|||
|
oItem.BasicSalary = this.BasicSalary;
|
|||
|
oItem.GradeID = this.GradeID;
|
|||
|
oItem.GrossSalary = this.GrossSalary;
|
|||
|
oItem.Increment = this.Increment;
|
|||
|
oItem.PayScaleDetailID = this.PayScaleDetailID;
|
|||
|
oItem.ArrearType = this.ArrearType;
|
|||
|
oItem.GradeSalaryTypeID = this.GradeSalaryTypeID;
|
|||
|
oItem.FractionofFromTo = this.FractionofFromTo;
|
|||
|
oItem.EmployeeSerial = this.EmployeeSerial;
|
|||
|
|
|||
|
return oItem;
|
|||
|
}
|
|||
|
public List<ADParameter> ADParameters { get; set; }
|
|||
|
//public List<ADParameter> ADParameters
|
|||
|
//{
|
|||
|
// get
|
|||
|
// {
|
|||
|
// if (_adPrameters == null)
|
|||
|
// {
|
|||
|
// throw new ServiceException("Allowance Deduction Parameter Not yet set");
|
|||
|
// }
|
|||
|
// return _adPrameters;
|
|||
|
// }
|
|||
|
// set
|
|||
|
// {
|
|||
|
// _adPrameters = value;
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
//private List<RegularDataUpload> _errorList;
|
|||
|
//public List<RegularDataUpload> ErrorList
|
|||
|
//{
|
|||
|
// get { return _errorList; }
|
|||
|
// set { _errorList = value; }
|
|||
|
//}
|
|||
|
|
|||
|
//#region Service Factory IEmployeeGradeSalaryService : IEmployeeGradeSalaryService
|
|||
|
|
|||
|
//internal static IEmployeeGradeSalaryService Service
|
|||
|
//{
|
|||
|
// get { return Services.Factory.CreateService<IEmployeeGradeSalaryService>(typeof(IEmployeeGradeSalaryService)); }
|
|||
|
//}
|
|||
|
|
|||
|
//#endregion
|
|||
|
|
|||
|
#endregion
|
|||
|
public static void PrepareDataForCurrentSalary(DateTime salaryMonth, Employee employee,
|
|||
|
List<EmployeeGradeSalary> gradeSalaries)
|
|||
|
{
|
|||
|
DateTime calculateMonth = salaryMonth;
|
|||
|
|
|||
|
DateTime Upto = GlobalFunctions.LastDateOfMonth(calculateMonth);
|
|||
|
DateTime empJoiningDate = employee.JoiningDate;
|
|||
|
|
|||
|
gradeSalaries[gradeSalaries.Count - 1].TillDate = calculateMonth;
|
|||
|
if (employee.EndOfContractDate != null && employee.EndOfContractDate != DateTime.MinValue)
|
|||
|
if (employee.EndOfContractDate < Upto)
|
|||
|
gradeSalaries[gradeSalaries.Count - 1].TillDate = employee.EndOfContractDate;
|
|||
|
|
|||
|
double total = 0;
|
|||
|
foreach (EmployeeGradeSalary item in gradeSalaries)
|
|||
|
{
|
|||
|
if (item.ArrearType == EnumArrearType.NotPresent)
|
|||
|
if (item.EffectDate < GlobalFunctions.FirstDateOfMonth(calculateMonth))
|
|||
|
item.EffectDate = GlobalFunctions.FirstDateOfMonth(calculateMonth);
|
|||
|
|
|||
|
if (item.TillDate != null)
|
|||
|
item.FractionofFromTo = GlobalFunctions.GetFraction(empJoiningDate > item.EffectDate ?
|
|||
|
empJoiningDate : item.EffectDate, (DateTime)item.TillDate);
|
|||
|
else item.FractionofFromTo = GlobalFunctions.GetFraction(empJoiningDate > item.EffectDate ?
|
|||
|
empJoiningDate : item.EffectDate, Upto);
|
|||
|
total = total + item.FractionofFromTo;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static void PrepareDataForMaternityLeaveReturnCurrentSalary(Employee employee,
|
|||
|
List<EmployeeGradeSalary> gradeSalaries, DateTime returnDate, DateTime salaryMonth)
|
|||
|
{
|
|||
|
DateTime from = returnDate;
|
|||
|
DateTime toDate = salaryMonth;
|
|||
|
|
|||
|
gradeSalaries[gradeSalaries.Count - 1].TillDate = toDate;
|
|||
|
if (employee.EndOfContractDate != null && employee.EndOfContractDate != DateTime.MinValue)
|
|||
|
if (employee.EndOfContractDate < toDate)
|
|||
|
gradeSalaries[gradeSalaries.Count - 1].TillDate = employee.EndOfContractDate;
|
|||
|
|
|||
|
foreach (EmployeeGradeSalary item in gradeSalaries)
|
|||
|
{
|
|||
|
if (item.ArrearType == EnumArrearType.NotPresent)
|
|||
|
{
|
|||
|
if (item.EffectDate < GlobalFunctions.FirstDateOfMonth(toDate))
|
|||
|
{
|
|||
|
item.EffectDate = GlobalFunctions.FirstDateOfMonth(toDate);
|
|||
|
}
|
|||
|
}
|
|||
|
item.FractionofFromTo = GlobalFunctions.GetFraction(from > item.EffectDate ? from : item.EffectDate, item.TillDate != null ? (DateTime)item.TillDate : toDate);
|
|||
|
// total = total + item.FractionofFromTo;
|
|||
|
}
|
|||
|
}
|
|||
|
//public static List<dynamic> GetMonthlySalary(List<EmployeeGradeSalary> gradesalaries, ID employeeID, DateTime effectDateFrom, DateTime effectDateTo)
|
|||
|
//{
|
|||
|
// List<EmployeeGradeSalary> employeeGradeSalarys = null; ;
|
|||
|
// List<dynamic> lists = new List<dynamic>();
|
|||
|
// try
|
|||
|
// {
|
|||
|
// employeeGradeSalarys = gradesalaries.FindAll((delegate(EmployeeGradeSalary item) { return item.EmployeeID.Integer == employeeID.Integer; }));
|
|||
|
// // employeeGradeSalarys = Service.Get(employeeID.Integer);
|
|||
|
// int preID = 0;
|
|||
|
// for (DateTime date = effectDateFrom; date <= effectDateTo; date = date.AddMonths(1))
|
|||
|
// {
|
|||
|
// List<EmployeeGradeSalary> empGradeSalarys = null;
|
|||
|
// List<EmployeeGradeSalary> emptempGradeSalarys = null;
|
|||
|
// EmployeeGradeSalary empGradeSalary = null;
|
|||
|
// empGradeSalarys = employeeGradeSalarys.Where(o => o.EffectDate <= date).ToList();
|
|||
|
// emptempGradeSalarys = employeeGradeSalarys.Where(o => o.EffectDate == date).ToList();
|
|||
|
// if (empGradeSalarys.Count > 0)
|
|||
|
// {
|
|||
|
// dynamic obj = empGradeSalarys.Select(e => new
|
|||
|
// {
|
|||
|
// id = e.ID.Integer,
|
|||
|
// EmployeeID = e.EmployeeID,
|
|||
|
// SalaryMonth = Global.DateFunctions.PayrollLastDateOfMonth(date),
|
|||
|
// GradeID = e.GradeID,
|
|||
|
// BasicSalary = e.BasicSalary,
|
|||
|
// EventCount = emptempGradeSalarys.Count
|
|||
|
// //IsSpecial=(e.GradeSalaryTypeID.Integer==23 && preID!=e.ID.Integer)?true:false
|
|||
|
// }).OrderByDescending(x => x.BasicSalary).FirstOrDefault();
|
|||
|
// //dynamic obj = new { EmployeeID = empGradeSalary.EmployeeID, SalaryMonth = Global.DateFunctions.PayrollLastDateOfMonth(date),
|
|||
|
// // GradeID = empGradeSalary.GradeID,
|
|||
|
// // BasicSalary = empGradeSalary.BasicSalary
|
|||
|
// //};
|
|||
|
// //preID = obj.GetType().GetProperty("id").GetValue(obj, null);
|
|||
|
// lists.Add(obj);
|
|||
|
// }
|
|||
|
// }
|
|||
|
// return lists;
|
|||
|
// }
|
|||
|
// catch (ServiceException e)
|
|||
|
// {
|
|||
|
// throw new Exception(e.Message, e);
|
|||
|
// }
|
|||
|
//}
|
|||
|
//public static List<dynamic> GetMonthlySalary(List<EmployeeGradeSalary> gradesalaries, List<SalaryMonthly> omonthlySalarys, ID employeeID, DateTime effectDateFrom, DateTime effectDateTo)
|
|||
|
//{
|
|||
|
// List<EmployeeGradeSalary> employeeGradeSalarys = null; ;
|
|||
|
// SalaryMonthly omonthlySalary = null;
|
|||
|
// List<dynamic> lists = new List<dynamic>();
|
|||
|
// try
|
|||
|
// {
|
|||
|
// employeeGradeSalarys = gradesalaries.FindAll((delegate(EmployeeGradeSalary item) { return item.EmployeeID.Integer == employeeID.Integer; }));
|
|||
|
// // employeeGradeSalarys = Service.Get(employeeID.Integer);
|
|||
|
// int preID = 0;
|
|||
|
// bool flag = false;
|
|||
|
// int gid = 0;
|
|||
|
// for (DateTime date = effectDateFrom; date <= effectDateTo; date = date.AddMonths(1))
|
|||
|
// {
|
|||
|
// List<EmployeeGradeSalary> empGradeSalarys = null;
|
|||
|
// List<EmployeeGradeSalary> emptempGradeSalarys = null;
|
|||
|
// EmployeeGradeSalary fracGradeSalary = null;
|
|||
|
// EmployeeGradeSalary empGradeSalary = null;
|
|||
|
|
|||
|
// omonthlySalary = omonthlySalarys.FirstOrDefault(x => x.EmployeeID == employeeID && x.SalaryMonth == Global.DateFunctions.PayrollLastDateOfMonth(date));
|
|||
|
// empGradeSalarys = employeeGradeSalarys.Where(o => o.EffectDate <= date).ToList();
|
|||
|
// emptempGradeSalarys = employeeGradeSalarys.Where(o => o.EffectDate == date).ToList();
|
|||
|
// fracGradeSalary = employeeGradeSalarys.Where(o => o.EffectDate > PayrollPayrollGlobalFunctions.PayrollFirstDateOfMonth(date) && o.EffectDate <= PayrollPayrollGlobalFunctions.PayrollLastDateOfMonth(date)).ToList().OrderByDescending(x => x.BasicSalary).FirstOrDefault(); ;
|
|||
|
// EmployeeGradeSalary prevEmpGradeSalary1 = empGradeSalarys.OrderByDescending(x => x.BasicSalary).FirstOrDefault();
|
|||
|
// if (gid == 0 && prevEmpGradeSalary1 !=null)
|
|||
|
// {
|
|||
|
// gid = prevEmpGradeSalary1.GradeID.Integer;
|
|||
|
// }
|
|||
|
// if (!flag && date.Month==Payroll.BO.SystemInformation.CurrentSysInfo.NextPayProcessDate.Month) //return from IA in current month
|
|||
|
// {
|
|||
|
// List<EmpLifeCycle> empLifecycle = EmpLifeCycle.Get(employeeID, date);
|
|||
|
// if(empLifecycle.Count>0)
|
|||
|
// {
|
|||
|
// bool isIAReturn = false;
|
|||
|
// isIAReturn = empLifecycle.Any(x => x.StatusDetailID.Integer == 33 && x.EffectDate.Year == date.Year && x.EffectDate.Month == date.Month);
|
|||
|
|
|||
|
// if (isIAReturn)
|
|||
|
// {
|
|||
|
// flag = true;
|
|||
|
// }
|
|||
|
// }
|
|||
|
// }
|
|||
|
// if(omonthlySalary!=null)
|
|||
|
// {
|
|||
|
// flag = true;
|
|||
|
// if (fracGradeSalary == null || !(fracGradeSalary!=null && gid==26 && fracGradeSalary.GradeID.Integer==16))
|
|||
|
// {
|
|||
|
// SalaryMonthlyDetail sd = omonthlySalary.GetDetail(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Basic_Salary, (int)EnumSalaryItemCode.Basic_Salary);
|
|||
|
// //SalaryMonthlyDetail arrearAllo = omonthlySalary.GetDetail(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, 64);
|
|||
|
// dynamic obj = new
|
|||
|
// {
|
|||
|
// id = omonthlySalary.ID.Integer,
|
|||
|
// EmployeeID = omonthlySalary.EmployeeID,
|
|||
|
// SalaryMonth = omonthlySalary.SalaryMonth,
|
|||
|
// GradeID = omonthlySalary.GradeID,
|
|||
|
|
|||
|
// BasicSalary = omonthlySalary.GetDetail(EnumSalaryGroup.Gross, EnumSalaryItemCode.Basic_Salary, (int)EnumSalaryItemCode.Basic_Salary).ChangedAmount +
|
|||
|
// (sd != null ? sd.ChangedAmount : 0) ,
|
|||
|
// EventCount = omonthlySalarys.Count
|
|||
|
// //IsSpecial=(e.GradeSalaryTypeID.Integer==23 && preID!=e.ID.Integer)?true:false
|
|||
|
// };
|
|||
|
// //dynamic obj = new { EmployeeID = empGradeSalary.EmployeeID, SalaryMonth = Global.DateFunctions.PayrollLastDateOfMonth(date),
|
|||
|
// // GradeID = empGradeSalary.GradeID,
|
|||
|
// // BasicSalary = empGradeSalary.BasicSalary
|
|||
|
// //};
|
|||
|
// //preID = obj.GetType().GetProperty("id").GetValue(obj, null);
|
|||
|
// lists.Add(obj);
|
|||
|
// gid = omonthlySalary.GradeID.Integer;
|
|||
|
// }
|
|||
|
// else
|
|||
|
// {
|
|||
|
// EmployeeGradeSalary prevEmpGradeSalary = empGradeSalarys.Where(o => o.EffectDate < fracGradeSalary.EffectDate).OrderByDescending(x => x.BasicSalary).FirstOrDefault();
|
|||
|
// TimeSpan ts = fracGradeSalary.EffectDate - PayrollPayrollGlobalFunctions.PayrollFirstDateOfMonth(date);
|
|||
|
|
|||
|
// dynamic obj = new
|
|||
|
// {
|
|||
|
// id = prevEmpGradeSalary.ID.Integer,
|
|||
|
// EmployeeID = prevEmpGradeSalary.EmployeeID,
|
|||
|
// SalaryMonth = Global.DateFunctions.PayrollLastDateOfMonth(date),
|
|||
|
// GradeID = prevEmpGradeSalary.GradeID,
|
|||
|
|
|||
|
// BasicSalary =prevEmpGradeSalary.BasicSalary/30* ts.Days,
|
|||
|
// EventCount = omonthlySalarys.Count
|
|||
|
// //IsSpecial=(e.GradeSalaryTypeID.Integer==23 && preID!=e.ID.Integer)?true:false
|
|||
|
// };
|
|||
|
// lists.Add(obj);
|
|||
|
// obj = new
|
|||
|
// {
|
|||
|
// id = fracGradeSalary.ID.Integer,
|
|||
|
// EmployeeID = fracGradeSalary.EmployeeID,
|
|||
|
// SalaryMonth = Global.DateFunctions.PayrollLastDateOfMonth(date),
|
|||
|
// GradeID = fracGradeSalary.GradeID,
|
|||
|
|
|||
|
// BasicSalary = fracGradeSalary.BasicSalary / 30 * (30-ts.Days),
|
|||
|
// EventCount = omonthlySalarys.Count
|
|||
|
// //IsSpecial=(e.GradeSalaryTypeID.Integer==23 && preID!=e.ID.Integer)?true:false
|
|||
|
// };
|
|||
|
// lists.Add(obj);
|
|||
|
// }
|
|||
|
// }
|
|||
|
// else if (empGradeSalarys.Count > 0 && flag)
|
|||
|
// {
|
|||
|
// dynamic obj = empGradeSalarys.Select(e => new
|
|||
|
// {
|
|||
|
// id = e.ID.Integer,
|
|||
|
// EmployeeID = e.EmployeeID,
|
|||
|
// SalaryMonth = Global.DateFunctions.PayrollLastDateOfMonth(date),
|
|||
|
// GradeID = e.GradeID,
|
|||
|
// BasicSalary = e.BasicSalary,
|
|||
|
// EventCount = emptempGradeSalarys.Count
|
|||
|
// //IsSpecial=(e.GradeSalaryTypeID.Integer==23 && preID!=e.ID.Integer)?true:false
|
|||
|
// }).OrderByDescending(x => x.BasicSalary).FirstOrDefault();
|
|||
|
// //dynamic obj = new { EmployeeID = empGradeSalary.EmployeeID, SalaryMonth = Global.DateFunctions.PayrollLastDateOfMonth(date),
|
|||
|
// // GradeID = empGradeSalary.GradeID,
|
|||
|
// // BasicSalary = empGradeSalary.BasicSalary
|
|||
|
// //};
|
|||
|
// //preID = obj.GetType().GetProperty("id").GetValue(obj, null);
|
|||
|
// lists.Add(obj);
|
|||
|
// }
|
|||
|
// }
|
|||
|
// return lists;
|
|||
|
// }
|
|||
|
// catch (ServiceException e)
|
|||
|
// {
|
|||
|
// throw new Exception(e.Message, e);
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
public List<EmployeeGradeSalary> process()
|
|||
|
{
|
|||
|
List<EmployeeGradeSalary> itemstoSave = new List<EmployeeGradeSalary>();
|
|||
|
//EmployeeGradeSalary item;
|
|||
|
//GradeSalaryChangeType effecttype = GradeSalaryChangeType.Get(this.GradeSalaryTypeID);
|
|||
|
//// get the last (max on date) grade salary item grade salary item from the database
|
|||
|
//EmployeeGradeSalary lastgs = EmployeeGradeSalary.GetMax(this.EmployeeID.Integer, EnumArrearType.NotPresent);
|
|||
|
|
|||
|
//if (lastgs == null) // true is first time entry for the employee
|
|||
|
//{
|
|||
|
// // if effect date befor the last payprocess date, a arrear item need to prepare
|
|||
|
// if (this.EffectDate <= SystemInformation.CurrentSysInfo.LastPayProcessDate)
|
|||
|
// {
|
|||
|
// //Create an arrear item
|
|||
|
// item = (EmployeeGradeSalary)this.Clone();
|
|||
|
// item.ArrearType = EnumArrearType.ToCalculate;
|
|||
|
// // arrear item till date must be last payprocess date
|
|||
|
// item.TillDate = SystemInformation.CurrentSysInfo.LastPayProcessDate;
|
|||
|
// itemstoSave.Add(item);
|
|||
|
|
|||
|
// item = (EmployeeGradeSalary)this.Clone();
|
|||
|
// //Normal item effect-date should be first date of the month and it will continue to next change
|
|||
|
// item.EffectDate = PayrollPayrollGlobalFunctions.PayrollFirstDateOfMonth(SystemInformation.CurrentSysInfo.NextPayProcessDate);
|
|||
|
// item.TillDate = null;
|
|||
|
// item.ArrearType = EnumArrearType.NotPresent;
|
|||
|
// itemstoSave.Add(item);
|
|||
|
// }
|
|||
|
// else itemstoSave.Add(this);
|
|||
|
//}
|
|||
|
//else
|
|||
|
//{
|
|||
|
// if (this.EffectDate > SystemInformation.CurrentSysInfo.LastPayProcessDate)
|
|||
|
// {
|
|||
|
// lastgs.TillDate = this.EffectDate.AddDays(-1);
|
|||
|
// itemstoSave.Add(lastgs);
|
|||
|
// itemstoSave.Add(this);
|
|||
|
// }
|
|||
|
// else
|
|||
|
// {
|
|||
|
// #region do reverse process
|
|||
|
// // do reverse engineering
|
|||
|
// if (User.CurrentUser.LogInPayrollTypeID.Integer == 1)
|
|||
|
// {
|
|||
|
// List<EmployeeGradeSalary> savedItems =
|
|||
|
// EmployeeGradeSalary.Service.GetbyTillDate(this.EmployeeID.Integer, this.EffectDate, SystemInformation.CurrentSysInfo.LastPayProcessDate);
|
|||
|
// DateTime tempEffectDate = this.EffectDate;
|
|||
|
|
|||
|
// #region Do reverse engineering
|
|||
|
// int count = 1;
|
|||
|
// foreach (EmployeeGradeSalary arrerItem in savedItems)
|
|||
|
// {
|
|||
|
// //do not consider arrear to calculate item
|
|||
|
// // because current save process will delete arrear calculate items first.
|
|||
|
// if (arrerItem.ArrearType == EnumArrearType.ToCalculate) continue;
|
|||
|
// if (arrerItem.EffectDate >= SystemInformation.CurrentSysInfo.LastPayProcessDate) continue;
|
|||
|
// item = (EmployeeGradeSalary)arrerItem.Clone();
|
|||
|
// item.SetState(ObjectState.New);
|
|||
|
// item.EffectDate = (count == 1) ? this.EffectDate : arrerItem.EffectDate;
|
|||
|
// item.ArrearType = EnumArrearType.ToCalculate;
|
|||
|
// item.GradeID = this.GradeID;
|
|||
|
// item.BasicSalary = this.BasicSalary;
|
|||
|
// item.GrossSalary = this.GrossSalary;
|
|||
|
// item.PayScaleDetailID = this.PayScaleDetailID;
|
|||
|
// item.GradeSalaryTypeID = this.GradeSalaryTypeID;
|
|||
|
|
|||
|
// item.TillDate = (arrerItem.TillDate == null) ?
|
|||
|
// SystemInformation.CurrentSysInfo.LastPayProcessDate : (DateTime)arrerItem.TillDate;
|
|||
|
// if (arrerItem.TillDate == null)
|
|||
|
// {
|
|||
|
// arrerItem.TillDate = SystemInformation.CurrentSysInfo.LastPayProcessDate;
|
|||
|
// itemstoSave.Add(arrerItem);
|
|||
|
// }
|
|||
|
// itemstoSave.Add(item);
|
|||
|
// count = count + 1;
|
|||
|
|
|||
|
// }
|
|||
|
// #endregion
|
|||
|
|
|||
|
// if (itemstoSave.Count == 0)
|
|||
|
// {
|
|||
|
// item = (EmployeeGradeSalary)this.Clone();
|
|||
|
// item.ArrearType = EnumArrearType.ToCalculate;
|
|||
|
// // arrear item till date must be last payprocess date
|
|||
|
// item.TillDate = SystemInformation.CurrentSysInfo.LastPayProcessDate;
|
|||
|
// itemstoSave.Add(item);
|
|||
|
// }
|
|||
|
// }
|
|||
|
// else
|
|||
|
// {
|
|||
|
// lastgs.TillDate = SystemInformation.CurrentSysInfo.LastPayProcessDate;
|
|||
|
// itemstoSave.Add(lastgs);
|
|||
|
// item = (EmployeeGradeSalary)this.Clone();
|
|||
|
// item.ArrearType = EnumArrearType.ToCalculate;
|
|||
|
// item.TillDate = SystemInformation.CurrentSysInfo.LastPayProcessDate;
|
|||
|
// itemstoSave.Add(item);
|
|||
|
// }
|
|||
|
// // update current item effect date
|
|||
|
// this.EffectDate = SystemInformation.CurrentSysInfo.LastPayProcessDate.AddDays(1);
|
|||
|
// itemstoSave.Add(this);
|
|||
|
// #endregion
|
|||
|
// }
|
|||
|
|
|||
|
|
|||
|
//}
|
|||
|
//foreach (EmployeeGradeSalary oitem in itemstoSave)
|
|||
|
// oitem.SetAuditTrailProperties();
|
|||
|
return itemstoSave;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
public List<EmployeeGradeSalary> process(EmployeeGradeSalary lastgs)
|
|||
|
{
|
|||
|
List<EmployeeGradeSalary> itemstoSave = new List<EmployeeGradeSalary>();
|
|||
|
//EmployeeGradeSalary item;
|
|||
|
//GradeSalaryChangeType effecttype = GradeSalaryChangeType.Get(this.GradeSalaryTypeID);
|
|||
|
//// get the last (max on date) grade salary item grade salary item from the database
|
|||
|
|
|||
|
////EmployeeGradeSalary lastgs = EmployeeGradeSalary.GetMax(this.EmployeeID.Integer, EnumArrearType.NotPresent);
|
|||
|
|
|||
|
//if (lastgs == null) // true is first time entry for the employee
|
|||
|
//{
|
|||
|
// // if effect date befor the last payprocess date, a arrear item need to prepare
|
|||
|
// if (this.EffectDate <= SystemInformation.CurrentSysInfo.LastPayProcessDate)
|
|||
|
// {
|
|||
|
// //Create an arrear item
|
|||
|
// item = (EmployeeGradeSalary)this.Clone();
|
|||
|
// item.ArrearType = EnumArrearType.ToCalculate;
|
|||
|
// // arrear item till date must be last payprocess date
|
|||
|
// item.TillDate = SystemInformation.CurrentSysInfo.LastPayProcessDate;
|
|||
|
// itemstoSave.Add(item);
|
|||
|
|
|||
|
// item = (EmployeeGradeSalary)this.Clone();
|
|||
|
// //Normal item effect-date should be first date of the month and it will continue to next change
|
|||
|
// item.EffectDate = PayrollPayrollGlobalFunctions.PayrollFirstDateOfMonth(SystemInformation.CurrentSysInfo.NextPayProcessDate);
|
|||
|
// item.TillDate = null;
|
|||
|
// item.ArrearType = EnumArrearType.NotPresent;
|
|||
|
// itemstoSave.Add(item);
|
|||
|
// }
|
|||
|
// else itemstoSave.Add(this);
|
|||
|
//}
|
|||
|
//else
|
|||
|
//{
|
|||
|
// if (this.EffectDate > SystemInformation.CurrentSysInfo.LastPayProcessDate)
|
|||
|
// {
|
|||
|
// lastgs.TillDate = this.EffectDate.AddDays(-1);
|
|||
|
// itemstoSave.Add(lastgs);
|
|||
|
// itemstoSave.Add(this);
|
|||
|
// }
|
|||
|
// else
|
|||
|
// {
|
|||
|
// #region do reverse process
|
|||
|
// // do reverse engineering
|
|||
|
// if (User.CurrentUser.LogInPayrollTypeID.Integer == 1)
|
|||
|
// {
|
|||
|
// List<EmployeeGradeSalary> savedItems =
|
|||
|
// EmployeeGradeSalary.Service.GetbyTillDate(this.EmployeeID.Integer, this.EffectDate, SystemInformation.CurrentSysInfo.LastPayProcessDate);
|
|||
|
// DateTime tempEffectDate = this.EffectDate;
|
|||
|
|
|||
|
// #region Do reverse engineering
|
|||
|
// int count = 1;
|
|||
|
// foreach (EmployeeGradeSalary arrerItem in savedItems)
|
|||
|
// {
|
|||
|
// //do not consider arrear to calculate item
|
|||
|
// // because current save process will delete arrear calculate items first.
|
|||
|
// if (arrerItem.ArrearType == EnumArrearType.ToCalculate) continue;
|
|||
|
// if (arrerItem.EffectDate >= SystemInformation.CurrentSysInfo.LastPayProcessDate) continue;
|
|||
|
// item = (EmployeeGradeSalary)arrerItem.Clone();
|
|||
|
// item.SetState(ObjectState.New);
|
|||
|
// item.EffectDate = (count == 1) ? this.EffectDate : arrerItem.EffectDate;
|
|||
|
// item.ArrearType = EnumArrearType.ToCalculate;
|
|||
|
// item.GradeID = this.GradeID;
|
|||
|
// item.BasicSalary = this.BasicSalary;
|
|||
|
// item.GrossSalary = this.GrossSalary;
|
|||
|
// item.PayScaleDetailID = this.PayScaleDetailID;
|
|||
|
// item.GradeSalaryTypeID = this.GradeSalaryTypeID;
|
|||
|
|
|||
|
// item.TillDate = (arrerItem.TillDate == null) ?
|
|||
|
// SystemInformation.CurrentSysInfo.LastPayProcessDate : (DateTime)arrerItem.TillDate;
|
|||
|
// if (arrerItem.TillDate == null)
|
|||
|
// {
|
|||
|
// arrerItem.TillDate = SystemInformation.CurrentSysInfo.LastPayProcessDate;
|
|||
|
// itemstoSave.Add(arrerItem);
|
|||
|
// }
|
|||
|
// itemstoSave.Add(item);
|
|||
|
// count = count + 1;
|
|||
|
|
|||
|
// }
|
|||
|
// #endregion
|
|||
|
|
|||
|
// if (itemstoSave.Count == 0)
|
|||
|
// {
|
|||
|
// item = (EmployeeGradeSalary)this.Clone();
|
|||
|
// item.ArrearType = EnumArrearType.ToCalculate;
|
|||
|
// // arrear item till date must be last payprocess date
|
|||
|
// item.TillDate = SystemInformation.CurrentSysInfo.LastPayProcessDate;
|
|||
|
// itemstoSave.Add(item);
|
|||
|
// }
|
|||
|
// }
|
|||
|
// else
|
|||
|
// {
|
|||
|
// lastgs.TillDate = SystemInformation.CurrentSysInfo.LastPayProcessDate;
|
|||
|
// itemstoSave.Add(lastgs);
|
|||
|
// item = (EmployeeGradeSalary)this.Clone();
|
|||
|
// item.ArrearType = EnumArrearType.ToCalculate;
|
|||
|
// item.TillDate = SystemInformation.CurrentSysInfo.LastPayProcessDate;
|
|||
|
// itemstoSave.Add(item);
|
|||
|
// }
|
|||
|
// // update current item effect date
|
|||
|
// this.EffectDate = SystemInformation.CurrentSysInfo.LastPayProcessDate.AddDays(1);
|
|||
|
// itemstoSave.Add(this);
|
|||
|
// #endregion
|
|||
|
// }
|
|||
|
|
|||
|
|
|||
|
//}
|
|||
|
//foreach (EmployeeGradeSalary oitem in itemstoSave)
|
|||
|
// oitem.SetAuditTrailProperties();
|
|||
|
return itemstoSave;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
#endregion
|
|||
|
#region IEmployeeGradeSalary Service
|
|||
|
|
|||
|
public interface IEmployeeGradeSalaryService
|
|||
|
{
|
|||
|
List<EmployeeGradeSalary> Get();
|
|||
|
EmployeeGradeSalary GetMax(int employeeID, EnumArrearType type);
|
|||
|
List<EmployeeGradeSalary> Get(int employeeID);
|
|||
|
EmployeeGradeSalary Get(int employeeid, DateTime effectdate, EnumArrearType type);
|
|||
|
EmployeeGradeSalary GetBasicOnDateBAT(int employeeid, DateTime effectDate);
|
|||
|
List<EmployeeGradeSalary> Get(DateTime effectdate, EnumArrearType type);
|
|||
|
EmployeeGradeSalary Get(int employeeid, DateTime effectdate, int payrollTypeID);
|
|||
|
EmployeeGradeSalary GetPeviousSalary(int employeeid, int GradeSalaryID);
|
|||
|
|
|||
|
// List<EmployeeGradeSalary> GetbyTillDate(int employeeID, DateTime tillDateFrom, DateTime tillDateTo);
|
|||
|
|
|||
|
List<EmployeeGradeSalary> GetbyEffectDate(int employeeID, DateTime effectDateFrom, DateTime effectDateTo);
|
|||
|
|
|||
|
//specially for salary process
|
|||
|
// List<EmployeeGradeSalary> GetCurrMonthSalaryItems(DateTime nextPayProcessDate);
|
|||
|
List<EmployeeGradeSalary> GetArrearItems(int payrollTypeID);
|
|||
|
List<EmployeeGradeSalary> GetArrearPaidItems(int employeeid, DateTime tillDateFrom, int payrollTypeID);
|
|||
|
|
|||
|
void DeleteFrom(int employeeID, DateTime fromDate);
|
|||
|
void Delete(EmployeeGradeSalary gradeSalary);
|
|||
|
//void Delete(EmployeeGradeSalary updateItem, EmployeeGradeSalary deletedItem);
|
|||
|
void DeleteAll();
|
|||
|
void Delete(int pkid);
|
|||
|
|
|||
|
void Save(List<EmployeeGradeSalary> itemsToSave);
|
|||
|
DataSet GetEmpBasicGrade(DateTime dEffectDate, DateTime dEffectDate2, int payrollTypeID);
|
|||
|
DataSet GetEmpPrvBasicGrade(DateTime effectDate, int payrollTypeID);
|
|||
|
DataSet GetmultipleTilldatedemp(int payrollTypeID);
|
|||
|
DataTable GetSalaryHistory(int employeeID);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
}
|