コード例 #1
0
 public void Reload(ref SeatConsolidationRule entity)
 {
     if (entity.SaftyGetProperty<bool, IEditingObject>(o => o.IsNew))
     {
         _seatConsolidationRepository.Evict(entity);
     }
     else
     {
         _seatConsolidationRepository.Refresh(ref entity);
     }
 }
コード例 #2
0
 public void Reload(ref SeatConsolidationRule entity)
 {
     if (entity.SaftyGetProperty <bool, IEditingObject>(o => o.IsNew))
     {
         _seatConsolidationRepository.Evict(entity);
     }
     else
     {
         _seatConsolidationRepository.Refresh(ref entity);
     }
 }
コード例 #3
0
        // --- Occupation --- //
        private IEnumerable <List <SeatArrangement> > GetOccupationByConsolidationRule(SeatConsolidationRule rule)
        {
            List <List <SeatArrangement> > result = new List <List <SeatArrangement> >();

            Func <int, bool> rankFiter = rank => rule.MaxRank >= rank && rule.MinRank <= rank;

            Func <IEnumerable <Skill>, bool> skillsFiter = agentSkills =>
            {
                var agnetSkillsCount = agentSkills.Count();
                if (rule.MatchWholeSkills && rule.Skills.Count() != agnetSkillsCount)
                {
                    return(false);
                }
                //return rule.Skills.Intersect(agentSkills).Count() == agnetSkillsCount;
                return(agentSkills.Intersect(rule.Skills).Count() == rule.Skills.Count);
            };

            Func <ISeatingTerm, bool> assignmentTypeFilter = seatingTerm =>
            {
                var assignment = (AssignmentBase)seatingTerm;
                if (rule.AssignmentTypes.Count == 0)
                {
                    return(true);
                }
                return(rule.AssignmentTypes.Any(o => o.Name == assignment.Text));

                //return rule.AssignmentTypes.Contains(assignment.Style as AssignmentType);
            };

            foreach (var org in rule.Organizations)
            {
                foreach (var seatArrList in GetOccupationByOrganization(org, rankFiter, skillsFiter, assignmentTypeFilter))
                {
                    bool isAdded = false;
                    foreach (var seatArrangement in seatArrList)
                    {
                        var    baseLineTime = new DateTime(seatArrangement.Start.Year, seatArrangement.Start.Month, seatArrangement.Start.Day);
                        double min          = (seatArrangement.Start - baseLineTime).TotalMinutes;
                        if (min >= rule.StartValue && min <= rule.EndValue &&
                            rule.AppliedDayOfWeeks[(int)baseLineTime.DayOfWeek])
                        {
                            isAdded = true;
                            break;
                        }
                        baseLineTime = baseLineTime.AddDays(-1.0);
                        min          = (seatArrangement.Start - baseLineTime).TotalMinutes;
                        if (rule.EndValue >= 1440 && min >= rule.StartValue && min <= rule.EndValue &&
                            rule.AppliedDayOfWeeks[(int)baseLineTime.DayOfWeek])
                        {
                            isAdded = true;
                            break;
                        }
                    }
                    if (isAdded)
                    {
                        result.Add(seatArrList);
                    }
                }
            }
            return(result.OrderBy(o => o[0].Start));
        }
コード例 #4
0
 public void Delete(SeatConsolidationRule rule)
 {
     _seatConsolidationRepository.MakeTransient(rule);
 }
コード例 #5
0
 public void Save(SeatConsolidationRule rule)
 {
     _seatConsolidationRepository.MakePersistent(rule);
 }
コード例 #6
0
        public SeatConsolidationRule Reload(SeatConsolidationRule rule)
        {
            _seatConsolidationRepository.Evict(rule);

            return _seatConsolidationRepository.Get(rule.Id);
        }
コード例 #7
0
ファイル: SeatingServiceModel.cs プロジェクト: Mrding/Ribbon
        // --- Occupation --- //
        private IEnumerable<List<SeatArrangement>> GetOccupationByConsolidationRule(SeatConsolidationRule rule)
        {
            List<List<SeatArrangement>> result = new List<List<SeatArrangement>>();

            Func<int, bool> rankFiter = rank => rule.MaxRank >= rank && rule.MinRank <= rank;

            Func<IEnumerable<Skill>, bool> skillsFiter = agentSkills =>
            {
                var agnetSkillsCount = agentSkills.Count();
                if (rule.MatchWholeSkills && rule.Skills.Count() != agnetSkillsCount)
                    return false;
                //return rule.Skills.Intersect(agentSkills).Count() == agnetSkillsCount;
                return agentSkills.Intersect(rule.Skills).Count() == rule.Skills.Count;
            };

            Func<ISeatingTerm, bool> assignmentTypeFilter = seatingTerm =>
            {
                var assignment = (AssignmentBase)seatingTerm;
                if (rule.AssignmentTypes.Count == 0)
                    return true;
                return rule.AssignmentTypes.Any(o => o.Name == assignment.Text);

                //return rule.AssignmentTypes.Contains(assignment.Style as AssignmentType);
            };

            foreach (var org in rule.Organizations)
            {
                foreach (var seatArrList in GetOccupationByOrganization(org, rankFiter, skillsFiter, assignmentTypeFilter))
                {
                    bool isAdded = false;
                    foreach (var seatArrangement in seatArrList)
                    {
                        var baseLineTime = new DateTime(seatArrangement.Start.Year, seatArrangement.Start.Month, seatArrangement.Start.Day);
                        double min = (seatArrangement.Start - baseLineTime).TotalMinutes;
                        if (min >= rule.StartValue && min <= rule.EndValue
                            && rule.AppliedDayOfWeeks[(int)baseLineTime.DayOfWeek])
                        {
                            isAdded = true;
                            break;
                        }
                        baseLineTime = baseLineTime.AddDays(-1.0);
                        min = (seatArrangement.Start - baseLineTime).TotalMinutes;
                        if (rule.EndValue >= 1440 && min >= rule.StartValue && min <= rule.EndValue
                            && rule.AppliedDayOfWeeks[(int)baseLineTime.DayOfWeek])
                        {
                            isAdded = true;
                            break;
                        }
                    }
                    if (isAdded)
                        result.Add(seatArrList);
                }
            }
            return result.OrderBy(o => o[0].Start);
        }
コード例 #8
0
 public void Delete(SeatConsolidationRule rule)
 {
     _seatConsolidationRepository.MakeTransient(rule);
 }
コード例 #9
0
 public void Save(SeatConsolidationRule rule)
 {
     _seatConsolidationRepository.MakePersistent(rule);
 }
コード例 #10
0
        public SeatConsolidationRule Reload(SeatConsolidationRule rule)
        {
            _seatConsolidationRepository.Evict(rule);

            return(_seatConsolidationRepository.Get(rule.Id));
        }