Example #1
0
        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;
        }
Example #3
0
        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;
        }