protected override void Dispose(bool disposing)
        {
            NSNotificationCenter.DefaultCenter.RemoveObserver(this);


            if (this.globalMoodMapView != null)
            {
                this.globalMoodMapView.Dispose();
                this.globalMoodMapView = null;
            }

            if (this.supportBtn != null)
            {
                this.supportBtn.Dispose();
                this.supportBtn = null;
            }

            if (this.refreshBtn != null)
            {
                this.refreshBtn.Dispose();
                this.refreshBtn = null;
            }

            if (this.syncStatusBtnView != null)
            {
                this.syncStatusBtnView.Dispose();
                this.syncStatusBtnView = null;
            }
            this.currentReport = null;

            base.Dispose(disposing);
        }
Exemple #2
0
        public static double GetReportHours(MoodReport report)
        {
            var reportStartLocal = GetReportStartLocal(report);
            var reportEndLocal   = GetReportEndLocal(report);

            return((reportEndLocal.Subtract(reportStartLocal).Days + 1) * (DayEndTime.Subtract(DayStartTime).TotalHours));
        }
Exemple #3
0
        public static void DeleteReport(MoodReport report)
        {
            try {
                Console.WriteLine("Delete report {0}", report.Id);
                string        imagesFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Reports", report.Id.ToString());
                DirectoryInfo dir          = new DirectoryInfo(imagesFolder);
                Console.WriteLine("Lets delete image files");
                if (dir.Exists)
                {
                    dir.Delete(true);
                }
                Console.WriteLine("Deleted image files");
//
//				foreach (var snapshot in report.Snapshots) {
//					snapshot.Moods.DeleteAll ();
//				}
//
//				report.Snapshots.DeleteAll ();

                DeleteReportSnapshots(report);
                Console.WriteLine("Delete report");
                var deleteReport = "delete from MoodReport where Id = @ReportId";
                CSDatabase.ExecuteNonQuery(deleteReport, new { ReportId = report.Id });

                //report.Delete ();

                Console.WriteLine("Report deleted");
            } catch (Exception ex) {
                MyMoodLogger.Current.Error("Failed deleting report", ex, 1);
            }
        }
Exemple #4
0
        private static void DeleteReportSnapshots(MoodReport report)
        {
            var deleteMoodSnapshotsSql = "delete from MoodSnapshot where Id in" +
                                         "(select ms.Id from MoodSnapshot ms inner join Snapshot s on ms.SnapshotId = s.Id where s.MoodReportId = @ReportId)";

            var deleteSnapshotSql = "delete from Snapshot where MoodReportId = @ReportId";

            Console.WriteLine("Delete mood snapshots");
            CSDatabase.ExecuteNonQuery(deleteMoodSnapshotsSql, new { ReportId = report.Id });
            Console.WriteLine("Delete snapshots");
            CSDatabase.ExecuteNonQuery(deleteSnapshotSql, new { ReportId = report.Id });
        }
Exemple #5
0
        protected void UpdateReportInfo(GlobalMoodReportInfoModel reportInfo)
        {
            Console.WriteLine("Update report info");
            if (reportInfo.Application != null)
            {
                UpdateApplication(reportInfo.Application, true);
            }

            if (reportInfo.Prompts != null)
            {
                Console.WriteLine("Update prompts");
                Activity.List("ActivityType=@ActivityType", new{ ActivityType = ActivityType.MoodPrompt }).DeleteAll();
                foreach (var p in reportInfo.Prompts)
                {
                    var prompt = Activity.New();
                    prompt.Id           = p.Id;
                    prompt.ActivityType = ActivityType.MoodPrompt;
                    prompt.Title        = p.Title;
                    prompt.TimeStamp    = p.TimeStamp;
                    prompt.Save();
                }
            }

            if (reportInfo.Events != null)
            {
                Console.WriteLine("Update events");
                Activity.List("ActivityType=@ActivityType", new{ ActivityType = ActivityType.Event }).DeleteAll();
                foreach (var e in reportInfo.Events)
                {
                    var evnt = Activity.New();
                    evnt.Id           = e.Id;
                    evnt.ActivityType = ActivityType.Event;
                    evnt.Title        = e.Title;
                    evnt.TimeStamp    = e.TimeStamp;
                    evnt.Save();
                }
            }

            if (reportInfo.HasNewData)
            {
                MoodReport report   = MoodReport.New();
                var        reportId = System.Guid.NewGuid().ToString();
                report.Id               = reportId;
                report.RequestedOn      = reportInfo.RequestTimeStamp;
                report.StartsOn         = reportInfo.ReportStartDate;
                report.EndsOn           = reportInfo.ReportEndDate;
                report.RequestCompleted = 0;
                report.DayStartsOn      = reportInfo.DayStartsOn;
                report.DayEndsOn        = reportInfo.DayEndsOn;
                report.RequestCompleted = 1;
                report.Save();
            }
        }
