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