using Aioro.Portable.Models; using Aioro.Portable.Models.Agenda; using Aioro.Portable.Services; using Aioro.Portable.ViewModels.Agenda; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using Telerik.XamarinForms.Input; using Telerik.XamarinForms.Input.Calendar; using Xamarin.Forms; namespace Aioro.Portable.ViewModels { class AgendaMensualViewModel:BaseModel { private AgendaService _agendaSerivce { get; set; } private SelectionModeItem selectedMode; private DateTimeRange selectedRange; private ObservableCollection eventosAgenda; public ObservableCollection ListaEventosAgenda { get { return eventosAgenda; } set { eventosAgenda = value; OnPropertyChanged("ListaEventosAgenda"); } } public AgendaMensualViewModel() { MessagingCenter.Subscribe(this, "reloadEvents", (sender) => { loadEvents(); }); MessagingCenter.Subscribe(this, "reloadEvents", (sender) => { loadEvents(); }); this.SelectedEvents = new ObservableCollection(); //Data _agendaSerivce = new AgendaService(); this.ListaEventosAgenda = new ObservableCollection(); this.Events = new ObservableCollection(); loadEvents(); this.SelectionModes = new List(); this.SelectionModes.Add(new SelectionModeItem(char.ConvertFromUtf32(0xe864), CalendarSelectionMode.None)); this.SelectionModes.Add(new SelectionModeItem(char.ConvertFromUtf32(0xe866), CalendarSelectionMode.Single)); if (!Device.RuntimePlatform.Equals("UWP")) { this.SelectionModes.Add(new SelectionModeItem(char.ConvertFromUtf32(0xe867), CalendarSelectionMode.Multiple)); this.SelectionModes.Add(new SelectionModeItem(char.ConvertFromUtf32(0xe868), CalendarSelectionMode.Range)); } this.selectedMode = Device.RuntimePlatform == "UWP" ? this.SelectionModes[1] : this.SelectionModes[3]; this.selectedRange = new DateTimeRange(DateTime.Today, DateTime.Today.AddDays(2)); } public DateTimeRange SelectedRange { get { return this.selectedRange; } set { this.selectedRange = value; OnPropertyChanged("SelectedRange"); } } public SelectionModeItem SelectedMode { get { return this.selectedMode; } set { if (this.selectedMode != value) { if (value == null) { var selectedModeCache = this.selectedMode; this.selectedMode = value; this.SelectedMode = selectedModeCache; } else { this.selectedMode = value; OnPropertyChanged("SelectedMode"); } } } } public List SelectionModes { get; set; } private ObservableCollection events; public ObservableCollection Events { get { return events; } set { events = value;OnPropertyChanged("Events"); } } public ObservableCollection SelectedEvents { get; } internal void UpdateSelectedEvents(DateTime? value) { if (!value.HasValue) { return; } if (this.Events == null) return; foreach (EventData item in this.Events) { var date = value.Value; var recurrenceRule = item.RecurrenceRule; if (recurrenceRule == null && item.StartDate.CompareTo(date) >= 0 && item.StartDate.CompareTo(date.AddDays(1)) < 0) { this.SelectedEvents.Add(new EventData() { Id = item.Id, idOrg=item.idOrg, StartDateOnly = item.StartDate, StartDate = item.StartDate, EndDate = item.EndDate, Title = item.Title, LeadBorderColor = item.LeadBorderColor, ItemBackgroundColor = item.ItemBackgroundColor, Detail = item.Detail, IsAllDay = item.IsAllDay, imageUrl = item.imageUrl, idCategoria = item.idCategoria, recurrenciaAnual = item.recurrenciaAnual, recurrenciaMensual = item.recurrenciaMensual, recurrenciaSemanal = item.recurrenciaSemanal, recurrenciaDiaria = item.recurrenciaDiaria }); } //if (recurrenceRule != null) if (recurrenceRule != null && recurrenceRule.Pattern.GetOccurrences(item.StartDate, date, date.AddDays(1)).Any()) { Debug.WriteLine(""); EventData newEvent = new EventData() { Id = item.Id, idOrg= item.idOrg, StartDateOnly = date.Date.Add(item.StartDate.TimeOfDay), StartDate = date.Date.Add(item.StartDate.TimeOfDay), EndDate = date.Date.Add(item.EndDate.TimeOfDay), Title = item.Title, LeadBorderColor = item.LeadBorderColor, ItemBackgroundColor = item.ItemBackgroundColor, Detail = item.Detail, IsAllDay = item.IsAllDay, imageUrl = item.imageUrl, idCategoria = item.idCategoria, recurrenciaAnual = item.recurrenciaAnual, recurrenciaMensual = item.recurrenciaMensual, recurrenciaSemanal = item.recurrenciaSemanal, recurrenciaDiaria = item.recurrenciaDiaria }; this.SelectedEvents.Add(newEvent); } } } private async Task loadEvents() { this.Events.Clear(); ListaEventosAgenda.Clear(); ListaEventosAgenda = await _agendaSerivce.getAllEventos(); var backgroundColor = Application.Current.RequestedTheme != OSAppTheme.Dark ? Color.White : Color.FromHex("#686869"); foreach (Evento evento in this.ListaEventosAgenda) { EventData eventoNuevo = new EventData() {StartDate=evento.fechaInciio,EndDate=evento.fechaFin,Title=evento.titulo,LeadBorderColor = Color.FromHex("59B6B8"),ItemBackgroundColor=Color.White, Id=evento.id,idOrg=evento.idOrg,idCategoria=evento.idCategoria,imageUrl=evento.fotoUrl,Detail=evento.descripcion,IsAllDay=evento.isAllDay,recurrenciaAnual= evento.recurrenciaAnual,recurrenciaMensual=evento.recurrenciaMensual, recurrenciaSemanal=evento.recurrenciaSemanal,recurrenciaDiaria=evento.recurrenciaDiaria}; //StartDate: evento.fechaInciio,endTime: evento.fechaFin,eventText: evento.titulo,leadColor: Color.FromHex("59B6B8"),itemColor: Color.White, //detalles: evento.descripcion, id: evento.id,imageUrl: evento.fotoUrl, IsAllDay: evento.isAllDay RecurrenceRule recurrenceRule = null; if (evento.recurrenciaDiaria) { var recurrencePattern = new RecurrencePattern(new int[] { }, RecurrenceDays.WeekDays, RecurrenceFrequency.Daily, 1, null, null);// { MaxOccurrences = 37 }; recurrenceRule = new RecurrenceRule(recurrencePattern); eventoNuevo.RecurrenceRule = recurrenceRule; recurrenceRule = new RecurrenceRule(new RecurrencePattern() { Frequency = RecurrenceFrequency.Daily, }); } else if (evento.recurrenciaSemanal) { //var recurrencePattern = new RecurrencePattern(new int[] { }, RecurrenceDays.WeekDays, RecurrenceFrequency.Weekly, 7, null, null);// { MaxOccurrences = 37 }; recurrenceRule = new RecurrenceRule(new RecurrencePattern() { Frequency = RecurrenceFrequency.Weekly, }); eventoNuevo.RecurrenceRule = recurrenceRule; } else if (evento.recurrenciaMensual) { //var recurrencePattern = new RecurrencePattern(new int[] { }, RecurrenceDays.WeekDays, RecurrenceFrequency.Daily, 30, null, null);// { MaxOccurrences = 37 }; recurrenceRule = new RecurrenceRule(new RecurrencePattern() { Frequency = RecurrenceFrequency.Monthly }); eventoNuevo.RecurrenceRule = recurrenceRule; } else if (evento.recurrenciaAnual) { //var recurrencePattern = new RecurrencePattern(new int[] { }, RecurrenceDays.WeekDays, RecurrenceFrequency.Daily, 365, null, null);// { MaxOccurrences = 37 }; recurrenceRule = new RecurrenceRule(new RecurrencePattern() { Frequency = RecurrenceFrequency.Yearly, }); eventoNuevo.RecurrenceRule = recurrenceRule; } this.Events.Add(eventoNuevo); } Debug.WriteLine("Eventos cargados"); //Seleccionar eventos del día actual a finales de mes int diasRestantes = DateTime.DaysInMonth(DateTime.Now.Year,DateTime.Now.Month); int diasSeleccionados = diasRestantes - DateTime.Now.Day; SelectedRange = new DateTimeRange(DateTime.Now,DateTime.Now.AddDays(diasSeleccionados)); } } }