Exemplo n.º 1
0
        //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;
            }
        }
Exemplo n.º 4
0
        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());
        }
Exemplo n.º 5
0
        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)
            {
            }
        }