Exemplo n.º 1
0
        private static Data.TimeRemarkData getDetailStamp1Time(string person_id, string TimeStamp, Data.TimeRuleData tr, string WorkDate, DataTable LeaveInfo)
        {
            //ตรวจสอบกรณีมีการลงเวลาแค่ครั้งเดียวในวันนั้น
            Data.TimeRemarkData ret = new Data.TimeRemarkData();
            try
            {
                //ตรวจสอบว่าเป็นการลงเวลาในช่วงไหน
                if (Convert.ToInt64(TimeStamp) <= Convert.ToInt64(tr.TimeLate))
                {
                    //ลงเวลาทำงานตอนเช้า ไม่มีการลงชื่อตอนกลับ
                    ret.TimeRemark = "ลืมลงชื่อกลับ";
                    ret.IsProblem = true;
                    if (CheckLeaveID(Convert.ToInt64(person_id), WorkDate, 95, LeaveInfo) == true)
                    {
                        //ถ้ามีการยื่นใบลาลืมลงชื่อกลับ
                        ret.IsProblem = false;
                    }
                }
                else if (Convert.ToInt64(TimeStamp) > Convert.ToInt64(tr.TimeLate) && Convert.ToInt64(TimeStamp) <= Convert.ToInt64(tr.TimeLeaveHaft))
                {
                    ret.TimeRemark = "มาสายลืมลงชื่อกลับ";
                    ret.IsProblem = true;

                    bool chkLeaveLate = CheckLeaveID(Convert.ToInt64(person_id), WorkDate, 91, LeaveInfo);
                    bool chkLeaveTimeBack = CheckLeaveID(Convert.ToInt64(person_id), WorkDate, 95, LeaveInfo);
                    if (chkLeaveLate == true && chkLeaveTimeBack == true)
                    {
                        ret.IsProblem = false;
                    }
                }
                else if (Convert.ToInt64(TimeStamp) > Convert.ToInt64(tr.TimeLeaveHaft) && Convert.ToInt64(TimeStamp) <= Convert.ToInt64(tr.TimeComeAfter))
                {
                    ret.TimeRemark = "มาสาย ต้องลาครึ่งเช้า ลืมลงชื่อกลับ";
                    ret.IsProblem = true;
                    ret.MustLeaveStatus = "1";

                    bool chkLeaveLate = CheckHaveLeave(Convert.ToInt64(person_id), WorkDate, "1", LeaveInfo);
                    bool chkLeaveTimeBack = CheckLeaveID(Convert.ToInt64(person_id), WorkDate, 95, LeaveInfo);
                    if (chkLeaveLate == true && chkLeaveTimeBack == true)
                    {
                        ret.IsProblem = false;
                    }

                }
                else if (Convert.ToInt64(TimeStamp) > Convert.ToInt64(tr.TimeComeAfter) && Convert.ToInt64(TimeStamp) <= Convert.ToInt64(tr.TimeLateAfter))
                {
                    ret.TimeRemark = "มาสาย ต้องลาครึ่งเช้า ลืมลงชื่อกลับ";
                    ret.IsProblem = true;
                    ret.MustLeaveStatus = "1";

                    bool chkLeaveLate = CheckHaveLeave(Convert.ToInt64(person_id), WorkDate, "1", LeaveInfo);
                    bool chkLeaveTimeBack = CheckLeaveID(Convert.ToInt64(person_id), WorkDate, 95, LeaveInfo);
                    if (chkLeaveLate == true && chkLeaveTimeBack == true)
                    {
                        ret.IsProblem = false;
                    }
                }

                else if (Convert.ToInt64(TimeStamp) > Convert.ToInt64(tr.TimeLateAfter) && Convert.ToInt64(TimeStamp) <= Convert.ToInt64(tr.TimeLeaveFull))
                {
                    ret.TimeRemark = "มาสายช่วงบ่าย ต้องลาครึ่งเช้า ลืมลงชื่อกลับ";
                    ret.IsProblem = true;
                    ret.MustLeaveStatus = "1";

                    bool chkLeaveLate = CheckHaveLeave(Convert.ToInt64(person_id), WorkDate, "1", LeaveInfo);
                    bool chkLeaveTimeBack = CheckLeaveID(Convert.ToInt64(person_id), WorkDate, 95, LeaveInfo);
                    if (chkLeaveLate == true && chkLeaveTimeBack == true)
                    {
                        ret.IsProblem = false;
                    }
                }
                else if (Convert.ToInt64(TimeStamp) > Convert.ToInt64(tr.TimeLeaveFull))
                {
                    ret.TimeRemark = "ลืมลงชื่อมา ต้องลาเต็มวัน";
                    ret.IsProblem = true;
                    bool chkLeaveFullDay = CheckLeaveID(Convert.ToInt64(person_id), WorkDate, 90, LeaveInfo);
                    if (chkLeaveFullDay == true)
                    {
                        ret.IsProblem = false;
                    }
                }

            }
            catch (Exception ex)
            {
                OPM_BL.CreateErrorLog("getDetailStamp1Time", "Exception : " + ex.Message + Environment.NewLine + ex.StackTrace);
            }

            return ret;
        }
