Beispiel #1
0
        private async Task EnsureLoaded()
        {
            if (isLoading || controller == null || controller.Data != null)
            {
                return;
            }

            isLoading = true;
            try {
                var data = new SummaryReportView {
                    Period = ZoomLevel,
                };
                await data.Load(Period);

                IsError = data.IsError;
                if (controller != null)
                {
                    controller.Data = data;
                }
            } finally {
                isLoading = false;
                if (LoadReady != null)
                {
                    LoadReady(this, new LoadReadyEventArgs(Period, IsError));
                }
            }
        }
Beispiel #2
0
        public async void LoadData()
        {
            if (IsClean)
            {
                try {
                    IsLoading         = true;
                    dataSource        = new SummaryReportView();
                    dataSource.Period = ZoomLevel;

                    _delaying = true;
                    cts       = new CancellationTokenSource();
                    await Task.Delay(500, cts.Token);

                    _delaying = false;

                    await dataSource.Load(TimeSpaceIndex);

                    if (!dataSource.IsLoading)
                    {
                        barChart.ReportView = dataSource;
                        pieChart.ReportView = dataSource;
                    }
                    IsClean = IsError; // Declare ReportView as clean if an error occurs..
                } catch (Exception ex) {
                    IsClean = true;
                } finally {
                    IsLoading = false;
                    _delaying = false;
                    cts.Dispose();
                }
            }
        }
        public ReportsViewController()
        {
            EdgesForExtendedLayout = UIRectEdge.None;
            menuController         = new ReportsMenuController();
            dataSource             = new SummaryReportView();
            cachedReports          = new List <ReportView>();

            _zoomLevel      = ZoomLevel.Week;
            _timeSpaceIndex = 0;
        }
 public void TestCreateYearReport()
 {
     RunAsync(async delegate {
         var view    = new SummaryReportView();
         view.Period = ZoomLevel.Year;
         await view.Load(0);
         Assert.AreEqual(false, view.IsLoading);
         Assert.AreEqual(false, view.IsError);
         Assert.AreEqual(true, view.ActivityCount == 12);
         Assert.AreEqual(true, view.Projects.Count > 0);
         Assert.AreEqual(true, view.CollapsedProjects.Count > 0);
     });
 }
        private void ShowSummaryReport(string year)
        {
            var u = Global.db.Users.AsEnumerable().Where(x => x.DateJoined.Year.ToString() == year).OrderByDescending(x => x.DateJoined);

            SummaryReportView.Reset();
            DataTable dt = u != null?LinqToDataTable.LINQResultToDataTable(u) : new DataTable();

            ReportDataSource rds = new ReportDataSource("SummaryDataSet", dt);

            SummaryReportView.LocalReport.DataSources.Add(rds);
            SummaryReportView.LocalReport.ReportPath = Server.MapPath("~/AdminAccess/Report/SummaryReport.rdlc");
            SummaryReportView.LocalReport.SetParameters(new ReportParameter("year", year));
            SummaryReportView.LocalReport.SetParameters(new ReportParameter("totalRegistration", u.Count().ToString()));
            SummaryReportView.LocalReport.Refresh();
        }
Beispiel #6
0
        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            ctx = Activity;
            projectListItemPool = new Pool <View> (CreateProjectListItem)
            {
                Count = 3 /*controller count*/ * 7 /*list items per controller*/,
            };
            reportsControllerPool = new Pool <ReportsFragment.Controller> (CreateController, ResetController)
            {
                Count = 3,
            };
            zoomLevel = SummaryReportView.GetLastZoomViewed();
        }
Beispiel #7
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            _zoomLevel           = SummaryReportView.GetLastZoomViewed();
            View.BackgroundColor = UIColor.White;
            menuController.Attach(this);

            topBorder        = new TopBorder();
            dateSelectorView = new DateSelectorView();
            dateSelectorView.LeftArrowPressed  += (sender, e) => scrollView.SetPageIndex(-1, true);
            dateSelectorView.RightArrowPressed += (sender, e) => {
                if (_timeSpaceIndex >= 1)
                {
                    return;
                }
                scrollView.SetPageIndex(1, true);
            };

            scrollView               = new InfiniteScrollView <ReportView> (this);
            scrollView.Delegate      = new InfiniteScrollDelegate();
            scrollView.OnChangePage += (sender, e) => LoadReportData();

            statusView = new SyncStatusViewController.StatusView()
            {
                Retry             = LoadReportData,
                Cancel            = () => StatusBarShown = false,
                StatusFailText    = "ReportsStatusFailText".Tr(),
                StatusSyncingText = "ReportsStatusSyncText".Tr()
            };

            Add(scrollView);
            Add(dateSelectorView);
            Add(topBorder);
            Add(statusView);

            NavigationController.InteractivePopGestureRecognizer.Enabled = false;
        }
