private void CalculateShiftTimes(AttData attendanceRecord, Shift shift)
        {
            try
            {
                //Calculate WorkMin
                attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[LI]", "");
                attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[EI]", "");
                attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[EO]", "");
                attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[LO]", "");
                attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[G-OT]", "");
                attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[R-OT]", "");
                attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[N-OT]", "");
                attendanceRecord.Remarks = attendanceRecord.Remarks.Replace("[Manual]", "");
                TimeSpan mins = (TimeSpan)(attendanceRecord.TimeOut - attendanceRecord.TimeIn);
                attendanceRecord.WorkMin = (short)(mins.TotalMinutes);
                //Check if GZ holiday then place all WorkMin in GZOTMin
                if (attendanceRecord.StatusGZ == true)
                {
                    attendanceRecord.PDays      = 0;
                    attendanceRecord.ABDays     = 0;
                    attendanceRecord.LeaveDays  = 0;
                    attendanceRecord.GZOTMin    = (short)mins.TotalMinutes;
                    attendanceRecord.WorkMin    = (short)mins.TotalMinutes;
                    attendanceRecord.StatusGZOT = true;
                    attendanceRecord.Remarks    = attendanceRecord.Remarks + "[G-OT]";
                    attendanceRecord.ABDays     = 0;
                    attendanceRecord.PDays      = 0;
                    attendanceRecord.LeaveDays  = 0;
                }
                //if Rest day then place all WorkMin in OTMin
                else if (attendanceRecord.StatusDO == true)
                {
                    if (attendanceRecord.Emp.HasOT != false)
                    {
                        attendanceRecord.PDays     = 0;
                        attendanceRecord.ABDays    = 0;
                        attendanceRecord.LeaveDays = 0;
                        attendanceRecord.OTMin     = (short)mins.TotalMinutes;
                        attendanceRecord.WorkMin   = (short)mins.TotalMinutes;
                        attendanceRecord.StatusOT  = true;
                        attendanceRecord.Remarks   = attendanceRecord.Remarks + "[R-OT]";
                        attendanceRecord.ABDays    = 0;
                        attendanceRecord.PDays     = 0;
                        attendanceRecord.LeaveDays = 0;
                    }
                }
                else
                {
                    /////////// to-do -----calculate Margins for those shifts which has break mins
                    if (attendanceRecord.StatusBreak == true)
                    {
                        attendanceRecord.WorkMin = (short)(attendanceRecord.WorkMin - attendanceRecord.BreakMin);
                        attendanceRecord.ShifMin = (short)(ProcessSupportFunc.CalculateShiftMinutes(shift, attendanceRecord.AttDate.Value.DayOfWeek) - (short)attendanceRecord.BreakMin);
                    }
                    else
                    {
                        if (attendanceRecord.StatusHL == true && attendanceRecord.StatusLeave != true)
                        {
                            attendanceRecord.ABDays    = 0;
                            attendanceRecord.PDays     = 0.5;
                            attendanceRecord.LeaveDays = 0.5;
                        }
                        else
                        {
                            attendanceRecord.ABDays    = 0;
                            attendanceRecord.PDays     = 1;
                            attendanceRecord.LeaveDays = 0;
                        }
                        attendanceRecord.Remarks  = attendanceRecord.Remarks.Replace("[Absent]", "");
                        attendanceRecord.StatusAB = false;
                        attendanceRecord.StatusP  = true;
                        #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.TotalMinutes > 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
                        if ((attendanceRecord.StatusGZ != true || attendanceRecord.StatusDO != true) && attendanceRecord.Emp.HasOT == true)
                        {
                            if (attendanceRecord.LateOut != null)
                            {
                                if ((attendanceRecord.WorkMin - attendanceRecord.ShifMin) > shift.OverTimeMin)
                                {
                                    attendanceRecord.OTMin    = (short)(attendanceRecord.WorkMin - attendanceRecord.ShifMin);
                                    attendanceRecord.StatusOT = true;
                                    attendanceRecord.Remarks  = attendanceRecord.Remarks + "[N-OT]";
                                }
                            }
                        }
                        //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.SubtractOTFromWork == true)
                        {
                            if (attendanceRecord.LateOut != null && attendanceRecord.LateOut > shift.LateOut)
                            {
                                attendanceRecord.WorkMin = (short)(attendanceRecord.WorkMin - attendanceRecord.LateOut);
                            }
                        }
                        if (shift.AddEIInOT == true && attendanceRecord.Emp.HasOT == true)
                        {
                            if (attendanceRecord.EarlyIn != null)
                            {
                                if (attendanceRecord.OTMin != null)
                                {
                                    attendanceRecord.OTMin = (short)(attendanceRecord.OTMin + attendanceRecord.EarlyIn);
                                }
                                else
                                {
                                    attendanceRecord.OTMin = (short)attendanceRecord.EarlyIn;
                                }
                            }
                        }
                        if (shift.RoundOffWorkMin == true)
                        {
                            if (attendanceRecord.LateOut != null || attendanceRecord.EarlyIn != null)
                            {
                                if (attendanceRecord.WorkMin > attendanceRecord.ShifMin && (attendanceRecord.WorkMin <= (attendanceRecord.ShifMin + shift.OverTimeMin)))
                                {
                                    attendanceRecord.WorkMin = attendanceRecord.ShifMin;
                                }
                            }
                        }
                        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;
                        }
                        //Mark Absent if less than 4 hours
                        if (attendanceRecord.AttDate.Value.DayOfWeek != DayOfWeek.Friday && attendanceRecord.StatusDO != true && attendanceRecord.StatusGZ != true)
                        {
                            short MinShiftMin = (short)shift.MinHrs;
                            if (attendanceRecord.WorkMin < MinShiftMin)
                            {
                                attendanceRecord.StatusAB = true;
                                attendanceRecord.StatusP  = false;
                                attendanceRecord.Remarks  = "[Absent]";
                            }
                            else
                            {
                                attendanceRecord.StatusAB = false;
                                attendanceRecord.StatusP  = true;
                                attendanceRecord.Remarks.Replace("[Absent]", "");
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
        private void CalculateOpenShiftTimes(AttData attendanceRecord, Shift shift)
        {
            try
            {
                //Calculate WorkMin
                //Calculate WorkMin
                attendanceRecord.Remarks.Replace("[LI]", "");
                attendanceRecord.Remarks.Replace("[EI]", "");
                attendanceRecord.Remarks.Replace("[EO]", "");
                attendanceRecord.Remarks.Replace("[LO]", "");
                attendanceRecord.Remarks.Replace("[G-OT]", "");
                attendanceRecord.Remarks.Replace("[R-OT]", "");
                attendanceRecord.Remarks.Replace("[N-OT]", "");
                attendanceRecord.Remarks.Replace("[Manual]", "");
                attendanceRecord.Remarks = attendanceRecord.Remarks + "[Manual]";
                if (attendanceRecord != null)
                {
                    if (attendanceRecord.TimeOut != null && attendanceRecord.TimeIn != null)
                    {
                        attendanceRecord.Remarks = "";
                        TimeSpan mins = (TimeSpan)(attendanceRecord.TimeOut - attendanceRecord.TimeIn);
                        attendanceRecord.WorkMin = (short)mins.TotalMinutes;
                        //Check if GZ holiday then place all WorkMin in GZOTMin
                        if (attendanceRecord.StatusGZ == true)
                        {
                            attendanceRecord.GZOTMin    = (short)mins.TotalMinutes;
                            attendanceRecord.WorkMin    = (short)mins.TotalMinutes;
                            attendanceRecord.StatusGZOT = true;
                            attendanceRecord.Remarks    = attendanceRecord.Remarks + "[GZ-OT]";
                        }
                        else if (attendanceRecord.StatusDO == true)
                        {
                            attendanceRecord.OTMin    = (short)mins.TotalMinutes;
                            attendanceRecord.WorkMin  = (short)mins.TotalMinutes;
                            attendanceRecord.StatusOT = true;
                            attendanceRecord.Remarks  = attendanceRecord.Remarks + "[R-OT]";
                        }
                        else
                        {
                            if (shift.HasBreak == true)
                            {
                                attendanceRecord.WorkMin = (short)(attendanceRecord.WorkMin - shift.BreakMin);
                                attendanceRecord.ShifMin = (short)(ProcessSupportFunc.CalculateShiftMinutes(shift, attendanceRecord.AttDate.Value.DayOfWeek) - (short)attendanceRecord.BreakMin);
                            }
                            else
                            {
                                attendanceRecord.Remarks.Replace("[Absent]", "");
                                attendanceRecord.StatusAB = false;
                                attendanceRecord.StatusP  = true;
                                // CalculateShiftEndTime = ShiftStart + DutyHours
                                //Calculate OverTIme,
                                if ((mins.TotalMinutes > (attendanceRecord.ShifMin + shift.OverTimeMin)) && attendanceRecord.Emp.HasOT == true)
                                {
                                    attendanceRecord.OTMin    = (Int16)(Convert.ToInt16(mins.TotalMinutes) - attendanceRecord.ShifMin);
                                    attendanceRecord.WorkMin  = (short)((mins.TotalMinutes) - attendanceRecord.OTMin);
                                    attendanceRecord.StatusOT = true;
                                    attendanceRecord.Remarks  = attendanceRecord.Remarks + "[N-OT]";
                                }
                                //Calculate Early Out
                                if (mins.TotalMinutes < (attendanceRecord.ShifMin - shift.EarlyOut))
                                {
                                    Int16 EarlyoutMin = (Int16)(attendanceRecord.ShifMin - Convert.ToInt16(mins.TotalMinutes));
                                    if (EarlyoutMin > shift.EarlyOut)
                                    {
                                        attendanceRecord.EarlyOut = EarlyoutMin;
                                        attendanceRecord.StatusEO = true;
                                        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]", "");
                                }
                                if ((attendanceRecord.StatusGZ != true || attendanceRecord.StatusDO != true) && attendanceRecord.Emp.HasOT == true)
                                {
                                    if (attendanceRecord.LateOut != null)
                                    {
                                        attendanceRecord.OTMin    = attendanceRecord.LateOut;
                                        attendanceRecord.StatusOT = true;
                                        attendanceRecord.Remarks  = attendanceRecord.Remarks + "[N-OT]";
                                    }
                                }
                                if (shift.SubtractOTFromWork == true)
                                {
                                    if (attendanceRecord.LateOut != null && attendanceRecord.LateOut > shift.LateOut)
                                    {
                                        attendanceRecord.WorkMin = (short)(attendanceRecord.WorkMin - attendanceRecord.LateOut);
                                    }
                                }
                                if (shift.RoundOffWorkMin == true)
                                {
                                    if (attendanceRecord.LateOut != null || attendanceRecord.EarlyIn != null)
                                    {
                                        // round off work mins if overtime less than shift.OverTimeMin >
                                        if (attendanceRecord.WorkMin > attendanceRecord.ShifMin && (attendanceRecord.WorkMin <= (attendanceRecord.ShifMin + shift.OverTimeMin)))
                                        {
                                            attendanceRecord.WorkMin = attendanceRecord.ShifMin;
                                        }
                                    }
                                }

                                //Mark Absent if less than 4 hours
                                if (attendanceRecord.AttDate.Value.DayOfWeek != DayOfWeek.Friday && attendanceRecord.StatusDO != true && attendanceRecord.StatusGZ != true)
                                {
                                    short MinShiftMin = (short)shift.MinHrs;
                                    if (attendanceRecord.WorkMin < MinShiftMin)
                                    {
                                        attendanceRecord.StatusAB = true;
                                        attendanceRecord.StatusP  = false;
                                        attendanceRecord.Remarks  = attendanceRecord.Remarks + "[Absent]";
                                    }
                                    else
                                    {
                                        attendanceRecord.StatusAB = false;
                                        attendanceRecord.StatusP  = true;
                                        attendanceRecord.Remarks.Replace("[Absent]", "");
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
예제 #3
0
        public void CreateAttendanceForEmp(DateTime dateTime, List <Emp> emps)
        {
            if (dateTime <= DateTime.Today)
            {
                using (var ctx = new TAS2013Entities())
                {
                    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();
                    foreach (var emp in emps)
                    {
                        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   //
                                ////////////////////////
                                ////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 crewCdateAlternate = "C" + 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;
                                    }
                                }
                                else if (_NewRoster.Where(aa => aa.CriteriaValueDate == crewCdate || aa.CriteriaValueDate
                                                          == crewCdateAlternate).Count() > 0)
                                {
                                    var roster = _NewRoster.FirstOrDefault(aa => aa.CriteriaValueDate == crewCdate || aa.CriteriaValueDate
                                                                           == crewCdateAlternate);
                                    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 ctx.Holidays)
                                    {
                                        if (ctx.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 if (_HalfLeave.FirstOrDefault().LvCode == "E")
                                    {
                                        att.Remarks = "[H-CP]";
                                    }
                                    else
                                    {
                                        att.Remarks = "[Half Leave]";
                                    }
                                }
                                ctx.AttDatas.Add(att);
                                ctx.SaveChanges();
                            }
                            catch (Exception ex)
                            {
                            }
                        }
                    }
                }
            }
        }