Exemplo n.º 1
0
        public virtual JsonResult RequestGlobalReportData(string EventName, GlobalMoodReportDataRequestModel requestModel)
        {
            try
            {
                Event evnt = GetEvent(EventName);
                this.logger.Info("App", string.Format("Request for global report data - reportId=[{0}] startDate=[{0}] endDate=[{0}]", requestModel.ReportId, requestModel.StartDate, requestModel.EndDate));
                GlobalMoodReportModel model = GetGlobalMoodReport(evnt, evnt.MoodCategories.First(), requestModel.StartDate, requestModel.EndDate, evnt.ApplicationConfig.ReportMoodIsStaleMins, false);
                model.ReportId = requestModel.ReportId;
                return(Json(model));
            }
            catch (Exception ex)
            {
                this.logger.Error("App", ex, "Failed request for personal mood report from app - model is null");

                return(Json(new { Success = false }));
            }
        }
Exemplo n.º 2
0
        protected Image GetGlobalMoodImage(Event evnt, MoodCategory category, DateTime reportStart, DateTime reportEnd, int moodIsStaleMins, float tension, bool showDataPoints, int width, int height)
        {
            GlobalMoodReportModel report  = GetGlobalMoodReport(evnt, category, reportStart, reportEnd, moodIsStaleMins, false);
            GlobalMoodMapImage    moodMap = new GlobalMoodMapImage()
            {
                Width          = width,
                Height         = height,
                ReportStart    = reportStart,
                ReportEnd      = reportEnd,
                Tension        = tension,
                ShowDataPoints = showDataPoints
            };

            bool first = true;

            foreach (var snaphot in report.Snapshots.OrderBy(s => s.t))
            {
                //var moods = snaphot.Moods.OrderBy(m => m.DisplayIndex).Select(m => m.Mood).ToArray();
                //var moodColors = snaphot.Moods.OrderBy(m => m.DisplayIndex).Select(m => ColorTranslator.FromHtml(m.DisplayColor)).ToArray();
                //var responseCounts = snaphot.Moods.OrderBy(m => m.DisplayIndex).Select(m => m.ResponseCount).ToArray();
                //var responsePercentages = snaphot.Moods.OrderBy(m => m.DisplayIndex).Select(m => m.ResponsePercentage).ToArray();

                var moodData = from s in snaphot.d
                               join m in report.Moods on s.i equals m.DisplayIndex
                               select new MyMood.Web.GlobalMoodMapImage.MoodMapItem
                {
                    DisplayColor       = ColorTranslator.FromHtml(m.DisplayColor),
                    DisplayIndex       = m.DisplayIndex,
                    MoodType           = m.MoodType,
                    Name               = m.Name,
                    ResponseCount      = s.c,
                    ResponsePercentage = s.p
                };
                if (first)
                {
                    if (snaphot.t > reportStart)
                    {
                        moodMap.AddSnapshot(reportStart, moodData.OrderBy(m => m.DisplayIndex).ToList());
                    }
                    first = false;
                }
                moodMap.AddSnapshot(snaphot.t, moodData.OrderBy(m => m.DisplayIndex).ToList());
            }
            return(moodMap.ToBitmap());
        }