Exemple #6
0
        public static void GenerateReportImagesForAllLevels(MoodReport report)
        {
            foreach (var rl in RenderLevel.RenderLevels)
            {
                GenerateReportImages(report, rl);
            }
            report.ImagesGenerated = 1;
            report.Save();

            //NSNotificationCenter.DefaultCenter.PostNotificationName ("ReportImagesGenerated", null);

            //DeleteAllOldReports();
        }
Exemple #7
0
        public ReportRequestStatus RequestGlobalMoodReportData(MoodReport report)
        {
            ReportRequestStatus rtnStatus = new ReportRequestStatus();

            try {
                var app = ApplicationState.Current;


                var startDate = report.StartsOn;
                List <GlobalMoodReportModel> days = new List <GlobalMoodReportModel> ();
                var fail = 3;
                while (fail > 0 && startDate < report.EndsOn)
                {
                    var          endDate  = startDate.Date.AddDays(1).AddMinutes(-10);
                    NSString     key      = new NSString("Status");
                    NSDictionary userInfo = NSDictionary.FromObjectAndKey(NSObject.FromObject(string.Format("Requesting day data for {0:ddd dd MMM}", startDate)), key);
                    NSNotificationCenter.DefaultCenter.PostNotificationName("RequestingReportStatus", null, userInfo);

                    var dataReqStatus = RequestGlobalMoodReportData(report.Id, startDate, endDate);
                    if (dataReqStatus.Success)
                    {
                        //report = MoodReport.List ().FirstOrDefault (r => r.Id == reportId);
                        //report.LastRequestedDay = startDate;
                        //report.Save ();
                        days.Add(dataReqStatus.ReportData);
                        startDate = startDate.Date.AddDays(1);
                        fail      = 3;
                    }
                    else
                    {
                        fail--;
                    }
                }
                if (fail > 0)
                {
                    UpdateReportDays(report, days);

                    rtnStatus.Success            = true;
                    rtnStatus.NewReportAvailable = true;
                }
                else
                {
                    MyMoodLogger.Current.Log("Report download failed", "", 1);
                    rtnStatus.Success = false;
                }
            } catch (Exception ex) {
                MyMoodLogger.Current.Error("Error downloading day data", ex, 1);
            }
            return(rtnStatus);
        }
Exemple #8
0
        public override void ViewWillAppear(bool animated)
        {
            base.ViewWillAppear(animated);


            if (!ReportManager.RefreshCurrentReport)
            {
                MoodReport report = MoodReport.LatestGeneratedReport;
                if (report != null)
                {
                    this.NavigationController.PushViewController(moodMapController, false);
                }
            }
        }
Exemple #9
0
        public static IEnumerable <UIImage> GetReportImages(MoodReport report, RenderLevel renderLevel)
        {
            List <UIImage> images           = new List <UIImage>();
            string         imagesFolder     = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Reports", report.Id.ToString());
            var            reportStartLocal = GetReportStartLocal(report);
            var            reportEndLocal   = GetReportEndLocal(report);
            var            days             = (float)reportEndLocal.Date.Subtract(reportStartLocal.Date).Days + 1;

            for (var i = 0; i < days; i++)
            {
                var imagePath = Path.Combine(imagesFolder, GetDayImageFileName(renderLevel, i));
                images.Add(UIImage.FromFile(imagePath));
            }
            return(images);
        }
