//Work Times calculation controller public void ProcessDailyAttendance(Att_DailyAttendance _attData) { try { Att_DailyAttendance attendanceRecord = _attData; HR_Employee employee = attendanceRecord.HR_Employee; List <Att_ShiftChngedEmp> _shiftEmpCh = new List <Att_ShiftChngedEmp>(); _shiftEmpCh = context.Att_ShiftChngedEmp.ToList(); List <Att_OutPass> _OutPasses = new List <Att_OutPass>(); _OutPasses = context.Att_OutPass.Where(aa => aa.EmpID == _attData.EmpID && aa.Dated == _attData.AttDate.Value).ToList(); List <Att_Shift> shifts = new List <Att_Shift>(); shifts = context.Att_Shift.ToList(); List <Att_ShiftChanged> cshifts = new List <Att_ShiftChanged>(); cshifts = context.Att_ShiftChanged.ToList(); if (_attData.StatusLeave == true) { _attData.ShifMin = 0; } //If TimeIn and TimeOut are not null, then calculate other Atributes if (_attData.TimeIn != null && _attData.TimeOut != null) { Att_Shift _shift = ProcessSupportFunc.GetEmployeeChangedShift(_attData.HR_Employee, _shiftEmpCh.Where(aa => aa.EmpID == _attData.EmpID).ToList(), _attData.AttDate.Value, shifts); MyShift shift = ProcessSupportFunc.GetEmployeeShift(_shift); if (_attData.StatusHL == true) { _attData.ShifMin = ProcessSupportFunc.CalculateShiftMinutes(shift, _attData.AttDate.Value.DayOfWeek); _attData.ShifMin = (short)(_attData.ShifMin / 2); } //If TimeIn = TimeOut then calculate according to DutyCode if (_attData.TimeIn == _attData.TimeOut) { CalculateInEqualToOut(_attData); } else { if (_attData.DutyTime == new TimeSpan(0, 0, 0)) { //CalculateWorkMins.CalculateOpenShiftTimes(_attData, shift, _attData.HR_Employee.Att_OTPolicy); } Att_OutPass aop = new Att_OutPass(); if (_OutPasses.Where(aa => aa.Dated == _attData.AttDate && aa.EmpID == _attData.EmpID).Count() > 0) { aop = _OutPasses.First(aa => aa.Dated == _attData.AttDate && aa.EmpID == _attData.EmpID); } //CalculateWorkMins.CalculateShiftTimes(_attData, shift, _attData.HR_Employee.Att_OTPolicy, aop); } } else { CalculateInEqualToOut(_attData); } } catch (Exception ex) { } context.SaveChanges(); }
private void CreateAttendance(DateTime dateTime, List <Emp> _emp) { using (var ctx = new TAS2013Entities()) { List <Roster> _Roster = new List <Roster>(); _Roster = ctx.Rosters.Where(aa => aa.RosterDate == dateTime).ToList(); List <RosterDetail> _NewRoster = new List <RosterDetail>(); _NewRoster = ctx.RosterDetails.Where(aa => aa.RosterDate == dateTime).ToList(); List <LvData> _LvData = new List <LvData>(); _LvData = ctx.LvDatas.Where(aa => aa.AttDate == dateTime).ToList(); List <LvShort> _lvShort = new List <LvShort>(); _lvShort = ctx.LvShorts.Where(aa => aa.DutyDate == dateTime).ToList(); List <AttData> _AttData = ctx.AttDatas.Where(aa => aa.AttDate == dateTime).ToList(); List <Holiday> _Holidays = ctx.Holidays.ToList(); foreach (var emp in _emp) { string empDate = emp.EmpID + dateTime.ToString("yyMMdd"); if (_AttData.Where(aa => aa.EmpDate == empDate).Count() == 0) { try { ///////////////////////////////////////////////////// // Mark Everyone Absent while creating Attendance // ///////////////////////////////////////////////////// //Set DUTYCODE = D, StatusAB = true, and Remarks = [Absent] AttData att = new AttData(); att.AttDate = dateTime.Date; att.DutyCode = "D"; att.StatusAB = true; att.Remarks = "[Absent]"; if (emp.Shift != null) { att.DutyTime = emp.Shift.StartTime; } else { att.DutyTime = new TimeSpan(07, 45, 00); } att.EmpID = emp.EmpID; att.EmpNo = emp.EmpNo; att.EmpDate = emp.EmpID + dateTime.ToString("yyMMdd"); att.ShifMin = ProcessSupportFunc.CalculateShiftMinutes(emp.Shift, dateTime.DayOfWeek); ////////////////////////// // Check for Rest Day // //////////////////////// //Set DutyCode = R, StatusAB=false, StatusDO = true, and Remarks=[DO] //Check for 1st Day Off of Shift if (emp.Shift.DaysName.Name == ProcessSupportFunc.ReturnDayOfWeek(dateTime.DayOfWeek)) { att.DutyCode = "R"; att.StatusAB = false; att.StatusDO = true; att.Remarks = "[DO]"; } //Check for 2nd Day Off of shift if (emp.Shift.DaysName1.Name == ProcessSupportFunc.ReturnDayOfWeek(dateTime.DayOfWeek)) { att.DutyCode = "R"; att.StatusAB = false; att.StatusDO = true; att.Remarks = "[DO]"; } ////////////////////////// // Check for GZ Day // //////////////////////// //Set DutyCode = R, StatusAB=false, StatusGZ = true, and Remarks=[GZ] if (emp.Shift.GZDays == true) { foreach (var holiday in _Holidays) { if (_Holidays.Where(hol => hol.HolDate.Month == att.AttDate.Value.Month && hol.HolDate.Day == att.AttDate.Value.Day).Count() > 0) { att.DutyCode = "G"; att.StatusAB = false; att.StatusGZ = true; att.Remarks = "[GZ]"; att.ShifMin = 0; } } } ////////////////////////// // Check for Roster // //////////////////////// //If Roster DutyCode is Rest then change the StatusAB and StatusDO foreach (var roster in _Roster.Where(aa => aa.EmpDate == att.EmpDate)) { att.DutyCode = roster.DutyCode.Trim(); if (att.DutyCode == "R") { att.StatusAB = false; att.StatusDO = true; att.DutyCode = "R"; att.Remarks = "[DO]"; } att.ShifMin = roster.WorkMin; att.DutyTime = roster.DutyTime; } ////New Roster string empCdate = "Emp" + emp.EmpID.ToString() + dateTime.ToString("yyMMdd"); string sectionCdate = "Section" + emp.SecID.ToString() + dateTime.ToString("yyMMdd"); string crewCdate = "Crew" + emp.CrewID.ToString() + dateTime.ToString("yyMMdd"); string shiftCdate = "Shift" + emp.ShiftID.ToString() + dateTime.ToString("yyMMdd"); if (_NewRoster.Where(aa => aa.CriteriaValueDate == empCdate).Count() > 0) { var roster = _NewRoster.FirstOrDefault(aa => aa.CriteriaValueDate == empCdate); if (roster.WorkMin == 0) { att.StatusAB = false; att.StatusDO = true; att.Remarks = "[DO]"; att.DutyCode = "R"; } else { att.ShifMin = roster.WorkMin; att.DutyCode = "D"; att.DutyTime = roster.DutyTime; } } else if (_NewRoster.Where(aa => aa.CriteriaValueDate == sectionCdate).Count() > 0) { var roster = _NewRoster.FirstOrDefault(aa => aa.CriteriaValueDate == sectionCdate); if (roster.WorkMin == 0) { att.StatusAB = false; att.StatusDO = true; att.Remarks = "[DO]"; att.DutyCode = "R"; } else { att.ShifMin = roster.WorkMin; att.DutyCode = "D"; att.DutyTime = roster.DutyTime; } } else if (_NewRoster.Where(aa => aa.CriteriaValueDate == crewCdate).Count() > 0) { var roster = _NewRoster.FirstOrDefault(aa => aa.CriteriaValueDate == crewCdate); if (roster.WorkMin == 0) { att.StatusAB = false; att.StatusDO = true; att.Remarks = "[DO]"; att.DutyCode = "R"; } else { att.ShifMin = roster.WorkMin; att.DutyCode = "D"; att.DutyTime = roster.DutyTime; } } else if (_NewRoster.Where(aa => aa.CriteriaValueDate == shiftCdate).Count() > 0) { var roster = _NewRoster.FirstOrDefault(aa => aa.CriteriaValueDate == shiftCdate); if (roster.WorkMin == 0) { att.StatusAB = false; att.StatusDO = true; att.Remarks = "[DO]"; att.DutyCode = "R"; } else { att.ShifMin = roster.WorkMin; att.DutyCode = "D"; att.DutyTime = roster.DutyTime; } } //////////////////////////// //TODO Check for Job Card// ////////////////////////// //////////////////////////// // Check for Short Leave// ////////////////////////// foreach (var sLeave in _lvShort.Where(aa => aa.EmpDate == att.EmpDate)) { if (_lvShort.Where(lv => lv.EmpDate == att.EmpDate).Count() > 0) { att.StatusSL = true; att.StatusAB = null; att.DutyCode = "L"; att.Remarks = "[Short Leave]"; } } ////////////////////////// // Check for Leave // //////////////////////// //Set DutyCode = R, StatusAB=false, StatusGZ = true, and Remarks=[GZ] foreach (var Leave in _LvData) { var _Leave = _LvData.Where(lv => lv.EmpDate == att.EmpDate && lv.HalfLeave != true); if (_Leave.Count() > 0) { att.StatusLeave = true; att.StatusAB = false; att.DutyCode = "L"; att.StatusDO = false; if (Leave.LvCode == "A") { att.Remarks = "[Casual Leave]"; } else if (Leave.LvCode == "B") { att.Remarks = "[Annual Leave]"; } else if (Leave.LvCode == "C") { att.Remarks = "[Sick Leave]"; } else { att.Remarks = "[Leave]"; } } else { att.StatusLeave = false; } } ///////////////////////// //Check for Half Leave/// //////////////////////// var _HalfLeave = _LvData.Where(lv => lv.EmpDate == att.EmpDate && lv.HalfLeave == true); if (_HalfLeave.Count() > 0) { att.StatusLeave = true; att.StatusAB = false; att.DutyCode = "L"; att.StatusDO = false; att.StatusHL = true; if (_HalfLeave.FirstOrDefault().LvCode == "A") { att.Remarks = "[H-CL]"; } else if (_HalfLeave.FirstOrDefault().LvCode == "B") { att.Remarks = "[S-AL]"; } else if (_HalfLeave.FirstOrDefault().LvCode == "C") { att.Remarks = "[H-SL]"; } else { att.Remarks = "[Half Leave]"; } } else { att.StatusLeave = false; att.StatusHL = false; } ctx.AttDatas.AddObject(att); ctx.SaveChanges(); } catch (Exception ex) { _myHelperClass.WriteToLogFile("Error In Creating Attendance of Employee: " + emp.EmpNo); } } } } _myHelperClass.WriteToLogFile("Creating Attendance of Date: " + dateTime.ToString()); }
public ActionResult SaveEditEntries(AttEditSingleEmployee Model) { try { bool edited = false; int _UserID = Convert.ToInt32(Session["LoggedUserID"].ToString()); int empID = Convert.ToInt32(Request.Form["empID"].ToString()); DateTime dtFrom = Convert.ToDateTime(Request.Form["dateFrom"].ToString()); DateTime dtTo = Convert.ToDateTime(Request.Form["dateTo"].ToString()); List <Att_DailyAttendance> oldAttendance = new List <Att_DailyAttendance>(); oldAttendance = db.Att_DailyAttendance.Where(aa => aa.EmpID == empID && aa.AttDate >= dtFrom && aa.AttDate <= dtTo).ToList(); for (int i = 0; i < oldAttendance.Count; i++) { string empDate = Request.Form["EmpDate" + i.ToString()].ToString(); Att_DailyAttendance att = oldAttendance.First(aa => aa.EmpDate == empDate); string DutyCode = Request.Form["DutyCode" + i.ToString()].ToString(); string DutyTime = Request.Form["DutyTime" + i.ToString()].ToString(); string ShiftTime = Request.Form["ShiftTime" + i.ToString()].ToString(); //string TimeIn = Request.Form["TimeIn" + i.ToString()].ToString(); //string TimeOut = Request.Form["TimeOut" + i.ToString()].ToString(); string TIn1 = Request.Form["TimeIn1" + i.ToString()].ToString(); string TOut1 = Request.Form["TimeOut1" + i.ToString()].ToString(); string TIn2 = Request.Form["TimeIn2" + i.ToString()].ToString(); string TOut2 = Request.Form["TimeOut2" + i.ToString()].ToString(); string TIn3 = Request.Form["TimeIn3" + i.ToString()].ToString(); string TOut3 = Request.Form["TimeOut3" + i.ToString()].ToString(); string Remarks = Request.Form["Remarks" + i.ToString()].ToString(); EditAttendanceList editlist = EditAttManager.GetEditAttendanceList(empDate, DutyCode, DutyTime, ShiftTime, TIn1, TOut1, TIn2, TOut2, TIn3, TOut3, Remarks); if (EditAttManager.CheckRecordIsEdited(att, editlist)) { edited = true; DateTime _NewTimeIn = new DateTime(); DateTime _NewTimeOut = new DateTime(); DateTime?_NewTimeIn1; DateTime?_NewTimeOut1; DateTime?_NewTimeIn2; DateTime?_NewTimeOut2; DateTime?_NewTimeIn3; DateTime?_NewTimeOut3; _NewTimeIn = (DateTime)(att.AttDate + editlist.TimeIn); if (editlist.TimeIn != null && editlist.TimeOut != null) { if (editlist.TimeIn1 != null) { _NewTimeIn1 = (DateTime)(att.AttDate + editlist.TimeIn1); } else { _NewTimeIn1 = null; } if (editlist.TimeIn2 != null) { _NewTimeIn2 = (DateTime)(att.AttDate + editlist.TimeIn2); } else { _NewTimeIn2 = null; } if (editlist.TimeIn3 != null) { _NewTimeIn3 = (DateTime)(att.AttDate + editlist.TimeIn3); } else { _NewTimeIn3 = null; } if (editlist.TimeOut1 != null) { _NewTimeOut1 = (DateTime)(att.AttDate + editlist.TimeOut1); } else { _NewTimeOut1 = null; } if (editlist.TimeOut2 != null) { _NewTimeOut2 = (DateTime)(att.AttDate + editlist.TimeOut2); } else { _NewTimeOut2 = null; } if (editlist.TimeOut3 != null) { _NewTimeOut3 = (DateTime)(att.AttDate + editlist.TimeOut3); } else { _NewTimeOut3 = null; } if (editlist.TimeOut < editlist.TimeIn) { _NewTimeOut = att.AttDate.Value.AddDays(1) + editlist.TimeOut; } else { _NewTimeOut = (DateTime)(att.AttDate + editlist.TimeOut); } if (editlist.TimeOut1 < editlist.TimeIn1) { _NewTimeOut1 = att.AttDate.Value.AddDays(1) + editlist.TimeOut1; } if (editlist.TimeOut2 < editlist.TimeIn2) { _NewTimeOut2 = att.AttDate.Value.AddDays(1) + editlist.TimeOut2; } if (editlist.TimeOut3 < editlist.TimeIn3) { _NewTimeOut3 = att.AttDate.Value.AddDays(1) + editlist.TimeOut3; } ManualAttendanceProcess _pma = new ManualAttendanceProcess(editlist.EmpDate, "", false, _NewTimeIn, _NewTimeOut, editlist.DutyCode, _UserID, editlist.DutyTime, "", (short)editlist.ShiftTime.TotalMinutes, _NewTimeIn1, _NewTimeOut1, _NewTimeIn2, _NewTimeOut2, _NewTimeIn3, _NewTimeOut3, Remarks); } else { if (editlist.TimeIn.TotalMinutes > 0) { _NewTimeIn = (DateTime)(att.AttDate + editlist.TimeIn); } if (editlist.TimeOut.TotalMinutes > 0) { _NewTimeOut = (DateTime)(att.AttDate + editlist.TimeOut); } ManualAttendanceProcess _pma = new ManualAttendanceProcess(editlist.EmpDate, "", false, _NewTimeIn, _NewTimeOut, editlist.DutyCode, _UserID, editlist.DutyTime, "", (short)editlist.ShiftTime.TotalMinutes); } } else { } } if (edited == true) { DateTime dt = oldAttendance.OrderByDescending(aa => aa.AttDate).FirstOrDefault().AttDate.Value; //Process Monthly if date is greater than 20 from start ProcessSupportFunc.ProcessAttendanceRequestMonthly(new DateTime(dt.Year, dt.Month, 1), DateTime.Today, oldAttendance.FirstOrDefault().EmpID.ToString()); } using (var ctx = new HRMEntities()) { List <Att_DailyAttendance> dailyAttendance = new List <Att_DailyAttendance>(); dailyAttendance = ctx.Att_DailyAttendance.Where(aa => aa.EmpID == empID && aa.AttDate >= dtFrom && aa.AttDate <= dtTo).ToList(); return(View("EditMultipleEntries", EditAttManager.GetAttendanceAttributes(dailyAttendance, dtFrom, dtTo))); } } catch (Exception) { throw; } }
public void CreateAttendance(DateTime dateTime) { using (var ctx = new TAS2013Entities()) { List <Emp> _emp = new List <Emp>(); _emp = ctx.Emps.Where(aa => aa.Status == true).ToList(); List <Roster> _Roster = new List <Roster>(); _Roster = context.Rosters.Where(aa => aa.RosterDate == dateTime).ToList(); List <RosterDetail> _NewRoster = new List <RosterDetail>(); _NewRoster = context.RosterDetails.Where(aa => aa.RosterDate == dateTime).ToList(); List <LvData> _LvData = new List <LvData>(); _LvData = context.LvDatas.Where(aa => aa.AttDate == dateTime).ToList(); List <LvShort> _lvShort = new List <LvShort>(); _lvShort = context.LvShorts.Where(aa => aa.DutyDate == dateTime).ToList(); List <AttData> _AttData = context.AttDatas.Where(aa => aa.AttDate == dateTime).ToList(); _myHelperClass.WriteToLogFile("**********************Attendance Creating Started: Total Employees are:" + _emp.Count + "*********************"); List <Remark> remarks = new List <Remark>(); remarks = ctx.Remarks.ToList(); foreach (var emp in _emp) { string empDate = emp.EmpID + dateTime.ToString("yyMMdd"); if (_AttData.Where(aa => aa.EmpDate == empDate).Count() == 0) { try { ///////////////////////////////////////////////////// // Mark Everyone Absent while creating Attendance // ///////////////////////////////////////////////////// //Set DUTYCODE = D, StatusAB = true, and Remarks = [Absent] AttData att = new AttData(); att.AttDate = dateTime.Date; att.DutyCode = "D"; att.StatusAB = true; att.Remarks = "[Absent]"; if (emp.Shift != null) { att.DutyTime = emp.Shift.StartTime; } else { att.DutyTime = new TimeSpan(07, 45, 00); } att.EmpID = emp.EmpID; att.EmpNo = emp.EmpNo; att.EmpDate = emp.EmpID + dateTime.ToString("yyMMdd"); att.ShifMin = ProcessSupportFunc.CalculateShiftMinutes(emp.Shift, dateTime.DayOfWeek); ////////////////////////// // Check for Rest Day // //////////////////////// //Set DutyCode = R, StatusAB=false, StatusDO = true, and Remarks=[DO] //Check for 1st Day Off of Shift if (emp.Shift.DaysName.Name == ProcessSupportFunc.ReturnDayOfWeek(dateTime.DayOfWeek)) { att.DutyCode = "R"; att.StatusAB = false; att.StatusDO = true; att.Remarks = "[DO]"; } //Check for 2nd Day Off of shift if (emp.Shift.DaysName1.Name == ProcessSupportFunc.ReturnDayOfWeek(dateTime.DayOfWeek)) { att.DutyCode = "R"; att.StatusAB = false; att.StatusDO = true; att.Remarks = "[DO]"; } ////////////////////////// // Check for Roster // //////////////////////// //If Roster DutyCode is Rest then change the StatusAB and StatusDO foreach (var roster in _Roster.Where(aa => aa.EmpDate == att.EmpDate)) { att.DutyCode = roster.DutyCode.Trim(); if (att.DutyCode == "R") { att.StatusAB = false; att.StatusDO = true; att.DutyCode = "R"; att.Remarks = "[DO]"; } att.ShifMin = roster.WorkMin; att.DutyTime = roster.DutyTime; } ////New Roster string empCdate = "Emp" + emp.EmpID.ToString() + dateTime.ToString("yyMMdd"); string sectionCdate = "Section" + emp.SecID.ToString() + dateTime.ToString("yyMMdd"); string crewCdate = "Crew" + emp.CrewID.ToString() + dateTime.ToString("yyMMdd"); string shiftCdate = "Shift" + emp.ShiftID.ToString() + dateTime.ToString("yyMMdd"); if (_NewRoster.Where(aa => aa.CriteriaValueDate == empCdate).Count() > 0) { var roster = _NewRoster.FirstOrDefault(aa => aa.CriteriaValueDate == empCdate); if (roster.WorkMin == 0) { att.StatusAB = false; att.StatusDO = true; att.Remarks = "[DO]"; att.DutyCode = "R"; att.ShifMin = 0; } else { att.ShifMin = roster.WorkMin; att.DutyCode = "D"; att.DutyTime = roster.DutyTime; } } else if (_NewRoster.Where(aa => aa.CriteriaValueDate == sectionCdate).Count() > 0) { var roster = _NewRoster.FirstOrDefault(aa => aa.CriteriaValueDate == sectionCdate); if (roster.WorkMin == 0) { att.StatusAB = false; att.StatusDO = true; att.Remarks = "[DO]"; att.DutyCode = "R"; att.ShifMin = 0; } else { att.ShifMin = roster.WorkMin; att.DutyCode = "D"; att.DutyTime = roster.DutyTime; } } else if (_NewRoster.Where(aa => aa.CriteriaValueDate == crewCdate).Count() > 0) { var roster = _NewRoster.FirstOrDefault(aa => aa.CriteriaValueDate == crewCdate); if (roster.WorkMin == 0) { att.StatusAB = false; att.StatusDO = true; att.Remarks = "[DO]"; att.DutyCode = "R"; att.ShifMin = 0; } else { att.ShifMin = roster.WorkMin; att.DutyCode = "D"; att.DutyTime = roster.DutyTime; } } else if (_NewRoster.Where(aa => aa.CriteriaValueDate == shiftCdate).Count() > 0) { var roster = _NewRoster.FirstOrDefault(aa => aa.CriteriaValueDate == shiftCdate); if (roster.WorkMin == 0) { att.StatusAB = false; att.StatusDO = true; att.Remarks = "[DO]"; att.DutyCode = "R"; att.ShifMin = 0; } else { att.ShifMin = roster.WorkMin; att.DutyCode = "D"; att.DutyTime = roster.DutyTime; } } ////////////////////////// // Check for GZ Day // //////////////////////// //Set DutyCode = R, StatusAB=false, StatusGZ = true, and Remarks=[GZ] if (emp.Shift.GZDays == true) { foreach (var holiday in context.Holidays) { if (context.Holidays.Where(hol => hol.HolDate.Month == att.AttDate.Value.Month && hol.HolDate.Day == att.AttDate.Value.Day).Count() > 0) { att.DutyCode = "G"; att.StatusAB = false; att.StatusGZ = true; att.Remarks = "[GZ]"; att.ShifMin = 0; } } } //////////////////////////// // Check for Short Leave// ////////////////////////// foreach (var sLeave in _lvShort.Where(aa => aa.EmpDate == att.EmpDate)) { if (_lvShort.Where(lv => lv.EmpDate == att.EmpDate).Count() > 0) { att.StatusSL = true; att.StatusAB = null; att.DutyCode = "L"; att.Remarks = "[Short Leave]"; } } ////////////////////////// // Check for Leave // //////////////////////// //Set DutyCode = R, StatusAB=false, StatusGZ = true, and Remarks=[GZ] foreach (var Leave in _LvData) { var _Leave = _LvData.Where(lv => lv.EmpDate == att.EmpDate && lv.HalfLeave != true); if (_Leave.Count() > 0) { att.StatusLeave = true; att.StatusAB = false; att.DutyCode = "L"; att.StatusDO = false; if (Leave.LvCode == "A") { att.Remarks = "[CL]"; } else if (Leave.LvCode == "B") { att.Remarks = "[AL]"; } else if (Leave.LvCode == "C") { att.Remarks = "[SL]"; } else { att.Remarks = "[" + _Leave.FirstOrDefault().LvType.LvDesc + "]"; } } } ///////////////////////// //Check for Half Leave/// //////////////////////// var _HalfLeave = _LvData.Where(lv => lv.EmpDate == att.EmpDate && lv.HalfLeave == true); if (_HalfLeave.Count() > 0) { att.StatusLeave = true; att.StatusAB = false; att.DutyCode = "L"; att.StatusHL = true; att.StatusDO = false; if (_HalfLeave.FirstOrDefault().LvCode == "A") { att.Remarks = "[H-CL]"; } else if (_HalfLeave.FirstOrDefault().LvCode == "B") { att.Remarks = "[S-AL]"; } else if (_HalfLeave.FirstOrDefault().LvCode == "C") { att.Remarks = "[H-SL]"; } else { att.Remarks = "[Half Leave]"; } } ctx.AttDatas.AddObject(att); ctx.SaveChanges(); } catch (Exception ex) { _myHelperClass.WriteToLogFile("-------Error In Creating Attendance of Employee: " + emp.EmpNo + " ------" + ex.InnerException.Message); } } } _myHelperClass.WriteToLogFile("****************Creating Attendance Completed*****************"); AttProcess attp = new AttProcess(); attp.ProcessDate = dateTime; ctx.AttProcesses.AddObject(attp); ctx.SaveChanges(); //////////////////////////// //Check for Job Card// ////////////////////////// try { ProcessJobCard jc = new ProcessJobCard(); jc.ProcessJobCards(dateTime); } catch (Exception ex) { _myHelperClass.WriteToLogFile("Error at Create Function Process Job Card " + dateTime.ToString()); } ctx.Dispose(); } // reprocess attendance from last 5 days CreateMissingAttendance ca = new CreateMissingAttendance(); ca.CreatemissingAttendance(dateTime.AddDays(-7), dateTime); _myHelperClass.WriteToLogFile("Creating Attendance of Date: " + dateTime.ToString()); }
public static void CalculateShiftTimes(Att_DailyAttendance attendanceRecord, MyShift shift, Att_OTPolicy otPolicy, Att_OutPass op) { try { attendanceRecord.TimeIn = attendanceRecord.TimeIn.Value.Trim(TimeSpan.TicksPerMinute); attendanceRecord.TimeOut = attendanceRecord.TimeOut.Value.Trim(TimeSpan.TicksPerMinute); // Break start and End Times DateTime ts = attendanceRecord.TimeIn.Value.Date + new TimeSpan(13, 0, 0); DateTime te = attendanceRecord.TimeIn.Value.Date + new TimeSpan(14, 0, 0); //Work Mins TimeSpan mins = attendanceRecord.TimeOut.Value.TimeOfDay - attendanceRecord.TimeOut.Value.TimeOfDay; double _workHours = mins.TotalHours; attendanceRecord.WorkMin = (short)(mins.TotalMinutes); if (attendanceRecord.WorkMin > 0) { if (attendanceRecord.Remarks != null) { attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[Absent]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[Manual]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[LI]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[M]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[N-OT]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[LO]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[LO]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[EI]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[EO]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[R-OT]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[G-OT]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[HA]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[DO]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[GZ]", ""); } else { attendanceRecord.Remarks = ""; } if (attendanceRecord.StatusMN == true) { attendanceRecord.Remarks = "[M]" + attendanceRecord.Remarks; } //Check if GZ holiday then place all WorkMin in GZOTMin if (attendanceRecord.StatusGZ == true && attendanceRecord.DutyCode == "G") { #region -- GZ Calculation-- if (otPolicy.CalculateGZOT == true) { if ((_workHours >= otPolicy.PerDayGOTStartLimitHour) && (_workHours <= otPolicy.PerDayGOTEndLimitHour)) { int hour = (int)(mins.TotalMinutes / 60); int min = hour * 60; int remainingmin = (int)mins.TotalMinutes - min; if (remainingmin >= otPolicy.MinMinutesForOneHour) { attendanceRecord.GZOTMin = (short)((hour + 1) * 60); } else { attendanceRecord.GZOTMin = (short)((hour) * 60); } } else { if (_workHours < otPolicy.PerDayGOTStartLimitHour) { attendanceRecord.GZOTMin = 0; } else { int policyOTLimitMin = (int)(otPolicy.PerDayGOTEndLimitHour * 60.0); attendanceRecord.GZOTMin = (short)policyOTLimitMin; } } } else { attendanceRecord.WorkMin = 0; attendanceRecord.ExtraMin = (short)mins.TotalMinutes; } if (attendanceRecord.GZOTMin > 0) { attendanceRecord.StatusGZOT = true; attendanceRecord.Remarks = attendanceRecord.Remarks + "[G-OT]"; } #endregion } //if Rest day then place all WorkMin in OTMin else if (attendanceRecord.StatusDO == true && attendanceRecord.DutyCode == "R") { #region -- Rest Calculation -- if (otPolicy.CalculateRestOT == true) { if ((_workHours >= otPolicy.PerDayROTStartLimitHour) && (_workHours <= otPolicy.PerDayROTEndLimitHour)) { if (mins.TotalMinutes < otPolicy.MinMinutesForOneHour) { attendanceRecord.ROTMin = 0; } else if (attendanceRecord.ROTMin >= otPolicy.MinMinutesForOneHour && attendanceRecord.ROTMin <= 61) { attendanceRecord.ROTMin = 60; } else { int hour = (int)(mins.TotalMinutes / 60); int min = hour * 60; int remainingmin = (int)mins.TotalMinutes - min; if (remainingmin >= otPolicy.MinMinutesForOneHour) { attendanceRecord.ROTMin = (short)((hour + 1) * 60); } else { attendanceRecord.ROTMin = (short)((hour) * 60); } } } else { if (_workHours < otPolicy.PerDayROTStartLimitHour) { attendanceRecord.ROTMin = 0; } else { int policyOTLimitMin = (int)(otPolicy.PerDayROTEndLimitHour * 60.0); attendanceRecord.ROTMin = (short)policyOTLimitMin; } } } else { attendanceRecord.WorkMin = 0; attendanceRecord.ExtraMin = (short)mins.TotalMinutes; } if (attendanceRecord.ROTMin > 0) { attendanceRecord.StatusROT = true; attendanceRecord.Remarks = attendanceRecord.Remarks + "[R-OT]"; } #endregion } else { attendanceRecord.StatusAB = false; attendanceRecord.StatusP = true; attendanceRecord.ExtraMin = 0; #region -- Margins-- //Calculate Late IN, Compare margin with Shift Late In if (attendanceRecord.TimeIn.Value.TimeOfDay > attendanceRecord.DutyTime) { TimeSpan lateMinsSpan = (TimeSpan)(attendanceRecord.TimeIn.Value.TimeOfDay - attendanceRecord.DutyTime); if (lateMinsSpan.Minutes > shift.LateIn) { attendanceRecord.LateIn = (short)lateMinsSpan.TotalMinutes; attendanceRecord.StatusLI = true; attendanceRecord.EarlyIn = null; attendanceRecord.Remarks = attendanceRecord.Remarks + "[LI]"; } else { attendanceRecord.StatusLI = null; attendanceRecord.LateIn = null; attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[LI]", ""); } } else { attendanceRecord.StatusLI = null; attendanceRecord.LateIn = null; attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[LI]", ""); } //Calculate Early In, Compare margin with Shift Early In if (attendanceRecord.TimeIn.Value.TimeOfDay < attendanceRecord.DutyTime) { TimeSpan EarlyInMinsSpan = (TimeSpan)(attendanceRecord.DutyTime - attendanceRecord.TimeIn.Value.TimeOfDay); if (EarlyInMinsSpan.TotalMinutes > shift.EarlyIn) { attendanceRecord.EarlyIn = (short)EarlyInMinsSpan.TotalMinutes; attendanceRecord.StatusEI = true; attendanceRecord.LateIn = null; attendanceRecord.Remarks = attendanceRecord.Remarks + "[EI]"; } else { attendanceRecord.StatusEI = null; attendanceRecord.EarlyIn = null; attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[EI]", ""); } } else { attendanceRecord.StatusEI = null; attendanceRecord.EarlyIn = null; attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[EI]", ""); } // CalculateShiftEndTime = ShiftStart + DutyHours DateTime shiftEnd = ProcessSupportFunc.CalculateShiftEndTimeWithAttData(attendanceRecord.AttDate.Value, attendanceRecord.DutyTime.Value, (short)(attendanceRecord.ShifMin + attendanceRecord.BreakMin)); //Calculate Early Out, Compare margin with Shift Early Out if (attendanceRecord.TimeOut < shiftEnd) { TimeSpan EarlyOutMinsSpan = (TimeSpan)(shiftEnd - attendanceRecord.TimeOut); if (EarlyOutMinsSpan.TotalMinutes > shift.EarlyOut) { attendanceRecord.EarlyOut = (short)EarlyOutMinsSpan.TotalMinutes; attendanceRecord.StatusEO = true; attendanceRecord.LateOut = null; attendanceRecord.Remarks = attendanceRecord.Remarks + "[EO]"; } else { attendanceRecord.StatusEO = null; attendanceRecord.EarlyOut = null; attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[EO]", ""); } } else { attendanceRecord.StatusEO = null; attendanceRecord.EarlyOut = null; attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[EO]", ""); } //Calculate Late Out, Compare margin with Shift Late Out if (attendanceRecord.TimeOut > shiftEnd) { TimeSpan LateOutMinsSpan = (TimeSpan)(attendanceRecord.TimeOut - shiftEnd); if (LateOutMinsSpan.TotalMinutes > shift.LateOut) { attendanceRecord.LateOut = (short)LateOutMinsSpan.TotalMinutes; // Late Out cannot have an early out, In case of poll at multiple times before and after shiftend attendanceRecord.EarlyOut = null; attendanceRecord.StatusLO = true; attendanceRecord.Remarks = attendanceRecord.Remarks + "[LO]"; } else { attendanceRecord.StatusLO = null; attendanceRecord.LateOut = null; attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[LO]", ""); } } else { attendanceRecord.StatusLO = null; attendanceRecord.LateOut = null; attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[LO]", ""); } #endregion #region -- Shift Things //Subtract EarlyIn and LateOut from Work Minutes if (shift.SubtractEIFromWork == true) { if (attendanceRecord.EarlyIn != null && attendanceRecord.EarlyIn > shift.EarlyIn) { attendanceRecord.WorkMin = (short)(attendanceRecord.WorkMin - attendanceRecord.EarlyIn); } } if (shift.SubtractLOFromWork == true) { if (attendanceRecord.LateOut != null && attendanceRecord.LateOut > shift.LateOut) { attendanceRecord.WorkMin = (short)(attendanceRecord.WorkMin - attendanceRecord.LateOut); } } // Deduct break if (attendanceRecord.DutyCode == "D") { //Normal if (attendanceRecord.TimeIn != null && attendanceRecord.TimeOut != null) { if (attendanceRecord.TimeIn < ts && attendanceRecord.TimeOut > te) { attendanceRecord.WorkMin = (short)(attendanceRecord.WorkMin - attendanceRecord.BreakMin); } else { if (attendanceRecord.TotalShortMin > 0) { attendanceRecord.TotalShortMin = (short)(attendanceRecord.TotalShortMin + attendanceRecord.BreakMin); } } } } #endregion #region -- OT Calculation -- //if (otPolicy.CalculateNOT == true && attendanceRecord.LateOut > 0) // attendanceRecord.NOTMin = (short)attendanceRecord.LateOut; //else if (otPolicy.CalculateNOT == false) //{ // if (attendanceRecord.LateOut > 0) // attendanceRecord.ExtraMin = (short)(attendanceRecord.LateOut + attendanceRecord.ExtraMin); // if (attendanceRecord.EarlyIn > 0) // attendanceRecord.ExtraMin = (short)(attendanceRecord.EarlyIn + attendanceRecord.ExtraMin); //} short totalOTMins = 0; if (otPolicy.CalculateNOT == true) { if (otPolicy.AddEIinOT == true) { if (attendanceRecord.EarlyIn > 0) { totalOTMins = (short)attendanceRecord.EarlyIn; } if (attendanceRecord.LateOut > 0) { totalOTMins = (short)(attendanceRecord.LateOut + totalOTMins); } } else { totalOTMins = (short)attendanceRecord.LateOut; } } else { //attendanceRecord.WorkMin = (short)mins.TotalMinutes; } // Check OT with Work Minutes if (totalOTMins > 0) { //if (attendanceRecord.WorkMin < attendanceRecord.ShifMin) //{ // totalOTMins = (short)(totalOTMins - (short)(attendanceRecord.ShifMin - attendanceRecord.WorkMin)); //} float otHour = (float)(totalOTMins / 60.0); if (otHour < otPolicy.PerDayOTStartLimitHour) { attendanceRecord.NOTMin = 0; } else if (otHour >= otPolicy.PerDayOTStartLimitHour && otHour <= otPolicy.PerDayOTStartLimitHour) { if (otPolicy.MinMinutesForOneHour == 0) { attendanceRecord.NOTMin = (short)totalOTMins; } else { if (totalOTMins < otPolicy.MinMinutesForOneHour) { attendanceRecord.NOTMin = 0; } else if (totalOTMins >= otPolicy.MinMinutesForOneHour && totalOTMins <= 61) { attendanceRecord.NOTMin = 60; } else { if (totalOTMins > 0) { int hour = (int)(totalOTMins / 60); int min = hour * 60; int remainingmin = (int)totalOTMins - min; if (remainingmin >= otPolicy.MinMinutesForOneHour) { attendanceRecord.NOTMin = (short)((hour + 1) * 60); } else { attendanceRecord.NOTMin = (short)min; } } } } } else if (otHour >= otPolicy.PerDayOTEndLimitHour) { int policyOTLimitMin = (int)(otPolicy.PerDayOTEndLimitHour * 60.0); attendanceRecord.NOTMin = (short)policyOTLimitMin; } if (attendanceRecord.NOTMin > 0) { attendanceRecord.StatusOT = true; attendanceRecord.Remarks = attendanceRecord.Remarks + "[N-OT]"; } } else { } #endregion #region --- Half Absent and Short Time --- if (attendanceRecord.StatusHL == true) { attendanceRecord.TotalShortMin = 0; attendanceRecord.EarlyOut = 0; attendanceRecord.LateIn = 0; attendanceRecord.LateOut = 0; attendanceRecord.NOTMin = 0; attendanceRecord.ExtraMin = 0; attendanceRecord.TotalShortMin = 0; attendanceRecord.StatusLI = false; attendanceRecord.StatusEO = false; attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[LI]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[EO]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[N-OT]", ""); attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[LO]", ""); attendanceRecord.PDays = 0.5; attendanceRecord.AbDays = 0; attendanceRecord.LeaveDays = 0.5; // update if lateout } else { attendanceRecord.PDays = 1; attendanceRecord.AbDays = 0; attendanceRecord.LeaveDays = 0; short totalshortMin = 0; if (attendanceRecord.LateIn > 0) { totalshortMin = (short)attendanceRecord.LateIn; } if (attendanceRecord.EarlyOut > 0) { totalshortMin = (short)(totalshortMin + attendanceRecord.EarlyOut); } attendanceRecord.TotalShortMin = totalshortMin; int marginForST = 10; if (shift.LateIn > 0) { marginForST = shift.LateIn; } if (attendanceRecord.WorkMin < (attendanceRecord.ShifMin - marginForST)) { attendanceRecord.TotalShortMin = (Int16)(attendanceRecord.TotalShortMin + (attendanceRecord.ShifMin - (attendanceRecord.WorkMin + totalshortMin))); } if (otPolicy.CalculateNOT == true) { if (attendanceRecord.NOTMin > 0) { //if (attendanceRecord.TotalShortMin > 0) // attendanceRecord.ApprovedOT = (short)(attendanceRecord.NOTMin - attendanceRecord.TotalShortMin); } } } #endregion #region -- Mark Absent -- //Mark Absent if less than 4 hours if (attendanceRecord.AttDate.Value.DayOfWeek != DayOfWeek.Friday && attendanceRecord.StatusDO != true && attendanceRecord.StatusGZ != true) { if (attendanceRecord.StatusHL != true) { short MinShiftMin = (short)shift.MinHrs; if (attendanceRecord.WorkMin < MinShiftMin) { attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[Absent]", ""); attendanceRecord.StatusAB = true; attendanceRecord.StatusP = false; attendanceRecord.PDays = 0; attendanceRecord.AbDays = 1; attendanceRecord.LeaveDays = 0; attendanceRecord.Remarks = attendanceRecord.Remarks + "[Absent]"; } else { attendanceRecord.StatusAB = false; attendanceRecord.StatusP = true; if (attendanceRecord.StatusHL == true) { attendanceRecord.PDays = 0.5; attendanceRecord.AbDays = 0; attendanceRecord.LeaveDays = 0.5; } else { attendanceRecord.PDays = 1; attendanceRecord.AbDays = 0; attendanceRecord.LeaveDays = 0; } attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[Absent]", ""); } } } #endregion //RoundOff Work Minutes if (shift.RoundOffWorkMin == true) { if (attendanceRecord.WorkMin >= (attendanceRecord.ShifMin - shift.LateIn) && (attendanceRecord.WorkMin <= ((attendanceRecord.ShifMin) + shift.LateIn))) { attendanceRecord.WorkMin = (short)(attendanceRecord.ShifMin); } if (attendanceRecord.WorkMin > 0 && attendanceRecord.StatusHL != true) { if (attendanceRecord.ShifMin <= attendanceRecord.WorkMin + attendanceRecord.TotalShortMin) { attendanceRecord.WorkMin = attendanceRecord.ShifMin; } } if (attendanceRecord.WorkMin > 0 && attendanceRecord.StatusHL == true) { attendanceRecord.WorkMin = (short)(attendanceRecord.ShifMin); } } } #region -- Break for GZ, Rest and Normal Day //GZ Break //if (attendanceRecord.DutyCode == "G") //{ // if (attendanceRecord.TimeIn != null && attendanceRecord.TimeOut != null) // { // if (attendanceRecord.TimeIn < ts && attendanceRecord.TimeOut > te) // { // if (attendanceRecord.GZOTMin > 0) // { // attendanceRecord.GZOTMin = (short)(attendanceRecord.GZOTMin - attendanceRecord.BreakMin); // } // if (attendanceRecord.ExtraMin > 0) // { // attendanceRecord.ExtraMin = (short)(attendanceRecord.ExtraMin - attendanceRecord.BreakMin); // } // } // } //} //Rest //else if (attendanceRecord.DutyCode == "R") //{ // if (attendanceRecord.TimeIn != null && attendanceRecord.TimeOut != null) // { // if (attendanceRecord.TimeIn < ts && attendanceRecord.TimeOut > te) // { // if (attendanceRecord.OTMin > 0) // { // attendanceRecord.OTMin = (short)(attendanceRecord.OTMin - attendanceRecord.BreakMin); // } // if (attendanceRecord.ExtraMin > 0) // { // attendanceRecord.ExtraMin = (short)(attendanceRecord.ExtraMin - attendanceRecord.BreakMin); // } // } // } //} #endregion } } catch (Exception ex) { } }