Exemplo n.º 1
0
        /// <summary>
        /// any changes made here need to be mirrored in getcalendarscheduleForView
        /// </summary>
        /// <param name="id"></param>
        /// <param name="ownerEntity"></param>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <returns></returns>
        public static RDN.Portable.Classes.Controls.Calendar.Calendar GetCalendarSchedule(Guid id, CalendarOwnerEntityEnum ownerEntity, DateTime startDate, DateTime endDate, Guid memberId, bool isAttendanceManagerOrBetter)
        {
            RDN.Portable.Classes.Controls.Calendar.Calendar newCal = new RDN.Portable.Classes.Controls.Calendar.Calendar();
            try
            {
                var dc = new ManagementContext();
                var calDb = (from xx in dc.Calendar.Include("CalendarEventsReocurring").Include("CalendarEvents").Include("CalendarEvents.ReocurringEvent").Include("CalendarEvents.PointsForEvent")
                             where xx.CalendarId == id
                             select new
                             {
                                 xx.IsCalendarInUTC,
                                 xx.TimeZone,
                                 Events = xx.CalendarEvents.Where(x => x.StartDate >= startDate && x.EndDate <= endDate && x.IsRemovedFromCalendar == false),
                                 FedOwners = xx.FederationOwners,
                                 LeagueOwners = xx.LeagueOwners,
                                 AllowSelfCheckIn = xx.AllowSelfCheckIn,
                                 xx.DisableBirthdaysFromShowing,
                                 xx.DisableStartSkatingDays,
                                 EventsReocurring = xx.CalendarEventsReocurring.Where(x => (x.EndReocurring >= startDate || x.EndReocurring == null) && x.StartReocurring <= endDate && x.IsRemovedFromCalendar == false),
                             }).FirstOrDefault();
                newCal.IsCalendarInUTC = calDb.IsCalendarInUTC;
                newCal.TimeZone = calDb.TimeZone;
                newCal.CalendarId = id;
                newCal.OwnerEntity = ownerEntity;
                newCal.AllowSelfCheckIn = calDb.AllowSelfCheckIn;
                newCal.DisableBirthdays = calDb.DisableBirthdaysFromShowing;
                newCal.DisableSkatingStartDates = calDb.DisableStartSkatingDays;
                if (ownerEntity == CalendarOwnerEntityEnum.federation)
                {
                    foreach (var own in calDb.FedOwners)
                    {
                        CalendarOwner owner = new CalendarOwner();
                        owner.OwnerId = own.Federation.FederationId;
                        owner.OwnerName = own.Federation.Name;
                        newCal.EntityName = own.Federation.Name;

                        newCal.Owners.Add(owner);
                    }
                }
                else if (ownerEntity == CalendarOwnerEntityEnum.league)
                {
                    foreach (var own in calDb.LeagueOwners)
                    {
                        CalendarOwner owner = new CalendarOwner();
                        owner.OwnerId = own.League.LeagueId;
                        owner.OwnerName = own.League.Name;
                        newCal.EntityName = own.League.Name;
                        newCal.Owners.Add(owner);
                    }
                }

                foreach (var ev in calDb.Events)
                {
                    newCal.Events.Add(CalendarEventFactory.DisplayEvent(ev, memberId, isAttendanceManagerOrBetter));
                }
                foreach (var ev in calDb.EventsReocurring)
                {
                    //used so we can refresh the last day events were created..

                    // ev.LastDateEventsWereCreated = endDate.AddMonths(-1);
                    if (ev.LastDateEventsWereCreated.GetValueOrDefault() < endDate)
                    {
                        var eventRe = dc.CalendarEventsReocurring.Where(x => x.CalendarItemId == ev.CalendarItemId && x.IsRemovedFromCalendar == false).FirstOrDefault();
                        eventRe.LastDateEventsWereCreated = endDate;
                        eventRe.Calendar = eventRe.Calendar;
                        dc.SaveChanges();

                        var aEvent = new CalendarViewEventJson()
                        {
                            id = ev.CalendarItemId,
                            Title = ev.Name,
                            Frequency = ev.FrequencyReocurring,
                            DaysOfWeek = ev.DaysOfWeekReocurring,
                            MonthlyInterval = ev.MonthlyIntervalReocurring
                        };
                        var schedule = new Schedule(aEvent);

                        var range = new DateRange()
                        {
                            StartDateTime = ev.StartReocurring
                        };
                        //date is null if the event is never ending.
                        if (ev.EndReocurring.HasValue)
                            range.EndDateTime = ev.EndReocurring.Value;
                        else
                            range.EndDateTime = endDate.AddMonths(1);

                        foreach (var date in schedule.Occurrences(range))
                        {
                            CalendarEvent calEvent = new CalendarEvent();
                            Guid locationId = new Guid();
                            if (ev.Location != null)
                            {
                                calEvent.Location.LocationName = ev.Location.LocationName;
                                locationId = ev.Location.LocationId;
                            }
                            calEvent.Name = ev.Name;
                            calEvent.CalendarItemId = ev.CalendarItemId;
                            if (eventRe.Color != null)
                            {
                                var c = Color.FromArgb(eventRe.Color.ColorIdCSharp);
                                calEvent.ColorTempSelected = ColorTranslator.ToHtml(c);
                            }

                            if (!ev.IsInUTCTime)
                            {
                                calEvent.StartDate = new DateTime(date.Year, date.Month, date.Day, ev.StartDate.Hour, ev.StartDate.Minute, ev.StartDate.Second);
                                calEvent.EndDate = new DateTime(date.Year, date.Month, date.Day, ev.EndDate.Hour, ev.EndDate.Minute, ev.EndDate.Second);
                            }
                            else
                            {
                                //we have to create a temp dates so we can add the timezone information without going back a day
                                //if the time being used is on the border.
                                //without the tempdates 1/4/2013 7pm turned into 1/3/2013 7pm because the timezones didn't account for the 
                                //fact the dates were already in utc.
                                var startTempDate = new DateTime(date.Year, date.Month, date.Day, ev.StartDate.Hour, ev.StartDate.Minute, ev.StartDate.Second) + new TimeSpan(ev.Calendar.TimeZone, 0, 0);
                                var endTempDate = new DateTime(date.Year, date.Month, date.Day, ev.EndDate.Hour, ev.EndDate.Minute, ev.EndDate.Second) + new TimeSpan(ev.Calendar.TimeZone, 0, 0);
                                calEvent.StartDate = new DateTime(date.Year, date.Month, date.Day, startTempDate.Hour, startTempDate.Minute, startTempDate.Second);
                                calEvent.EndDate = new DateTime(date.Year, date.Month, date.Day, endTempDate.Hour, endTempDate.Minute, endTempDate.Second);
                            }

                            calEvent.Notes = ev.Notes;
                            calEvent.AllowSelfCheckIn = ev.AllowSelfCheckIn;

                            //var evs = (from xx in newCal.Events
                            //           where xx.CalendarReoccurringId == ev.CalendarItemId
                            //           where xx.StartDate == calEvent.StartDate
                            //           where xx.EndDate == calEvent.EndDate
                            //           select xx).FirstOrDefault();
                            ////dirty bit to check if event was already in list.  If it is, we don't add it.
                            ////the date check here is to only create events within the calendar selected dates
                            //if (evs == null && calEvent.StartDate >= startDate && calEvent.EndDate <= endDate)
                            //{
                            //    string colorHex = String.Empty;
                            //    if (ev.Color != null)
                            //    {
                            //        var c = Color.FromArgb(ev.Color.ColorIdCSharp);
                            //        colorHex = ColorTranslator.ToHtml(c);
                            //    }
                            //    Guid calItemId = CalendarEventFactory.CreateNewEvent(ev.Calendar.CalendarId, calEvent.StartDate, calEvent.EndDate, locationId, ev.Name, ev.Link, ev.Notes, ev.AllowSelfCheckIn, ev.IsPublic, true, calEvent.CalendarItemId, ev.EventType.CalendarEventTypeId, false, ev.TicketUrl, colorHex, new List<long>(), memberId);
                            //    calEvent.CalendarItemId = calItemId;
                            //    newCal.Events.Add(calEvent);
                            //}
                        }

                    }
                }
            }
            catch (Exception exception)
            {
                ErrorDatabaseManager.AddException(exception, exception.GetType());
            }
            return newCal;
        }
