private void OnAppointmentSaving(object sender, AppointmentSavingEventArgs e)
 {
     var appointment = e.Appointment as CommonModel;
     var oldParent = appointment.GetOldParent();
     var newParent = appointment.Parent;
     this.ViewModel.UpdateParent(oldParent, newParent, appointment);
 }
        public IEnumerable<IResult> SchedulerClosedDaysSaving(object sender, AppointmentSavingEventArgs e)
        {
            AppClosedDay savingAppointment = ((AppClosedDay)e.Appointment);
            if (e.Appointment.IsNotNull()) {
                if (savingAppointment.IsReadOnly) {
                    // Cancels the saving of data on the VM
                    this.schedulerDialogViewModelHandle.Cancel();
                    WindowManager.Value.Alert("Record is Read Only", LastSchedulerMessage);
                    AppClosedDay failedRecord = SessionInfo.Instance.ClosedDays.Select(x => x).Where(x => x.UniqueId.ToString() == savingAppointment.UniqueId).FirstOrDefault();
                    failedRecord.IsReadOnly = false;
                    yield break;
                }

                savingAppointment.IsDirty = true;

                // Workaround
                savingAppointment.Start = savingAppointment.IsAllDayEvent ? DateEx.GetStartOfDay(savingAppointment.Start) : savingAppointment.Start;
                savingAppointment.End = savingAppointment.IsAllDayEvent ? DateEx.GetEndOfDay(savingAppointment.End) : savingAppointment.End;

                // Set Default Type
                if (savingAppointment.TypeId.IsNull()) {
                    savingAppointment.TypeId = 2; // Personal Schedule Item
                }
            }
        }
        public IEnumerable<IResult> SchedulerAppointmentSaving(object sender, AppointmentSavingEventArgs e)
        {
            AppAppointment savingAppointment = ((AppAppointment)e.Appointment);
            if (e.Appointment.IsNotNull()) {
                if (savingAppointment.IsReadOnly) {
                    // Cancels the saving of data on the VM
                    this.schedulerDialogViewModelHandle.Cancel();
                    WindowManager.Value.Alert("Record is Read Only", LastSchedulerMessage);
                    AppAppointment failedRecord = SessionInfo.Instance.Appointments.Select(x => x).Where(x => x.UniqueId.ToString() == savingAppointment.UniqueId).FirstOrDefault();
                    failedRecord.IsReadOnly = false;
                    yield break;
                }

                savingAppointment.IsDirty = true;

                // Workaround
                savingAppointment.Start = savingAppointment.IsAllDayEvent ? DateEx.GetStartOfDay(savingAppointment.Start) : savingAppointment.Start;
                savingAppointment.End = savingAppointment.IsAllDayEvent ? DateEx.GetEndOfDay(savingAppointment.End) : savingAppointment.End;

                // Check Default Resource
                if (savingAppointment.Resources.Count == 0) {
                    var dr = savingAppointment.Resources.Select(s => s.ResourceName == defaultResource.ResourceName).FirstOrDefault();
                    if (!dr) {
                        savingAppointment.Resources.Add(defaultResource);
                    }
                }

                // Set Default Type
                if (savingAppointment.TypeId.IsNull()) {
                    savingAppointment.TypeId = 1; // Personal Schedule Item
                }

                // Set Category Based on Resource Selected
                int? catid = ListService.Instance.ScheduleCalendars.Select(x => x).Where(x => x.CalendarName == (savingAppointment.Resources.Select(r => r).Where(r => r.ResourceType == "Calendar")).FirstOrDefault().ResourceName).FirstOrDefault().Clone().CalendarId;
                if (catid.IsNotNull()) {
                    ScheduleCalendar sc = ListService.Instance.ScheduleCalendars.Select(x => x).Where(x => x.CalendarId == catid).FirstOrDefault().Clone();
                    if (sc != null) {
                        savingAppointment.Category = new Category(sc.CalendarName, UILib.GetSolidColorBrushFromString(sc.ColorString));
                    }
                }
                //rp = ExportToString(savingAppointment);
                ////rp =  RecurrencePatternHelper.RecurrencePatternToString(savingAppointment.RecurrenceRule.Pattern);
                //Debug.WriteLine(rp);
                // Send to server
            }
        }