/// <summary> /// 基本代换班 /// </summary> public void InitializeSwapingForTerm(long?assignment) { if (!assignment.HasValue) { return; } InitializeTerm(assignment); CurrentTerms = TimeBox.CollideTerms(Term).ToList(); SubEvents = CurrentTerms.Where(o => o.Id != Term.Id).OrderBy(o => o.Level).ToList(); HasLockedAssignment = Term.Locked; HasLockedSubEvent = CurrentTerms.Any(o => o.Locked); HasAbsentEvent = CurrentTerms.SpecificTerm <AbsentEvent>().Any(); }
/// <summary> /// 事件代换班 /// </summary> public void InitializeSwapingForSubEvent(Pair <DateRange> dateRange, long subevent) { var tempassignment = TimeBox.CollideTerms(dateRange.Applier).SpecificTerm <AssignmentBase>().OrderBy(o => o.Start).ToList(); if (tempassignment.Count == 0) { return; } InitializeTerm(subevent); CurrentTerms = TimeBox.CenterTerms(new DateRange(tempassignment[0].Start, tempassignment[tempassignment.Count - 1].End)).ToList(); AbsentEvents = CurrentTerms.SpecificTerm <AbsentEvent>().ToList(); HasAbsentEvent = AbsentEvents.CollideTerms(dateRange.Applier).Any() || AbsentEvents.CollideTerms(dateRange.Replier).Any(); //验证是否重叠 HasExchanged = CurrentTerms.Any(o => o.Level > 0 && o.Id != subevent && o.IsCoverd(dateRange.Replier)); }
/// <summary> /// 时段代换班(scheduleDate用于取TimeBox班表,如果计算工时则需要获取整个排班期班表,如果换班则需要取两人交换范围的班表,dateRange是交换时间段) /// </summary> public void InitializeSwapingForDateRange(DateRange dateRange) { var tempassignment = TimeBox.CollideTerms(dateRange).SpecificTerm <AssignmentBase>().OrderBy(o => o.Start).ToList(); if (tempassignment.Count == 0) { return; } CurrentTerms = TimeBox.CenterTerms(new DateRange(tempassignment[0].Start, tempassignment[tempassignment.Count - 1].End)).ToList(); //初始化班 TempTerms = CurrentTerms.SpecificTerm <AssignmentBase>().ToList(); HasAbsentEvent = CurrentTerms.CollideTerms(dateRange).SpecificTerm <AbsentEvent>().Any(); AbsentEvents = CurrentTerms.SpecificTerm <AbsentEvent>().ToList(); HasLockedSubEvent = CurrentTerms.Any(o => o.Level > 0 && o.Locked); HasTimeOff = CurrentTerms.CollideTerms(dateRange).SpecificTerm <TimeOff>().Any(); HasShrink = CurrentTerms.CollideTerms(dateRange).SpecificTerm <Shrink>().Any(); HasLockedAssignment = TempTerms.Any(o => o.Locked); }