public Luna.Core.Tuple <IEnumerable <Campaign>, IList <Organization> > LoadMisc()
        {
            var misc = new Core.Tuple <IEnumerable <Campaign>, IList <Organization> >
                           (_campaignRepository.GetAll(), _organizationRepository.GetHierarchicalTree());

            return(misc);
        }
        public Schedule EditSchedule(Guid scheduleId, out Luna.Core.Tuple <IEnumerable <ServiceQueue>, IEnumerable <Organization> > relations)
        {
            var schedule = _repository.Get(scheduleId);

            relations = new Core.Tuple <IEnumerable <ServiceQueue>, IEnumerable <Organization> >(
                _serviceQueueRepository.GetServiceQueueByCampaign(schedule.Campaign as Campaign),
                _organizationRepository.GetByCampaign(schedule.Campaign));
            return(schedule);
        }
Beispiel #3
0
        public Schedule CreateNewSchedule(Campaign campaign, out Luna.Core.Tuple<IEnumerable<ServiceQueue>, IEnumerable<Organization>> relations)
        {
            var last = _repository.FindLast(campaign);

            relations = new Core.Tuple<IEnumerable<ServiceQueue>, IEnumerable<Organization>>(
               _serviceQueueRepository.GetServiceQueueByCampaign(campaign),
               campaign.Organizations.OfType<Organization>());

            IDictionary<ServiceQueue, int> defaultSvcQueues;
            ICollection<Entity> defaultOrgs;

            if (last != null)
            {
                defaultSvcQueues = new Dictionary<ServiceQueue, int>(last.ServiceQueues);
                defaultOrgs = new HashedSet<Entity>(last.Organizations);
            }
            else
            {
                defaultSvcQueues = relations.Item1.ToDictionary(o => o, o => 0);
                defaultOrgs = new HashedSet<Entity>(relations.Item2.Cast<Entity>().ToList());
            }

            var defaultStart = last == null ? DateTime.Today : last.End;

            var schedule = _entityFactory.Create<Schedule>(new Dictionary<string, object>
                                                               {
                                                                   {"Campaign", campaign},
                                                                   { "ServiceQueues", defaultSvcQueues },
                                                                   {"Organizations",defaultOrgs},
                                                                   {"Start", defaultStart},
                                                                   {"End", defaultStart.AddMonths(1)},
                                                                   {"Name", string.Format("{0:MMM}", defaultStart)}
                                                               });

            return schedule;
        }
        public Schedule CreateNewSchedule(Campaign campaign, out Luna.Core.Tuple <IEnumerable <ServiceQueue>, IEnumerable <Organization> > relations)
        {
            var last = _repository.FindLast(campaign);

            relations = new Core.Tuple <IEnumerable <ServiceQueue>, IEnumerable <Organization> >(
                _serviceQueueRepository.GetServiceQueueByCampaign(campaign),
                campaign.Organizations.OfType <Organization>());

            IDictionary <ServiceQueue, int> defaultSvcQueues;
            ICollection <Entity>            defaultOrgs;

            if (last != null)
            {
                defaultSvcQueues = new Dictionary <ServiceQueue, int>(last.ServiceQueues);
                defaultOrgs      = new HashedSet <Entity>(last.Organizations);
            }
            else
            {
                defaultSvcQueues = relations.Item1.ToDictionary(o => o, o => 0);
                defaultOrgs      = new HashedSet <Entity>(relations.Item2.Cast <Entity>().ToList());
            }

            var defaultStart = last == null ? DateTime.Today : last.End;

            var schedule = _entityFactory.Create <Schedule>(new Dictionary <string, object>
            {
                { "Campaign", campaign },
                { "ServiceQueues", defaultSvcQueues },
                { "Organizations", defaultOrgs },
                { "Start", defaultStart },
                { "End", defaultStart.AddMonths(1) },
                { "Name", string.Format("{0:MMM}", defaultStart) }
            });

            return(schedule);
        }
