public ActionResult DeleteConfirmed(int id, string RemoveInstance, string StartDate, string EndDate) { GroupInstance groupinstance = db.GroupInstances.Find(id); if (!String.IsNullOrEmpty(RemoveInstance)) { if (Convert.ToBoolean(RemoveInstance) == false) { db.GroupInstances.Remove(groupinstance); } else { iCalendarSerializer serializer = new iCalendarSerializer(); iCalendarCollection icalCollection = new iCalendarCollection(); using (TextReader tr = new StringReader(groupinstance.RecurrenceRule)) { icalCollection = (iCalendarCollection)serializer.Deserialize(tr); } Event ev = new Event(); if (icalCollection.Count == 0) { RecurrencePattern rp = new RecurrencePattern(groupinstance.RecurrenceRule); ev.RecurrenceRules.Add(rp); } else { ev = (Event)icalCollection.First().Events.First(); } PeriodList pl = new PeriodList(); if (ev.ExceptionDates.Count > 0) { pl.AddRange(ev.ExceptionDates.First()); } var sd = Convert.ToDateTime(StartDate); var time = new iCalDateTime(sd); pl.Add(time); ev.ExceptionDates.Add(pl); iCalendar ical = new iCalendar(); ical.Events.Add(ev); serializer = new iCalendarSerializer(ical); groupinstance.RecurrenceRule = serializer.SerializeToString(ical); db.Entry(groupinstance).State = EntityState.Modified; } db.SaveChanges(); } else { db.GroupInstances.Remove(groupinstance); db.SaveChanges(); } return Content(Boolean.TrueString); }
/// <summary> /// Get scheduled events into calendar /// </summary> /// <returns>Formatted Json events</returns> public JsonResult GetEvents( DateTime start, DateTime end,int id = 0) { IEnumerable<GroupInstance> groupInstances; if (id > 0) { var filteredGroups =db.GroupInstances.Include(e => e.Group) .Include(e => e.Group.Users) .ToList() .Where(x => x.Group.Users.Where(y => y.UserId == id &&(((x.StartDateTime>=start ||x.EndDateTime<=end) &&x.RecurrenceRule==null) ||x.RecurrenceRule!=null)).Any()); groupInstances = filteredGroups; } else { groupInstances = db.GroupInstances.Include(e => e.Group) .Include(e=>e.Group.Users).Where(x=>((x.StartDateTime>=start ||x.EndDateTime<=end)&&x.RecurrenceRule==null)||x.RecurrenceRule!=null).ToList(); } if (groupInstances.Any()) { var recurrence = groupInstances.Where(x => !String.IsNullOrWhiteSpace(x.RecurrenceRule)).FirstOrDefault(); var list = new List<dynamic>(); foreach (var instance in groupInstances) { if (!String.IsNullOrWhiteSpace(instance.RecurrenceRule)) { iCalendarSerializer serializer = new iCalendarSerializer(); iCalendarCollection ical = new iCalendarCollection(); using (TextReader tr = new StringReader(instance.RecurrenceRule)) { ical = (iCalendarCollection)serializer.Deserialize(tr); } Event ev = new Event(); if (ical.Count == 0) { RecurrencePattern rp = new RecurrencePattern(instance.RecurrenceRule); ev.RecurrenceRules.Add(rp); } else { ev = (Event)ical.First().Events.First(); } var ex = ev.ExceptionDates; ev.Start = new iCalDateTime(instance.StartDateTime); var occ = ev.GetOccurrences(start.AddDays(-1), end); if (occ != null) { foreach (var occurence in occ) { var user = instance.Group.Users.FirstOrDefault(y => Roles.IsUserInRole(y.UserName, "Teacher")); var color = "#FFFFFF"; if (user != null) { color = user.HexColor; } list.Add(new { title = instance.Group.Name, start = CreateNewDateTime(occurence.Period.StartTime, instance.StartDateTime).ToString("s"), end = CreateNewDateTime(occurence.Period.EndTime, instance.EndDateTime).ToString("s"), editable = false, GroupInstanceId = instance.GroupInstanceId, ClassroomId = instance.ClassroomId, GroupId = instance.GroupId, Color = color, RecurrenceRule = recurrence.RecurrenceRule }); } } } else { list.Add(new { title = instance.Group.Name, start = instance.StartDateTime.ToString("s"), end = instance.EndDateTime.ToString("s"), editable = false, GroupInstanceId = instance.GroupInstanceId, ClassroomId = instance.ClassroomId, GroupId = instance.GroupId, Color = instance.Group.Users.FirstOrDefault(y => Roles.IsUserInRole(y.UserName, "Teacher")).HexColor }); } } return Json(list, JsonRequestBehavior.AllowGet); } else { return Json(null, JsonRequestBehavior.AllowGet); } }