Exemple #1
0
        public GroupClassAggregate CreateSchedule(IUpdateGroupClass request)
        {
            var startDate       = request.Start.ToUniversalTime();
            var duration        = request.DurationTimeInMinutes;
            var numberOfClasses = request.NumberOfClasses;

            if (request.DayOfWeeks.Count <= 0)
            {
                State.ClassDaysOfWeek.Clear();


                State.Schedule.Clear();
                return(this);
            }

            var classTimes         = CreateSchedule(request, numberOfClasses, startDate, duration);
            List <ClassTime> times = State.Schedule.ToList();
            //Find new
            List <ClassTime> newDays     = GetNewDays(classTimes, times);
            List <ClassTime> removedDays = GetRemovedDays(classTimes, times);

            foreach (var removedDay in removedDays)
            {
                State.Schedule.Remove(removedDay);
            }

            State.Schedule.AddRange(newDays);

            return(this);
        }
Exemple #2
0
        private List <ClassTime> CreateSchedule(IUpdateGroupClass request, int numberOfClasses, DateTime startDate, int duration)
        {
            var numberOfWeeks           = numberOfClasses / request.DayOfWeeks.Count;
            List <ClassTime> classTimes = new List <ClassTime>();
            int numberOfClass           = 1;

            for (int i = 0; i < numberOfWeeks; i++)
            {
                foreach (ClassDayOfWeekDto requestDayOfWeek in request.DayOfWeeks)
                {
                    DateTime nextDayOfWeeks = FindNearestOfDayOfWeek(startDate, requestDayOfWeek);
                    nextDayOfWeeks = nextDayOfWeeks.Add(requestDayOfWeek.BeginTime).AddMinutes(request.UtcOffsetInMinutes);

                    ClassTime classTime = ClassTimeAggregate.New()
                                          .FromGroupClass(State)
                                          .WithNumberOfClass(numberOfClass++)
                                          .WithNumberOfClasses(numberOfClasses)
                                          .AddParticipant(State.Participants.Select(x => x.User).ToList(), PresenceType.None)
                                          .WithDate(nextDayOfWeeks, duration).State;

                    classTimes.Add(classTime);
                }

                startDate = startDate.AddDays(7);
            }

            return(classTimes);
        }
Exemple #3
0
 public GroupClassAggregate ChangeParticipantRole(IUpdateGroupClass command)
 {
     State.Participants.ForEach(updatedParticipant =>
     {
         ParticipantDto participantDto = command.Participants.First(p => p.Id == updatedParticipant.UserId);
         ParticipantGroupClass participantGroupClass = State.Participants.First(x => x.UserId == updatedParticipant.UserId);
         participantGroupClass.WithRole(participantDto.Role);
     });
     return(this);
 }
Exemple #4
0
 public GroupClassAggregate UpdateAll(IUpdateGroupClass update)
 {
     State.DurationTimeInMinutes = update.DurationTimeInMinutes;
     State.NumberOfClasses       = update.NumberOfClasses;
     State.StartClasses          = update.Start.ToUniversalTime();
     State.ParticipantLimits     = update.ParticipantLimit;
     State.IsSolo    = update.IsSolo;
     State.Name      = update.Name;
     State.PassPrice = update.PassPrice;
     return(this);
 }
        public static UpdateViewModel FromCommand(IUpdateGroupClass cmd, bool isEdit)
        {
            UpdateViewModel updateViewModel = new UpdateViewModel(isEdit)
            {
                GroupClassId          = cmd.GroupClassId,
                Name                  = cmd.Name,
                Start                 = cmd.Start,
                Anchors               = cmd.Anchors,
                RoomId                = cmd.RoomId,
                Participants          = cmd.Participants,
                IsSolo                = cmd.IsSolo,
                GroupLevelId          = cmd.GroupLevelId,
                ParticipantLimit      = cmd.ParticipantLimit,
                DayOfWeeks            = cmd.DayOfWeeks,
                DurationTimeInMinutes = cmd.DurationTimeInMinutes,
                NumberOfClasses       = cmd.NumberOfClasses
            };

            return(updateViewModel);
        }
Exemple #6
0
        public GroupClassAggregate UpdateDaysOfWeek(IUpdateGroupClass update, SchoolManagementContext context)
        {
            List <ClassDayOfWeek> classDayOfWeeks = update.DayOfWeeks.Select(x => new ClassDayOfWeek()
            {
                DayOfWeek  = x.DayOfWeek,
                GroupClass = State,
                Hour       = x.BeginTime.LocalTimeSpanToUTC(update.UtcOffsetInMinutes)
            }).ToList();

            if (State.ClassDaysOfWeek.Count == 0)
            {
                State.ClassDaysOfWeek.AddRange(classDayOfWeeks);
            }
            else
            {
                State.ClassDaysOfWeek.Clear();
                State.ClassDaysOfWeek.AddRange(classDayOfWeeks);
            }

            return(this);
        }