コード例 #1
0
 private void InitializeInfo(DataItemSchedule dataSchedule)
 {
     dataSchedule.StartTime    = asUtc(StartTime);
     dataSchedule.EndTime      = asUtc(EndTime);
     dataSchedule.Room         = Room;
     dataSchedule.ScheduleWeek = Week;
 }
コード例 #2
0
        protected override void PopulateFromDataItemOverride(BaseDataItem dataItem)
        {
            base.PopulateFromDataItemOverride(dataItem);

            DataItemSchedule schedule = (DataItemSchedule)dataItem;

            DayOfWeek    = schedule.DayOfWeek;
            StartTime    = DateTime.SpecifyKind(schedule.StartTime, DateTimeKind.Local);
            EndTime      = DateTime.SpecifyKind(schedule.EndTime, DateTimeKind.Local);
            Room         = schedule.Room;
            ScheduleWeek = schedule.ScheduleWeek;
        }
コード例 #3
0
        /// <summary>
        /// Returns a list of the schedules as it stands right now.
        /// </summary>
        /// <returns></returns>
        public List <ViewItemSchedule> PeekCurrentSchedules()
        {
            List <ViewItemSchedule> answer = new List <ViewItemSchedule>();

            foreach (var dayOfWeek in DayOfWeeks)
            {
                DataItemSchedule dataSchedule = new DataItemSchedule();
                InitializeInfo(dataSchedule);

                answer.Add(new ViewItemSchedule(dataSchedule));
            }

            return(answer);
        }
コード例 #4
0
        /// <summary>
        /// Call this BEFORE GetDeletedSchedules() and GetUpdatedSchedules(). This will mutate the existingSchedules list, so that it only contains the deleted schedules after it's done.
        /// It also mutates DayOfWeeks, removing each DayOfWeek as it's found.
        /// </summary>
        /// <returns></returns>
        public List <DataItemSchedule> GetUpdatedSchedules()
        {
            List <DataItemSchedule> answer = new List <DataItemSchedule>();

            for (int i = 0; i < DayOfWeeks.Count && existingSchedules.Count > 0; i++)
            {
                for (int x = 0; x < existingSchedules.Count; x++)
                {
                    if (existingSchedules[x].DayOfWeek == DayOfWeeks[i])
                    {
                        //if it was actually changed
                        if (existingSchedules[x].StartTime.TimeOfDay != StartTime ||
                            existingSchedules[x].EndTime.TimeOfDay != EndTime ||
                            !existingSchedules[x].Room.Equals(Room) ||
                            existingSchedules[x].ScheduleWeek != Week)
                        {
                            DataItemSchedule schedule = new DataItemSchedule()
                            {
                                Identifier = existingSchedules[x].Identifier
                            };

                            //copy in the new info
                            InitializeInfo(schedule);

                            answer.Add(schedule);
                        }

                        existingSchedules.RemoveAt(x);
                        DayOfWeeks.RemoveAt(i);
                        i--;
                        break;
                    }
                }
            }

            return(answer);
        }
コード例 #5
0
 private ViewItemSchedule CreateSchedule(DataItemSchedule s)
 {
     return(new ViewItemSchedule(s));
 }
コード例 #6
0
 private static ViewItemSchedule CreateSchedule(DataItemSchedule dataSchedule)
 {
     return(new ViewItemSchedule(dataSchedule));
 }
コード例 #7
0
 public ViewItemSchedule(DataItemSchedule dataItem) : base(dataItem)
 {
 }