Exemple #10
0
 void NewReportReceived(NSDictionary n)
 {
     if (loadingFirstReport)
     {
         loadingFirstReport = false;
         Console.WriteLine("New report received in loading screen");
         InvokeOnMainThread(delegate {
             if (this.NavigationController.TopViewController.View.Handle == this.View.Handle)
             {
                 MoodReport report = MoodReport.CurrentReport;
                 GenerateReportImages(report);
             }
         });
     }
 }
Exemple #11
0
        public SnapshotChartView(MoodReport report, RectangleF frame)
            : base(frame)
        {
            Console.WriteLine("Init chart view");
            this.report          = report;
            this.BackgroundColor = UIColor.Clear;
            this.ContentMode     = UIViewContentMode.Center;

            this.background       = new UIImageView(this.Bounds);
            this.background.Image = Resources.SnapshotPanelRight;
            this.Add(this.background);
            this.Hidden      = true;
            this.lastRefresh = DateTime.Now.AddDays(-1);

            this.eventTimeOffset = ApplicationState.Current.EventTimeOffset;
        }
Exemple #12
0
 public void Refresh(MoodReport report)
 {
     if (report != null)
     {
         this.snapshotSwitchView.Reset();
         this.promptSwitchView.Reset();
         this.eventSwitchView.Reset();
         this.SetCurrentReport(report);
         this.globalMoodMap.Refresh(report, this.CurrentZoomLevel);
         this.BuildAxis();
         if (this.snapshotToolView != null)
         {
             this.snapshotToolView.Refresh();
         }
     }
 }
Exemple #13
0
        public void Refresh(MoodReport report, ZoomLevel zoomLevel)
        {
            Console.WriteLine("Refresh data  - {0}", zoomLevel.Name);
            this.MoodReport       = report;
            this.ReportStartLocal = ReportManager.GetReportStartLocal(report);
            this.ReportEndLocal   = ReportManager.GetReportEndLocal(report);
            this.DefaultZoomLevel = zoomLevel;
            this.SetZoomLevel(zoomLevel);
            this.LoadImages();

            if (this.eventMarkersVisible)
            {
                BuildEventMarkers();
            }
            else
            {
                this.ClearEventMarkers();
            }
            if (this.promptMarkersVisible)
            {
                BuildPromptMarkers();
            }
            else
            {
                this.ClearPromptMarkers();
            }

            var eventNow = DateTime.UtcNow.ToLocalTime(ApplicationState.Current.EventTimeOffset);

            var offset = eventNow < this.ReportEndLocal ? ChartHelper.ToXPos(this.ReportStartLocal,
                                                                             this.ReportEndLocal,
                                                                             eventNow,
                                                                             this.CurrentRenderLevel.DayImageWidth,
                                                                             ReportManager.DayStartTime,
                                                                             ReportManager.DayEndTime,
                                                                             this.CurrentRenderLevel.DayMarkerWidth)
                         - this.Bounds.Size.Width / 2

                                :this.ContentSize.Width - this.Bounds.Size.Width;

            if (offset > 0)
            {
                this.SetContentOffset(new PointF(offset, 0), true);
            }

            ZoomToDefault();
        }