Beispiel #5
0
        /// <summary>
        /// 切割时间块
        /// </summary>
        /// <param name="a">A.</param>
        /// <param name="b">The b.</param>
        /// <returns></returns>
        public static IList <Core.Tuple <DateRange, RegionType> > Cut(DateRange a, DateRange b)
        {
            IList <Core.Tuple <DateRange, RegionType> > result = new List <Core.Tuple <DateRange, RegionType> >();

            if (a.Start < b.Start)
            {
                if (a.End <= b.Start)
                {
                    //|__A__|
                    //       |__B__|

                    var t1 = new Core.Tuple <DateRange, RegionType>(a, RegionType.Applier);
                    var t2 = new Core.Tuple <DateRange, RegionType>(b, RegionType.Replier);
                    return(new List <Core.Tuple <DateRange, RegionType> > {
                        t1, t2
                    });
                }
                if (a.End < b.End)
                {
                    //       |_A_|
                    //           |_B_|

                    DateRange r1 = new DateRange(a.Start, b.Start);
                    DateRange r2 = new DateRange(b.Start, a.End);
                    DateRange r3 = new DateRange(a.End, b.End);
                    var       t1 = new Core.Tuple <DateRange, RegionType>(r1, RegionType.Applier);
                    var       t2 = new Core.Tuple <DateRange, RegionType>(r2, RegionType.Overlap);
                    var       t3 = new Core.Tuple <DateRange, RegionType>(r3, RegionType.Replier);
                    return(new List <Core.Tuple <DateRange, RegionType> > {
                        t1, t2, t3
                    });
                }
                if (a.End == b.End)
                {
                    //      |__A__|
                    //          |_B_|

                    DateRange r1 = new DateRange(a.Start, b.Start);
                    DateRange r2 = b;
                    var       t1 = new Core.Tuple <DateRange, RegionType>(r1, RegionType.Applier);
                    var       t2 = new Core.Tuple <DateRange, RegionType>(r2, RegionType.Overlap);
                    return(new List <Core.Tuple <DateRange, RegionType> > {
                        t1, t2
                    });
                }
                else
                {
                    //      |__A__|
                    //        |_B_|

                    DateRange r1 = new DateRange(a.Start, b.Start);
                    DateRange r2 = b;
                    DateRange r3 = new DateRange(b.End, a.End);
                    var       t1 = new Core.Tuple <DateRange, RegionType>(r1, RegionType.Applier);
                    var       t2 = new Core.Tuple <DateRange, RegionType>(r2, RegionType.Overlap);
                    var       t3 = new Core.Tuple <DateRange, RegionType>(r3, RegionType.Applier);
                    return(new List <Core.Tuple <DateRange, RegionType> > {
                        t1, t2, t3
                    });
                }
            }

            if (a.Start == b.Start)
            {
                if (a.End < b.End)
                {
                    //      |_A_|
                    //      |__B__|

                    DateRange r1 = a;
                    DateRange r2 = new DateRange(a.End, b.End);
                    var       t1 = new Core.Tuple <DateRange, RegionType>(r1, RegionType.Overlap);
                    var       t2 = new Core.Tuple <DateRange, RegionType>(r2, RegionType.Replier);
                    return(new List <Core.Tuple <DateRange, RegionType> > {
                        t1, t2
                    });
                }
                if (a.End == b.End)
                {
                    //      |__A__|
                    //      |__B__|

                    var t1 = new Core.Tuple <DateRange, RegionType>(a, RegionType.Overlap);
                    return(new List <Core.Tuple <DateRange, RegionType> > {
                        t1
                    });
                }
                else
                {
                    //      |__A__|
                    //      |_B_|

                    DateRange r1 = b;
                    DateRange r2 = new DateRange(b.End, a.End);
                    var       t1 = new Core.Tuple <DateRange, RegionType>(r1, RegionType.Overlap);
                    var       t2 = new Core.Tuple <DateRange, RegionType>(r2, RegionType.Applier);
                    return(new List <Core.Tuple <DateRange, RegionType> > {
                        t1, t2
                    });
                }
            }

            if (a.Start > b.Start)
            {
                if (a.End < b.End)
                {
                    //     |_A_|
                    //    |__B__|

                    DateRange r1 = new DateRange(b.Start, a.Start);
                    DateRange r2 = a;
                    DateRange r3 = new DateRange(a.End, b.End);
                    var       t1 = new Core.Tuple <DateRange, RegionType>(r1, RegionType.Replier);
                    var       t2 = new Core.Tuple <DateRange, RegionType>(r2, RegionType.Overlap);
                    var       t3 = new Core.Tuple <DateRange, RegionType>(r3, RegionType.Replier);
                    return(new List <Core.Tuple <DateRange, RegionType> > {
                        t1, t2, t3
                    });
                }
                if (a.End == b.End)
                {
                    //      |_A_|
                    //    |__B_|

                    DateRange r1 = new DateRange(b.Start, a.Start);
                    DateRange r2 = a;
                    var       t1 = new Core.Tuple <DateRange, RegionType>(r1, RegionType.Replier);
                    var       t2 = new Core.Tuple <DateRange, RegionType>(r2, RegionType.Overlap);
                    return(new List <Core.Tuple <DateRange, RegionType> > {
                        t1, t2
                    });
                }
                if (a.Start >= b.End)
                {
                    //          |__A__|
                    //|__B__|

                    var t1 = new Core.Tuple <DateRange, RegionType>(a, RegionType.Applier);
                    var t2 = new Core.Tuple <DateRange, RegionType>(b, RegionType.Replier);
                    return(new List <Core.Tuple <DateRange, RegionType> > {
                        t1, t2
                    });
                }
                else
                {
                    //      |__A__|
                    //    |__B__|

                    DateRange r1 = new DateRange(b.Start, a.Start);
                    DateRange r2 = new DateRange(a.Start, b.End);
                    DateRange r3 = new DateRange(b.End, a.End);
                    var       t1 = new Core.Tuple <DateRange, RegionType>(r1, RegionType.Replier);
                    var       t2 = new Core.Tuple <DateRange, RegionType>(r2, RegionType.Overlap);
                    var       t3 = new Core.Tuple <DateRange, RegionType>(r3, RegionType.Applier);
                    return(new List <Core.Tuple <DateRange, RegionType> > {
                        t1, t2, t3
                    });
                }
            }

            return(result);
        }
Beispiel #6
0
 public Schedule EditSchedule(Guid scheduleId, out Luna.Core.Tuple<IEnumerable<ServiceQueue>, IEnumerable<Organization>> relations)
 {
     var schedule = _repository.Get(scheduleId);
     relations = new Core.Tuple<IEnumerable<ServiceQueue>, IEnumerable<Organization>>(
     _serviceQueueRepository.GetServiceQueueByCampaign(schedule.Campaign as Campaign),
     _organizationRepository.GetByCampaign(schedule.Campaign));
     return schedule;
 }
Beispiel #7
0
 public Luna.Core.Tuple<IEnumerable<Campaign>, IList<Organization>> LoadMisc()
 {
     var misc = new Core.Tuple<IEnumerable<Campaign>, IList<Organization>>
   (_campaignRepository.GetAll(), _organizationRepository.GetHierarchicalTree());
     return misc;
 }