Merge branch 'maint'

pull/565/head
Christopher Lam 7 years ago
commit e6c6d4e0bb

@ -873,18 +873,19 @@
(buckets (make-vector num-buckets 0))) (buckets (make-vector num-buckets 0)))
(define (addbucket! idx amt) (define (addbucket! idx amt)
(vector-set! buckets idx (+ amt (vector-ref buckets idx)))) (vector-set! buckets idx (+ amt (vector-ref buckets idx))))
(let lp ((splits splits)) (let lp ((splits splits)
(invoices-and-splits '()))
(cond (cond
((null? splits) ((null? splits)
(vector->list buckets)) (vector->list buckets))
;; next split is an invoice posting split. note we don't need ;; next split is an invoice posting split. add its balance to
;; to handle invoice payments because these payments will ;; bucket, and add splits to invoices-and-splits for payments.
;; reduce the lot balance automatically.
((eqv? (xaccTransGetTxnType (xaccSplitGetParent (car splits))) ((eqv? (xaccTransGetTxnType (xaccSplitGetParent (car splits)))
TXN-TYPE-INVOICE) TXN-TYPE-INVOICE)
(let* ((invoice (gncInvoiceGetInvoiceFromTxn (let* ((invoice (gncInvoiceGetInvoiceFromTxn
(xaccSplitGetParent (car splits)))) (xaccSplitGetParent (car splits))))
(inv-splits (gnc-lot-get-split-list (gncInvoiceGetPostedLot invoice)))
(lot (gncInvoiceGetPostedLot invoice)) (lot (gncInvoiceGetPostedLot invoice))
(bal (gnc-lot-get-balance lot)) (bal (gnc-lot-get-balance lot))
(bal (if receivable? bal (- bal))) (bal (if receivable? bal (- bal)))
@ -895,23 +896,33 @@
(let loop ((idx 0) (bucket-dates bucket-dates)) (let loop ((idx 0) (bucket-dates bucket-dates))
(if (< date (car bucket-dates)) (if (< date (car bucket-dates))
(addbucket! idx bal) (addbucket! idx bal)
(loop (1+ idx) (cdr bucket-dates))))) (loop (1+ idx) (cdr bucket-dates))))
(lp (cdr splits))) (lp (cdr splits)
(cons (cons invoice inv-splits) invoices-and-splits))))
;; next split is a prepayment
((and (eqv? (xaccTransGetTxnType (xaccSplitGetParent (car splits))) ;; next split is a payment. find the associated invoices,
TXN-TYPE-PAYMENT) ;; deduct their totals. the remaining is an overpayment.
(null? (gncInvoiceGetInvoiceFromLot (xaccSplitGetLot (car splits))))) ((eqv? (xaccTransGetTxnType (xaccSplitGetParent (car splits)))
(let* ((prepay (xaccSplitGetAmount (car splits))) TXN-TYPE-PAYMENT)
(prepay (if receivable? prepay (- prepay)))) (let* ((txn (xaccSplitGetParent (car splits)))
(gnc:pk 'next=prepay (car splits) prepay) (payment (apply + (map xaccSplitGetAmount
(addbucket! (1- num-buckets) prepay)) (xaccTransGetAPARAcctSplitList txn #f))))
(lp (cdr splits))) (overpayment
(fold
(lambda (inv-and-splits payment-left)
(if (member txn (map xaccSplitGetParent (cdr inv-and-splits)))
(- payment-left (gncInvoiceGetTotal (car inv-and-splits)))
payment-left))
(if receivable? (- payment) payment) invoices-and-splits)))
(gnc:pk 'payment (car splits) payment "->" overpayment)
(when (positive? overpayment)
(addbucket! (1- num-buckets) (- overpayment)))
(lp (cdr splits) invoices-and-splits)))
;; not invoice/prepayment. regular or payment split. ;; not invoice/prepayment. regular or payment split.
(else (else
(gnc:pk 'next=skipped (car splits)) (gnc:pk 'next=skipped (car splits))
(lp (cdr splits))))))) (lp (cdr splits) invoices-and-splits))))))
;; *************************************************************************** ;; ***************************************************************************

@ -251,7 +251,7 @@
(define link-cols (assq-ref '((none . 0) (simple . 1) (detailed . 3)) link-option)) (define link-cols (assq-ref '((none . 0) (simple . 1) (detailed . 3)) link-option))
(define (print-totals total debit credit tax sale) (define (print-totals total debit credit tax sale)
(define (total-cell cell) (define (total-cell cell)
(gnc:make-html-table-cell/markup "total-label-cell" cell)) (gnc:make-html-table-cell/markup "total-number-cell" cell))
(define (make-cell amt) (define (make-cell amt)
(total-cell (gnc:make-gnc-monetary currency amt))) (total-cell (gnc:make-gnc-monetary currency amt)))
(define span (define span
@ -263,7 +263,8 @@
(gnc:html-table-append-row/markup! (gnc:html-table-append-row/markup!
table "grand-total" table "grand-total"
(append (append
(list (total-cell (_ "Period Totals"))) (list (gnc:make-html-table-cell/markup
"total-label-cell" (_ "Period Totals")))
(addif (>= span 2) (gnc:make-html-table-cell/size 1 (1- span) "")) (addif (>= span 2) (gnc:make-html-table-cell/size 1 (1- span) ""))
(addif (sale-col used-columns) (make-cell sale)) (addif (sale-col used-columns) (make-cell sale))
(addif (tax-col used-columns) (make-cell tax)) (addif (tax-col used-columns) (make-cell tax))
@ -277,7 +278,8 @@
(gnc:html-table-append-row/markup! (gnc:html-table-append-row/markup!
table "grand-total" table "grand-total"
(append (append
(list (total-cell (list (gnc:make-html-table-cell/markup
"total-label-cell"
(if (negative? total) (if (negative? total)
(_ "Total Credit") (_ "Total Credit")
(_ "Total Due"))) (_ "Total Due")))
@ -302,36 +304,42 @@
currency total #f #f #f #f (list (make-list link-cols #f)))) currency total #f #f #f #f (list (make-list link-cols #f))))
(define (make-invoice->payments-table invoice invoice-splits currency txn) (define (make-invoice->payments-table invoice invoice-splits currency txn)
(append (let lp ((invoice-splits invoice-splits) (result '()))
(map (cond
(lambda (pmt-split) ((null? invoice-splits)
(list (reverse
(qof-print-date (if (gncInvoiceIsPaid invoice)
(xaccTransGetDate result
(xaccSplitGetParent pmt-split))) (cons (list (gnc:make-html-table-cell/size 1 2 (_ "Outstanding"))
(let ((text (gnc-get-num-action (make-cell
(xaccSplitGetParent pmt-split) (gnc:make-gnc-monetary
pmt-split))) currency (gnc-lot-get-balance
(if (string-null? text) (gncInvoiceGetPostedLot invoice)))))
(_ "Payment") result))))
text)) (else
(make-cell (let* ((lot-split (car invoice-splits))
(gnc:make-html-text (lot-txn (xaccSplitGetParent lot-split))
(gnc:html-markup-anchor (tfr-splits (xaccTransGetPaymentAcctSplitList lot-txn)))
(gnc:split-anchor-text pmt-split) (let lp1 ((tfr-splits tfr-splits) (result result))
(gnc:make-gnc-monetary (cond
currency (- (xaccSplitGetAmount pmt-split)))))))) ((equal? lot-txn txn) (lp (cdr invoice-splits) result))
(filter (lambda (s) (not (equal? (xaccSplitGetParent s) txn))) ((null? tfr-splits) (lp (cdr invoice-splits) result))
invoice-splits)) (else
(if (gncInvoiceIsPaid invoice) (let* ((tfr-split (car tfr-splits))
'() (tfr-acct (xaccSplitGetAccount tfr-split))
(list (tfr-curr (xaccAccountGetCommodity tfr-acct))
(list (gnc:make-html-table-cell/size 1 2 (_ "Outstanding")) (tfr-amt (xaccSplitGetAmount tfr-split)))
(make-cell (lp1 (cdr tfr-splits)
(gnc:make-gnc-monetary (cons (list
currency (qof-print-date (xaccTransGetDate lot-txn))
(gnc-lot-get-balance (let ((num (gnc-get-num-action lot-txn lot-split)))
(gncInvoiceGetPostedLot invoice))))))))) (if (string-null? num) (_ "Payment") num))
(make-cell
(gnc:make-html-text
(gnc:html-markup-anchor
(gnc:split-anchor-text tfr-split)
(gnc:make-gnc-monetary tfr-curr tfr-amt)))))
result)))))))))))
(define (make-payment->invoices-list invoice payment-splits) (define (make-payment->invoices-list invoice payment-splits)
(list (list
@ -347,29 +355,33 @@
#f))) #f)))
payment-splits))))) payment-splits)))))
(define (make-payment->invoices-table split payment-splits currency) (define (make-payment->invoices-table amount payment-splits currency)
(if (null? payment-splits) (let lp ((payment-splits payment-splits)
(list (list (gnc:make-html-table-cell/size 1 2 (_ "Prepayments")) (amount (- amount))
(make-cell (result '()))
(gnc:make-gnc-monetary (cond
currency (- (xaccSplitGetAmount split)))))) ((null? payment-splits)
(map (reverse
(lambda (inv-splits) (if (positive? amount)
(let ((inv (car inv-splits)) (cons (list (gnc:make-html-table-cell/size 1 2 (_ "Prepayments"))
(inv-split (cadr inv-splits))) (make-cell (gnc:make-gnc-monetary currency amount)))
(list result)
(qof-print-date result)))
(gncInvoiceGetDatePosted inv)) (else
(gnc:make-html-text (let* ((payment-split (car payment-splits))
(gnc:html-markup-anchor (inv (car payment-split))
(gnc:invoice-anchor-text inv) (inv-split (cadr payment-split))
(gnc-get-num-action (inv-amount (xaccSplitGetAmount inv-split)))
(gncInvoiceGetPostedTxn inv) #f))) (lp (cdr payment-splits)
(make-cell (- amount inv-amount)
(gnc:make-gnc-monetary (cons (list
currency (qof-print-date (gncInvoiceGetDatePosted inv))
(- (xaccSplitGetAmount inv-split))))))) (gnc:make-html-text
payment-splits))) (gnc:html-markup-anchor
(gnc:invoice-anchor-text inv)
(gnc-get-num-action (gncInvoiceGetPostedTxn inv) #f)))
(make-cell (gnc:make-gnc-monetary currency inv-amount)))
result)))))))
(define (split->type-str split) (define (split->type-str split)
(let* ((txn (xaccSplitGetParent split)) (let* ((txn (xaccSplitGetParent split))
@ -382,10 +394,12 @@
(gnc:invoice-anchor-text invoice) (gnc:invoice-anchor-text invoice)
(gncInvoiceGetTypeString invoice)))) (gncInvoiceGetTypeString invoice))))
((txn-is-payment? txn) ((txn-is-payment? txn)
(gnc:make-html-text (apply gnc:make-html-text
(gnc:html-markup-anchor (map (lambda (pmt-split)
(gnc:split-anchor-text split) (gnc:html-markup-anchor
(_ "Payment")))) (gnc:split-anchor-text pmt-split)
(_ "Payment")))
(xaccTransGetPaymentAcctSplitList txn))))
(else (_ "Unknown"))))) (else (_ "Unknown")))))
(define (invoice->sale invoice) (define (invoice->sale invoice)
@ -493,7 +507,7 @@
((and payment-splits (eq? link-option 'simple)) ((and payment-splits (eq? link-option 'simple))
(make-payment->invoices-list invoice payment-splits)) (make-payment->invoices-list invoice payment-splits))
((and payment-splits (eq? link-option 'detailed)) ((and payment-splits (eq? link-option 'detailed))
(make-payment->invoices-table split payment-splits currency)) (make-payment->invoices-table value payment-splits currency))
;; some error occurred, show 1 line containing empty-list ;; some error occurred, show 1 line containing empty-list
(else '(())))) (else '(()))))

@ -1540,18 +1540,9 @@ PrintAmountInternal(char *buf, gnc_numeric val, const GNCPrintAmountInfo *info)
val = gnc_numeric_convert(val, denom, GNC_HOW_RND_ROUND_HALF_UP); val = gnc_numeric_convert(val, denom, GNC_HOW_RND_ROUND_HALF_UP);
value_is_decimal = gnc_numeric_to_decimal(&val, NULL); value_is_decimal = gnc_numeric_to_decimal(&val, NULL);
} }
/* Force at least auto_decimal_places zeros */ min_dp = info->min_decimal_places;
if (auto_decimal_enabled) max_dp = info->max_decimal_places;
{
min_dp = MAX(auto_decimal_places, info->min_decimal_places);
max_dp = MAX(auto_decimal_places, info->max_decimal_places);
}
else
{
min_dp = info->min_decimal_places;
max_dp = info->max_decimal_places;
}
/* Don to limit the number of decimal places _UNLESS_ force_fit is /* Don to limit the number of decimal places _UNLESS_ force_fit is
* true. */ * true. */
if (!info->force_fit) if (!info->force_fit)

@ -25,8 +25,8 @@ msgstr ""
"Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug.cgi?"
"product=GnuCash&component=Translations\n" "product=GnuCash&component=Translations\n"
"POT-Creation-Date: 2019-09-29 21:34+0200\n" "POT-Creation-Date: 2019-09-29 21:34+0200\n"
"PO-Revision-Date: 2019-09-29 21:44+0200\n" "PO-Revision-Date: 2019-11-12 21:44+0200\n"
"Last-Translator: Christian Stimming <christian@cstimming.de>\n" "Last-Translator: pianoslum <pianoslum@mailbox.org>\n"
"Language-Team: GnuCash-de <gnucash-de@gnucash.org>\n" "Language-Team: GnuCash-de <gnucash-de@gnucash.org>\n"
"Language: de\n" "Language: de\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -27429,11 +27429,11 @@ msgstr "Eine Spalte mit der Differenz zwischen Budget (Soll) und Ist anzeigen."
#: gnucash/report/standard-reports/budget.scm:58 #: gnucash/report/standard-reports/budget.scm:58
msgid "Use accumulated amounts" msgid "Use accumulated amounts"
msgstr "" msgstr "Aufsummierte Buchungen anzeigen"
#: gnucash/report/standard-reports/budget.scm:59 #: gnucash/report/standard-reports/budget.scm:59
msgid "Values are accumulated across periods." msgid "Values are accumulated across periods."
msgstr "" msgstr "Werte werden über Perioden aufsummiert."
#: gnucash/report/standard-reports/budget.scm:60 #: gnucash/report/standard-reports/budget.scm:60
msgid "Show Column with Totals" msgid "Show Column with Totals"
@ -27565,7 +27565,7 @@ msgstr "Differenz"
#. of only using the budget-period amounts. #. of only using the budget-period amounts.
#: gnucash/report/standard-reports/budget.scm:702 #: gnucash/report/standard-reports/budget.scm:702
msgid "using accumulated amounts" msgid "using accumulated amounts"
msgstr "" msgstr "aufsummierte Beträge verwenden"
#: gnucash/report/standard-reports/cashflow-barchart.scm:40 #: gnucash/report/standard-reports/cashflow-barchart.scm:40
msgid "Cash Flow Barchart" msgid "Cash Flow Barchart"

Loading…
Cancel
Save