Exemple #14
0
        public void Refresh(MoodReport report, RenderLevel renderLevel)
        {
            var viewStartTime = ChartHelper.ToCurrentTime(report.StartsOn, report.EndsOn, this.globalMap.ContentOffset.X * 1 / this.globalMap.ZoomScale, renderLevel, true).Value;
            var viewEndTime   = ChartHelper.ToCurrentTime(report.StartsOn, report.EndsOn, (this.globalMap.ContentOffset.X + this.Frame.Width) * 1 / this.globalMap.ZoomScale, renderLevel, true).Value;

            var labelTime  = viewStartTime;
            var labelIndex = 0;
            var labelPos   = 0f;

            while (labelTime < viewEndTime)
            {
                var pxTilEndOfDay = (float)(ReportManager.DayEndTime.Subtract(labelTime.TimeOfDay).TotalHours / ReportManager.DayEndTime.Subtract(ReportManager.DayStartTime).TotalHours)
                                    * renderLevel.DayImageWidth * this.globalMap.ZoomScale;
                if (pxTilEndOfDay >= labelW)
                {
                    UILabel label;
                    if (this.dayLabels.Count() > labelIndex)
                    {
                        label = this.dayLabels [labelIndex];
                    }
                    else
                    {
                        label = new UILabel(new RectangleF(0, 0, labelW, labelH));
                        label.BackgroundColor = UIColor.Clear;
                        label.TextColor       = UIColor.White;
                        label.Font            = font;
                        this.Add(label);
                        this.dayLabels.Add(label);
                    }
                    label.Text  = labelTime.ToString("ddd dd MMM");
                    label.Frame = new RectangleF(new PointF(labelPos, label.Frame.Y), label.Frame.Size);
                    labelIndex++;
                }
                labelTime = labelTime.Date.AddDays(1);
                labelPos  = (ChartHelper.ToXPos(report.StartsOn, report.EndsOn, labelTime, renderLevel.DayImageWidth, ReportManager.DayStartTime, ReportManager.DayEndTime, renderLevel.DayMarkerWidth)
                             * this.globalMap.ZoomScale) - this.globalMap.ContentOffset.X;
            }

            while (labelIndex < this.dayLabels.Count())
            {
                var i = this.dayLabels.Count() - 1;
                this.dayLabels[i].RemoveFromSuperview();
                this.dayLabels.RemoveAt(i);
            }
        }
Exemple #15
0
        public override void ViewDidAppear(bool animated)
        {
            Console.WriteLine("Loading page - ViewDidAppear");
            loadingTitle.Text = "Loading data ....";
            loadingImage.StartAnimating();
            MoodReport report = MoodReport.CurrentReport;

            if (report != null)
            {
                if (report.ImagesGenerated == 0)
                {
                    GenerateReportImages(report);
                }
                else
                {
                    ReportImagesGenerated();
                }
            }
        }
Exemple #16
0
        public static ReportRequestStatus FetchReportDays(MoodReport report)
        {
            Console.WriteLine("Fetch report days");
            var status = new ReportRequestStatus();

            lock (_lock) {
                fetchingData = true;
                try{
                    //get rid of any pre fetched snapshots
                    DeleteReportSnapshots(report);
                    status = MyMoodService.Current.RequestGlobalMoodReportData(report);
                }catch (Exception ex) {
                    MyMoodLogger.Current.Error("Error fetching new report", ex, 1);
                }finally{
                    fetchingData = false;
                }
            }
            Console.WriteLine("Fetched report days");
            return(status);
        }
Exemple #17
0
 public static void DeleteAllOldReports(MoodReport currentReport)
 {
     try {
         if (currentReport != null)
         {
             Console.WriteLine("Delete old reports");
             //var currentReport = MoodReport.CurrentReport;
             var lastReport = MoodReport.ReadFirst("RequestedOn < @RequestedOn and RequestCompleted > 0", new { RequestedOn = currentReport.RequestedOn });
             var oldReports = MoodReport.List("RequestedOn < @RequestedOn", new { RequestedOn = currentReport.RequestedOn }).ToList();
             foreach (var report in oldReports)
             {
                 if (lastReport == null || report.Id != lastReport.Id)
                 {
                     DeleteReport(report);
                 }
             }
         }
     } catch (Exception ex) {
         MyMoodLogger.Current.Error("Error deleting old reports", ex, 1);
     }
 }
