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); }
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(); }
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); }
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); }