Exemplo n.º 2
0
        /// <summary>
        /// gets the public calendar of the league
        /// </summary>
        /// <param name="leagueId"></param>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <returns></returns>
        public static List<CalendarViewEventJson> GetPublicCalendarOfLeagueScheduleForView(Guid leagueId, DateTime startDate, DateTime endDate)
        {
            List<CalendarViewEventJson> events = new List<CalendarViewEventJson>();
            try
            {
                var dc = new ManagementContext();
                var calDb = (from xx in dc.CalendarLeagueOwners
                             where xx.League.LeagueId == leagueId
                             select new
                             {
                                 Events = xx.Calendar.CalendarEvents.Where(x => x.StartDate >= startDate && x.EndDate <= endDate && x.IsRemovedFromCalendar == false && x.IsPublicEvent),
                                 EventsReocurring = xx.Calendar.CalendarEventsReocurring.Where(x => (x.EndReocurring >= startDate || x.EndReocurring == null) && x.StartReocurring <= endDate && x.IsRemovedFromCalendar == false && x.IsPublic),
                             }).FirstOrDefault();

                string baseUrl = VirtualPathUtility.ToAbsolute("~/roller-derby-event/");
                if (calDb != null)
                {
                    //adds all the events from the database that were in the date range selected.
                    foreach (var ev in calDb.Events)
                    {
                        CalendarViewEventJson calEvent = new CalendarViewEventJson();
                        if (ev.Color != null)
                        {
                            var c = Color.FromArgb(ev.Color.ColorIdCSharp);
                            calEvent.backColor = ColorTranslator.ToHtml(c);
                        }
                        calEvent.title = ev.Name;
                        //removes length less than 14 chars 
                        //because the title is too long for the calendar display.
                        if (ev.Name.Length > 10)
                            calEvent.title = calEvent.title.Remove(10);
                        calEvent.id = ev.CalendarItemId;
                        if (ev.ReocurringEvent != null)
                            calEvent.ReocurringId = ev.ReocurringEvent.CalendarItemId;
                        calEvent.url = baseUrl + RDN.Utilities.Strings.StringExt.ToSearchEngineFriendly(ev.Name) + "/" + ev.CalendarItemId.ToString().Replace("-", "");
                        if (!ev.IsInUTCTime)
                        {
                            calEvent.start = ev.StartDate.ToString("o");
                            calEvent.end = ev.EndDate.ToString("o");
                        }
                        else
                        {
                            calEvent.start = (ev.StartDate + new TimeSpan(ev.Calendar.TimeZone, 0, 0)).ToString("o");
                            calEvent.end = (ev.EndDate + new TimeSpan(ev.Calendar.TimeZone, 0, 0)).ToString("o");
                        }
                        events.Add(calEvent);
                    }
                    foreach (var ev in calDb.EventsReocurring)
                    {
                        if (ev.LastDateEventsWereCreated.GetValueOrDefault() < endDate)
                        {
                            Guid locationId = new Guid();
                            if (ev.Location != null)
                            {
                                locationId = ev.Location.LocationId;
                            }
                            var aEvent = new CalendarViewEventJson()
                            {
                                id = ev.CalendarItemId,
                                Title = ev.Name,
                                Frequency = ev.FrequencyReocurring,
                                DaysOfWeek = ev.DaysOfWeekReocurring,
                                MonthlyInterval = ev.MonthlyIntervalReocurring
                            };
                            var schedule = new Schedule(aEvent);

                            var range = new DateRange()
                            {
                                StartDateTime = ev.StartReocurring
                            };
                            //date is null if the event is never ending.
                            if (ev.EndReocurring.HasValue)
                                range.EndDateTime = ev.EndReocurring.Value;
                            else
                                range.EndDateTime = endDate.AddMonths(1);

                            //iterates through all the events that were automatically generated from the calendar control
                            //then creates a json view. and adds them to the list of events for the user.
                            foreach (var date in schedule.Occurrences(range))
                            {
                                CalendarViewEventJson calEvent = new CalendarViewEventJson();
                                if (ev.Color != null)
                                {
                                    var c = Color.FromArgb(ev.Color.ColorIdCSharp);
                                    calEvent.backColor = ColorTranslator.ToHtml(c);
                                }
                                calEvent.title = ev.Name;
                                if (ev.Name.Length > 10)
                                    calEvent.title.Remove(10);
                                calEvent.id = ev.CalendarItemId;
                                calEvent.url = baseUrl + RDN.Utilities.Strings.StringExt.ToSearchEngineFriendly(ev.Name) + "/" + ev.CalendarItemId.ToString().Replace("-", "");

                                if (!ev.IsInUTCTime)
                                {
                                    calEvent.start = new DateTime(date.Year, date.Month, date.Day, ev.StartDate.Hour, ev.StartDate.Minute, ev.StartDate.Second).ToString("o");
                                    calEvent.end = new DateTime(date.Year, date.Month, date.Day, ev.EndDate.Hour, ev.EndDate.Minute, ev.EndDate.Second).ToString("o");
                                    calEvent.StartDate = new DateTime(date.Year, date.Month, date.Day, ev.StartDate.Hour, ev.StartDate.Minute, ev.StartDate.Second);
                                    calEvent.EndDate = new DateTime(date.Year, date.Month, date.Day, ev.EndDate.Hour, ev.EndDate.Minute, ev.EndDate.Second);
                                }
                                else
                                {
                                    calEvent.StartDate = new DateTime(date.Year, date.Month, date.Day, ev.StartDate.Hour, ev.StartDate.Minute, ev.StartDate.Second);
                                    calEvent.EndDate = new DateTime(date.Year, date.Month, date.Day, ev.EndDate.Hour, ev.EndDate.Minute, ev.EndDate.Second);

                                    calEvent.start = (calEvent.StartDate + new TimeSpan(ev.Calendar.TimeZone, 0, 0)).ToString("o");
                                    calEvent.end = (calEvent.EndDate + new TimeSpan(ev.Calendar.TimeZone, 0, 0)).ToString("o");
                                    calEvent.StartDate = (calEvent.StartDate + new TimeSpan(ev.Calendar.TimeZone, 0, 0));
                                    calEvent.EndDate = (calEvent.EndDate + new TimeSpan(ev.Calendar.TimeZone, 0, 0));
                                }

                            }
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                ErrorDatabaseManager.AddException(exception, exception.GetType());
            }
            return events;
        }