Exemple #18
0
        public static Snapshot GetClosestSnapshot(MoodReport report, DateTime snapshotLocalTime)
        {
            //return report.Snapshots.ToList().Where(s => s.TimeOfSnapshotLocal <= snapshotLocalTime).OrderByDescending(s => s.TimeOfSnapshotLocal).FirstOrDefault();
            Console.WriteLine("Fetching closest snapshot");
            //Id TEXT PRIMARY KEY, MoodReportId TEXT, TimeOfSnapshot DATETIME, TimeOfSnapshotLocal DATETIME, TotalResponses INTEGER, IsFirstGlance INTEGER, CreatedOn datetime
            var    sql        = "select Id from Snapshot where MoodReportId = @ReportId and TimeOfSnapshotLocal <= @SnapTime order by TimeOfSnapshotLocal desc limit 1";
            var    record     = CSDatabase.RunQuery(sql, new { ReportId = report.Id, SnapTime = snapshotLocalTime }).FirstOrDefault();
            object snapshotId = null;

            record.TryGetValue("Id", out snapshotId);
            //string snapshotId = CSDatabase.RunQuery(sql, new { ReportId = report.Id, SnapTime = snapshotLocalTime}).FirstOrDefault();
            Snapshot snapshot = null;

            if (snapshotId != null)
            {
                snapshot = Snapshot.ReadSafe(snapshotId.ToString());
            }

            //var utcTime = snapshotLocalTime.ToLocalTime(-(ApplicationState.Current.EventTimeOffset));
            //var snapshot = Snapshot.OrderedList("TimeOfSnapshotLocal-", "MoodReport.Id = @ReportId and TimeOfSnapshotLocal <= @SnapTime", new { ReportId = report.Id, SnapTime = snapshotLocalTime}).FirstOrDefault();
            Console.WriteLine("Got closest snapshot");
            return(snapshot);
        }
Exemple #19
0
 protected void GenerateReportImages(MoodReport report)
 {
     loadingTitle.Text = "Downloading data ...";
     System.Threading.Tasks.Task.Factory.StartNew(() => {
         if (ReportManager.FetchReportDays(report).Success)
         {
             InvokeOnMainThread(delegate {
                 loadingTitle.Text = "Generating images ...";
             });
             ReportManager.GenerateReportImagesForAllLevels(report);
         }
         else
         {
             InvokeOnMainThread(delegate {
                 loadingTitle.Text = "Download failed.";
             });
             //todo:pause
         }
         InvokeOnMainThread(delegate {
             ReportImagesGenerated();
         });
     });
 }
Exemple #20
0
        public SnapshotToolView(MoodReport report, ScrollableMoodMapView globalMap, RectangleF frame)
            : base(frame)
        {
            this.ContentMode       = UIViewContentMode.Center;
            this.report            = report;
            this.globalMap         = globalMap;
            backgroundImage        = new UIImageView(DrawSnapshotDropLine());
            backgroundImage.Center = new PointF(this.Center.X, this.Center.Y);
            this.Add(backgroundImage);

            this.AddStaleLine();

            var center = new PointF(this.Bounds.Width / 2, this.Bounds.Height / 2);

            chart = new SnapshotChartView(this.report, new RectangleF(center.X + 10f,
                                                                      center.Y - 100f,
                                                                      350f,
                                                                      200f));
            this.Add(chart);

            this.currentSnapshotTime = GetCurrentSnapshotTime();
            this.RefreshChart();


            this.globalMap.Scrolled +=
                this.Scrolling;

            this.globalMap.ScrollAnimationEnded +=
                this.Scrolled;

            this.globalMap.DecelerationEnded +=
                this.Scrolled;

            this.globalMap.ZoomingEnded +=
                this.Zoomed;
        }
