public async Task DoCrea(DateTime start, DateTime fine) { var pageEditVM = new EventDetailEditVM { IsNew = true, CalendarioVM = VM, StartDate = start, StartTime = start.TimeOfDay, EndDate = fine, EndTime = fine.TimeOfDay, ObjAllEvents = VM.EventsObj }; pageEditVM.UpdateVM(); await Navigation.PushAsync(new EventDetailViewEdit(pageEditVM)); }
public EventDetailViewEdit(EventDetailEditVM vm) { VM = vm ?? new EventDetailEditVM(); VM.UIPage = this; BindingContext = VM; var stackIntero = new StackLayout { Orientation = StackOrientation.Vertical }; var image = new Image { }; image.Bind(nameof(EventDetailEditVM.Img)); var grigliaData = new Grid { RowDefinitions = new RowDefinitionCollection { new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, }, ColumnDefinitions = new ColumnDefinitionCollection { new ColumnDefinition { Width = GridLength.Star }, } }; var inizio = new DateTimePickerWithLabel { LabelText = "Inizio", LabelTextColor = Color.Navy }; inizio.Bind(nameof(EventDetailEditVM.StartDate), nameof(EventDetailEditVM.StartTime)); var fine = new DateTimePickerWithLabel { LabelText = "Fine", LabelTextColor = Color.Navy, }; fine.Bind(nameof(EventDetailEditVM.EndDate), nameof(EventDetailEditVM.EndTime)); grigliaData.AddChild(inizio, 0, 0); grigliaData.AddChild(fine, 1, 0); var labelStato = new LabelWithLabelV2 { LabelText = "Stato" }; labelStato.Bind(nameof(EventDetailEditVM.Stato)); var labelAutore = new LabelWithLabelV2 { LabelText = "Richiedente" }; labelAutore.Bind(nameof(EventDetailEditVM.Autore)); var labelTitolo = new EntryWithLabelV2 { LabelText = "Titolo" }; var le = labelTitolo.Element; le.TextColor = Color.Black; le.FontSize = 30; le.Placeholder = "Titolo"; labelTitolo.Bind(nameof(EventDetailEditVM.Title)); var labelDescrizione = new EditorWithLabelV2 { LabelText = "Descrizione", }; labelDescrizione.Bind(nameof(EventDetailEditVM.Description)); var buttSalva = new Button { Text = "Salva" }; buttSalva.Clicked += async delegate { if (VM.UpdateModel()) { var luoghiDisponibili = VM.GetLuoghiDisponibili(VM.ObjAllEvents, VM.ObjEvent); if (luoghiDisponibili.Count == 0) { await DisplayAlert("Attento", "Non sono disponibili luoghi per questi orari", "Riprova"); return; } var LuogoNessuno = "Nessuno"; var resLuogo = await DisplayActionSheet("Scegli il luogo in base a quelli disponibili secondo l'orario impostato", LuogoNessuno, null, luoghiDisponibili.ToArray()); if (string.IsNullOrWhiteSpace(resLuogo) || resLuogo == LuogoNessuno) { return; } VM.ObjEvent.Luogo = resLuogo; var res = await VM.UploadData(); if (res.state != Visual1993.Data.WebServiceV2.WebRequestState.Ok && res.state != Visual1993.Data.WebServiceV2.WebRequestState.DuplicateExistsOnServer) { await DisplayAlert("Errore nel salvataggio", res.errorMessage, "Ok"); } else { if (VM.CalendarioVM != null) { VM.CalendarioVM.DownloadData().ContinueWith(delegate { VM.CalendarioVM.UpdateVM(); }); } await DisplayAlert("Evento salvato", "L'evento è in attesa di conferma da parte dello staff del Loft", "Ok"); try { await Navigation.PopAsync(); } catch { } } } }; stackIntero.Children.Add(image); stackIntero.Children.Add(labelTitolo); stackIntero.Children.Add(grigliaData); stackIntero.Children.Add(labelStato); stackIntero.Children.Add(labelDescrizione); stackIntero.Children.Add(buttSalva); var scroller = new ScrollView { Content = stackIntero }; Content = scroller; }
public CalendarioPage(CalendarioPageVM vm) { VM = vm ?? new CalendarioPageVM(); VM.UIPage = this; BindingContext = VM; var calendar = new SfSchedule { ShowAppointmentsInline = true, ScheduleView = ScheduleView.WeekView }; #region Customization var headerStyle = new HeaderStyle(); //headerStyle.TextSize = 15; //headerStyle.TextStyle headerStyle.TextColor = Color.Black; calendar.HeaderStyle = headerStyle; #endregion ScheduleAppointmentMapping dataMapping = new ScheduleAppointmentMapping(); dataMapping.SubjectMapping = nameof(GoogleEventVM.Title); dataMapping.StartTimeMapping = nameof(GoogleEventVM.StartDate); dataMapping.EndTimeMapping = nameof(GoogleEventVM.EndDate); dataMapping.ColorMapping = nameof(GoogleEventVM.BackgroundColor); calendar.AppointmentMapping = dataMapping; calendar.ScheduleCellTapped += async(object sender, ScheduleTappedEventArgs args) => { var data = args; var fine = args.datetime.Add(TimeSpan.FromMinutes(calendar.TimeInterval)); var events = VM.GetEventsFromDateTime(args.datetime, TimeSpan.FromMinutes(calendar.TimeInterval)); if (events != null && events.Count > 0) { var IsNuovoEvento = false; var stringaCrea = "Crea evento"; var eventiListaStringhe = events.Select(x => x.Name).ToList(); eventiListaStringhe.Add(stringaCrea); var stringaScelta = await DisplayActionSheet("Quale evento?", "Nessuno", null, eventiListaStringhe.ToArray()); if (stringaScelta == stringaCrea) { IsNuovoEvento = true; await DoCrea(args.datetime, fine); return; } var eventoScelto = VM.EventsObj.FirstOrDefault(x => x.Name == stringaScelta); if (eventoScelto != null) { if (App.VM.user != null) { //se è modificabile, aprilo in edit var eventoInterno = VM.EventiInterniObj.FirstOrDefault(x => x.data.RelatedGoogleEventID == eventoScelto.ID); if (IsNuovoEvento || (eventoInterno != null && eventoInterno.data.RelatedOwnerGuid == App.VM.user.Guid)) { var pageEditVM = new EventDetailEditVM { CalendarioVM = VM, ObjEvent = eventoScelto, ObjInternalEvent = eventoInterno, ObjAllEvents = VM.EventsObj }; pageEditVM.DownloadData(false).ContinueWith(delegate { pageEditVM.UpdateVM(); }); await Navigation.PushAsync(new EventDetailViewEdit(pageEditVM)); } else { //altrimenti, aprilo in read only var pageViewVM = new EventDetailViewModel { ObjEvent = eventoScelto }; pageViewVM.DownloadData().ContinueWith(delegate { pageViewVM.UpdateVM(); }); await Navigation.PushAsync(new EventDetailView(pageViewVM)); } } else { //altrimenti, aprilo in read only var pageViewVM = new EventDetailViewModel { ObjEvent = eventoScelto }; pageViewVM.UpdateVM(); //non c'è bisogno qui di fare il download data perchè già ho gli oggetti interi che sto passando await Navigation.PushAsync(new EventDetailView(pageViewVM)); } } else { //se non ho scelto nessun evento torna indietro return; } } else if (events == null || events.Count == 0) { //se non ci sono già eventi in questa fascia oraria, permettine la creazione await DoCrea(args.datetime, fine); } }; //var listaVacanze = new List<DateTime> { }; //listaVacanze.Add(DateTime.Now); //calendar.BlackoutDates = listaVacanze; calendar.SetBinding(SfSchedule.DataSourceProperty, new Binding(nameof(CalendarioPageVM.Items))); var loadingText = new Label { Text = "Caricamento in corso", HorizontalTextAlignment = TextAlignment.Center }; loadingText.SetBinding(View.IsVisibleProperty, nameof(ViewModelBase.IsLoadingData)); var grid = new Grid { RowDefinitions = new RowDefinitionCollection { new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Star }, } }; grid.AddChild(loadingText, 0, 0); grid.AddChild(calendar, 1, 0); this.Content = grid; }