From e1ba6030dea4c199575dd02b139424f0a7c2da36 Mon Sep 17 00:00:00 2001 From: Vincent Dawans Date: Tue, 27 Jun 2023 19:25:07 -0700 Subject: [PATCH] Implement chart? flag in reports using chart.js --- gnucash/report/reports/example/average-balance.scm | 5 ++++- gnucash/report/reports/example/daily-reports.scm | 1 + gnucash/report/reports/example/sample-graphs.scm | 8 ++++++++ .../report/reports/standard/account-piecharts.scm | 1 + gnucash/report/reports/standard/balance-forecast.scm | 1 + gnucash/report/reports/standard/budget-barchart.scm | 1 + .../report/reports/standard/cashflow-barchart.scm | 1 + gnucash/report/reports/standard/investment-lots.scm | 3 +++ gnucash/report/reports/standard/net-charts.scm | 4 ++++ gnucash/report/reports/standard/price-scatter.scm | 1 + gnucash/report/reports/standard/view-column.scm | 12 +++++++++++- 11 files changed, 36 insertions(+), 2 deletions(-) diff --git a/gnucash/report/reports/example/average-balance.scm b/gnucash/report/reports/example/average-balance.scm index 5bf9e2d83f..2d59ab5137 100644 --- a/gnucash/report/reports/example/average-balance.scm +++ b/gnucash/report/reports/example/average-balance.scm @@ -491,4 +491,7 @@ 'report-guid "d5adcc61c62e4b8684dd8907448d7900" 'menu-path (list gnc:menuname-example) 'options-generator options-generator - 'renderer renderer) + 'chart? (lambda (report_obj) + (let* ((options (gnc:report-options report_obj))) + (gnc-optiondb-lookup-value options gnc:pagename-display "Show plot"))) + 'renderer renderer) \ No newline at end of file diff --git a/gnucash/report/reports/example/daily-reports.scm b/gnucash/report/reports/example/daily-reports.scm index 5219a421f7..65a6df25ff 100644 --- a/gnucash/report/reports/example/daily-reports.scm +++ b/gnucash/report/reports/example/daily-reports.scm @@ -301,6 +301,7 @@ 'menu-name (caddr l) 'menu-tip (car (cdddr l)) 'options-generator (lambda () (options-generator (cadr l))) + 'chart? #t 'renderer (lambda (report-obj) (piechart-renderer report-obj (car l) diff --git a/gnucash/report/reports/example/sample-graphs.scm b/gnucash/report/reports/example/sample-graphs.scm index d1df258368..b7db9a3cbc 100644 --- a/gnucash/report/reports/example/sample-graphs.scm +++ b/gnucash/report/reports/example/sample-graphs.scm @@ -185,5 +185,13 @@ ;; The options generator function defined above. 'options-generator options-generator + ;; A flag that informs the renderer whether or not to include + ;; the chart.js library in the html header. + ;; Can be set directly to a #t or #f value or + ;; if it changes based on report options, it can be set to + ;; a procedure that will be called with the report object + ;; to retrieve a #t or #f value + 'chart? #t + ;; The rendering function defined above. 'renderer test-graphing-renderer) diff --git a/gnucash/report/reports/standard/account-piecharts.scm b/gnucash/report/reports/standard/account-piecharts.scm index 439c6333e3..899c60e47a 100644 --- a/gnucash/report/reports/standard/account-piecharts.scm +++ b/gnucash/report/reports/standard/account-piecharts.scm @@ -588,6 +588,7 @@ balance at a given time")) 'options-generator (lambda () (options-generator acct-types income-expense? depth-based?)) + 'chart? #t 'renderer (lambda (report-obj) (piechart-renderer report-obj name uuid acct-types income-expense? depth-based? diff --git a/gnucash/report/reports/standard/balance-forecast.scm b/gnucash/report/reports/standard/balance-forecast.scm index 75f598ca11..9789d530ac 100644 --- a/gnucash/report/reports/standard/balance-forecast.scm +++ b/gnucash/report/reports/standard/balance-forecast.scm @@ -306,4 +306,5 @@ date point, a projected minimum balance including scheduled transactions.")) 'report-guid "321d940d487d4ccbb4bd0467ffbadbf2" 'menu-path (list gnc:menuname-asset-liability) 'options-generator options-generator + 'chart? #t 'renderer document-renderer) diff --git a/gnucash/report/reports/standard/budget-barchart.scm b/gnucash/report/reports/standard/budget-barchart.scm index b34253b99d..a8ff85a6be 100644 --- a/gnucash/report/reports/standard/budget-barchart.scm +++ b/gnucash/report/reports/standard/budget-barchart.scm @@ -325,4 +325,5 @@ 'report-guid "415cd38d39054d9e9c4040455290c2b1" 'menu-path (list gnc:menuname-budget) 'options-generator (lambda () (options-generator)) + 'chart? #t 'renderer (lambda (report-obj) (net-renderer report-obj))) diff --git a/gnucash/report/reports/standard/cashflow-barchart.scm b/gnucash/report/reports/standard/cashflow-barchart.scm index 2189bcfd77..99599e1633 100644 --- a/gnucash/report/reports/standard/cashflow-barchart.scm +++ b/gnucash/report/reports/standard/cashflow-barchart.scm @@ -351,4 +351,5 @@ 'menu-tip (N_ "Shows a barchart with cash flow over time") 'menu-path (list gnc:menuname-income-expense) 'options-generator cashflow-barchart-options-generator + 'chart? #t 'renderer cashflow-barchart-renderer) diff --git a/gnucash/report/reports/standard/investment-lots.scm b/gnucash/report/reports/standard/investment-lots.scm index ae23c33cd7..bccf9eb45f 100644 --- a/gnucash/report/reports/standard/investment-lots.scm +++ b/gnucash/report/reports/standard/investment-lots.scm @@ -2031,4 +2031,7 @@ 'report-guid "ab2acc24afd14630a551f98f1a35fa81" 'menu-path (list gnc:menuname-asset-liability) 'options-generator options-generator + 'chart? (lambda (report_obj) + (let* ((options (gnc:report-options report_obj))) + (gnc-optiondb-lookup-value options pagename-chart optname-show-chart))) 'renderer investment-lots-renderer) diff --git a/gnucash/report/reports/standard/net-charts.scm b/gnucash/report/reports/standard/net-charts.scm index b5e1e5df99..4f711ec65a 100644 --- a/gnucash/report/reports/standard/net-charts.scm +++ b/gnucash/report/reports/standard/net-charts.scm @@ -472,6 +472,7 @@ 'report-guid net-worth-barchart-uuid 'menu-path (list gnc:menuname-asset-liability) 'options-generator (lambda () (options-generator #f #f)) + 'chart? #t 'renderer (lambda (report-obj) (net-renderer report-obj #f #f #f)) 'export-types '(("CSV" . csv)) 'export-thunk (lambda (report-obj export-type) @@ -484,6 +485,7 @@ 'menu-name (N_ "Income & Expense Barchart") 'menu-path (list gnc:menuname-income-expense) 'options-generator (lambda () (options-generator #t #f)) + 'chart? #t 'renderer (lambda (report-obj) (net-renderer report-obj #t #f #f)) 'export-types '(("CSV" . csv)) 'export-thunk (lambda (report-obj export-type) @@ -495,6 +497,7 @@ 'report-guid net-worth-linechart-uuid 'menu-path (list gnc:menuname-asset-liability) 'options-generator (lambda () (options-generator #f #t)) + 'chart? #t 'renderer (lambda (report-obj) (net-renderer report-obj #f #t #f)) 'export-types '(("CSV" . csv)) 'export-thunk (lambda (report-obj export-type) @@ -509,6 +512,7 @@ 'menu-name (N_ "Income & Expense Linechart") 'menu-path (list gnc:menuname-income-expense) 'options-generator (lambda () (options-generator #t #t)) + 'chart? #t 'renderer (lambda (report-obj) (net-renderer report-obj #t #t #f)) 'export-types '(("CSV" . csv)) 'export-thunk (lambda (report-obj export-type) diff --git a/gnucash/report/reports/standard/price-scatter.scm b/gnucash/report/reports/standard/price-scatter.scm index 4c14c69e6b..33f1e47123 100644 --- a/gnucash/report/reports/standard/price-scatter.scm +++ b/gnucash/report/reports/standard/price-scatter.scm @@ -302,4 +302,5 @@ Unfortunately, the plotting tool can't handle that."))) 'menu-path (list gnc:menuname-asset-liability) 'menu-name (N_ "Price Scatterplot") 'options-generator options-generator + 'chart? #t 'renderer renderer) diff --git a/gnucash/report/reports/standard/view-column.scm b/gnucash/report/reports/standard/view-column.scm index f8ed02b493..10b540c1bb 100644 --- a/gnucash/report/reports/standard/view-column.scm +++ b/gnucash/report/reports/standard/view-column.scm @@ -29,6 +29,7 @@ (define-module (gnucash reports standard view-column)) (use-modules (gnucash engine)) (use-modules (ice-9 match)) +(use-modules (srfi srfi-1)) (use-modules (gnucash utilities)) (use-modules (gnucash core-utils)) (use-modules (gnucash app-utils)) @@ -176,6 +177,14 @@ (((child rowspan colspan _) . rest) (loop rest (cons (list child rowspan colspan #f) new-reports))))))) +(define (include-chart? report) + (let* ((options (gnc:report-options report)) + (reports + (gnc-optiondb-lookup-value options "__general" "report-list")) + (has-chart? (lambda (child) + (gnc:report-chart? (gnc-report-find (car child)))))) + (any has-chart? reports))) + ;; define the view now. (gnc:define-report 'version 1 @@ -186,4 +195,5 @@ 'renderer render-view 'options-generator make-options 'options-cleanup-cb cleanup-options - 'options-changed-cb options-changed-cb) + 'options-changed-cb options-changed-cb + 'chart? include-chart?)