Exemple #21
0
 public void Refresh(MoodReport report)
 {
     this.report = report;
     this.Refresh();
 }
 public void Refresh()
 {
     this.currentReport = MoodReport.LatestGeneratedReport;
     globalMoodMapView.Refresh(this.currentReport);
     //this.refreshBtn.Show();
 }
        public override void ViewDidLoad()
        {
            Console.WriteLine("Our mood ViewDidLoad");

            base.ViewDidLoad();

            // Perform any additional setup after loading the view, typically from a nib.

            //MoodReport report = MoodReport.List().FirstOrDefault();

//			GlobalMoodMap map = new GlobalMoodMap(){
//				Width = (int)ChartContainer.Bounds.Width,
//				Height = (int)ChartContainer.Bounds.Height,
//				ReportStart = report.StartsOn,
//				ReportEnd = report.EndsOn,
//				Tension = 0.7f,
//				ShowDataPoints = false
//			};
            NSNotificationCenter.DefaultCenter.AddObserver(this, new Selector("NewReportReceived"), "NewReportReceived", null);
            NSNotificationCenter.DefaultCenter.AddObserver(this, new Selector("SyncingWithServer:"), "SyncingWithServer", null);
            NSNotificationCenter.DefaultCenter.AddObserver(this, new Selector("SyncWithServerComplete:"), "SyncWithServerComplete", null);
            NSNotificationCenter.DefaultCenter.AddObserver(this, new Selector("HideSupportScreen:"), "HideSupportScreen", null);
            NSNotificationCenter.DefaultCenter.AddObserver(this, new Selector("ShowSupportScreen:"), "ShowSupportScreen", null);

            //globalMoodMap = new GlobalMoodMapView(new RectangleF(0, 0, this.ChartContainer.Frame.Width, this.ChartContainer.Frame.Height), null, false, true, 0.7f);


            globalMoodMapView = new GlobalMoodMapView(this.ChartLayer.Bounds);
            this.ChartLayer.Add(globalMoodMapView);



            syncStatusBtnView = new SyncStatusButtonView(new RectangleF(10, 12, 25, 22));
            this.Add(syncStatusBtnView);
            //syncStatusBtnView.Hidden = true;

            refreshBtn          = new RefreshDataButtonView();
            refreshBtn.Center   = new PointF(this.View.Center.X, -20);
            refreshBtn.Refresh += (object sender, EventArgs e) => {
                RefreshImages();
            };
            this.Add(refreshBtn);

            supportBtn       = new UIButton(UIButtonType.RoundedRect);
            supportBtn.Frame = new RectangleF(300, 60, 70, 30);
            supportBtn.SetTitle("Support", UIControlState.Normal);
            supportBtn.TouchUpInside += (object sender, EventArgs e) => {
                ShowSupportScreen();
            };
            supportBtn.Hidden = true;
            this.Add(supportBtn);

            this.currentReport = MoodReport.LatestGeneratedReport;
            globalMoodMapView.Refresh(this.currentReport);

            Console.WriteLine("Snapshot count: {0}", Snapshot.Count());
            Console.WriteLine("MoodSnapshot count: {0}", MoodSnapshot.Count());
            Console.WriteLine("Report count: {0}", MoodReport.Count());
            Console.WriteLine("Log count: {0}", Log.Count());

            //this.Refresh();
//
//
//			var reports = MoodReport.All().ToList();
//			var snapshots = MoodSnapshot.Count();
//			var currenSnapshots = MoodReport.CurrentReport.Snapshots.Count();
        }
