Exemplo n.º 1
0
        public async Task <DomainCalendar> SaveCalendarAsync(DomainCalendar calendar)
        {
            var dataCalendar = _mapper.Map <DataCalendar>(calendar);

            dataCalendar.OwnerId = calendar.Owner.Id;

            foreach (var evCal in calendar.Events)
            {
                // Crutch.

                evCal.Calendar = calendar;
                var ev = _mapper.Map <Data.Models.EventCalendar>(evCal);

                ev.Event.OwnerId = calendar.Owner.Id;

                //if (ev.Event.IsAllDay && ev.Event.Period == null)
                //    ev.Event.EndDate = ev.Event.EndDate.Value.AddDays(-1);

                dataCalendar.EventCalendars.Add(ev);
            }

            dataCalendar = await _calendarRepository.CreateAsync(dataCalendar);

            await _calendarRepository.SaveAsync();

            calendar.Id = dataCalendar.Id;
            return(calendar);
        }
        public Calendar ExportCalendar(DomainCalendar calendar)
        {
            var iCalendar = new Calendar();

            iCalendar.TimeZones.Add(new VTimeZone(TimeZoneInfo.Utc.Id));

            iCalendar.Properties.Add(new CalendarProperty("X-WR-CALNAME", calendar.Name));
            iCalendar.Properties.Add(new CalendarProperty("X-WR-TIMEZONE", TZConvert.WindowsToIana(TimeZoneInfo.Utc.Id)));

            foreach (var e in calendar.Events)
            {
                var iEvent = new CalendarEvent
                {
                    Summary     = e.Event.Name,
                    Description = e.Event.Description,
                    IsAllDay    = e.Event.IsAllDay
                };

                if (e.Event.Location != null)
                {
                    iEvent.GeographicLocation = new GeographicLocation(e.Event.Location.Lattitude.Value, e.Event.Location.Longitude.Value);
                    iEvent.Location           = e.Event.Location.Description;
                }

                if (e.Event.Period == null)
                {
                    if (e.Event.IsAllDay)
                    {
                        iEvent.DtStart = new CalDateTime(e.Event.StartDate.Value);
                        iEvent.DtEnd   = new CalDateTime(e.Event.EndDate.Value.AddDays(1).AddMinutes(-1));
                    }
                    else
                    {
                        iEvent.DtStart = new CalDateTime(e.Event.StartDate.Value.Add(e.Event.StartTime.Value));
                        iEvent.DtEnd   = new CalDateTime(e.Event.EndDate.Value.Add(e.Event.EndTime.Value));
                    }
                }
                else
                {
                    if (e.Event.IsAllDay)
                    {
                        iEvent.DtStart = new CalDateTime(e.Event.Period.PeriodStart);
                        iEvent.DtEnd   = new CalDateTime(e.Event.Period.PeriodStart.AddDays(1).AddMinutes(-1));
                    }
                    else
                    {
                        iEvent.DtStart = new CalDateTime(e.Event.Period.PeriodStart.Add(e.Event.StartTime.Value));
                        iEvent.DtEnd   = new CalDateTime(e.Event.Period.PeriodEnd.Add(e.Event.EndTime.Value));
                    }

                    iEvent.RecurrenceRules = new List <RecurrencePattern> {
                        _GetRecurrencePattern(e.Event)
                    };
                }

                iCalendar.Events.Add(iEvent);
            }

            return(iCalendar);
        }
Exemplo n.º 3
0
        public async Task UpdateCalendarAsync(DomainCalendar calendar)
        {
            var dataCalendar = await _calendarRepository.FindByIdAsync(calendar.Id);

            //dataCalendar = _mapper.Map<Calendar>(calendar);
            //Mapper.Map(calendar, dataCalendar, typeof(DomainCalendar), typeof(Calendar));
            _mapper.MapToEntity(calendar, dataCalendar);
            await _calendarRepository.UpdateAsync(dataCalendar);

            await _calendarRepository.SaveAsync();
        }
