EchoTex_Payroll/HRM.UI/Controllers/MobileAPI/Models/DailyAttendanceProcess.cs

550 lines
28 KiB
C#
Raw Normal View History

2024-10-14 10:01:49 +06:00
using Ease.Core.Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using HRM.BO;
using HRM.DA;
using NPOI.SS.Formula.Functions;
using System.Text;
using System.IO;
using System.Diagnostics;
namespace HRM.UI.MODELS
{
public class DailyAttendanceProcess : AuditTrailBase
{
public readonly IDailyAttnProcessService _dailyAttnProcess;
Shift oShift = null;
List<Shift> _shifts = null;
MonthlyWorkPlan mplan = null;
public DailyAttnProcess ProcessAttendanceForSingleEmployeeToday(DailyAttnProcessTModel oDailyAttnProcessTmodel, int PayrollTypeID)
{
// Employee oEmp = Employee.Get(Ease.Core.Model.ID.FromInteger(oDailyAttnProcessTmodel.EmployeeID));
DailyAttnProcess attnProcess = new DailyAttnProcess();
try
{
attnProcess.AttnDate = oDailyAttnProcessTmodel.AttnDate;
attnProcess.EmployeeID = oDailyAttnProcessTmodel.EmployeeID;
attnProcess.IsManualEntry = true;
attnProcess.AttenType = EnumAttendanceType.Present;
//attnProcess.IsFromMobile = true;
attnProcess.IsFromMobile = oDailyAttnProcessTmodel.IsFromMobile;
attnProcess.WFStatus = EnumWFAttnStatus.None;
attnProcess.InTime = DateTime.Now;
attnProcess.OutTime = null;
attnProcess.InTimeLatitude = oDailyAttnProcessTmodel.Location.InTimeLatitude;
attnProcess.InTimeLongitude = oDailyAttnProcessTmodel.Location.InTimeLongitude;
attnProcess.InTimeNearestAddress = oDailyAttnProcessTmodel.InTimeNearestAddress;
//SearchEmployee oemp = new SearchEmployeeService().get(oDailyAttnProcessTmodel.EmployeeID);
//User ouser = new UserService().Get(oemp.EmployeeNo);
attnProcess.CreatedBy = 1; //ouser.ID;
attnProcess.CreatedDate = DateTime.Today;
//List<EmployeeWorkPlanSetup> empWPGroups = new EmployeeWorkPlanSetupService().Get();
//List<MonthlyWorkPlan> monthlyWorkPlans = new MonthlyWorkPlanService().GetByDate(attnProcess.AttnDate, ouser.LogInPayrollTypeID);
//mplan = AttendanceProcess.GetPlanwithEmployee(attnProcess.AttnDate, attnProcess.EmployeeID, empWPGroups, monthlyWorkPlans, null);
DataSet dsShidtIDWorkDatType = new DailyAttnProcessService().GetAttnShiftAndWorkDatTypeMobileWithNoLock(attnProcess.EmployeeID, attnProcess.AttnDate);
if (dsShidtIDWorkDatType != null && dsShidtIDWorkDatType.Tables[0].Rows.Count > 0)
{
if (dsShidtIDWorkDatType.Tables[0].Rows[0][0] != DBNull.Value)
attnProcess.ShiftID = Convert.ToInt16(dsShidtIDWorkDatType.Tables[0].Rows[0][0].ToString());
else if (dsShidtIDWorkDatType.Tables[0].Rows[0]["defaultShiftID"] != DBNull.Value)
{
attnProcess.ShiftID = Convert.ToInt16(dsShidtIDWorkDatType.Tables[0].Rows[0]["defaultShiftID"].ToString());
}
else
{
throw new Exception("Failed to get roster, contact to system administrator");
}
double FlexibleHour = Convert.ToDouble(dsShidtIDWorkDatType.Tables[0].Rows[0]["FlexibleHour"]);
double LunchHour = Convert.ToDouble((Decimal)dsShidtIDWorkDatType.Tables[0].Rows[0]["LunchHour"]);
double LateCalcualtion = Convert.ToDouble(dsShidtIDWorkDatType.Tables[0].Rows[0]["LateCalcualtion"]);
double totalLateMinute = 0;
DateTime ShiftInTime = ((DateTime)dsShidtIDWorkDatType.Tables[0].Rows[0]["ShiftInTime"]).AddMinutes(FlexibleHour);
DateTime ShiftOutTime = ((DateTime)dsShidtIDWorkDatType.Tables[0].Rows[0]["ShiftOutTime"]);
#region Old LateHour Calculation
//if (((DateTime)attnProcess.InTime).TimeOfDay > temptime.TimeOfDay)
//{
// totalLateMinute = ((DateTime)attnProcess.InTime).TimeOfDay.Subtract(temptime.TimeOfDay).TotalMinutes;
// if (totalLateMinute > LateCalcualtion)
// {
// attnProcess.IsLate = true;
// attnProcess.LateHour = totalLateMinute;
// }
//}
#endregion
Shift oshift = new Shift();
oshift.ID = (int)attnProcess.ShiftID;
oshift.InTime = ShiftInTime;
oshift.OutTime = ShiftOutTime;
oshift.FlexibleHour = FlexibleHour;
oshift.LunchHour = LunchHour;
DailyAttnProcess daProcess = new DailyAttnProcess();
daProcess = new AttendanceProcess().CalulateLateAndDelayForMobileAttendance(attnProcess, oshift);
attnProcess.LateHour = daProcess.LateHour;
//attnProcess.EarlyHour = daProcess.EarlyHour;
attnProcess.WorkHour = daProcess.WorkHour;
attnProcess.WorkDayType = (EnumWorkPlanDayType)Convert.ToInt16(dsShidtIDWorkDatType.Tables[0].Rows[0][1].ToString());
// new AttendanceProcess().CalculateLateAndDelay(attnProcess, oshift);
}
List<DailyAttnProcess> _dailyAttnProcesses = new List<DailyAttnProcess>();
_dailyAttnProcesses.Add(attnProcess);
new DailyAttnProcessService().Save(_dailyAttnProcesses, null);
//Save RawData
AttnMobileRawData orawData = new AttnMobileRawData();
orawData.AttnDate = attnProcess.AttnDate;
orawData.PunchTime = (DateTime)attnProcess.InTime;
orawData.EmpID = attnProcess.EmployeeID;
orawData.PunchType = EnumMobilePunchType.In;
orawData.IsSynced = true;
new AttnMobileRawDataService().Save(orawData);
}
catch (Exception ex)
{
string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
_filePath += @"\ChckInOutLog.txt";
//StreamWriter r = new StreamWriter(_filePath, true);
//string sms = "";
//if (ex.Message != null) sms = ex.Message;
//r.WriteLine((sms.Length > 50) ? sms.Substring(0, 50) : sms + " [" + attnProcess.EmployeeID + "] "
//+ attnProcess.AttnDate.ToString("dd MMM yyyy") + ", " + ((DateTime)attnProcess.OutTime).ToString("dd MMM yyyy hh:mm"));
//r.Close();
using (StreamWriter r = new StreamWriter(_filePath, true))
{
string sms = "";
if (ex.Message != null) sms = ex.Message;
r.WriteLine((sms.Length > 50) ? sms.Substring(0, 50) : sms + " [" + attnProcess.EmployeeID + "] "
+ attnProcess.AttnDate.ToString("dd MMM yyyy") + ", " + ((DateTime)attnProcess.OutTime).ToString("dd MMM yyyy hh:mm"));
}
}
return attnProcess;
}
public void CheckOutFixedPosition(int empid, DateTime attnDate, string comment, decimal OutTimeLatitude, decimal OutTimeLongitude,
int locationID, EnumIsFromMobile IsFromMobile, string OutTimeNearestAddress)
{
DailyAttnProcess daProcess = null;
List<DailyAttnProcess> _dailyAttnProcesses = new List<DailyAttnProcess>();
try
{
daProcess = new DailyAttnProcessService().GetforMobileWithNoLock(empid, attnDate);
if (daProcess == null)
throw new CustomException(EnumExceptionType.Error, "Check-In data not found for this Day.");
daProcess.IsManualEntry = true;
daProcess.IsFromMobile = IsFromMobile;
daProcess.LocationID = daProcess.LocationID == 0 ? locationID : daProcess.LocationID;
daProcess.OutTime = DateTime.Now;
daProcess.LocationID = locationID;
daProcess.OutTimeLatitude = OutTimeLatitude;
daProcess.OutTimeLongitude = OutTimeLongitude;
daProcess.OutTimeNearestAddress = OutTimeNearestAddress;
//daProcess.ActualInTime = daProcess.InTime;
//daProcess.ActualOutTime = daProcess.OutTime;
//daProcess.WFStatus = EnumWFAttnStatus.EmpSubmitted;
if (daProcess.ShiftID != null)
{
Shift oshift = new ShiftService().Get((int)daProcess.ShiftID);
// DateTime temptime = oshift.OutTime.AddMinutes(-oshift.FlexibleHour);
//if ((daProcess.InTime != null && ((DateTime)daProcess.OutTime).Subtract((DateTime)daProcess.InTime).TotalHours < oshift.WorkHour))
//{
// daProcess.EarlyHour = oshift.WorkHour - ((DateTime)daProcess.OutTime).Subtract((DateTime)daProcess.InTime).TotalHours;
//}
//Shift tempShift = new Shift();
//tempShift.ID = (int)daProcess.ShiftID;
//tempShift.InTime = (DateTime)daProcess.InTime;
//tempShift.OutTime = (DateTime)daProcess.OutTime;
//tempShift.FlexibleHour = oshift.FlexibleHour;
//tempShift.LunchHour = oshift.LunchHour;
DailyAttnProcess odaProcess = new DailyAttnProcess();
odaProcess = new AttendanceProcess().CalulateLateAndDelayForMobileAttendance(daProcess, oshift);
new AttendanceProcess().CalulateOverTimeForMobileAttendance(daProcess, oshift);
//daProcess.LateHour = odaProcess.LateHour;
daProcess.EarlyHour = daProcess.EarlyHour;
daProcess.WorkHour = odaProcess.WorkHour;
// new AttendanceProcess().CalculateLateAndDelay(daProcess, oshift);
}
_dailyAttnProcesses.Add(daProcess);
new DailyAttnProcessService().Save(_dailyAttnProcesses, null);
AttnMobileRawData orawData = new AttnMobileRawData();
orawData.AttnDate = daProcess.AttnDate;
orawData.PunchTime = (DateTime)daProcess.OutTime;
orawData.EmpID = daProcess.EmployeeID;
orawData.PunchType = EnumMobilePunchType.Out;
orawData.IsSynced = true;
new AttnMobileRawDataService().Save(orawData);
}
catch (Exception ex)
{
string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
_filePath += @"\ChckInOutLog.txt";
//StreamWriter r = new StreamWriter(_filePath,true);
//string sms = "";
//if(ex.Message !=null) sms = ex.Message;
//r.WriteLine((sms.Length > 50) ? sms.Substring(0, 50) : sms + " [" + daProcess.EmployeeID + "] "
// + daProcess.AttnDate.ToString("dd MMM yyyy") + ", " + ((DateTime)daProcess.OutTime).ToString("dd MMM yyyy hh:mm"));
//r.Close();
using (StreamWriter r = new StreamWriter(_filePath, true))
{
string sms = "";
if (ex.Message != null) sms = ex.Message;
r.WriteLine((sms.Length > 50) ? sms.Substring(0, 50) : sms + " [" + daProcess.EmployeeID + "] "
+ daProcess.AttnDate.ToString("dd MMM yyyy") + ", " + ((DateTime)daProcess.OutTime).ToString("dd MMM yyyy hh:mm"));
}
}
}
//private void CalculateLateAttendanceType(DailyAttnProcess attnProcess, DateTime Attdate)
//{
// if (attnProcess.WorkDayType == EnumWorkPlanDayType.WorkingDay && attnProcess.AttenType == EnumAttendanceType.Present)
// {
// CalcullateLateAttendanceType(attnProcess, oShift, Attdate);
// if (attnProcess.LateAttendanceType != EnumLateAttendanceType.NotApplicable)
// {
// attnProcess.IsLate = true;
// double _lateHour = 0;
// _lateHour = (attnProcess.InTime.TimeOfDay.Subtract(oShift.InTime.TimeOfDay).TotalMinutes) / 60;
// attnProcess.LateHour = _lateHour;
// }
// }
//}
//private void CalcullateLateAttendanceType(DailyAttnProcess attnProcess, Shift oshift, DateTime Attdate)
//{
// int extraMinutes = 0;
// if (attnProcess.InTime == DateTime.MinValue || attnProcess.OutTime == DateTime.MinValue)
// {
// return;
// }
// DateTime tInTime = attnProcess.InTime ?? DateTime.MinValue;
// DateTime tOutTime = DateTime.MinValue;
// DateTime dt_0_hour_00_minutes = new DateTime(Attdate.Year, Attdate.Month, Attdate.Day, oshift.InTime.Hour, oshift.InTime.Minute, oshift.InTime.Second);
// DateTime dt0_hour_14_minutes = dt_0_hour_00_minutes.AddMinutes(14).AddSeconds(59);
// if (attnProcess.InTime >= dt_0_hour_00_minutes && attnProcess.InTime <= dt0_hour_14_minutes)
// {
// extraMinutes = 15;
// tOutTime = new DateTime(Attdate.Year, Attdate.Month, Attdate.Day, oshift.OutTime.Hour, oshift.OutTime.Minute, 0);
// tOutTime = tOutTime.AddMinutes(extraMinutes);
// if (attnProcess.OutTime < tOutTime)
// {
// attnProcess.LateAttendanceType = EnumLateAttendanceType.Nine_0am_to_Nine_14am;
// }
// }
// DateTime dt0_hours_15_minutes = dt_0_hour_00_minutes.AddMinutes(15);
// DateTime dt0_hours_29_minutes = dt_0_hour_00_minutes.AddMinutes(29).AddSeconds(59);
// if (attnProcess.InTime >= dt0_hours_15_minutes && attnProcess.InTime <= dt0_hours_29_minutes)
// {
// extraMinutes = 30;
// tOutTime = new DateTime(Attdate.Year, Attdate.Month, Attdate.Day, oshift.OutTime.Hour, oshift.OutTime.Minute, 0);
// tOutTime = tOutTime.AddMinutes(extraMinutes);
// if (attnProcess.OutTime < tOutTime)
// {
// attnProcess.LateAttendanceType = EnumLateAttendanceType.Nine_15am_to_Nine_29am;
// }
// }
// DateTime dt_0_hour_30_minutes = dt_0_hour_00_minutes.AddMinutes(30);
// DateTime dt_1_hour_59_minutes = dt_0_hour_00_minutes.AddHours(1).AddMinutes(59).AddSeconds(59);
// if (attnProcess.InTime >= dt_0_hour_30_minutes && attnProcess.InTime <= dt_1_hour_59_minutes)
// {
// attnProcess.LateAttendanceType = EnumLateAttendanceType.Nine_30am_to_Ten_59am;
// }
// DateTime dt_2hour_00_minutes = dt_0_hour_00_minutes.AddHours(2);
// DateTime dt_4_hour_30_minutes = dt_0_hour_00_minutes.AddHours(4).AddMinutes(30);
// if (attnProcess.InTime >= dt_2hour_00_minutes && attnProcess.InTime <= dt_4_hour_30_minutes)
// {
// attnProcess.LateAttendanceType = EnumLateAttendanceType.Eleven_0am_to_One_30pm;
// }
//}
//private void CalculateShift(WorkPlanGroup oEmpWPlanGroup, DailyAttnProcess attnProcess, DateTime Attdate, Employee emp, EmployeeWorkPlanSetup oEmpWorkplanSetup)
//{
// #region Calculate Particular Shift Based On WorkPlan Group Type
// List<MonthlyWorkPlan> monthlyWorkPlans = MonthlyWorkPlan.GetByDate(Attdate);
// List<ActingResponsibilitySetup> _tempraryShifts = new List<ActingResponsibilitySetup>();
// MonthlyWorkPlan mplan = null;
// ActingResponsibilitySetup tempShiftEmployee = null; //_tempraryShifts.Where(o => o.EmployeeID == attnProcess.EmployeeID).FirstOrDefault();
// List<Shift> shifts = Shift.Get();
// List<ShiftRotation> CounterClockRotation = ShiftRotation.Get(EnumWorkPlanGroup.Counter_Clock_1);
// List<ShiftRotation> CounterClock2Rotation = ShiftRotation.Get(EnumWorkPlanGroup.Counter_Clock_2);
// List<ShiftRotation> CounterClock3Rotation = ShiftRotation.Get(EnumWorkPlanGroup.Counter_Clock_3);
// List<ShiftRotation> CounterClock4Rotation = ShiftRotation.Get(EnumWorkPlanGroup.Counter_Clock_4);
// if (oEmpWPlanGroup.Type == EnumWorkPlanGroup.Fixed)
// {
// if (oEmpWPlanGroup.WorkPlanGroupType == EnumWorkPlanGroupType.Exception && attnProcess.MonthlyWorkPlan != null)
// {
// attnProcess.ShiftID = mplan.ShiftID;
// attnProcess.TempShiftID = null;
// if (tempShiftEmployee != null)
// {
// mplan = GetPlanwithEmployee(Attdate, emp.ID, oEmpWorkplanSetup, monthlyWorkPlans, _tempraryShifts);
// attnProcess.MonthlyWorkPlan = mplan;
// attnProcess.TempShiftID = mplan.ShiftID;
// }
// }
// else
// {
// switch (Attdate.DayOfWeek)
// {
// case DayOfWeek.Friday:
// attnProcess.ShiftID = oEmpWPlanGroup.FridayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.FridayShiftID.Value) : ID.FromInteger(0);
// break;
// case DayOfWeek.Monday:
// attnProcess.ShiftID = oEmpWPlanGroup.MondayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.MondayShiftID.Value) : ID.FromInteger(0);
// break;
// case DayOfWeek.Saturday:
// attnProcess.ShiftID = oEmpWPlanGroup.SaturdayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.SaturdayShiftID.Value) : ID.FromInteger(0);
// break;
// case DayOfWeek.Sunday:
// attnProcess.ShiftID = oEmpWPlanGroup.SundayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.SundayShiftID.Value) : ID.FromInteger(0);
// break;
// case DayOfWeek.Thursday:
// attnProcess.ShiftID = oEmpWPlanGroup.ThursdayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.ThursdayShiftID.Value) : ID.FromInteger(0);
// break;
// case DayOfWeek.Tuesday:
// attnProcess.ShiftID = oEmpWPlanGroup.TuesdayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.TuesdayShiftID.Value) : ID.FromInteger(0);
// break;
// case DayOfWeek.Wednesday:
// attnProcess.ShiftID = oEmpWPlanGroup.WednesdayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.WednesdayShiftID.Value) : ID.FromInteger(0);
// break;
// default:
// break;
// }
// }
// }
// else
// {
// if (attnProcess.MonthlyWorkPlan != null)
// {
// attnProcess.ShiftID = mplan.ShiftID;
// attnProcess.TempShiftID = null;
// if (tempShiftEmployee != null)
// {
// mplan = GetPlanwithEmployee(Attdate, emp.ID, oEmpWorkplanSetup, monthlyWorkPlans, _tempraryShifts);
// attnProcess.MonthlyWorkPlan = mplan;
// attnProcess.TempShiftID = mplan.ShiftID;
// }
// }
// else
// {
// List<ShiftRotation> osrs;
// if (oEmpWPlanGroup.Type == EnumWorkPlanGroup.Counter_Clock_1)
// osrs = CounterClockRotation;
// else if (oEmpWPlanGroup.Type == EnumWorkPlanGroup.Counter_Clock_2)
// osrs = CounterClock2Rotation;
// else if (oEmpWPlanGroup.Type == EnumWorkPlanGroup.Counter_Clock_3)
// osrs = CounterClock3Rotation;
// else if (oEmpWPlanGroup.Type == EnumWorkPlanGroup.Counter_Clock_4)
// osrs = CounterClock4Rotation;
// else osrs = CounterClockRotation;
// foreach (ShiftRotation sr in osrs)
// {
// Shift oshift = shifts.Where(o => o.ID.Integer == sr.ShiftID.Integer)
// .Single();
// DateTime shiftInTime = Attdate.Subtract(Attdate.TimeOfDay).Add(oshift.InTime.TimeOfDay);
// attnProcess.ShiftID = sr.ShiftID;
// }
// }
// }
// if (attnProcess.TempShiftID == null)
// {
// oShift = shifts.GetItem(attnProcess.ShiftID);
// }
// else
// {
// oShift = shifts.GetItem(attnProcess.TempShiftID);
// }
// #endregion
//}
//private MonthlyWorkPlan GetPlanwithEmployee(DateTime EffectDate, int employeeid, EmployeeWorkPlanSetup plans, List<MonthlyWorkPlan> MworkPlans, List<ActingResponsibilitySetup> temporaryShiftEmps)
//{
// MonthlyWorkPlan dPlan = null;
// if (temporaryShiftEmps == null)
// {
// EmployeeWorkPlanSetup workGroup = plans;
// if (workGroup != null)
// {
// dPlan = MworkPlans.FirstOrDefault(x => x.WorkPlanGroupID == workGroup.WorkPlanGroupID && x.WorkDate == EffectDate);
// dPlan.EmployeeID = employeeid;
// }
// }
// else
// {
// ActingResponsibilitySetup tempShift = temporaryShiftEmps.FirstOrDefault(x => x.EmployeeID == employeeid && x.GradeID == null);
// if (tempShift != null)
// {
// dPlan = MworkPlans.FirstOrDefault(x => x.WorkPlanGroupID == tempShift.WorkPlanGroupID && x.WorkDate == EffectDate);
// dPlan.EmployeeID = employeeid;
// }
// }
// return dPlan;
//}
//private void CalcullateWorkdayType(DailyAttnProcess attnProcess, EmployeeWorkPlanSetup oEmpWorkplan, WorkPlanGroup oEmpWPlanGroup, Employee emp, DateTime Attdate)
//{
// List<Shift> _shifts = Shift.Get();
// attnProcess.WorkDayType = EnumWorkPlanDayType.WorkingDay;
// AttnShiftWiseNationalHoliday attnShiftWiseHoliday = null;
// if (attnProcess.MonthlyWorkPlan != null)
// {
// attnProcess.WorkDayType = attnProcess.MonthlyWorkPlan.Type;
// // if (attnProcess.WorkDayType == EnumWorkPlanDayType.NationalHoliday) attnProcess.WorkDayType = EnumWorkPlanDayType.WorkingDay; // National holiday calaculated in bottom of function
// }
// else
// {
// if (oEmpWPlanGroup.WorkPlanGroupType != EnumWorkPlanGroupType.Triple_Shift_Auto)
// {
// if ((oEmpWPlanGroup.WeekEndOn != null && attnProcess.AttnDate.DayOfWeek == (DayOfWeek)oEmpWPlanGroup.WeekEndOn)
// || (oEmpWPlanGroup.WeekEndOn2 != null && attnProcess.AttnDate.DayOfWeek == (DayOfWeek)oEmpWPlanGroup.WeekEndOn2))
// {
// attnProcess.WorkDayType = EnumWorkPlanDayType.WeeklyHoliday;
// }
// }
// else
// {
// #region Counter clock
// if (oEmpWorkplan.WeekEndOn != null)
// {
// if (attnProcess.AttnDate.DayOfWeek == (DayOfWeek)oEmpWorkplan.WeekEndOn)
// attnProcess.WorkDayType = EnumWorkPlanDayType.WeeklyHoliday;
// }
// else
// {
// if (attnProcess.AttnDate >= oEmpWorkplan.StartDate)
// {
// int nShiftInterval = 7;
// TimeSpan st = attnProcess.AttnDate - oEmpWorkplan.StartDate;
// int dayCount = st.Days;
// int nCircleDay = (dayCount % nShiftInterval);
// if ((nShiftInterval - nCircleDay - 1) == 0 || (nShiftInterval - nCircleDay - 2) == 0)
// attnProcess.WorkDayType = EnumWorkPlanDayType.WeeklyHoliday;
// #region Do not Delete / 6 Day of Week
// //int nShiftInterval = 7;
// //TimeSpan st = attnProcess.AttnDate - oEmpWorkplan.StartDate;
// //int dayCount = st.Days;
// //int nCircleDay = (dayCount % nShiftInterval);
// //if ((nShiftInterval - nCircleDay - 1) == 0)
// //{
// // attnProcess.WorkDayType = EnumWorkPlanDayType.WeeklyHoliday;
// //}
// #endregion
// }
// }
// #endregion
// }
// }
// Employee employee = new Employee();
// employee = emp;
// ID workPlanGroupID = null;
// workPlanGroupID = oEmpWorkplan.WorkPlanGroupID;
// DateTime oLastDate = GlobalFunctions.LastDateOfMonth(Attdate);
// DateTime oFirstDate = GlobalFunctions.FirstDateOfMonth(Attdate);
// List<AttnNationalHoliday> _AttNHolidays = AttnNationalHoliday.GetByMonth(oFirstDate, oLastDate);
// AttnNationalHoliday holiday = AttnNationalHoliday.GetHoliday(_AttNHolidays, Attdate, employee.LocationID, workPlanGroupID);
// if (attnProcess.WorkDayType == EnumWorkPlanDayType.NationalHoliday && holiday == null)
// throw new Exception("Attandance date is defined Holiday in Monthly Calender, but not found in Holiday calender");
// if (holiday != null)
// {
// attnProcess.WorkDayType = EnumWorkPlanDayType.NationalHoliday;
// attnProcess.ReferenceID = holiday.ID;
// attnProcess.Holiday = holiday;
// attnProcess.Reason = holiday.ID.ToString();
// }
// if (attnProcess.WorkDayType == EnumWorkPlanDayType.WorkingDay && holiday != null && (holiday.HolidayType == HolidayType.Hartal || holiday.HolidayType == HolidayType.Other))
// {
// // attnProcess.WorkDayType = EnumWorkPlanDayType.HartalDay;
// if (holiday.AttnShiftWiseNationalHolidays.Count == 0)
// {
// attnProcess.ReferenceID = holiday.ID;
// attnProcess.Holiday = holiday;
// attnProcess.Reason = holiday.ID.ToString();
// }
// else
// {
// attnShiftWiseHoliday = holiday.AttnShiftWiseNationalHolidays.Where(o => o.WorkPlanGroupID == attnProcess.MonthlyWorkPlan.WorkPlanGroupID).FirstOrDefault();
// if (attnShiftWiseHoliday != null)
// {
// attnProcess.ReferenceID = holiday.ID;
// attnProcess.Holiday = holiday;
// attnProcess.Reason = holiday.ID.ToString();
// }
// }
// }
//}
}
}