Exemple #24
0
        protected void UpdateReportDays(MoodReport report, IEnumerable <GlobalMoodReportModel> days)
        {
            Console.WriteLine("Update report days");
            var allMoods = Mood.All().ToList();

            NSDictionary userInfo = NSDictionary.FromObjectAndKey(NSObject.FromObject("Saving data ..."), new NSString("Status"));

            NSNotificationCenter.DefaultCenter.PostNotificationName("RequestingReportStatus", null, userInfo);
            int count             = 1;
            var insertSnapshotSql = "insert into Snapshot (Id, MoodReportId, TimeOfSnapshot, TimeOfSnapshotLocal, TotalResponses, CreatedOn) " +
                                    " values (@Id, @MoodReportId, @TimeOfSnapshot, @TimeOfSnapshotLocal, @TotalResponses,  @CreatedOn)";

            var insertMoodSnapshotSql = "insert into MoodSnapshot (Id, SnapshotId, MoodId, ResponseCount, ResponsePercentage) " +
                                        " values (@Id, @SnapshotId, @MoodId, @ResponseCount, @ResponsePercentage)";

            foreach (var day in days)
            {
                foreach (var s in day.Snapshots)
                {
                    userInfo = NSDictionary.FromObjectAndKey(NSObject.FromObject(string.Format("Saving snapshot {0}", count)), new NSString("Status"));
                    NSNotificationCenter.DefaultCenter.PostNotificationName("RequestingReportStatus", null, userInfo);
                    count++;

                    var snapshotId = System.Guid.NewGuid().ToString();
                    CSDatabase.ExecuteNonQuery(insertSnapshotSql, new{ Id                  = snapshotId,
                                                                       MoodReportId        = report.Id,
                                                                       TimeOfSnapshot      = s.t,
                                                                       TimeOfSnapshotLocal = s.t.ToLocalTime(ApplicationState.Current.EventTimeOffset),
                                                                       TotalResponses      = s.r,
                                                                       CreatedOn           = DateTime.UtcNow });



//					Snapshot snap = Snapshot.New ();
//					snap.Id = System.Guid.NewGuid ().ToString ();
//					snap.MoodReport = report;
//					snap.TimeOfSnapshot = s.t;
//					snap.TimeOfSnapshotLocal = s.t.ToLocalTime (ApplicationState.Current.EventTimeOffset);
//					snap.TotalResponses = s.r;
//					snap.IsFirstGlance = false;
//					snap.CreatedOn = DateTime.UtcNow;
//					snap.Save ();
                    //make sure a snapshot is recorde for all moods even if no data provided
                    var snapMoods = from m in allMoods
                                    join d in s.d
                                    on m.DisplayIndex equals d.i into gm
                                    from subm in gm.DefaultIfEmpty()
                                    select new {
                        Mood = m,

                        ResponseCount      = subm == null ? 0 : subm.c,
                        ResponsePercentage = subm == null ? 0 : subm.p,
                        MoodType           = m.MoodType
                    };


                    foreach (var d in snapMoods)
                    {
                        CSDatabase.ExecuteNonQuery(insertMoodSnapshotSql, new {
                            Id                 = System.Guid.NewGuid().ToString(),
                            SnapshotId         = snapshotId,
                            MoodId             = d.Mood.Id,
                            ResponseCount      = d.ResponseCount,
                            ResponsePercentage = d.ResponsePercentage
                        });


//						MoodSnapshot ms = MoodSnapshot.New ();
//						ms.Id = System.Guid.NewGuid ().ToString ();
//						ms.Snapshot = snap;
//						ms.Mood = d.Mood;
//						//ms.Name = d.Mood.Name;
//						//ms.DisplayIndex = d.Mood.DisplayIndex;
//						ms.ResponseCount = d.ResponseCount;
//						ms.ResponsePercentage = d.ResponsePercentage;
//						ms.Save ();
                    }
                }
            }
        }
Exemple #25
0
 public static DateTime GetReportStartLocal(MoodReport report)
 {
     return(report.StartsOnLocal.Date.Add(DayStartTime));
 }