Exemplo n.º 3
0
        protected GlobalMoodReportModel GetGlobalMoodReport(Event evnt, MoodCategory cat, DateTime reportStart, DateTime reportEnd, int moodIsStaleMins, bool includeActivities, int roundPercentagesToNPlaces)
        {
            var moods = this.db.Get <Mood>().Where(m => m.Category.Id == cat.Id);

            // get last previous snapshot
            var roundedReportEnd = MoodResponse.GetRoundedResponseTime(reportEnd);


            var snapshots = (from s in this.db.Get <Snapshot>()
                             where s.Category.Id == cat.Id &&
                             s.Category.Id == cat.Id && s.TimeStamp >= reportStart && s.TimeStamp <= roundedReportEnd
                             group s by s.TimeStamp into sg
                             select new MoodSnaphotReportModel()
            {
                t = sg.Key,
                r = sg.Sum(r => r.ResponseCount),
                d = sg.Select(r => new MoodSnapshotDataModel()
                {
                    c = r.ResponseCount,
                    i = r.Mood.DisplayIndex,
                    p = Math.Round(((decimal)r.ResponseCount / (decimal)sg.Sum(sgr => sgr.ResponseCount)) * 100M, roundPercentagesToNPlaces)
                })
            }).OrderBy(s => s.t).ToList();

            var first = snapshots.FirstOrDefault();

            if (first == null || first.t != reportStart)
            {
                var startSnapTime = (from s in this.db.Get <Snapshot>()
                                     where s.Category.Id == cat.Id &&
                                     s.Category.Id == cat.Id && s.TimeStamp < reportStart
                                     orderby s.TimeStamp descending
                                     select s.TimeStamp).FirstOrDefault();
                if (startSnapTime != DateTime.MinValue && startSnapTime >= reportStart.AddMinutes(-(evnt.ApplicationConfig.ReportMoodIsStaleMins)))
                {
                    var startSnap = (from s in this.db.Get <Snapshot>()
                                     where s.Category.Id == cat.Id &&
                                     s.Category.Id == cat.Id && s.TimeStamp == startSnapTime
                                     group s by s.TimeStamp into sg
                                     select new MoodSnaphotReportModel()
                    {
                        //t = sg.Key,
                        t = reportStart,
                        r = sg.Sum(r => r.ResponseCount),
                        d = sg.Select(r => new MoodSnapshotDataModel()
                        {
                            c = r.ResponseCount,
                            i = r.Mood.DisplayIndex,
                            p = Math.Round(((decimal)r.ResponseCount / (decimal)sg.Sum(sgr => sgr.ResponseCount)) * 100M, roundPercentagesToNPlaces)
                        })
                    }).Single();
                    snapshots.Insert(0, startSnap);
                }
                else
                {
                    var allMoods = this.db.Get <Mood>().Where(m => m.Category.Event.Id == evnt.Id).OrderBy(m => m.DisplayIndex).ToList();
                    snapshots.Insert(0, new MoodSnaphotReportModel()
                    {
                        t = reportStart,
                        r = 0,
                        d = allMoods.Select(m => new MoodSnapshotDataModel()
                        {
                            c = 0,
                            i = m.DisplayIndex,
                            p = Math.Round(100M / (decimal)allMoods.Count(), roundPercentagesToNPlaces)
                        })
                    });
                }
            }


            var prompts = this.db.Get <MoodPrompt>().Where(p => p.Event.Id == evnt.Id && p.Activity.TimeStamp >= reportStart && p.Activity.TimeStamp <= reportEnd).OrderBy(p => p.Activity.TimeStamp);


            var activities = from a in this.db.Get <Activity>()
                             join p in prompts on a.Id equals p.Activity.Id into ga
                             from pa in ga.DefaultIfEmpty()
                             select new { Activity = a, HasPrompt = pa != null };



            var model = new GlobalMoodReportModel()
            {
                Snapshots = snapshots,
                Prompts   = includeActivities ? prompts.Select(p => new GlobalActivityModel()
                {
                    Id        = p.Id,
                    Title     = p.Activity.Title,
                    TimeStamp = p.Activity.TimeStamp
                }).ToList() : null,
                Activities = includeActivities ? activities.Where(a => a.HasPrompt == false).Select(e => new GlobalActivityModel()
                {
                    Id        = e.Activity.Id,
                    Title     = e.Activity.Title,
                    TimeStamp = e.Activity.TimeStamp
                }).ToList() : null,
                Moods = moods.Select(m => new MoodModel()
                {
                    Id           = m.Id,
                    Name         = m.Name,
                    DisplayColor = m.DisplayColor,
                    DisplayIndex = m.DisplayIndex,
                    MoodType     = m.MoodType
                }).ToList()
            };

            return(model);
        }