Exemplo n.º 2
0
        private static Data.TimeRemarkData getDetailStamp2Time(string person_id, string vTimeCome, string vTimeBack, Data.TimeRuleData tr, DateTime vWorkDate, DataTable LeaveInfo)
        {
            Data.TimeRemarkData ret = new Data.TimeRemarkData();
            try
            {
                bool isCheckTimeBack = true;
                ret.WorkFullDay = true;

                string WorkDate = vWorkDate.ToString("yyyyMMdd", new System.Globalization.CultureInfo("en-US"));
                long TimeCome = Convert.ToInt64(vTimeCome.Replace(":", ""));
                long TimeBack = Convert.ToInt64(vTimeBack.Replace(":", ""));

                //ตรวจสอบว่าเป็นการลงเวลามา ในช่วงไหน
                if (TimeCome > Convert.ToInt64(tr.TimeLate) && TimeCome <= Convert.ToInt64(tr.TimeLeaveHaft))
                {
                    ret.TimeRemark = "มาสาย";
                    ret.IsProblem = true;

                    bool chkLeaveLate = CheckLeaveID(Convert.ToInt64(person_id), WorkDate, 91, LeaveInfo);
                    if (chkLeaveLate == true)
                    {
                        ret.IsProblem = false;
                    }
                }
                else if (TimeCome > Convert.ToInt64(tr.TimeLeaveHaft) && TimeCome <= Convert.ToInt64(tr.TimeComeAfter))
                {
                    ret.TimeRemark = "มาสาย ต้องลาครึ่งเช้า";
                    ret.IsProblem = true;
                    ret.WorkFullDay = false;
                    ret.WorkHalfA = true;

                    ret.MustLeaveStatus = "1";

                    bool chkLeaveLate = CheckHaveLeave(Convert.ToInt64(person_id), WorkDate, "1", LeaveInfo);
                    if (chkLeaveLate == true)
                    {
                        ret.IsProblem = false;
                    }
                }
                else if (TimeCome > Convert.ToInt64(tr.TimeComeAfter) && TimeCome <= Convert.ToInt64(tr.TimeLateAfter))
                {
                    ret.TimeRemark = "มาสาย ต้องลาครึ่งเช้า";
                    ret.IsProblem = true;
                    ret.MustLeaveStatus = "1";

                    ret.WorkFullDay = false;
                    ret.WorkHalfA = true;

                    bool chkLeaveLate = CheckHaveLeave(Convert.ToInt64(person_id), WorkDate, "1", LeaveInfo);
                    if (chkLeaveLate == true)
                    {
                        ret.IsProblem = false;
                    }
                }
                else if (TimeCome > Convert.ToInt64(tr.TimeLateAfter) && TimeCome <= Convert.ToInt64(tr.TimeLeaveFull))
                {
                    ret.TimeRemark = "มาสายช่วงบ่าย ต้องลาครึ่งเช้า";
                    ret.IsProblem = true;
                    ret.MustLeaveStatus = "1";

                    ret.WorkFullDay = false;
                    ret.WorkHalfA = true;

                    bool chkLeaveLate = CheckHaveLeave(Convert.ToInt64(person_id), WorkDate, "1", LeaveInfo);
                    if (chkLeaveLate == true)
                    {
                        ret.IsProblem = false;
                    }
                }
                else if (TimeCome > Convert.ToInt64(tr.TimeLeaveFull))
                {
                    ret.TimeRemark = "ลืมลงชื่อมา ต้องลาเต็มวัน";
                    ret.IsProblem = true;

                    ret.WorkFullDay = false;
                    ret.WorkHalfA = true;
                    bool chkLeaveFullDay = CheckLeaveID(Convert.ToInt64(person_id), WorkDate, 90, LeaveInfo);
                    if (chkLeaveFullDay == true)
                    {
                        ret.IsProblem = false;
                    }

                    isCheckTimeBack = false;
                }

                if (isCheckTimeBack == true)
                {
                    //ตรวจสอบเวลากลับก่อนตอนเช้า
                    if (TimeBack < Convert.ToInt64(tr.TimeBackMorning))
                    {
                        ret.TimeRemark += " กลับก่อน";
                        bool chkBackBef = CheckLeaveID(Convert.ToInt64(person_id), WorkDate, 92, LeaveInfo);  //ถ้ามีการยื่นขอกลับก่อน
                        ret.WorkHalfM = true;
                        ret.WorkHalfA = false;
                        ret.WorkFullDay = false;

                        //ถ้าเวลามาไม่มีปัญหา แต่มีปัญหาตอนเวลากลับ และไม่ยื่นขอกลับก่อน
                        if (ret.IsProblem == false && chkBackBef == false)
                        {
                            ret.IsProblem = true;
                            ret.MustLeaveStatus = "2";
                        }
                    }
                    else if (TimeBack < Convert.ToInt64(tr.TimeBackBefore))
                    {
                        //ตรวจสอบเวลากลับก่อนตอนเย็น
                        ret.TimeRemark += " กลับก่อน";
                        ret.WorkHalfM = true;
                        ret.WorkHalfA = false;
                        ret.WorkFullDay = false;

                        //ถ้ามีการยื่นขอกลับก่อนตอนเย็น
                        bool chkBackBef = CheckLeaveID(Convert.ToInt64(person_id), WorkDate, 92, LeaveInfo);

                        //ถ้าเวลามาไม่มีปัญหา แต่มีปัญหาตอนเวลากลับ และไม่ยื่นขอกลับก่อนตอนเย็น
                        if (ret.IsProblem == false && chkBackBef == false)
                        {
                            ret.IsProblem = true;
                            ret.MustLeaveStatus = "2";
                        }
                    }
                }

                //กรณีรอบเวลายืดหยุ่ 8 ชั่วโมง
                if (tr.TMCheck == true)
                {
                    DateTime dTimeCome = new DateTime(vWorkDate.Year, vWorkDate.Month, vWorkDate.Day, Convert.ToInt16(vTimeCome.Split(':')[0]), Convert.ToInt16(vTimeCome.Split(':')[1]), Convert.ToInt16(vTimeCome.Split(':')[2]), 0);
                    DateTime dTimeBack = new DateTime(vWorkDate.Year, vWorkDate.Month, vWorkDate.Day, Convert.ToInt16(vTimeBack.Split(':')[0]), Convert.ToInt16(vTimeBack.Split(':')[1]), Convert.ToInt16(vTimeBack.Split(':')[2]), 0);

                    double WorkTimeMin = (dTimeBack - dTimeCome).TotalMinutes;
                    if (ret.WorkFullDay == true)
                    {
                        if (WorkTimeMin < tr.TMFullBef)
                        {
                            ret.IsProblem = true;
                            if (ret.TimeRemark.IndexOf("กลับก่อน") == 0)
                            {
                                ret.TimeRemark += " กลับก่อน";
                            }

                            ret.MustLeaveStatus = "2";
                        }
                    }
                    else if (ret.WorkHalfM == true) {
                        if (WorkTimeMin < tr.TMHalf) {
                            ret.IsProblem = true;
                            if (ret.TimeRemark.IndexOf("กลับก่อน") == 0)
                            {
                                ret.TimeRemark += " กลับก่อน";
                            }
                            ret.MustLeaveStatus = "2";
                        }
                    }
                    else if (ret.WorkHalfA == true) {
                        if (WorkTimeMin < tr.TMHalfAft)
                        {
                            ret.IsProblem = true;
                            if (ret.TimeRemark.IndexOf("กลับก่อน") == 0)
                            {
                                ret.TimeRemark += " กลับก่อน";
                            }
                            ret.MustLeaveStatus = "2";
                        }
                    }
                }

            }
            catch (Exception ex) {
                OPM_BL.CreateErrorLog("getDetailStamp2Time", "Exception : " + ex.Message + Environment.NewLine + ex.StackTrace);
            }
            return ret;
        }
