Beispiel #1
0
        public IList <SeatBox> Preparing(Entity campaign, Entity[] areas, DateTime start, DateTime end)
        {
            _organizationSeatingAreaSet = new Dictionary <Entity, OrganizationSeatingArea[]>();
            _seatsMap = new Dictionary <Entity, IEnumerable <ISeat> >();

            foreach (var area in areas)
            {
                _organizationSeatingAreaSet[area] =
                    _areaRepository.GetOrganizationSeatingArea(area.Id).Where(o => o.IsSelected == true && o.TargetSeat != null).OrderBy(o => o.Index).ToArray();
                _seatsMap[area] = ((IArea)area).Seats;
            }

            _priorityEmployeeSet = _areaRepository.GetPriorityEmployees(areas).ToUsefulDictionary();

            var seatBoxList = _seatBoxRepository.Search(areas, start, end, false);

            var seatIds = new string[seatBoxList.Count];
            var counter = 0;

            _seatBoxSet = seatBoxList.ToDictionary(o =>
            {
                o.Initial();
                var key          = o.Seat.Id.ToString();
                seatIds[counter] = key;
                counter++;
                return(key);
            });

            //TODO: need filter with OccupyStatus ? do not load labourRule only timebox object
            _participaters = _timeBoxRepository.GetTimeBoxesFrom(campaign, start, end);
            _agentsOnSeat  = _timeBoxRepository.GetTimeBoxes(seatIds, _participaters.Select(o => o.Id).ToArray(), start, end);

            return(seatBoxList);
        }
Beispiel #2
0
        public IList <SeatBox> GetSeatBoxesWithSeatArrangment(Guid[] seatIds, DateTime start, DateTime end)
        {
            var seatBoxList = _seatBoxRepository.GetByRagne(seatIds, start, end);

            var seatIdsParams = new string[seatBoxList.Count];
            var counter       = 0;
            var seatBoxSet    = seatBoxList.ToDictionary(o =>
            {
                o.Initial();
                var key = o.Seat.Id.ToString();
                seatIdsParams[counter] = key;
                counter++;
                return(key);
            });

            Func <string, Seat> getSeat = seat => seatBoxSet.ContainsKey(seat) ? seatBoxSet[seat].Seat : default(Seat);
            Func <string, SeatArrangement, bool> addSeatArrangement =
                (seat, seatArrangement) =>
            {
                //if(seatArrangement.IsCoverd(start, end))
                return(seatBoxSet[seat].AddOccupation(seatArrangement));
                //return false;
            };

            var extendedRange = new { Start = start.AddDays(-2), End = end.AddDays(2) };

            var agentsOnSeat = _timeBoxRepository.GetTimeBoxes(seatIdsParams, new Guid[0], extendedRange.Start, extendedRange.End);

            foreach (var timeBox in agentsOnSeat)
            {
                timeBox.TermSet.GenSeatArrangements(timeBox.Agent, getSeat, addSeatArrangement);
            }
            return(seatBoxList);
        }
Beispiel #3
0
        public IList <SeatBox> GetSeats(Schedule schedule, Guid[] excludedEmployeeIds, out IList <TimeBox> timeBoxes, out IList <Area> areas)
        {
            areas = _areaRepository.GetAreaByCampaign(schedule.Campaign);
            var results = _seatBoxRepository.Search(areas.ToArray(), schedule.Start, schedule.End, true);

            var seatIds = new string[results.Count];

            for (int i = 0; i < results.Count; i++)
            {
                var item = results[i];
                seatIds[i] = item.Id.ToString();
                item.Initial();
            }

            timeBoxes = _timeBoxRepository.GetTimeBoxes(seatIds, excludedEmployeeIds, schedule.Start, schedule.End);
            return(results);
        }