Beispiel #8
0
 public ReportsPagerFragment()
 {
     zoomLevel = SummaryReportView.GetLastZoomViewed();
 }
Beispiel #9
0
        public void Reset(SummaryReportView data)
        {
            this.data = data;

            // Cancel old animation
            if (currentRevealAnimation != null)
            {
                currentRevealAnimation.Cancel();
                currentRevealAnimation = null;
            }
            if (currentSelectAnimation != null)
            {
                currentSelectAnimation.Cancel();
                currentSelectAnimation = null;
            }

            var totalSlices = data == null || data.CollapsedProjects == null ? 0 : data.CollapsedProjects.Count;

            SetActiveSlice(-1, updateStats: false);
            backgroundView.Visibility = ViewStates.Visible;
            backgroundView.Radius     = defaultRadius;

            ResetSlices(totalSlices);
            if (totalSlices > 0)
            {
                var totalTime  = data.CollapsedProjects.Sum(x => x.TotalTime);
                var startAngle = 0f;

                for (var i = 0; i < totalSlices; i++)
                {
                    var slice        = slices [i];
                    var project      = data.CollapsedProjects [i];
                    var percentOfAll = (float)project.TotalTime / totalTime;

                    slice.Visibility = ViewStates.Gone;
                    slice.Radius     = defaultRadius;
                    if (project.Color == ProjectModel.GroupedProjectColorIndex)
                    {
                        slice.Color = Color.ParseColor(ProjectModel.GroupedProjectColor);
                    }
                    else
                    {
                        slice.Color = Color.ParseColor(ProjectModel.HexColors [project.Color % ProjectModel.HexColors.Length]);
                    }
                    slice.StartAngle = startAngle;
                    startAngle      += percentOfAll * 360;
                }
            }

            // Detect state
            var isLoading = data == null || data.IsLoading;
            var isEmpty   = !isLoading && totalSlices == 0;

            if (isLoading)
            {
                // Loading state
                loadingOverlayView.Visibility = ViewStates.Visible;
                loadingOverlayView.Alpha      = 1f;

                emptyOverlayView.Visibility = ViewStates.Gone;
                statsOverlayView.Visibility = ViewStates.Gone;
            }
            else if (isEmpty)
            {
                // Error state
                loadingOverlayView.Visibility = ViewStates.Visible;
                loadingOverlayView.Alpha      = 1f;

                emptyOverlayView.Visibility = ViewStates.Visible;
                emptyOverlayView.Alpha      = 0f;

                statsOverlayView.Visibility = ViewStates.Gone;

                // Animate overlay in
                var scene = new AnimatorSet();

                var fadeIn  = ObjectAnimator.OfFloat(emptyOverlayView, "alpha", 0f, 1f).SetDuration(500);
                var fadeOut = ObjectAnimator.OfFloat(loadingOverlayView, "alpha", 1f, 0f).SetDuration(500);
                fadeOut.AnimationEnd += delegate {
                    loadingOverlayView.Visibility = ViewStates.Gone;
                };

                scene.Play(fadeOut);
                scene.Play(fadeIn).After(3 * fadeOut.Duration / 4);

                currentRevealAnimation = scene;
                scene.Start();
            }
            else
            {
                // Normal state
                var scene = new AnimatorSet();

                // Fade loading message out
                statsOverlayView.Visibility = ViewStates.Visible;
                statsOverlayView.Alpha      = 0f;

                var fadeOverlayOut = ObjectAnimator.OfFloat(loadingOverlayView, "alpha", 1f, 0f).SetDuration(500);
                fadeOverlayOut.AnimationEnd += delegate {
                    loadingOverlayView.Visibility = ViewStates.Gone;
                };
                scene.Play(fadeOverlayOut);

                var fadeOverlayIn = ObjectAnimator.OfFloat(statsOverlayView, "alpha", 0f, 1f).SetDuration(500);
                scene.Play(fadeOverlayIn).After(3 * fadeOverlayOut.Duration / 4);

                var donutReveal = ValueAnimator.OfFloat(0, 360);
                donutReveal.SetDuration(750);
                donutReveal.Update += (sender, e) => ShowSlices((float)e.Animation.AnimatedValue);
                scene.Play(donutReveal).After(fadeOverlayOut.Duration / 2);

                currentRevealAnimation = scene;
                scene.Start();
            }

            UpdateStats();
            RequestLayout();
        }
