private void AnalyzeOneDay(vw_employment _emp, tatrosdtl curRosterDtl, tatshift curShift, tatroshi curRosterHistory, DateTime _calcStart, DateTime _calcEnd, totaplctn _otApp, bool _isSaveDetail) { store = new AtCalculationInfo(); store.EmpInfo = _emp; store.CurDay = _calcStart; //curDayR = store.CurDay; //取得标准班次设定时间 analatBll.GetStandardValue(curRosterDtl, curShift, ref store); //判断是否是休息日 analatBll.CheckIsRestDay(curRosterDtl, curShift, curRosterHistory, lstPriCalendar, ref store); AnalyzeOT(ref store, curShift, lstOriAtData, _isSaveDetail); TotalOTHours += store.OTHours; }
public void DoAnalyze(tlvleaapp _leaveApp, bool _isSaveDetail) { for (int i = 0; i < lstStaff.Count; i++) { TotalLvHours = 0; TotalLvDays = 0; try { DateTime calcStart = AnalStartDate; DateTime calcEnd = AnalEndDate; DateTime tmpStart = calcStart; DateTime tmpEnd; //如果请假跨天,需要拆分成多条数据 for (float k = 0; k < (calcEnd - calcStart).TotalDays; k++) { if ((calcEnd - tmpStart).TotalDays > 1) { tmpEnd = Convert.ToDateTime(UtilDatetime.FormatDate1(tmpStart.AddDays(1)) + " 00:00:00"); } else { tmpEnd = calcEnd; } //取轮班历史 List <tatroshi> lstEmpRosterHistory = lstRosterHistory.Where(p => p.emno == lstStaff[i].emno && ((p.exdt.HasValue == false) || (p.exdt.Value > tmpEnd)) && (p.efdt <= tmpStart) ).ToList(); //确定轮班和班次 if (lstEmpRosterHistory.Count > 0) { //如果发现多条,则只取第一条 tatroshi curRosterHistory = lstEmpRosterHistory[0]; List <tatrosdtl> lstEmpRosterDtl = lstRosterDetails.Where(p => p.rscd == curRosterHistory.rscd).ToList(); //确定轮班明细和班次 tatrosdtl curRosterDtl = getCurrentRoster(curRosterHistory, lstEmpRosterDtl, tmpStart); tatshift curShift = curRosterDtl.tatshift; //分析此天的休假 AnalyzeOneDay(lstStaff[i], curRosterDtl, curShift, curRosterHistory, tmpStart, tmpEnd, _leaveApp, _isSaveDetail); tmpStart = tmpEnd; } else { //如果没有定义轮班该如何计算???? } } } catch (Exception ex) { throw ex; } } }
private void AnalyzeOneDay(vw_employment _emp, tatrosdtl curRosterDtl, tatshift curShift, tatroshi curRosterHistory, DateTime _calcStart, DateTime _calcEnd, tlvleaapp _leaveApp, bool _isSaveDetail) { store = new AtCalculationInfo(); store.EmpInfo = _emp; store.CurDay = _calcStart; //curDayR = store.CurDay; //取得标准班次设定时间 analatBll.GetStandardValue(curRosterDtl, curShift, ref store); //判断是否是休息日 analatBll.CheckIsRestDay(curRosterDtl, curShift, curRosterHistory, lstPriCalendar, ref store); if (store.IsRestDay == false) { #region 非休息日 if ((_calcStart <= store.StdTimeIn) && (_calcEnd >= store.StdTimeOut)) { //抓班次设定的工作小时数和天数 store.LvStart = store.StdTimeIn; store.LvEnd = store.StdTimeOut; store.LvHours = Convert.ToDouble(curShift.wkhr); store.LvDays = Convert.ToDouble(curShift.wkda); } else { if (_calcStart <= store.StdTimeIn) { store.LvStart = store.StdTimeIn; } else { store.LvStart = _calcStart; } if (_calcEnd >= store.StdTimeOut) { store.LvEnd = store.StdTimeOut; } else { store.LvEnd = _calcEnd; } store.LvHours = CountLeaveTime(store.LvStart, store.LvEnd, curShift, store); store.LvHours = Math.Round(store.LvHours, 2); //计算天数 store.LvDays = Math.Round((store.LvHours / Convert.ToDouble(curShift.wkhr)) * Convert.ToDouble(curShift.wkda), 2); } #endregion } else { #region 休息日 store.LvHours = 0; store.LvDays = 0; #endregion } TotalLvHours += store.LvHours; TotalLvDays += store.LvDays; if ((_isSaveDetail) && (_leaveApp != null) && (store.LvHours > 0)) { //如果需要保存则保存每一条明细到DTL表 tlvleaapd newdtl = new tlvleaapd(); newdtl.emno = _emp.emno; newdtl.days = store.LvDays; newdtl.hurs = store.LvHours; newdtl.ltcd = _leaveApp.ltcd; newdtl.apno = _leaveApp.apno; newdtl.totm = store.LvEnd.Value; newdtl.frtm = store.LvStart.Value; DoInsert <tlvleaapd>(newdtl); } }