public JsonResult CalendarLoad(CalendarLoadViewModel clvm) { var begin = DateTimeExtensions.FromUnixTimeStamp(clvm.start); var finish = DateTimeExtensions.FromUnixTimeStamp(clvm.end); var now = DateTime.Now; //check values if (String.IsNullOrEmpty(clvm.userid)) clvm.userid = OrgUser.Id; var myTimeline = clvm.userid==OrgUser.Id; var timeline = new Timeline(); using (var session = OrgStore.OpenSession()) { List<ITimelineItem> items; if (myTimeline) { var query = session.Query<TimelineItemsWithContext.Result, TimelineItemsWithContext>() .Where(item => item.SubjectUserId == clvm.userid) .Where(a => a.Start <= finish && a.End >= begin); items = query.As<dynamic>().As<ITimelineItem>().ToList(); var timelineitems = items.ToTimelineItems(); timelineitems.RemoveAll(ti => ti.datatype.ToLower() == "concern"); //REMOVE CONCERN ITEMS timeline.items.AddRange(timelineitems); } else { var query = session.Query<TimelineItemsWithContext.Result, TimelineItemsWithContext>() .Where( item => item.PerspectiveUserId == clvm.userid || String.IsNullOrEmpty(item.PerspectiveUserId)) .Where(item => item.SubjectUserId == clvm.userid) .Where(a => a.Start <= finish && a.End >= begin); items = query.As<dynamic>().As<ITimelineItem>().ToList(); timeline.items.AddRange(items.ToTimelineItems()); } if (!Modules.Contains("Leave")) { timeline.items.RemoveAll(ti => ti.datatype.ToLower() == "leave"); //REMOVE LEAVE ITEMS } if (!Modules.Contains("Sickness")) { timeline.items.RemoveAll(ti => ti.datatype.ToLower() == "sickness"); //REMOVE LEAVE ITEMS } } //Email comms. Separate as may be taken out of Illumniate //TODO: Cc recipients on timeline selection? using (var session = OrgStore.OpenSession()) { var Subject = session.Load<User>(clvm.userid); var Viewer = OrgUser; if (myTimeline) { var emails = session.Query<SocialItemsWithContext.Result, SocialItemsWithContext>() .Where( item => item.Email1 == Viewer.EmailAddress || item.Email2 == Viewer.EmailAddress) .Where(a => a.Date <= finish && a.Date >= begin) .As<dynamic>() .As<ITimelineItem>() .ToList(); timeline.items.AddRange(emails.ToTimelineItems()); } else { var emails = session.Query<SocialItemsWithContext.Result, SocialItemsWithContext>() .Where( item => (item.Email1 == Viewer.EmailAddress && item.Email2 == Subject.EmailAddress) || (item.Email2 == Viewer.EmailAddress && item.Email1 == Subject.EmailAddress)) .Where(a => a.Date <= finish && a.Date >= begin) .As<dynamic>() .As<ITimelineItem>() .ToList() ; timeline.items.AddRange(emails.ToTimelineItems()); } } var results = timeline.items.Where(i => i.channel.In(clvm.channels)).Select(i => new { id = i.id, title = i.title??"Hig", start = i.start.ToUnixTimeStamp(), end = i.end.HasValue ? i.end.Value.ToUnixTimeStamp() : null, allDay = false, datatype=i.datatype, className=i.classes }).ToArray(); //var result = new {id="1", title = "test", allDay = false, start =DateTime.Now.ToUnixTimeStamp(),end=DateTime.Now.AddHours(1).ToUnixTimeStamp() }; return JsonVanilla(results, JsonRequestBehavior.DenyGet); }
public ActionResult FractionalLoad(TimelineLoadViewModel tvm) { var now = DateTime.Now; //check values if (String.IsNullOrEmpty(tvm.UserId)) tvm.UserId = OrgUser.Id; if (tvm.NewStartDate == DateTime.MinValue) tvm.NewStartDate = now.AddDays(-180); if (tvm.NewEndDate == DateTime.MinValue) tvm.NewEndDate = now.AddDays(14); var subjectUserId = tvm.UserId; var viewerUserId = OrgUser.Id; var myTimeline = subjectUserId.Equals(viewerUserId); var timeline = new Timeline(); using (var session = OrgStore.OpenSession()) { List<ITimelineItem> items; if (myTimeline) { var query = session.Query<TimelineItemsWithContext.Result, TimelineItemsWithContext>() .Where(item => item.SubjectUserId == viewerUserId) .Where(a => a.Start <= tvm.NewEndDate && a.End >= tvm.NewStartDate) //overlaps new date boundaries .Where(a => a.Start > tvm.CurrentEndDate || a.End < tvm.CurrentStartDate); //but not old boundaries (already loaded)); items = query.As<dynamic>().As<ITimelineItem>().ToList(); var timelineitems = items.ToTimelineItems(); timelineitems.RemoveAll(ti => ti.datatype.ToLower() == "concern" ); //REMOVE CONCERN ITEMS and any social items which cant appear on my timeline timeline.items.AddRange(timelineitems); } else { var query = session.Query<TimelineItemsWithContext.Result, TimelineItemsWithContext>() .Where( item => item.PerspectiveUserId == viewerUserId || String.IsNullOrEmpty(item.PerspectiveUserId)) .Where(item => item.SubjectUserId == subjectUserId) .Where(a => a.Start <= tvm.NewEndDate && a.End >= tvm.NewStartDate) //overlaps new date boundaries .Where(a => a.Start > tvm.CurrentEndDate || a.End < tvm.CurrentStartDate); //but not old boundaries (already loaded)); items = query.As<dynamic>().As<ITimelineItem>().ToList(); timeline.items.AddRange(items.ToTimelineItems()); } } //Email comms. Separate as may be taken out of Illumniate //TODO: Cc recipients on timeline selection? using (var session = OrgStore.OpenSession()) { var subject = session.Load<User>(subjectUserId); var viewer = session.Load<User>(viewerUserId); if (myTimeline) { var emails = session.Query<SocialItemsWithContext.Result, SocialItemsWithContext>() .Where( item => item.Email1 == viewer.EmailAddress || item.Email2 == viewer.EmailAddress) .Where(a => a.Date <= tvm.NewEndDate && a.Date >= tvm.NewStartDate) //overlaps new date boundaries .Where(a => a.Date > tvm.CurrentEndDate || a.Date < tvm.CurrentStartDate) //but not old boundaries (already loaded)); .As<dynamic>() .As<ITimelineItem>() .ToList() ; timeline.items.AddRange(emails.ToTimelineItems()); } else { var emails = session.Query<SocialItemsWithContext.Result, SocialItemsWithContext>() .Where( item => (item.Email1 == viewer.EmailAddress && item.Email2 == subject.EmailAddress) || (item.Email2 == viewer.EmailAddress && item.Email1 == subject.EmailAddress)) .Where(a => a.Date <= tvm.NewEndDate && a.Date >= tvm.NewStartDate) //overlaps new date boundaries .Where(a => a.Date > tvm.CurrentEndDate || a.Date < tvm.CurrentStartDate) //but not old boundaries (already loaded)); .As<dynamic>() .As<ITimelineItem>() .ToList() ; timeline.items.AddRange(emails.ToTimelineItems()); } } //serialise and return return Json(timeline); }