Exemplo n.º 3
0
        public static void ProcessTimeByPerson(DateTime CurDate,  DataRow pDr, DataTable TimeDt)
        {
            //ประมวลผลเวลาการมาทำงานในแต่ละวันเป็นรายบุคคล
            try
            {
                long person_id = Convert.ToInt64(pDr["id"].ToString());
                string UserCode = "";
                long orgSerial = 0;

                string CurDateStr = CurDate.ToString("yyyyMMdd", new System.Globalization.CultureInfo("en-US"));

                //ข้อมูลการลงเวลา
                DataTable pTimeDt = new DataTable();
                bool isTimeStamp = false;  //มีการลงเวลา
                bool isStamp1Time = false; //ลงเวลา 1 ครั้ง
                bool isStamp2Time = false; //ลงเวลา ตั้งแต่ 2 ครั้งขึ้นไป

                //ข้อมูลรอบเวลา
                Data.TimeRuleData tr = new Data.TimeRuleData();
                tr.TimeCode = pDr["time_code"].ToString();
                tr.TimeName = pDr["time_name"].ToString();  //ชื่อรอบเวลา
                tr.TimeCome = pDr["time_come"].ToString();  //เวลาที่ต้องมา
                tr.TimeLate = pDr["time_late"].ToString();  //เวลาที่สาย
                tr.TimeLeaveHaft = pDr["time_leavehalf"].ToString();  //ต้องลาครึ่งวันเช้า
                tr.TimeLeaveFull = pDr["time_leavefull"].ToString();  //ต้องลาเต็มวัน
                tr.TimeBackBefore = pDr["time_backbef"].ToString();   //สามารถกลับก่อน
                tr.TimeBack = pDr["time_back"].ToString();            //เวลากลับปกติ
                tr.TimeComeAfter = pDr["time_comeaft"].ToString();    //เวลามาปฏิบัติราชการบ่าย
                tr.TimeLateAfter = pDr["time_lateaft"].ToString();    //เวลามาสาย(มาปฏิบัติราชการบ่าย)
                tr.TimeBackMorning = pDr["time_back_m"].ToString(); //เวลากลับปกติเช้า
                tr.TMCheck = Convert.ToBoolean(pDr["tm_check"]);   //ยืดหยุ่น 8 ขั่วโมง

                if (tr.TMCheck == true)
                {
                    tr.TMHalf = (Convert.ToInt16(pDr["tm_haft"].ToString().Substring(0, 2)) * 60) + Convert.ToInt16(pDr["tm_haft"].ToString().Substring(2, 2));
                    tr.TMHalfAft = (Convert.ToInt16(pDr["tm_haftbef"].ToString().Substring(0, 2)) * 60) + Convert.ToInt16(pDr["tm_haftbef"].ToString().Substring(2, 2));
                    tr.TMFull = (Convert.ToInt16(pDr["tm_full"].ToString().Substring(0, 2)) * 60) + Convert.ToInt16(pDr["tm_full"].ToString().Substring(2, 2));
                    tr.TMFullBef = (Convert.ToInt16(pDr["tm_fullbef"].ToString().Substring(0, 2)) * 60) + Convert.ToInt16(pDr["tm_fullbef"].ToString().Substring(2, 2));
                }

                #region "ตรวจสอบวันที่มีการกำหนดรอบการลงเวลากรณีพิเศษ"
                string sql = "select s.TIME_RULE_S_DATE, ds.TIME_CODE,ds.TIME_COME,ds.TIME_BACK,ds.TIME_LATE,ds.TIME_BACKBF  ";
                sql += " from PSST_TIME_RULE_S s ";
                sql += " inner join PSST_TIME_RULE_S_DETAIL ds on s.id = ds.TIME_RULE_S_ID ";
                sql += " where convert(varchar(8),s.time_rule_s_date,112) = @_TIME_RULE_S_DATE ";
                sql += " and ds.time_code=@_TIME_CODE ";

                SqlParameter[] sp = new SqlParameter[2];
                sp[0] = OPMSqlDb.setText("@_TIME_RULE_S_DATE", CurDateStr);
                sp[1] = OPMSqlDb.setText("@_TIME_CODE", pDr["time_code"].ToString());

                DataTable sDt = OPMSqlDb.ExecuteTable(sql, sp);
                if (sDt.Rows.Count > 0) {
                    DataRow sDr = sDt.Rows[0];
                    tr.TimeCome = sDr["time_come"].ToString();  //เวลาที่ต้องมา
                    tr.TimeBack = sDr["time_back"].ToString();            //เวลากลับปกติ
                    tr.TimeLate = sDr["time_late"].ToString();  //เวลาที่สาย
                    tr.TimeBackBefore = sDr["time_backbf"].ToString();   //สามารถกลับก่อน
                }
                sDt.Dispose();
                #endregion

                //ข้อมูลการยื่นใบลา
                DataTable LeaveInfo = getPersonLeave(person_id, CurDateStr);

                if (Convert.IsDBNull(pDr["user_code"]) == false)
                {
                    UserCode = pDr["user_code"].ToString();
                }

                if (Convert.IsDBNull(pDr["org_serial"]) == false)
                {
                    orgSerial = Convert.ToInt64(pDr["org_serial"]);
                }

                //Clear Data เดิมก่อนเลยเป็นอันดับแรก
                ClearProcessTimeData(person_id, CurDateStr);

                Data.TimeRemarkData vRemark = new Data.TimeRemarkData();
                TimeDt.DefaultView.RowFilter = "person_id='" + person_id.ToString() + "' and this_time_str='" + CurDateStr + "'";
                pTimeDt = TimeDt.DefaultView.ToTable().Copy();

                //2. ตรวจสอบข้อมูลการลงเวลา
                string TimeCome = "00:00:00";
                string TimeBack = "00:00:00";

                if (TimeDt.DefaultView.Count == 1)
                {
                    //2.1 ถ้ามี 1 Record แล้วเป็นเวลาที่อยู่ในช่วง เวลามา, เวลาสาย, ต้องลาครึ่งวันเช้า, ต้องลาเต็มวัน ให้ Stamp หมายเหตุ ตามเงื่อนไขนั้น
                    string StampTime = Convert.ToDateTime(TimeDt.DefaultView[0]["this_time"]).ToString("HH:mm:ss");
                    TimeCome = StampTime;
                    TimeBack = StampTime;

                    isTimeStamp = true;
                    isStamp1Time = true;
                }
                else if (TimeDt.DefaultView.Count > 1)
                {
                    //2.2 ถ้ามีมากกว่า 1 Record ให้พิจารณาที่ Record แรก และ Record สุดท้าย
                    TimeCome = Convert.ToDateTime(TimeDt.DefaultView[0]["this_time"]).ToString("HH:mm:ss");
                    TimeBack = Convert.ToDateTime(TimeDt.DefaultView[TimeDt.DefaultView.Count - 1]["this_time"]).ToString("HH:mm:ss");

                    isTimeStamp = true;
                    isStamp2Time = true;
                }

                //กรณีมีการลงเวลาทำงานในวันหยุด ให้แสดงเวลานั้นเลยไม่ต้องมี Process
                if (CheckIsHoliday(CurDateStr) == true && isTimeStamp==true) {
                    InsertTimeProcess(person_id, UserCode, orgSerial, tr.TimeCode, DateTime.Now, CurDate, TimeCome, TimeBack, "");
                    return;
                }

                if (isTimeStamp == true)
                {
                    if (tr.TimeCode != "00")
                    {
                        //3. พิจารณาช่วงเวลาที่มีการลงเวลา
                        if (isStamp1Time == true)
                        {   //ถ้าลงเวลาครั้งเดียว
                            vRemark = getDetailStamp1Time(person_id.ToString(), TimeCome.Replace(":", ""), tr, CurDateStr, LeaveInfo);
                            //เสร็จแล้วค่อยไปพิจารณาเรื่องมีหรือไม่มีใบลาอีก
                        }
                        else if (isStamp2Time == true)
                        {
                            vRemark = getDetailStamp2Time(person_id.ToString(), TimeCome, TimeBack, tr, CurDate, LeaveInfo);
                        }
                    }
                    else
                    {
                        vRemark.IsProblem = false;
                        vRemark.TimeRemark = "";  //กรณีอยู่รอบเวลาที่ไม่ต้องลงเวลา ดันทะลึ่งมาลงเวลา
                    }
                }
                else
                {
                    //กรณีไม่มีการลงเวลา
                    if (tr.TimeCode == "00")
                    {
                        vRemark.IsProblem = false;
                        vRemark.TimeRemark = "";  //กรณีอยู่รอบเวลาที่ไม่ต้องลงเวลา ดันทะลึ่งมาลงเวลา
                    }
                    else
                    {
                        vRemark.IsProblem = true;
                        vRemark.TimeRemark = "ลืมลงเวลามา-กลับ";
                        vRemark.MustLeaveStatus = "3";//ลาเต็มวัน
                    }
                }

                string DPISAbsentFlag = "";
                if (vRemark.MustLeaveStatus == "1")//สาย
                    DPISAbsentFlag = "3";

                if (vRemark.IsProblem == true)  //ถ้ามีปัญหาเกี่ยวกับการลงเวลา ให้ตรวจสอบใบลา
                {
                    //4. ตรวจสอบข้อมูลการยื่นใบลา และหมายเหตุการลงเวลาของเจ้าหน้าที่
                    if (LeaveInfo.Rows.Count > 0)
                    {
                        //กรณีมีใบลา
                        vRemark.TimeRemark = GetLeaveDetail(person_id, CurDateStr, LeaveInfo);

                        if (isStamp1Time == true)
                        { //และมีการลงเวลาครั้งเดียวในวันนั้น
                          //ก็ให้ Insert ลงใน HRM_TIME_PROCESS ได้เลย
                            InsertTimeProcess(person_id, UserCode, orgSerial, tr.TimeCode, DateTime.Now, CurDate, TimeCome, TimeBack, vRemark.TimeRemark);
                            InsertDPISWorkTime(person_id, CurDate, TimeCome, TimeBack, vRemark.TimeRemark, "");
                        }
                        else if (isStamp2Time == true)
                        {
                            InsertTimeProcess(person_id, UserCode, orgSerial, tr.TimeCode, DateTime.Now, CurDate, TimeCome, TimeBack, vRemark.TimeRemark);
                            InsertDPISWorkTime(person_id, CurDate, TimeCome, TimeBack, vRemark.TimeRemark, "");
                        }
                        else if (isTimeStamp == false)
                        {
                            //ถ้าไม่มีการลงเวลาแต่มีใบลา
                            InsertTimeProcess(person_id, UserCode, orgSerial, tr.TimeCode, DateTime.Now, CurDate, TimeCome, TimeBack, vRemark.TimeRemark);
                            InsertDPISWorkTime(person_id, CurDate, TimeCome, TimeBack, vRemark.TimeRemark, "2");
                        }
                    }
                    else
                    {
                        //กรณีไม่มีใบลา
                        if (isStamp1Time == true)
                        { //และมีการลงเวลาครั้งเดียวในวันนั้น
                          //5. ตรวจสอบรอบเวลา ถ้าเป็นรอบไม่ต้องลงเวลาก็ให้ตรวจสอบว่ามีการลงเวลาหรือไม่
                            if (tr.TimeCode == "00")
                            {
                                InsertTimeProcess(person_id, UserCode, orgSerial, tr.TimeCode, DateTime.Now, CurDate, TimeCome, TimeBack, tr.TimeName);
                                InsertDPISWorkTime(person_id, CurDate, TimeCome, TimeBack, vRemark.TimeRemark, "");
                            }
                            else
                            {
                                InsertTimeDataLate(person_id, UserCode, orgSerial, tr.TimeCode, DateTime.Now, CurDate, TimeCome, TimeBack, vRemark.TimeRemark, vRemark.MustLeaveStatus);
                                InsertDPISWorkTime(person_id, CurDate, TimeCome, TimeBack, vRemark.TimeRemark, DPISAbsentFlag);
                            }
                        }
                        else if (isStamp2Time == true)
                        {
                            InsertTimeDataLate(person_id, UserCode, orgSerial, tr.TimeCode, DateTime.Now, CurDate, TimeCome, TimeBack, vRemark.TimeRemark, vRemark.MustLeaveStatus);
                            InsertDPISWorkTime(person_id, CurDate, TimeCome, TimeBack, vRemark.TimeRemark, DPISAbsentFlag);

                            ////ถ้ามีการลงเวลาทั้ง 2 ครั้ง และเป็นคนที่อยู่ในรอบเวลายืดหยุ่น 8 ชั่วโมง
                            //if (tr.TMCheck == true)
                            //{
                            //}
                            //else
                            //{
                            //}
                        }
                        else if (isTimeStamp == false)
                        {
                            //กรณีไม่มีการลงเวลาเลย
                            if (tr.TimeCode == "00")
                            {
                                InsertTimeProcess(person_id, UserCode, orgSerial, tr.TimeCode, DateTime.Now, CurDate, TimeCome, TimeBack, tr.TimeName);
                                InsertDPISWorkTime(person_id, CurDate, TimeCome, TimeBack, vRemark.TimeRemark, "");
                            }
                            else
                            {
                                InsertTimeDataLate(person_id, UserCode, orgSerial, tr.TimeCode, DateTime.Now, CurDate, TimeCome, TimeBack, vRemark.TimeRemark, vRemark.MustLeaveStatus);
                                InsertDPISWorkTime(person_id, CurDate, TimeCome, TimeBack, vRemark.TimeRemark, DPISAbsentFlag);
                            }
                        }
                    }
                }
                else
                {
                    //กรณีไม่พบปัญหา
                    //Insert Time Process
                    InsertTimeProcess(person_id, UserCode, orgSerial, tr.TimeCode, DateTime.Now, CurDate, TimeCome, TimeBack, vRemark.TimeRemark);
                    InsertDPISWorkTime(person_id, CurDate, TimeCome, TimeBack, vRemark.TimeRemark, "");
                }

                TimeDt.DefaultView.RowFilter = "";
            }
            catch (Exception ex) {
                OPM_BL.CreateErrorLog("TimeProcessEng.PorcessTimeByPerson", "Exception : " + ex.Message + Environment.NewLine + ex.StackTrace);
            }
        }