Exemple #26
0
        public static void GenerateReportImages(MoodReport report, RenderLevel renderLevel)
        {
            Console.WriteLine("Generate report images - {0} / {1}", report.Id, renderLevel.Index);
            if (report != null)
            {
                string        imagesFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Reports", report.Id.ToString());
                DirectoryInfo imagesDir    = new DirectoryInfo(imagesFolder);
                if (!imagesDir.Exists)
                {
                    imagesDir.Create();
                }


                var nowLocal         = DateTime.UtcNow.ToLocalTime(ApplicationState.Current.EventTimeOffset);
                var reportStartLocal = GetReportStartLocal(report);
                var reportEndLocal   = GetReportEndLocal(report);
                //var finalSnapshotTime = nowLocal > reportEndLocal ? reportEndLocal : nowLocal;
                var finalSnapshotTime = reportEndLocal;

                var dayStart = reportStartLocal;
                var dayEnd   = reportStartLocal.Date.Add(DayEndTime);
                //var dayHours = dayEnd.Subtract (dayStart).TotalHours;
                if (dayEnd > reportEndLocal)
                {
                    dayEnd = reportEndLocal;
                }

                var allMoods          = Mood.All().ToList();
                var lastSnapshot      = GenerateEmptyMoodList(allMoods);
                var lastSnapshotAdded = dayStart;

                //var days = (float)reportEndLocal.Date.Subtract (reportStartLocal.Date).Days + 1;
                var dayIndex = 0;

                while (dayStart < reportEndLocal)
                {
                    var  imageFrame = new RectangleF(0f, 0f, renderLevel.DayImageWidth, renderLevel.DayImageHeight);
                    var  imager     = new GlobalMoodMapImager(dayStart, dayEnd);
                    bool lastAdded  = false;
                    var  snapshots  = Snapshot.OrderedList("TimeOfSnapshotLocal",
                                                           "MoodReport.Id = @ReportId and TimeOfSnapshotLocal >= @Start and TimeOfSnapshotLocal <= @End",
                                                           new { ReportId = report.Id, Start = lastSnapshotAdded, End = dayEnd }).ToList();

                    var addedFirst = false;
                    foreach (var snapshot in snapshots)
                    {
                        if (snapshot.TimeOfSnapshotLocal < dayStart)
                        {
                            lastSnapshot = GetMoods(snapshot);
                        }
                        else
                        {
                            if (!addedFirst && dayStart <= finalSnapshotTime)
                            {
                                addedFirst = true;
                                if (snapshot.TimeOfSnapshotLocal != dayStart)
                                {
                                    if (dayStart == finalSnapshotTime)
                                    {
                                        lastAdded = true;
                                    }
                                    imager.AddSnapshot(dayStart, lastSnapshot, lastAdded);
                                    lastSnapshotAdded = dayStart;
                                }
                            }
                            if (!lastAdded && snapshot.TimeOfSnapshotLocal <= finalSnapshotTime && snapshot.TimeOfSnapshotLocal <= dayEnd)
                            {
                                //if last snapshot more than 10 mins ago then add a pre-datapoint using last snapshot data
                                if (snapshot.TimeOfSnapshotLocal.Subtract(lastSnapshotAdded).TotalMinutes > 10)
                                {
                                    imager.AddSnapshot(snapshot.TimeOfSnapshotLocal.AddMinutes(-10), lastSnapshot, false);
                                }

                                if (snapshot.TimeOfSnapshotLocal == finalSnapshotTime)
                                {
                                    lastAdded = true;
                                }
                                lastSnapshot = GetMoods(snapshot);
                                imager.AddSnapshot(snapshot.TimeOfSnapshotLocal, lastSnapshot, lastAdded);
                                lastSnapshotAdded = snapshot.TimeOfSnapshotLocal;
                            }
                        }
                    }
                    //always make sure there is a snapshot at the start of the day
                    if (!addedFirst)
                    {
                        addedFirst = true;
                        imager.AddSnapshot(dayStart, lastSnapshot, lastAdded);
                        lastSnapshotAdded = dayStart;
                    }



                    if (!lastAdded && lastSnapshot != null && lastSnapshotAdded < dayEnd)
                    {
                        if (dayStart.AddDays(1) > reportEndLocal)
                        {
                            imager.AddSnapshot(finalSnapshotTime, lastSnapshot, true);
                            lastSnapshotAdded = finalSnapshotTime;
                        }
                        else
                        {
                            imager.AddSnapshot(dayEnd, lastSnapshot, false);
                            lastSnapshotAdded = dayEnd;
                        }
                    }


                    using (var img = imager.DrawMapImage(imageFrame)){
                        string  filename = Path.Combine(imagesFolder, GetDayImageFileName(renderLevel, dayIndex));
                        NSError err;
                        img.AsPNG().Save(filename, true, out err);
                    }


                    Console.WriteLine("Image drawn");

                    dayStart = dayStart.AddDays(1);
                    dayEnd   = dayEnd.AddDays(1);
                    if (dayEnd > reportEndLocal)
                    {
                        dayEnd = reportEndLocal;
                    }

                    dayIndex++;
                }
                Console.WriteLine("Images generated");
            }
        }
Exemple #27
0
 protected void SetCurrentReport(MoodReport report)
 {
     this.CurrentReport    = report;
     this.ReportStartLocal = ReportManager.GetReportStartLocal(report);
     this.ReportEndLocal   = ReportManager.GetReportEndLocal(report);
 }
Exemple #28
0
 public static DateTime GetReportEndLocal(MoodReport report)
 {
     return(report.EndsOnLocal.Date.Add(DayEndTime));
 }