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)); } } }
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(); }
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(); }
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; }
public ReportsPagerFragment() { zoomLevel = SummaryReportView.GetLastZoomViewed(); }
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(); }
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(); }