Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        /// <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);
            }
        }