public double fun_GetOtHours(string WorkNo, string OTDate, string StrBtime, string StrEtime, string OTType) { try { double OtHours = 0.0; double RestHours = 0.0; if (OTType.Length != 0) { DateTime dtTempBeginTime; DateTime dtTempEndTime; string dtShiftOnTime; string dtShiftOffTime; string dtAMRestSTime; string dtAMRestETime; TimeSpan tsOTHours; if (OTType.Equals("G4") && (TimeSpan.Parse(Convert.ToDateTime(StrBtime).ToString("HH:mm")) < TimeSpan.Parse("06:30"))) { OTDate = Convert.ToDateTime(OTDate).AddDays(-1.0).ToString("yyyy/MM/dd"); } BLL.KQM.Query.OTM.OTMExceptionQryBll exceptionQryBll = new BLL.KQM.Query.OTM.OTMExceptionQryBll(); string strShiftNo = exceptionQryBll.GetShiftNo(WorkNo.ToUpper(), OTDate); if (strShiftNo.Length == 0) { return OtHours; } if ((StrBtime.Length > 8) & (StrEtime.Length > 8)) { dtTempBeginTime = DateTime.Parse(StrBtime); dtTempEndTime = DateTime.Parse(StrEtime); } else { dtTempBeginTime = DateTime.Parse(OTDate + " " + StrBtime); dtTempEndTime = DateTime.Parse(OTDate + " " + StrEtime); SortedList list = new SortedList(); list = this.ReturnOTTTime(WorkNo, OTDate, dtTempBeginTime, dtTempEndTime, strShiftNo); dtTempBeginTime = Convert.ToDateTime(list.GetByIndex(list.IndexOfKey("A"))); dtTempEndTime = Convert.ToDateTime(list.GetByIndex(list.IndexOfKey("B"))); } if (OTType.Equals("G4") && !(dtTempBeginTime.ToString("yyyy/MM/dd").Equals(dtTempEndTime.ToString("yyyy/MM/dd")) || Convert.ToDateTime(StrBtime).ToString("HH:mm").Equals("00:00"))) { return OtHours; } string dtBtime = dtTempBeginTime.ToString("yyyy/MM/dd HH:mm"); string dtEtime = dtTempEndTime.ToString("yyyy/MM/dd HH:mm"); DataTable sdt = exceptionQryBll.GetDataTableBySQL(strShiftNo); if (sdt.Rows.Count == 0) { return OtHours; } string ShiftOnTime = Convert.ToString(sdt.Rows[0]["OnDutyTime"]); string ShiftOffTime = Convert.ToString(sdt.Rows[0]["OffDutyTime"]); string AMRestSTime = Convert.ToString(sdt.Rows[0]["AMRestSTime"]); string AMRestETime = Convert.ToString(sdt.Rows[0]["AMRestETime"]); string PMRestSTime = Convert.ToString(sdt.Rows[0]["PMRestSTime"]); string PMRestETime = Convert.ToString(sdt.Rows[0]["PMRestETime"]); string ShiftType = Convert.ToString(sdt.Rows[0]["ShiftType"]); string dtPMRestSTime = ""; string dtPMRestETime = ""; if (TimeSpan.Parse(ShiftOnTime) < TimeSpan.Parse(ShiftOffTime)) { dtShiftOnTime = DateTime.Parse(OTDate + " " + ShiftOnTime).ToString("yyyy/MM/dd HH:mm"); dtShiftOffTime = DateTime.Parse(OTDate + " " + ShiftOffTime).ToString("yyyy/MM/dd HH:mm"); dtAMRestSTime = DateTime.Parse(OTDate + " " + AMRestSTime).ToString("yyyy/MM/dd HH:mm"); dtAMRestETime = DateTime.Parse(OTDate + " " + AMRestETime).ToString("yyyy/MM/dd HH:mm"); if ((PMRestSTime.Length > 0) && (PMRestETime.Length > 0)) { if (TimeSpan.Parse(PMRestSTime) <= TimeSpan.Parse(PMRestETime)) { dtPMRestSTime = DateTime.Parse(OTDate + " " + PMRestSTime).ToString("yyyy/MM/dd HH:mm"); dtPMRestETime = DateTime.Parse(OTDate + " " + PMRestETime).ToString("yyyy/MM/dd HH:mm"); } else { dtPMRestSTime = DateTime.Parse(OTDate + " " + PMRestSTime).ToString("yyyy/MM/dd HH:mm"); dtPMRestETime = DateTime.Parse(OTDate + " " + PMRestETime).AddDays(1.0).ToString("yyyy/MM/dd HH:mm"); } } } else { dtShiftOnTime = DateTime.Parse(OTDate + " " + ShiftOnTime).ToString("yyyy/MM/dd HH:mm"); dtShiftOffTime = DateTime.Parse(OTDate + " " + ShiftOffTime).AddDays(1.0).ToString("yyyy/MM/dd HH:mm"); if ((TimeSpan.Parse(AMRestSTime) <= TimeSpan.Parse(AMRestETime)) && (TimeSpan.Parse(ShiftOnTime) < TimeSpan.Parse(AMRestETime))) { dtAMRestSTime = DateTime.Parse(OTDate + " " + AMRestSTime).ToString("yyyy/MM/dd HH:mm"); dtAMRestETime = DateTime.Parse(OTDate + " " + AMRestETime).ToString("yyyy/MM/dd HH:mm"); } else if ((TimeSpan.Parse(AMRestSTime) <= TimeSpan.Parse(AMRestETime)) && (TimeSpan.Parse(ShiftOnTime) > TimeSpan.Parse(AMRestETime))) { dtAMRestSTime = DateTime.Parse(OTDate + " " + AMRestSTime).AddDays(1.0).ToString("yyyy/MM/dd HH:mm"); dtAMRestETime = DateTime.Parse(OTDate + " " + AMRestETime).AddDays(1.0).ToString("yyyy/MM/dd HH:mm"); } else { dtAMRestSTime = DateTime.Parse(OTDate + " " + AMRestSTime).ToString("yyyy/MM/dd HH:mm"); dtAMRestETime = DateTime.Parse(OTDate + " " + AMRestETime).AddDays(1.0).ToString("yyyy/MM/dd HH:mm"); } if ((PMRestSTime.Length > 0) && (PMRestETime.Length > 0)) { dtPMRestSTime = DateTime.Parse(OTDate + " " + PMRestSTime).AddDays(1.0).ToString("yyyy/MM/dd HH:mm"); dtPMRestETime = DateTime.Parse(OTDate + " " + PMRestETime).AddDays(1.0).ToString("yyyy/MM/dd HH:mm"); } } if (string.Compare(dtBtime, dtEtime) >= 0) { return OtHours; } if (OTType.Equals("G1")) { if (((string.Compare(dtBtime, dtShiftOnTime) >= 0) && (string.Compare(dtShiftOffTime, dtBtime) > 0)) || ((string.Compare(dtEtime, dtShiftOnTime) > 0) && (string.Compare(dtShiftOffTime, dtEtime) >= 0))) { return OtHours; } if (string.Compare(dtShiftOnTime, dtBtime) > 0) { if (string.Compare(dtEtime, dtShiftOnTime) > 0) { return OtHours; } tsOTHours = (TimeSpan)(dtTempEndTime - dtTempBeginTime); OtHours = tsOTHours.TotalMinutes; } else if (string.Compare(dtBtime, dtShiftOffTime) >= 0) { if (dtPMRestSTime.Length > 0) { if ((string.Compare(dtBtime, dtPMRestSTime) >= 0) && (string.Compare(dtPMRestETime, dtBtime) > 0)) { if ((string.Compare(dtEtime, dtPMRestSTime) > 0) && (string.Compare(dtPMRestETime, dtEtime) >= 0)) { return OtHours; } tsOTHours = (TimeSpan)(dtTempEndTime - dtTempBeginTime); OtHours = tsOTHours.TotalMinutes; tsOTHours = (TimeSpan)(Convert.ToDateTime(dtPMRestETime) - dtTempBeginTime); RestHours += tsOTHours.TotalMinutes; } else if (string.Compare(dtPMRestSTime, dtBtime) >= 0) { if (string.Compare(dtPMRestSTime, dtEtime) >= 0) { tsOTHours = (TimeSpan)(dtTempEndTime - dtTempBeginTime); OtHours = tsOTHours.TotalMinutes; } else if (string.Compare(dtPMRestETime, dtEtime) >= 0) { tsOTHours = (TimeSpan)(Convert.ToDateTime(dtPMRestSTime) - dtTempBeginTime); OtHours = tsOTHours.TotalMinutes; } else { tsOTHours = (TimeSpan)(dtTempEndTime - dtTempBeginTime); OtHours = tsOTHours.TotalMinutes; tsOTHours = (TimeSpan)(Convert.ToDateTime(dtPMRestETime) - Convert.ToDateTime(dtPMRestSTime)); RestHours = tsOTHours.TotalMinutes; } } else { tsOTHours = (TimeSpan)(dtTempEndTime - dtTempBeginTime); OtHours = tsOTHours.TotalMinutes; } } else { tsOTHours = (TimeSpan)(dtTempEndTime - dtTempBeginTime); OtHours = tsOTHours.TotalMinutes; } } } else { if (string.Compare(dtShiftOnTime, dtBtime) > 0) { dtTempBeginTime = Convert.ToDateTime(dtShiftOnTime); dtBtime = dtTempBeginTime.ToString("yyyy/MM/dd HH:mm"); } if ((string.Compare(dtAMRestETime, dtBtime) >= 0) && (string.Compare(dtBtime, dtAMRestSTime) >= 0)) { dtTempBeginTime = Convert.ToDateTime(dtAMRestETime); dtBtime = dtTempBeginTime.ToString("yyyy/MM/dd HH:mm"); } if ((string.Compare(dtAMRestETime, dtEtime) >= 0) && (string.Compare(dtEtime, dtAMRestSTime) >= 0)) { dtTempEndTime = Convert.ToDateTime(dtAMRestSTime); dtEtime = dtTempEndTime.ToString("yyyy/MM/dd HH:mm"); } if ((string.Compare(dtPMRestETime, dtBtime) >= 0) && (string.Compare(dtBtime, dtPMRestSTime) >= 0)) { dtTempBeginTime = Convert.ToDateTime(dtPMRestETime); dtBtime = dtTempBeginTime.ToString("yyyy/MM/dd HH:mm"); } if ((string.Compare(dtPMRestETime, dtEtime) >= 0) && (string.Compare(dtEtime, dtPMRestSTime) >= 0)) { dtTempEndTime = Convert.ToDateTime(dtPMRestSTime); dtEtime = dtTempEndTime.ToString("yyyy/MM/dd HH:mm"); } if (string.Compare(dtBtime, dtEtime) >= 0) { return OtHours; } if ((string.Compare(dtAMRestSTime, dtBtime) >= 0) && (string.Compare(dtEtime, dtAMRestETime) >= 0)) { tsOTHours = (TimeSpan)(Convert.ToDateTime(dtAMRestETime) - Convert.ToDateTime(dtAMRestSTime)); RestHours += tsOTHours.TotalMinutes; if ((dtPMRestETime.Length > 0) && (string.Compare(dtEtime, dtPMRestETime) > 0)) { tsOTHours = (TimeSpan)(Convert.ToDateTime(dtPMRestETime) - Convert.ToDateTime(dtPMRestSTime)); RestHours += tsOTHours.TotalMinutes; } } else if ((dtPMRestETime.Length > 0) && ((string.Compare(dtPMRestSTime, dtBtime) > 0) && (string.Compare(dtEtime, dtPMRestETime) > 0))) { tsOTHours = (TimeSpan)(Convert.ToDateTime(dtPMRestETime) - Convert.ToDateTime(dtPMRestSTime)); RestHours += tsOTHours.TotalMinutes; } tsOTHours = (TimeSpan)(dtTempEndTime - dtTempBeginTime); OtHours = tsOTHours.TotalMinutes; } if (exceptionQryBll.GetValue("condition5", null, null, null, null).Equals("Y")) { OtHours = Math.Round((double)(Math.Floor((double)((OtHours - RestHours) / 10.0)) / 6.0), 1); } else { OtHours = Math.Round((double)(((OtHours - RestHours) / 60.0) * 100.0)) / 100.0; if ((OtHours % 0.5) != 0.0) { double ihours = Math.Floor(OtHours); if (OtHours > (ihours + 0.5)) { OtHours = ihours + 0.5; } else { OtHours = ihours; } } } if ((OtHours >= 20.0) || (OtHours < 0.0)) { OtHours = 0.0; } } return OtHours; } catch (Exception) { return 0.0; } }
public SortedList ReturnOTTTime(string WorkNo, string OTDate, DateTime dtTempBeginTime, DateTime dtTempEndTime, string ShiftNo) { string condition = ""; SortedList list = new SortedList(); DateTime dtMidTime = DateTime.Parse(OTDate + " 12:00"); DateTime dtMidTime2 = DateTime.Parse(OTDate + " 08:00"); string strTempBeginTime = dtTempBeginTime.ToString("yyyy/MM/dd HH:mm"); string strTempEndTime = dtTempEndTime.ToString("yyyy/MM/dd HH:mm"); string strMidTime = dtMidTime.ToString("yyyy/MM/dd HH:mm"); string strMidTime2 = dtMidTime2.ToString("yyyy/MM/dd HH:mm"); BLL.KQM.Query.OTM.OTMExceptionQryBll exceptionQryBll = new BLL.KQM.Query.OTM.OTMExceptionQryBll(); try { if (Convert.ToDecimal(exceptionQryBll.GetValue("condition1", strTempBeginTime, strTempEndTime, strMidTime, strMidTime2)) < 0M) { dtTempEndTime = DateTime.Parse(DateTime.Parse(OTDate).AddDays(1.0).ToString("yyyy/MM/dd") + " " + dtTempEndTime.ToString("HH:mm")); } else if (ShiftNo.StartsWith("C")) { if (Convert.ToDecimal(exceptionQryBll.GetValue("condition2", strTempBeginTime, strTempEndTime, strMidTime, strMidTime2)) < 0M) { dtTempBeginTime = DateTime.Parse(DateTime.Parse(OTDate).AddDays(1.0).ToString("yyyy/MM/dd") + " " + dtTempBeginTime.ToString("HH:mm")); dtTempEndTime = DateTime.Parse(DateTime.Parse(OTDate).AddDays(1.0).ToString("yyyy/MM/dd") + " " + dtTempEndTime.ToString("HH:mm")); } else { if (Convert.ToDecimal(exceptionQryBll.GetValue("condition3", strTempBeginTime, strTempEndTime, strMidTime, strMidTime2)) < 0M) { dtTempEndTime = DateTime.Parse(DateTime.Parse(OTDate).AddDays(1.0).ToString("yyyy/MM/dd") + " " + dtTempEndTime.ToString("HH:mm")); } } } else if (ShiftNo.StartsWith("B")) { if (Convert.ToDecimal(exceptionQryBll.GetValue("condition4", strTempBeginTime, strTempEndTime, strMidTime, strMidTime2)) < 0M) { dtTempBeginTime = DateTime.Parse(DateTime.Parse(OTDate).AddDays(1.0).ToString("yyyy/MM/dd") + " " + dtTempBeginTime.ToString("HH:mm")); dtTempEndTime = DateTime.Parse(DateTime.Parse(OTDate).AddDays(1.0).ToString("yyyy/MM/dd") + " " + dtTempEndTime.ToString("HH:mm")); } } list.Add("A", dtTempBeginTime); list.Add("B", dtTempEndTime); return list; } catch (Exception) { list.Add("A", dtTempBeginTime); list.Add("B", dtTempEndTime); return list; } }