Beispiel #10
0
        public void Reset(SummaryReportView data)
        {
            // Cancel old animation
            if (currentAnimation != null)
            {
                currentAnimation.Cancel();
                currentAnimation = null;
            }

            // Not zooming
            isZooming = false;

            var totalRows = 0;
            var hasTime   = false;

            if (data == null)
            {
                backgroundView.XAxisLabels = null;
                ResetRows(totalRows);
            }
            else
            {
                var showEveryYLabel = 1;
                var showValueLabels = true;

                backgroundView.XAxisLabels = data.ChartTimeLabels.ToArray();

                totalRows = Math.Min(data.Activity.Count, data.ChartRowLabels.Count);
                ResetRows(totalRows);

                if (totalRows > 25)
                {
                    showEveryYLabel = 3;
                    showValueLabels = false;
                }

                for (var i = 0; i < totalRows; i++)
                {
                    var activity = data.Activity [i];
                    var yLabel   = data.ChartRowLabels [i];

                    if (activity.TotalTime > 0)
                    {
                        hasTime = true;
                    }

                    var barWidth  = (float)activity.TotalTime / (float)(data.MaxTotal * 3600);
                    var showYAxis = i % showEveryYLabel == 0;

                    // Bind the data to row
                    var row = rows [i];
                    row.RelativeWidth            = barWidth;
                    row.BarView.BillableTime     = activity.BillableTime;
                    row.BarView.TotalTime        = activity.TotalTime;
                    row.ValueTextView.Text       = activity.FormattedTotalTime;
                    row.ValueTextView.Visibility = showValueLabels ? ViewStates.Visible : ViewStates.Gone;
                    row.YAxisTextView.Text       = yLabel;
                    row.YAxisTextView.Visibility = showYAxis ? ViewStates.Visible : ViewStates.Gone;
                }
            }

            // Detect state
            var isLoading = totalRows == 0 || (data != null && data.IsLoading);
            var isEmpty   = !isLoading && !hasTime;

            if (isLoading)
            {
                // Loading state
                loadingOverlayView.Visibility = ViewStates.Visible;
                loadingOverlayView.Alpha      = 1f;

                emptyOverlayView.Visibility = ViewStates.Gone;
            }
            else if (isEmpty)
            {
                // Error state
                loadingOverlayView.Visibility = ViewStates.Visible;
                loadingOverlayView.Alpha      = 1f;

                emptyOverlayView.Visibility = ViewStates.Visible;
                emptyOverlayView.Alpha      = 0f;

                // Animate overlay in
                var scene = new AnimatorSet();

                var fadeIn  = ObjectAnimator.OfFloat(emptyOverlayView, "alpha", 0f, 1f).SetDuration(500);
                var fadeOut = ObjectAnimator.OfFloat(loadingOverlayView, "alpha", 1f, 0f).SetDuration(500);
                fadeOut.AnimationEnd += delegate {
                    loadingOverlayView.Visibility = ViewStates.Gone;
                };

                scene.Play(fadeOut);
                scene.Play(fadeIn).After(3 * fadeOut.Duration / 4);

                currentAnimation = scene;
                scene.Start();
            }
            else
            {
                // Normal state
                var scene = new AnimatorSet();

                // Fade loading message out
                var fadeOverlayOut = ObjectAnimator.OfFloat(loadingOverlayView, "alpha", 1f, 0f).SetDuration(500);
                fadeOverlayOut.AnimationEnd += delegate {
                    loadingOverlayView.Visibility = ViewStates.Gone;
                };

                scene.Play(fadeOverlayOut);

                foreach (var row in rows)
                {
                    var axisFadeIn  = ObjectAnimator.OfFloat(row.YAxisTextView, "alpha", 0f, 1f).SetDuration(500);
                    var barScaleUp  = ObjectAnimator.OfFloat(row.BarView, "scaleX", 0f, 1f).SetDuration(750);
                    var valueFadeIn = ObjectAnimator.OfFloat(row.ValueTextView, "alpha", 0f, 1f).SetDuration(400);

                    scene.Play(axisFadeIn);
                    scene.Play(barScaleUp).After(axisFadeIn.Duration / 2);
                    scene.Play(valueFadeIn).After(barScaleUp);
                }

                currentAnimation = scene;
                scene.Start();
            }

            RequestLayout();
        }