Exemplo n.º 4
0
        public async Task <int> CreateCalendarAsync(DomainCalendar calendar, int ownerId)
        {
            var dataCalendar = _mapper.Map <Calendar>(calendar);

            dataCalendar.OwnerId = ownerId;

            if (!await _calendarRepository.AnyAsync(c => c.OwnerId == ownerId && c.IsDefault))
            {
                dataCalendar.IsDefault = true;
            }

            dataCalendar = await _calendarRepository.CreateAsync(dataCalendar);

            await _calendarRepository.SaveAsync();

            return(dataCalendar.Id);
        }
Exemplo n.º 5
0
        public DomainCalendar ConvertIntoDomain(Calendar iCalendar)
        {
            var domainCalendar = new DomainCalendar();
            var domainEvents   = new List <DomainModels.Event>();

            TimeZoneInfo iCalTimezone = TimeZoneInfo.Utc;

            if (iCalendar.TimeZones?.Any() == true)
            {
                iCalTimezone = TimeZoneInfo.FindSystemTimeZoneById(iCalendar.TimeZones.First().TzId);
            }
            else if (iCalendar.Properties["X-WR-TIMEZONE"].Value != null)
            {
                var ianaTimezone    = iCalendar.Properties["X-WR-TIMEZONE"].Value.ToString();
                var windowsTimezone = TZConvert.IanaToWindows(ianaTimezone);

                iCalTimezone = TimeZoneInfo.FindSystemTimeZoneById(windowsTimezone);
            }

            foreach (var iEvent in iCalendar.Events)
            {
                var dEvent = new DomainModels.Event()
                {
                    Name      = iEvent.Summary,
                    IsAllDay  = iEvent.IsAllDay,
                    IsPrivate = false
                };

                if (!string.IsNullOrEmpty(iEvent.Description))
                {
                    dEvent.Description = iEvent.Description;
                }

                if (iEvent.GeographicLocation != null)
                {
                    dEvent.Location = new DomainModels.Location()
                    {
                        Description = iEvent.Location,
                        Longitude   = iEvent.GeographicLocation.Longitude,
                        Lattitude   = iEvent.GeographicLocation.Latitude
                    };
                }

                if (iEvent.RecurrenceRules.Any())
                {
                    var rule = iEvent.RecurrenceRules.First();
                    dEvent.Period             = _GetPeriod(rule);
                    dEvent.Period.PeriodStart = iEvent.DtStart.Date;

                    if (!iEvent.IsAllDay)
                    {
                        dEvent.StartTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.SpecifyKind(iEvent.DtStart.Value, DateTimeKind.Unspecified), iCalTimezone).TimeOfDay;
                        dEvent.EndTime   = TimeZoneInfo.ConvertTimeToUtc(DateTime.SpecifyKind(iEvent.DtEnd.Value, DateTimeKind.Unspecified), iCalTimezone).TimeOfDay;
                    }
                }
                else
                {
                    if (iEvent.IsAllDay)
                    {
                        dEvent.StartDate = iEvent.DtStart.Value.Date;
                        dEvent.EndDate   = iEvent.DtEnd.Value.Date;

                        if (iEvent.IsAllDay && iEvent.DtEnd.Minute == 0)
                        {
                            dEvent.EndDate = dEvent.EndDate.Value.AddDays(-1);
                        }
                    }
                    else
                    {
                        var utcStart = TimeZoneInfo.ConvertTimeToUtc(DateTime.SpecifyKind(iEvent.DtStart.Value, DateTimeKind.Unspecified), iCalTimezone);
                        var utcEnd   = TimeZoneInfo.ConvertTimeToUtc(DateTime.SpecifyKind(iEvent.DtEnd.Value, DateTimeKind.Unspecified), iCalTimezone);

                        dEvent.StartDate = utcStart.Date;
                        dEvent.EndDate   = utcEnd.Date;
                        dEvent.StartTime = utcStart.TimeOfDay;
                        dEvent.EndTime   = utcEnd.TimeOfDay;
                    }
                }

                domainEvents.Add(dEvent);
            }

            if (domainEvents.Any())
            {
                domainCalendar.Events = domainEvents
                                        .Select(e => new DomainModels.EventCalendar {
                    Event = e, IsReadOnly = false
                });
            }

            return(domainCalendar);
        }