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); }
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); }
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); }