Beispiel #1
0
        /// <summary>
        /// This function add/edit event
        /// </summary>
        /// <param name="eventDetails"></param>
        /// <returns></returns>
        public List<int> AddEditEvent(Event eventDetails)
        {
            var response = new List<int>();
            var context = new dbDataContext();
            // Create or retrieve the event
            var eventItem = context.tbl_Events.FirstOrDefault(t => t.EventId == eventDetails.EventId) ?? new tbl_Event();
            int eventId;


            // if new event, check for recurrence pattern
            if (eventDetails.RecPattern != null)
            {
                //add recurrence pattern
                var recPattern = new tbl_EventRecurrence
                {
                    Interval = eventDetails.RecPattern.Interval,
                    EndsOn = Convert.ToDateTime(eventDetails.RecPattern.EndsOn),
                    Repeats = eventDetails.RecPattern.Repeats,
                    StartDate = Convert.ToDateTime(eventDetails.RecPattern.StartDate),
                    Summary = eventDetails.RecPattern.Summary
                };
                // save the rec pattern
                context.tbl_EventRecurrences.InsertOnSubmit(recPattern);
                context.SubmitChanges();
                // Recurrence id
                eventDetails.RecurrenceId = recPattern.RecurrenceId;
                // Create the occurrences
                var recEndDate = Convert.ToDateTime(eventDetails.RecPattern.EndsOn).AddDays(1);
                recEndDate = new DateTime(recEndDate.Year, recEndDate.Month, recEndDate.Day, 0, 0, 0);

                var recStartDate = Convert.ToDateTime(eventDetails.RecPattern.StartDate);
                var startDate = recStartDate;
                var daySpan = (Convert.ToDateTime(eventDetails.EndDate) - Convert.ToDateTime(eventDetails.StartDate)).Days;
                var endDate = startDate.AddDays(daySpan);

                var count = 0;
                while (recEndDate > startDate && recEndDate >= endDate)
                {

                    var newEvent = eventDetails;
                    newEvent.StartDate = new Utils().GetUkDate(startDate);
                    newEvent.EndDate = new Utils().GetUkDate(endDate);
                    //create the events for rec pattern
                    if (count != 0)
                    {
                        //for all the occurrences except first one set the event id  to 0 - happens only when user added a recurrence to existing appointment 
                        eventItem = new tbl_Event();
                    }
                    eventId = SaveEvent(ref context, eventItem, newEvent);
                    response.Add(eventId);
                    //next event
                    switch (eventDetails.RecPattern.Repeats)
                    {
                        case "days":
                            startDate = startDate.AddDays(eventDetails.RecPattern.Interval);
                            break;
                        case "weeks":
                            startDate = startDate.AddDays(eventDetails.RecPattern.Interval * 7);
                            break;
                        case "months":
                            startDate = startDate.AddMonths(eventDetails.RecPattern.Interval);
                            break;
                        case "years":
                            startDate = startDate.AddYears(eventDetails.RecPattern.Interval);
                            break;
                    }
                    endDate = startDate.AddDays(daySpan);
                    count += 1;
                }
                return response;
            }

            eventId = SaveEvent(ref context, eventItem, eventDetails);
            response.Add(eventId);
            return response;
        }
 partial void Updatetbl_EventRecurrence(tbl_EventRecurrence instance);
 partial void Deletetbl_EventRecurrence(tbl_EventRecurrence instance);
 partial void Inserttbl_EventRecurrence(tbl_EventRecurrence instance);