Enable taxinvoice to show net price

Add gncEntryGetNetPrice
Create an option in taxinvoice to either use gncEntryGetNetPrice or
gncEntryGetPrice

So far taxinvoice would show net or gross prices dependent on the internal flag tax_included.
This is inconsistent for the reader of the invoice since there is no notion of that flag.
This patch adds the option to always show net prices.
It does not change the default behaviour even if I would consider it broken.
This commit is contained in:
hcrohland 2017-02-03 08:44:08 +01:00 committed by Geert Janssens
parent ece859705d
commit 78c5203d8c
4 changed files with 55 additions and 7 deletions

View File

@ -1071,12 +1071,12 @@ GncOrder * gncEntryGetOrder (const GncEntry *entry)
* The discount return value is just for entertainment -- you may want
* to let a consumer know how much they saved.
*/
void gncEntryComputeValue (gnc_numeric qty, gnc_numeric price,
static void gncEntryComputeValueInt (gnc_numeric qty, gnc_numeric price,
const GncTaxTable *tax_table, gboolean tax_included,
gnc_numeric discount, GncAmountType discount_type,
GncDiscountHow discount_how, int SCU,
gnc_numeric *value, gnc_numeric *discount_value,
GList **tax_value)
GList **tax_value, gnc_numeric *net_price)
{
gnc_numeric aggregate;
gnc_numeric pretax;
@ -1085,6 +1085,7 @@ void gncEntryComputeValue (gnc_numeric qty, gnc_numeric price,
gnc_numeric percent = gnc_numeric_create (100, 1);
gnc_numeric tpercent = gnc_numeric_zero ();
gnc_numeric tvalue = gnc_numeric_zero ();
gnc_numeric i_net_price = price;
GList * entries = gncTaxTableGetEntries (tax_table);
GList * node;
@ -1136,6 +1137,10 @@ void gncEntryComputeValue (gnc_numeric qty, gnc_numeric price,
gnc_numeric_create (1, 1),
GNC_DENOM_AUTO, GNC_HOW_DENOM_LCD),
GNC_DENOM_AUTO, GNC_HOW_DENOM_LCD);
if (!gnc_numeric_zero_p(qty))
{
i_net_price = gnc_numeric_div (pretax, qty, GNC_DENOM_AUTO, GNC_HOW_DENOM_LCD);
}
}
else
{
@ -1260,9 +1265,26 @@ void gncEntryComputeValue (gnc_numeric qty, gnc_numeric price,
*tax_value = taxes;
}
if (net_price != NULL)
{
if (SCU) i_net_price = gnc_numeric_convert(i_net_price, SCU, GNC_HOW_RND_ROUND_HALF_UP);
*net_price = i_net_price;
}
return;
}
void gncEntryComputeValue (gnc_numeric qty, gnc_numeric price,
const GncTaxTable *tax_table, gboolean tax_included,
gnc_numeric discount, GncAmountType discount_type,
GncDiscountHow discount_how, int SCU,
gnc_numeric *value, gnc_numeric *discount_value,
GList **tax_value)
{
gncEntryComputeValueInt (qty, price, tax_table, tax_included, discount, discount_type,
discount_how, SCU, value, discount_value, tax_value, NULL);
}
static int
get_entry_commodity_denom (const GncEntry *entry)
{
@ -1401,6 +1423,28 @@ static gnc_numeric gncEntryGetIntDiscountValue (GncEntry *entry, gboolean round,
return (is_cust_doc ? entry->i_disc_value : gnc_numeric_zero());
}
gnc_numeric gncEntryGetInvNetPrice (const GncEntry *entry)
{
gnc_numeric result = gnc_numeric_zero();
if (entry)
{
int denom;
/* Determine the commodity denominator */
denom = get_entry_commodity_denom (entry);
/* Compute the invoice values */
gncEntryComputeValueInt (entry->quantity, entry->i_price,
(entry->i_taxable ? entry->i_tax_table : NULL),
entry->i_taxincluded,
entry->i_discount, entry->i_disc_type,
entry->i_disc_how,
denom,
NULL, NULL, NULL, &result);
}
return result;
}
gnc_numeric gncEntryGetDocValue (GncEntry *entry, gboolean round, gboolean is_cust_doc, gboolean is_cn)
{
gnc_numeric value = gncEntryGetIntValue (entry, round, is_cust_doc);

View File

@ -182,6 +182,7 @@ gnc_numeric gncEntryGetDocQuantity (const GncEntry *entry, gboolean is_cn);
@{ */
Account * gncEntryGetInvAccount (const GncEntry *entry);
gnc_numeric gncEntryGetInvPrice (const GncEntry *entry);
gnc_numeric gncEntryGetInvNetPrice (const GncEntry *entry);
gnc_numeric gncEntryGetInvDiscount (const GncEntry *entry);
GncAmountType gncEntryGetInvDiscountType (const GncEntry *entry);
GncDiscountHow gncEntryGetInvDiscountHow (const GncEntry *entry);

View File

@ -311,7 +311,7 @@
(inv-total (gnc:make-commodity-collector)))
(for entry in entries do
(let ((qty (gncEntryGetDocQuantity entry credit-note?))
(each (gncEntryGetInvPrice entry))
(each (if opt-netprice (gncEntryGetInvNetPrice entry) (gncEntryGetInvPrice entry)))
(action (gncEntryGetAction entry))
(rval (gncEntryGetDocValue entry #t #t credit-note?))
(rdiscval (gncEntryGetDocDiscountValue entry #t #t credit-note?))

View File

@ -108,6 +108,7 @@
(define optname-jobnumber-text (N_ "Job Number text"))
(define optname-jobname-show (N_ "Show Job name"))
(define optname-jobnumber-show (N_ "Show Job number"))
(define optname-netprice (N_ "Show net price"))
(define optname-invnum-next-to-title (N_ "Invoice number next to title"))
(define optname-border-collapse (N_ "table-border-collapse"))
(define optname-border-color-th (N_ "table-header-border-color"))
@ -176,6 +177,7 @@
(add-option (gnc:make-simple-boolean-option elementspage optname-invnum-next-to-title "h" (N_ "Invoice Number next to title?") #f))
(add-option (gnc:make-simple-boolean-option elementspage optname-jobname-show "i" (N_ "Display Job name?") #t))
(add-option (gnc:make-simple-boolean-option elementspage optname-jobnumber-show "j" (N_ "Invoice Job number?") #f))
(add-option (gnc:make-simple-boolean-option elementspage optname-netprice "k" (N_ "Show net price?") #f))
;; Display options
(add-option (gnc:make-string-option displaypage optname-template-file "a"
@ -288,6 +290,7 @@
(opt-invnum-next-to-title (opt-value elementspage optname-invnum-next-to-title))
(opt-jobname-show (opt-value elementspage optname-jobname-show))
(opt-jobnumber-show (opt-value elementspage optname-jobnumber-show))
(opt-netprice (opt-value elementspage optname-netprice))
(opt-report-currency (opt-value gnc:pagename-general optname-report-currency))
(opt-css-border-collapse (if (opt-value displaypage optname-border-collapse) "border-collapse:collapse;"))
(opt-css-border-color-th (opt-value displaypage optname-border-color-th))