private void InitializeInfo(DataItemSchedule dataSchedule) { dataSchedule.StartTime = asUtc(StartTime); dataSchedule.EndTime = asUtc(EndTime); dataSchedule.Room = Room; dataSchedule.ScheduleWeek = Week; }
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; }
/// <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); }
/// <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); }
private ViewItemSchedule CreateSchedule(DataItemSchedule s) { return(new ViewItemSchedule(s)); }
private static ViewItemSchedule CreateSchedule(DataItemSchedule dataSchedule) { return(new ViewItemSchedule(dataSchedule)); }
public ViewItemSchedule(DataItemSchedule dataItem) : base(dataItem) { }
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(); } }
private bool IsChild(DataItemSchedule dataSchedule) { return(dataSchedule.UpperIdentifier == Identifier); }
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(); }); }