示例#1
0
        /// <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();
        }
示例#2
0
        /// <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));
        }
示例#3
0
        /// <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);
        }