r21989 - gnucash/trunk/src/report/business-reports - Modify fancy invoice to work with credit notes.
Geert Janssens
gjanssens at code.gnucash.org
Fri Feb 10 10:33:06 EST 2012
Author: gjanssens
Date: 2012-02-10 10:33:06 -0500 (Fri, 10 Feb 2012)
New Revision: 21989
Trac: http://svn.gnucash.org/trac/changeset/21989
Modified:
gnucash/trunk/src/report/business-reports/fancy-invoice.scm
Log:
Modify fancy invoice to work with credit notes.
Modified: gnucash/trunk/src/report/business-reports/fancy-invoice.scm
===================================================================
--- gnucash/trunk/src/report/business-reports/fancy-invoice.scm 2012-02-10 15:32:56 UTC (rev 21988)
+++ gnucash/trunk/src/report/business-reports/fancy-invoice.scm 2012-02-10 15:33:06 UTC (rev 21989)
@@ -147,6 +147,16 @@
(define (make-account-hash) (make-hash-table 23))
+;; Internally invoice values are positive and credit-note values are negative
+;; However on the invoice/cn document they are always displayed as positive
+;; So depending on the document type the internal values have to be reversed
+;; before they are printed on the document. This function handles that.
+;; It should be called for each internal value that is to be displayed on the document.
+(define (inv-or-cn-value value credit-note?)
+ (if (not credit-note?)
+ value
+ (gnc-numeric-neg value)))
+
(define (update-account-hash hash values)
(for-each
(lambda (item)
@@ -164,14 +174,14 @@
(string-append (gnc:default-html-gnc-numeric-renderer numeric #f) " " (_ "%"))
(gnc:make-gnc-monetary currency numeric)))
-(define (add-entry-row table currency entry column-vector row-style invoice?)
+(define (add-entry-row table currency entry column-vector row-style cust-doc? credit-note?)
(let* ((row-contents '())
(entry-value (gnc:make-gnc-monetary
currency
- (gncEntryGetIntValue entry #t invoice?)))
+ (gncEntryGetDocValue entry #t cust-doc? credit-note?)))
(entry-tax-value (gnc:make-gnc-monetary
currency
- (gncEntryGetIntTaxValue entry #t invoice?))))
+ (gncEntryGetDocTaxValue entry #t cust-doc? credit-note?))))
(if (date-col column-vector)
(addto! row-contents
@@ -189,19 +199,19 @@
(addto! row-contents
(gnc:make-html-table-cell/markup
"number-cell"
- (gncEntryGetQuantity entry))))
+ (inv-or-cn-value (gncEntryGetQuantity entry) credit-note?))))
(if (price-col column-vector)
(addto! row-contents
(gnc:make-html-table-cell/markup
"number-cell"
(gnc:make-gnc-monetary
- currency (if invoice? (gncEntryGetInvPrice entry)
+ currency (if cust-doc? (gncEntryGetInvPrice entry)
(gncEntryGetBillPrice entry))))))
(if (discount-col column-vector)
(addto! row-contents
- (if invoice?
+ (if cust-doc?
(gnc:make-html-table-cell/markup
"number-cell"
(monetary-or-percent (gncEntryGetInvDiscount entry)
@@ -211,7 +221,7 @@
(if (tax-col column-vector)
(addto! row-contents
- (if (if invoice?
+ (if (if cust-doc?
(and (gncEntryGetInvTaxable entry)
(gncEntryGetInvTaxTable entry))
(and (gncEntryGetBillTaxable entry)
@@ -385,7 +395,7 @@
gnc:*report-options*)
-(define (make-entry-table invoice options add-order invoice?)
+(define (make-entry-table invoice options add-order cust-doc? credit-note?)
(define (opt-val section name)
(gnc:option-value
(gnc:lookup-option options section name)))
@@ -395,6 +405,7 @@
(lot (gncInvoiceGetPostedLot invoice))
(txn (gncInvoiceGetPostedTxn invoice))
(currency (gncInvoiceGetCurrency invoice))
+ (reverse-payments? (not (gncInvoiceAmountPositive invoice)))
(entries-added 0))
(define (colspan monetary used-columns)
@@ -443,35 +454,22 @@
(display-subtotal currency used-columns))))))
currency-totals)))
- (define (add-payment-row table used-columns split total-collector)
+ (define (add-payment-row table used-columns split total-collector reverse-payments?)
(let* ((t (xaccSplitGetParent split))
(currency (xaccTransGetCurrency t))
(invoice (opt-val gnc:pagename-general gnc:optname-invoice-number))
(owner '())
- ;; XXX Need to know when to reverse the value
- (amt (gnc:make-gnc-monetary currency (xaccSplitGetValue split)))
- (payment-style "grand-total")
+ ;; Depending on the document type, the payments may need to be sign-reversed
+ (amt (gnc:make-gnc-monetary currency
+ (if reverse-payments?
+ (gnc-numeric-neg(xaccSplitGetValue split))
+ (xaccSplitGetValue split))))
(row '()))
- ; Update to fix bug 564380, payment on bill doubles bill. Mike Evans <mikee at saxicola.co.uk>
- ;; Reverse the value when needed
- (if (not (null? invoice))
- (begin
- (set! owner (gncInvoiceGetOwner invoice))
- (let ((type (gncOwnerGetType
- (gncOwnerGetEndOwner owner))))
- (cond
- ((eqv? type GNC-OWNER-CUSTOMER)
- (total-collector 'add
- (gnc:gnc-monetary-commodity amt)
- (gnc:gnc-monetary-amount amt)))
- ((eqv? type GNC-OWNER-VENDOR)
- (total-collector 'add
- (gnc:gnc-monetary-commodity amt)
- (gnc:gnc-monetary-amount (gnc:monetary-neg amt))))
- ))))
+ (total-collector 'add
+ (gnc:gnc-monetary-commodity amt)
+ (gnc:gnc-monetary-amount amt))
-
(if (date-col used-columns)
(addto! row
(gnc-print-date (gnc-transaction-get-date-posted t))))
@@ -543,7 +541,8 @@
(lambda (split)
(if (not (equal? (xaccSplitGetParent split) txn))
(add-payment-row table used-columns
- split total-collector)))
+ split total-collector
+ reverse-payments?)))
splits)))
(add-subtotal-row table used-columns total-collector
@@ -563,10 +562,10 @@
current
used-columns
current-row-style
- invoice?)))
+ cust-doc? credit-note?)))
(if display-all-taxes
- (let ((tax-list (gncEntryGetIntTaxValues current invoice?)))
+ (let ((tax-list (gncEntryGetDocTaxValues current cust-doc? credit-note?)))
(update-account-hash acct-hash tax-list))
(tax-collector 'add
(gnc:gnc-monetary-commodity (cdr entry-values))
@@ -801,7 +800,8 @@
(references? (opt-val "Display" "References"))
(default-title (_ "Invoice"))
(custom-title (opt-val gnc:pagename-general "Custom Title"))
- (invoice? #f))
+ (cust-doc? #f)
+ (credit-note? #f))
(define (add-order o)
@@ -811,15 +811,27 @@
(if (not (null? invoice))
(begin
(set! owner (gncInvoiceGetOwner invoice))
- (let ((type (gncOwnerGetType
- (gncOwnerGetEndOwner owner))))
+ (let ((type (gncInvoiceGetType invoice)))
(cond
- ((eqv? type GNC-OWNER-CUSTOMER)
- (set! invoice? #t))
- ((eqv? type GNC-OWNER-VENDOR)
+ ((eqv? type GNC-INVOICE-CUST-INVOICE)
+ (set! cust-doc? #t))
+ ((eqv? type GNC-INVOICE-VEND-INVOICE)
(set! default-title (_ "Bill")))
- ((eqv? type GNC-OWNER-EMPLOYEE)
- (set! default-title (_ "Expense Voucher")))))
+ ((eqv? type GNC-INVOICE-EMPL-INVOICE)
+ (set! default-title (_ "Expense Voucher")))
+ ((eqv? type GNC-INVOICE-CUST-CREDIT-NOTE)
+ (begin
+ (set! cust-doc? #t)
+ (set! credit-note? #t)
+ (set! default-title (_ "Credit Note"))))
+ ((eqv? type GNC-INVOICE-VEND-CREDIT-NOTE)
+ (begin
+ (set! credit-note? #t)
+ (set! default-title (_ "Credit Note"))))
+ ((eqv? type GNC-INVOICE-EMPL-CREDIT-NOTE)
+ (begin
+ (set! credit-note? #t)
+ (set! default-title (_ "Credit Note"))))))
))
;; oli-custom - title redundant, "Invoice" moved to myname-table,
@@ -835,7 +847,7 @@
(title (title-string default-title custom-title)))
(set! table (make-entry-table invoice
(gnc:report-options report-obj)
- add-order invoice?))
+ add-order cust-doc? credit-note?))
(gnc:html-table-set-style!
table "table"
More information about the gnucash-changes
mailing list