From 9ed0174cb04d478d1ea8bd49d8e1964931e7b1f2 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Thu, 27 Jun 2019 09:13:14 +0800 Subject: [PATCH] [customer-summary] fix sorting to apply within currency groups * profit/sales/expense are sorted within currency groups. each group is prepended by currency-mnemonic header. header is rendered only if num(currencies) > 1. * markup/customername have no currency grouping. * customername sorting ensures 'No Customer' entries are last. --- .../business-reports/customer-summary.scm | 110 ++++++++++++------ 1 file changed, 76 insertions(+), 34 deletions(-) diff --git a/gnucash/report/business-reports/customer-summary.scm b/gnucash/report/business-reports/customer-summary.scm index 665a3d3256..fb637897d2 100644 --- a/gnucash/report/business-reports/customer-summary.scm +++ b/gnucash/report/business-reports/customer-summary.scm @@ -284,6 +284,7 @@ (gnc:date-option-absolute-time (opt-val gnc:pagename-general optname-to-date)))) (sort-order (opt-val gnc:pagename-display optname-sortascending)) + (sort-key (opt-val gnc:pagename-display optname-sortkey)) (show-zero-lines? (opt-val gnc:pagename-display optname-show-zero-lines)) (show-column-expense? (opt-val gnc:pagename-display optname-show-column-expense)) @@ -294,6 +295,7 @@ (commodities (delete-duplicates (map xaccAccountGetCommodity all-accounts) gnc-commodity-equiv)) + (commodities>1? (> (length commodities) 1)) (book (gnc-get-current-book)) (date-format (gnc:options-fancy-date book)) (ownerlist (gncBusinessGetOwnerList @@ -336,7 +338,6 @@ (total-sales (gnc:make-commodity-collector)) (total-expense (gnc:make-commodity-collector)) (headings (cons* (_ "Customer") - (_ "Currency") (_ "Profit") (_ "Markup") (_ "Sales") @@ -351,19 +352,19 @@ (expense (filter-splits splits expense-accounts)) (profit (coll-minus sales expense))) (list owner profit sales expense))) - ownerlist))) + ownerlist)) + (sortingtable '())) (define (add-row str curr markup profit sales expense url) (gnc:html-table-append-row! table (cons* (if url (gnc:make-html-text (gnc:html-markup-anchor url str)) str) - (gnc-commodity-get-mnemonic curr) (map (lambda (cell) (gnc:make-html-table-cell/markup "number-cell" cell)) (cons* profit - (format #f "~a%" (round markup)) + (and markup (format #f "~a%" (round markup))) sales (if show-column-expense? (list expense) @@ -375,24 +376,7 @@ (toplevel-total-sales 'merge sales #f) (toplevel-total-expense 'merge expense #f)) - (let* ((owner? string <)) - (? string <))) + (define (1? + (memq sort-key '(profit sales expense)) + (not (and last-comm (gnc-commodity-equiv last-comm comm)))) + (add-row (gnc-commodity-get-mnemonic comm) #f #f #f #f #f #f)) + (add-row (vector-ref elt 0) + comm + (vector-ref elt 2) + (gnc:make-gnc-monetary comm (vector-ref elt 3)) + (gnc:make-gnc-monetary comm (vector-ref elt 4)) + (gnc:make-gnc-monetary comm (vector-ref elt 5)) + (vector-ref elt 6)) + (lp (cdr sortingtable) comm)))) + ;; One horizontal ruler before the summary (gnc:html-table-append-row! table (list @@ -451,7 +488,12 @@ (sales (cadr (toplevel-total-sales 'getpair comm #f))) (expense (cadr (toplevel-total-expense 'getpair comm #f))) (markup (markup-percent profit sales))) - (add-row (_ "Total") comm markup + (add-row (if commodities>1? + (format #f "~a (~a)" + (_ "Total") + (gnc-commodity-get-mnemonic comm)) + (_ "Total")) + comm markup (gnc:make-gnc-monetary comm profit) (gnc:make-gnc-monetary comm sales) (gnc:make-gnc-monetary comm expense)