コード例 #8
0
        public async System.Threading.Tasks.Task Save()
        {
            try
            {
                List <EditingClassScheduleItemView.ScheduleData> desiredSchedules = scheduleEditors.SelectMany(i => i.GetSchedules()).ToList();

                foreach (var s in desiredSchedules)
                {
                    if (s.StartTime.TimeOfDay > s.EndTime.TimeOfDay)
                    {
                        await new MessageDialog("End times must be greater than start times. Check your schedules and ensure that the end times are greater than the start times.", "Invalid end time").ShowAsync();
                        return;
                    }
                }

                List <DataItemSchedule> currentSchedules = Class.Schedules.Select(i => new DataItemSchedule()
                {
                    Identifier = i.Identifier
                }).ToList();


                DataChanges changes = new DataChanges();


                //if we have more desired schedules than existing, we add some extras
                for (int i = currentSchedules.Count; i < desiredSchedules.Count; i++)
                {
                    currentSchedules.Add(new DataItemSchedule()
                    {
                        Identifier      = Guid.NewGuid(),
                        UpperIdentifier = Class.Identifier
                    });
                }


                //if we have less desired schedules than existing, we delete some existing
                while (currentSchedules.Count > desiredSchedules.Count)
                {
                    changes.DeleteItem(currentSchedules.Last().Identifier);
                    currentSchedules.RemoveAt(currentSchedules.Count - 1);
                }


                //now merge changes
                for (int i = 0; i < currentSchedules.Count; i++)
                {
                    DataItemSchedule current = currentSchedules[i];
                    var desired = desiredSchedules[i];

                    current.StartTime    = desired.StartTime;
                    current.EndTime      = desired.EndTime;
                    current.Room         = desired.Room;
                    current.ScheduleWeek = desired.Week;
                    current.DayOfWeek    = desired.Day;
                    current.ScheduleType = PowerPlannerSending.Schedule.Type.Normal;

                    changes.Add(current);
                }

                //save changes
                //await App.SaveChanges(changes);

                close();
            }

            catch (Exception ex)
            {
                TelemetryExtension.Current?.TrackException(ex);
                await new MessageDialog("Failed to save. Your error has been sent to the developer.", "Error").ShowAsync();
            }
        }
コード例 #9
0
 private bool IsChild(DataItemSchedule dataSchedule)
 {
     return(dataSchedule.UpperIdentifier == Identifier);
 }
コード例 #10
0
        public void Save()
        {
            TryStartDataOperationAndThenNavigate(async delegate
            {
                if (StartTime >= EndTime)
                {
                    new PortableMessageDialog("Your end time must be greater than your start time.", "Invalid end time").Show();
                    return;
                }

                if (DayOfWeeks.Count == 0)
                {
                    new PortableMessageDialog("You must select at least one day of week. If you want to delete this time, use the delete option in the menu.", "No day of weeks").Show();
                    return;
                }

                var updatedAndNewSchedules = new List <DataItemSchedule>();

                Guid classId = AddParams != null ? AddParams.Class.Identifier : EditParams.GroupedSchedules.First().Class.Identifier;

                // Get the existing schedules
                List <ViewItemSchedule> existingSchedules = EditParams != null ? EditParams.GroupedSchedules.ToList() : new List <ViewItemSchedule>();

                for (int i = 0; i < DayOfWeeks.Count; i++)
                {
                    DayOfWeek dayOfWeek = DayOfWeeks[i];

                    // First try to find an existing schedule that already matches this day of week
                    ViewItemSchedule existingSchedule = existingSchedules.FirstOrDefault(s => s.DayOfWeek == dayOfWeek);

                    // If we couldn't find one, try picking a schedule that doesn't have any day of week matches
                    if (existingSchedule == null)
                    {
                        existingSchedule = existingSchedules.FirstOrDefault(s => !DayOfWeeks.Contains(s.DayOfWeek));
                    }

                    // Remove the schedule we added
                    if (existingSchedule != null)
                    {
                        existingSchedules.Remove(existingSchedule);
                    }

                    DataItemSchedule dataItem = new DataItemSchedule()
                    {
                        Identifier      = existingSchedule != null ? existingSchedule.Identifier : Guid.NewGuid(),
                        UpperIdentifier = classId,
                        StartTime       = AsUtc(StartTime),
                        EndTime         = AsUtc(EndTime),
                        Room            = Room,
                        DayOfWeek       = dayOfWeek,
                        ScheduleWeek    = ScheduleWeek,
                        ScheduleType    = PowerPlannerSending.Schedule.Type.Normal
                    };

                    updatedAndNewSchedules.Add(dataItem);
                }

                // Deleted schedules are any remaining existing schedules
                var deletedScheduleIds = existingSchedules.Select(i => i.Identifier).ToArray();

                DataChanges changes = new DataChanges();

                foreach (var s in updatedAndNewSchedules)
                {
                    changes.Add(s);
                }

                foreach (var id in deletedScheduleIds)
                {
                    changes.DeleteItem(id);
                }

                if (!changes.IsEmpty())
                {
                    await PowerPlannerApp.Current.SaveChanges(changes);
                }
            }, delegate
            {
                this.RemoveViewModel();
            });
        }