public void ProcessDailyAttendance() { DateTime _dt = GlobalSettings._dateTime; DateTime dtTo = new DateTime(2015, 12, 7); DateTime dtFrom = new DateTime(2015, 12, 8); List <PollData> unprocessedPolls = context.PollDatas.Where(p => (p.Process == false)).OrderBy(e => e.EntTime).ToList(); //List<PollData> unprocessedPolls = context.PollDatas.Where(p => (p.EntDate >= dtTo && p.EntDate <= dtFrom) && p.EmpID == 180).OrderBy(e => e.EntTime).ToList(); foreach (PollData up in unprocessedPolls) { try { //Create Attendance if any poll date is not processed already if (context.AttProcesses.Where(ap => ap.ProcessDate == up.EntDate).Count() == 0) { CreateAttendance(up.EntDate.Date); } //Check AttData with EmpDate if (context.AttDatas.Where(attd => attd.EmpDate == up.EmpDate).Count() > 0) { AttData attendanceRecord = context.AttDatas.First(attd => attd.EmpDate == up.EmpDate); employee = attendanceRecord.Emp; Shift shift = employee.Shift; //Set Time In and Time Out in AttData if (attendanceRecord.Emp.Shift.OpenShift == true) { //Set Time In and Time Out for open shift PlaceTimeInOuts.CalculateTimeINOUTOpenShift(attendanceRecord, up); } else { TimeSpan checkTimeEnd = new TimeSpan(); DateTime TimeInCheck = new DateTime(); if (attendanceRecord.TimeIn == null) { TimeInCheck = attendanceRecord.AttDate.Value.Add(attendanceRecord.DutyTime.Value); } else { TimeInCheck = attendanceRecord.TimeIn.Value; } if (attendanceRecord.ShifMin == 0) { checkTimeEnd = TimeInCheck.TimeOfDay.Add(new TimeSpan(0, 480, 0)); } else { checkTimeEnd = TimeInCheck.TimeOfDay.Add(new TimeSpan(0, (int)attendanceRecord.ShifMin, 0)); } if (checkTimeEnd.Days > 0) { //if Time out occur at next day if (up.RdrDuty == 5) { DateTime dt = new DateTime(); dt = up.EntDate.Date.AddDays(-1); var _attData = context.AttDatas.FirstOrDefault(aa => aa.AttDate == dt && aa.EmpID == up.EmpID); if (_attData != null) { if (_attData.TimeIn != null) { TimeSpan t1 = new TimeSpan(11, 00, 00); if (up.EntTime.TimeOfDay < t1) { if ((up.EntTime - _attData.TimeIn.Value).Hours < 18) { attendanceRecord = _attData; up.EmpDate = up.EmpID.ToString() + dt.Date.ToString("yyMMdd"); } } } else { attendanceRecord = _attData; up.EmpDate = up.EmpID.ToString() + dt.Date.ToString("yyMMdd"); } } } } //Set Time In and Time Out if (up.RdrDuty == 5) { if (attendanceRecord.TimeIn != null) { TimeSpan dt = (TimeSpan)(up.EntTime.TimeOfDay - attendanceRecord.TimeIn.Value.TimeOfDay); if (dt.Minutes < 0) { DateTime dt1 = new DateTime(); dt1 = up.EntDate.Date.AddDays(-1); var _attData = context.AttDatas.FirstOrDefault(aa => aa.AttDate == dt1 && aa.EmpID == up.EmpID); attendanceRecord = _attData; up.EmpDate = up.EmpID.ToString() + dt1.Date.ToString("yyMMdd"); PlaceTimeInOuts.CalculateTimeINOUT(attendanceRecord, up); } else { PlaceTimeInOuts.CalculateTimeINOUT(attendanceRecord, up); } } else { PlaceTimeInOuts.CalculateTimeINOUT(attendanceRecord, up); } } else { PlaceTimeInOuts.CalculateTimeINOUT(attendanceRecord, up); } } if (employee.Shift.OpenShift == true) { if (up.EntTime.TimeOfDay < PlaceTimeInOuts.OpenShiftThresholdEnd) { DateTime dt = up.EntDate.Date.AddDays(-1); CalculateWorkMins.CalculateOpenShiftTimes(context.AttDatas.FirstOrDefault(aa => aa.AttDate == dt && aa.EmpID == up.EmpID), shift); context.SaveChanges(); } } //If TimeIn and TimeOut are not null, then calculate other Atributes if (attendanceRecord.TimeIn != null && attendanceRecord.TimeOut != null) { if (context.Rosters.Where(r => r.EmpDate == up.EmpDate).Count() > 0) { CalculateWorkMins.CalculateRosterTimes(attendanceRecord, context.Rosters.FirstOrDefault(r => r.EmpDate == up.EmpDate), shift); context.SaveChanges(); } else { if (shift.OpenShift == true) { if (up.EntTime.TimeOfDay < PlaceTimeInOuts.OpenShiftThresholdEnd) { DateTime dt = up.EntDate.Date.AddDays(-1); CalculateWorkMins.CalculateOpenShiftTimes(context.AttDatas.FirstOrDefault(aa => aa.AttDate == dt && aa.EmpID == up.EmpID), shift); CalculateWorkMins.CalculateOpenShiftTimes(attendanceRecord, shift); context.SaveChanges(); } else { //Calculate open shifft time of the same date CalculateWorkMins.CalculateOpenShiftTimes(attendanceRecord, shift); context.SaveChanges(); } } else { CalculateWorkMins.CalculateShiftTimes(attendanceRecord, shift); context.SaveChanges(); } } } up.Process = true; } } catch (Exception ex) { string _error = ""; if (ex.InnerException.Message != null) { _error = ex.InnerException.Message; } else { _error = ex.Message; } _myHelperClass.WriteToLogFile("Attendance Processing Error Level 1 " + _error); } context.SaveChanges(); } _myHelperClass.WriteToLogFile("Attendance Processing Completed"); context.Dispose(); }
public void ProcessManualEditAttendance(DateTime _dateStart, DateTime _dateEnd) { List <AttDataManEdit> _attEdit = new List <AttDataManEdit>(); List <AttData> _AttData = new List <AttData>(); AttData _TempAttData = new AttData(); using (var ctx = new TAS2013Entities()) { if (_dateStart == _dateEnd) { //_attEdit = ctx.AttDataManEdits.Where(aa => aa.NewTimeIn == _dateStart).OrderBy(aa => aa.EditDateTime).ToList(); _dateEnd = _dateEnd + new TimeSpan(23, 59, 59); _attEdit = ctx.AttDataManEdits.Where(aa => aa.NewTimeIn >= _dateStart && aa.NewTimeIn <= _dateEnd).OrderBy(aa => aa.EditDateTime).ToList(); _AttData = ctx.AttDatas.Where(aa => aa.AttDate == _dateStart).ToList(); } else { _dateEnd = _dateEnd + new TimeSpan(23, 59, 59); _attEdit = ctx.AttDataManEdits.Where(aa => aa.NewTimeIn >= _dateStart && aa.NewTimeOut <= _dateEnd).OrderBy(aa => aa.EditDateTime).ToList(); //_attEdit = ctx.AttDataManEdits.Where(aa => aa.NewTimeIn >= _dateStart && (aa.NewTimeOut <= _dateEnd && aa.EmpID == 472)).OrderBy(aa => aa.EditDateTime).ToList(); _AttData = ctx.AttDatas.Where(aa => aa.AttDate >= _dateStart && aa.AttDate <= _dateEnd).ToList(); } foreach (var item in _attEdit) { _TempAttData = _AttData.First(aa => aa.EmpDate == item.EmpDate); _TempAttData.TimeIn = item.NewTimeIn; _TempAttData.TimeOut = item.NewTimeOut; _TempAttData.DutyCode = item.NewDutyCode; _TempAttData.DutyTime = item.NewDutyTime; _TempAttData.ShifMin = item.NewShiftMin; switch (_TempAttData.DutyCode) { case "D": _TempAttData.StatusAB = true; _TempAttData.StatusP = false; _TempAttData.StatusMN = true; _TempAttData.StatusDO = false; _TempAttData.StatusGZ = false; _TempAttData.StatusLeave = false; _TempAttData.StatusOT = false; _TempAttData.OTMin = null; _TempAttData.EarlyIn = null; _TempAttData.EarlyOut = null; _TempAttData.LateIn = null; _TempAttData.LateOut = null; _TempAttData.WorkMin = null; _TempAttData.GZOTMin = null; break; case "G": _TempAttData.StatusAB = false; _TempAttData.StatusP = false; _TempAttData.StatusMN = true; _TempAttData.StatusDO = false; _TempAttData.StatusGZ = true; _TempAttData.StatusLeave = false; _TempAttData.StatusOT = false; _TempAttData.OTMin = null; _TempAttData.EarlyIn = null; _TempAttData.EarlyOut = null; _TempAttData.LateIn = null; _TempAttData.LateOut = null; _TempAttData.WorkMin = null; _TempAttData.GZOTMin = null; break; case "R": _TempAttData.StatusAB = false; _TempAttData.StatusP = false; _TempAttData.StatusMN = true; _TempAttData.StatusDO = true; _TempAttData.StatusGZ = false; _TempAttData.StatusLeave = false; _TempAttData.StatusOT = false; _TempAttData.OTMin = null; _TempAttData.EarlyIn = null; _TempAttData.EarlyOut = null; _TempAttData.LateIn = null; _TempAttData.LateOut = null; _TempAttData.WorkMin = null; _TempAttData.GZOTMin = null; break; } if (_TempAttData.TimeIn != null && _TempAttData.TimeOut != null) { //If TimeIn = TimeOut then calculate according to DutyCode if (_TempAttData.TimeIn == _TempAttData.TimeOut) { CalculateInEqualToOut(_TempAttData); } else { if (_TempAttData.DutyTime == new TimeSpan(0, 0, 0)) { CalculateWorkMins.CalculateOpenShiftTimes(_TempAttData, _TempAttData.Emp.Shift); } else { //if (attendanceRecord.TimeIn.Value.Date.Day == attendanceRecord.TimeOut.Value.Date.Day) //{ CalculateWorkMins.CalculateShiftTimes(_TempAttData, _TempAttData.Emp.Shift); //} //else //{ // CalculateOpenShiftTimes(attendanceRecord, shift); //} } _TempAttData.Remarks = _TempAttData.Remarks + "[Manual]"; } //If TimeIn = TimeOut then calculate according to DutyCode } ctx.SaveChanges(); } ctx.Dispose(); } _myHelperClass.WriteToLogFile("ProcessManual Attendance Completed: "); }