EchoTex_Payroll/HRM.DA/Service/Attendance/AttnWiseAllowanceService.cs

336 lines
15 KiB
C#
Raw Normal View History

2024-10-14 10:01:49 +06:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ease.Core.DataAccess;
using Ease.Core.Model;
using Ease.Core.Utility;
using HRM.BO;
namespace HRM.DA
{
#region AttnWiseAllowance Service
[Serializable]
public class AttnWiseAllowanceService : ServiceTemplate
{
private void MapObject(AttnWiseAllowance oAttnWiseAllowance, DataReader oReader)
{
base.SetObjectID(oAttnWiseAllowance, (oReader.GetInt32("AttnWiseAllowanceID").Value));
oAttnWiseAllowance.ShiftID = oReader.GetInt32("ShiftID").Value;
oAttnWiseAllowance.ShiftName = oReader.GetString("ShiftName");
oAttnWiseAllowance.ProvisionID = oReader.GetInt32("ProvisionID").Value;
oAttnWiseAllowance.ProvisionName = oReader.GetString("ProvisionName");
oAttnWiseAllowance.ProvisionType = (enumPayrollComponentType)oReader.GetInt32("ProvisionType").Value;
oAttnWiseAllowance.ConsiderShiftHour = oReader.GetBoolean("HasHour").Value;
oAttnWiseAllowance.HoursOverShift = oReader.GetBoolean("HasHourOverShift").Value;
oAttnWiseAllowance.OnLeave = oReader.GetBoolean("IncludeLeave").Value;
oAttnWiseAllowance.OnHoliday = oReader.GetBoolean("IncludeHoliday").Value; //Newly Added
oAttnWiseAllowance.ConsiderPresentHour = oReader.GetBoolean("ConsiderPresentHour").Value; //Newly Added
oAttnWiseAllowance.Multiple = oReader.GetDouble("Multiple").Value;
oAttnWiseAllowance.FixedAmount = oReader.GetDouble("FixedAmount").Value;
oAttnWiseAllowance.PercentOfBasic = oReader.GetDouble("PercentOfBasic").Value;
oAttnWiseAllowance.CreatedBy = oReader.GetInt32("CreatedBy", 0);
oAttnWiseAllowance.CreatedDate = oReader.GetDateTime("CreatedDate").Value;
oAttnWiseAllowance.ModifiedBy = oReader.GetInt32("ModifiedBy", 0);
oAttnWiseAllowance.ModifiedDate = oReader.GetDateTime("ModifiedDate");
oAttnWiseAllowance.PayrollTypeID = oReader.GetInt32("PayrollTypeID", 0);
oAttnWiseAllowance.TimeDependent = oReader.GetBoolean("TimeDependent", false);
oAttnWiseAllowance.FromTime = oReader.GetDateTime("FromTime", DateTime.MinValue);
oAttnWiseAllowance.ToTime = oReader.GetDateTime("ToTime", DateTime.MinValue);
oAttnWiseAllowance.WorkTime = oReader.GetDouble("WorkTime", 0.0);
oAttnWiseAllowance.GraceTime = oReader.GetDouble("GraceTime", 0.0);
oAttnWiseAllowance.ConsiderOutTime = oReader.GetBoolean("ConsiderOutTime", false); //Newly Added
this.SetObjectState(oAttnWiseAllowance, Ease.Core.ObjectState.Saved);
}
protected override T CreateObject<T>(DataReader oReader)
{
AttnWiseAllowance oAttnWiseAllowance = new AttnWiseAllowance();
MapObject(oAttnWiseAllowance, oReader);
return oAttnWiseAllowance as T;
}
#region Service implementation
public AttnWiseAllowance Get(int id, int payrollTypeID)
{
AttnWiseAllowance oAttnWiseAllowance = new AttnWiseAllowance();
TransactionContext tc = null;
try
{
tc = TransactionContext.Begin();
DataReader oreader = new DataReader(AttnWiseAllowanceDA.Get(tc, id, payrollTypeID));
if (oreader.Read())
{
oAttnWiseAllowance = this.CreateObject<AttnWiseAllowance>(oreader);
}
oreader.Close();
tc.End();
}
catch (Exception e)
{
#region Handle Exception
if (tc != null)
tc.HandleError();
ExceptionLog.Write(e);
throw new ServiceException(e.Message, e);
#endregion
}
return oAttnWiseAllowance;
}
public List<AttnWiseAllowance> Get(int payrollTypeID)
{
TransactionContext tc = null;
try
{
tc = TransactionContext.Begin();
DataReader dr = new DataReader(AttnWiseAllowanceDA.Get(tc, payrollTypeID));
var AttnWiseAllowances = this.CreateObjects<AttnWiseAllowance>(dr);
dr.Close();
tc.End();
return AttnWiseAllowances;
}
catch (Exception e)
{
#region Handle Exception
if (tc != null)
tc.HandleError();
ExceptionLog.Write(e);
throw new ServiceException(e.Message, e);
#endregion
}
}
public List<AttnWiseAllowance> Get(int shiftId, EnumAttendanceType attnType, bool value)
{
TransactionContext tc = null;
try
{
tc = TransactionContext.Begin();
DataReader dr = new DataReader(AttnWiseAllowanceDA.Get(tc, shiftId, attnType, value));
//if (dr.Read())
//{
var AttnWiseAllowances = this.CreateObjects<AttnWiseAllowance>(dr);
//}
dr.Close();
tc.End();
return AttnWiseAllowances;
}
catch (Exception e)
{
#region Handle Exception
if (tc != null)
tc.HandleError();
ExceptionLog.Write(e);
throw new ServiceException(e.Message, e);
#endregion
}
}
public int Save(AttnWiseAllowance oAttnWiseAllowance)
{
TransactionContext tc = null;
try
{
tc = TransactionContext.Begin(true);
if (oAttnWiseAllowance.IsNew)
{
//int id = tc.GenerateID("AttnWiseAllowance", "AttnWiseAllowanceID");
//base.SetObjectID(oAttnWiseAllowance, ID.FromInteger(id));
AttnWiseAllowanceDA.Insert(tc, oAttnWiseAllowance);
}
else
{
AttnWiseAllowanceDA.Update(tc, oAttnWiseAllowance);
}
tc.End();
return oAttnWiseAllowance.ID;
}
catch (Exception e)
{
#region Handle Exception
if (tc != null)
tc.HandleError();
ExceptionLog.Write(e);
throw new ServiceException(e.Message, e);
#endregion
}
}
public void Delete(int id)
{
TransactionContext tc = null;
try
{
tc = TransactionContext.Begin(true);
AttnWiseAllowanceDA.Delete(tc, id);
tc.End();
}
catch (Exception e)
{
#region Handle Exception
if (tc != null)
tc.HandleError();
ExceptionLog.Write(e);
throw new ServiceException(e.Message, e);
#endregion
}
}
public DateTime GetShiftOutTime(AttnWiseAllowance oAttnWiseAllowance, Shift oshift, DailyAttnProcess attn)
{
DateTime loutTime = DateTime.MinValue;
if (oshift.IsOverlapingDay == true)
{
DateTime newDate = attn.AttnDate.AddDays(1);
loutTime = new DateTime(newDate.Year, newDate.Month, newDate.Day, oshift.OutTime.Hour, oshift.OutTime.Minute, 0);
}
else
{
DateTime newDate = attn.AttnDate;
loutTime = new DateTime(newDate.Year, newDate.Month, newDate.Day, oshift.OutTime.Hour, oshift.OutTime.Minute, 0);
}
DateTime dtOutTime = new DateTime(loutTime.Year, loutTime.Month, loutTime.Day, oAttnWiseAllowance.OutTime.Hour, oAttnWiseAllowance.OutTime.Minute, 0);
return dtOutTime;
}
public List<AttnWiseAllowance> GetAllApplicableItem(List<AttnWiseAllowance> attnSetups, DailyAttnProcess atProcess)
{
List<AttnWiseAllowance> oattBens = new List<AttnWiseAllowance>();
if (atProcess.InTime != DateTime.MinValue && atProcess.OutTime != DateTime.MinValue)
{
foreach (var attnSetup in attnSetups)
{
if (attnSetup.FromTime != DateTime.MinValue)
{
attnSetup.FromTime = atProcess.AttnDate.Date.Add(attnSetup.FromTime.TimeOfDay);
}
}
List<AttnWiseAllowance> attnWiseAllowances = GetAttnWiseAllowances(attnSetups, atProcess, (int)atProcess.ShiftID);
if (attnWiseAllowances.Count > 0)
oattBens.AddRange(attnWiseAllowances);
}
return oattBens;
}
public static List<AttnWiseAllowance> GetAllApplicableItem(List<AttnWiseAllowance> attnSetups,
DailyAttnProcess atProcess, AttnNationalHoliday anHoliday, List<Leave> oLeaves, bool isWorkingDay)
{
List<AttnWiseAllowance> oattBens = new List<AttnWiseAllowance>();
foreach (var attnSetup in attnSetups)
{
if (attnSetup.FromTime != DateTime.MinValue)
{
attnSetup.FromTime = atProcess.AttnDate.Date.Add(attnSetup.FromTime.TimeOfDay);
}
}
List<AttnWiseAllowance> attnWiseAllowances =
GetAttnWiseAllowances(attnSetups, atProcess, (int) atProcess.ShiftID);
//if (atProcess.HasDualShift && atProcess.SecondaryShift != null)
//{
// attnWiseAllowances = GetAttnWiseAllowances(attnSetups, atProcess, atProcess.SecondaryShift.ID);
//}
if (atProcess.InTime != DateTime.MinValue && atProcess.OutTime != DateTime.MinValue)
{
oattBens.AddRange(attnWiseAllowances);
}
return oattBens;
}
private static List<AttnWiseAllowance> GetAttnWiseAllowances(List<AttnWiseAllowance> attnSetups,
DailyAttnProcess atProcess, int shiftID)
{
DateTime InTime = (DateTime)atProcess.InTime;
DateTime OutTime = atProcess.OutTime != DateTime.MinValue ? (DateTime)atProcess.OutTime : DateTime.MinValue;
//List<AttnWiseAllowance> attnWiseAllowances = attnSetups.
// Where(osetup => osetup.ShiftID == shiftID &&
// (osetup.ProvisionType == enumPayrollComponentType.Allowance || osetup.ProvisionType == enumPayrollComponentType.Over_Time) &&
// (osetup.TimeDependent ? (osetup.FromTime >= InTime && osetup.FromTime <= OutTime) : true)).
// ToList();
List<AttnWiseAllowance> attnWiseAllowances = attnSetups.Where(osetup => osetup.ShiftID == shiftID &&
(osetup.ProvisionType == enumPayrollComponentType.Allowance ||
osetup.ProvisionType == enumPayrollComponentType.Over_Time) &&
(osetup.TimeDependent ? (atProcess.OTHour + (osetup.GraceTime / 60.0) >= osetup.WorkTime) : true))
.ToList();
if (atProcess.WorkDayType == EnumWorkPlanDayType.WorkingDay)
{
// Take general allowances
// Take holiday allowance if next day is holiday and out time is in next day
//attnWiseAllowances = attnWiseAllowances.Where(x => !x.OnHoliday ||
// ((atProcess.NextWorkDayType ==
// EnumWorkPlanDayType.WeeklyHoliday ||
// atProcess.NextWorkDayType ==
// EnumWorkPlanDayType.NationalHoliday) &&
// x.OnHoliday && x.ConsiderOutTime &&
// OutTime.Date > atProcess.AttnDate)).ToList();
}
else if (atProcess.WorkDayType == EnumWorkPlanDayType.WeeklyHoliday ||
atProcess.WorkDayType == EnumWorkPlanDayType.NationalHoliday)
{
// Take general allowances
// Tske holiday allowances which does not consider out time
// Take holiday allowance if next day is holiday and out time is in next day
//attnWiseAllowances = attnWiseAllowances.Where(x => !x.OnHoliday ||
// (x.OnHoliday && !x.ConsiderOutTime) ||
// ((atProcess.NextWorkDayType ==
// EnumWorkPlanDayType.WeeklyHoliday ||
// atProcess.NextWorkDayType ==
// EnumWorkPlanDayType.NationalHoliday) &&
// x.OnHoliday && x.ConsiderOutTime &&
// OutTime.Date > atProcess.AttnDate)).ToList();
}
// If there is one or more time dependent allowance
if (attnWiseAllowances.Where(x => x.TimeDependent).Count() > 1)
{
//DateTime maxFromTime = attnWiseAllowances.Where(x => x.TimeDependent).Max(x => x.FromTime);
double workTime = attnWiseAllowances.Where(x => x.TimeDependent).Max(x => x.WorkTime);
// Take all not time dependent allowances
// Take only the maximum time dependent allowance
//attnWiseAllowances = attnWiseAllowances.Where(x => !x.TimeDependent ||
// x.FromTime == maxFromTime)
// .ToList();
attnWiseAllowances = attnWiseAllowances.Where(x => !x.TimeDependent ||
x.WorkTime == workTime)
.ToList();
}
return attnWiseAllowances;
}
#endregion
}
#endregion
}