/// <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);