mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
[business]Add diagnostic messages to GncEntry and GncInvoice.
This commit is contained in:
parent
916caa25f2
commit
ce2b89fd8c
@ -625,7 +625,10 @@ int ofx_proc_transaction_cb(struct OfxTransactionData data, void *user_data)
|
||||
}
|
||||
else if (data.reference_number_valid)
|
||||
{
|
||||
gnc_set_num_action(transaction, split, data.reference_number, NULL);
|
||||
const char *num_value =
|
||||
strcasecmp (data.reference_number, "null") == 0 ? "" :
|
||||
data.check_number;
|
||||
gnc_set_num_action(transaction, split, num_value, NULL);
|
||||
}
|
||||
/* Also put the ofx transaction's memo in the
|
||||
* split's memo field */
|
||||
|
@ -29,6 +29,7 @@
|
||||
|
||||
#include <glib.h>
|
||||
#include <qofinstance-p.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
#include "gnc-commodity.h"
|
||||
|
||||
@ -120,7 +121,7 @@ gncEntryDiscountHowToString (GncDiscountHow how)
|
||||
case (GNC_DISC_POSTTAX):
|
||||
return "POSTTAX";
|
||||
default:
|
||||
g_warning ("asked to translate unknown discount-how %d.\n", how);
|
||||
PWARN ("asked to translate unknown discount-how %d.\n", how);
|
||||
break;
|
||||
}
|
||||
return NULL;
|
||||
@ -145,7 +146,7 @@ gboolean gncEntryDiscountStringToHow (const char *str, GncDiscountHow *how)
|
||||
*how = GNC_DISC_POSTTAX;
|
||||
return TRUE;
|
||||
}
|
||||
g_warning ("asked to translate unknown discount-how string %s.\n",
|
||||
PWARN ("asked to translate unknown discount-how string %s.\n",
|
||||
str ? str : "(null)");
|
||||
|
||||
return FALSE;
|
||||
@ -162,7 +163,7 @@ const char * gncEntryPaymentTypeToString (GncEntryPaymentType type)
|
||||
case (GNC_PAYMENT_CARD):
|
||||
return "CARD";
|
||||
default:
|
||||
g_warning ("asked to translate unknown payment type %d.\n", type);
|
||||
PWARN ("asked to translate unknown payment type %d.\n", type);
|
||||
break;
|
||||
}
|
||||
return NULL ;
|
||||
@ -182,7 +183,7 @@ gboolean gncEntryPaymentStringToType (const char *str, GncEntryPaymentType *type
|
||||
*type = GNC_PAYMENT_CARD;
|
||||
return TRUE;
|
||||
}
|
||||
g_warning ("asked to translate unknown discount-how string %s.\n",
|
||||
PWARN ("asked to translate unknown discount-how string %s.\n",
|
||||
str ? str : "(null)");
|
||||
|
||||
return FALSE;
|
||||
@ -591,29 +592,46 @@ void gncEntrySetInvPrice (GncEntry *entry, gnc_numeric price)
|
||||
void gncEntrySetInvTaxable (GncEntry *entry, gboolean taxable)
|
||||
{
|
||||
if (!entry) return;
|
||||
if (entry->i_taxable == taxable) return;
|
||||
|
||||
ENTER ("%d", taxable);
|
||||
if (entry->i_taxable == taxable) {
|
||||
LEAVE ("Value already set");
|
||||
return;
|
||||
}
|
||||
gncEntryBeginEdit (entry);
|
||||
entry->i_taxable = taxable;
|
||||
entry->values_dirty = TRUE;
|
||||
mark_entry (entry);
|
||||
gncEntryCommitEdit (entry);
|
||||
LEAVE ("");
|
||||
}
|
||||
|
||||
void gncEntrySetInvTaxIncluded (GncEntry *entry, gboolean taxincluded)
|
||||
{
|
||||
if (!entry) return;
|
||||
if (entry->i_taxincluded == taxincluded) return;
|
||||
|
||||
ENTER ("%d", taxincluded);
|
||||
if (entry->i_taxincluded == taxincluded) {
|
||||
LEAVE ("Value already set");
|
||||
return;
|
||||
}
|
||||
gncEntryBeginEdit (entry);
|
||||
entry->i_taxincluded = taxincluded;
|
||||
entry->values_dirty = TRUE;
|
||||
mark_entry (entry);
|
||||
gncEntryCommitEdit (entry);
|
||||
LEAVE ("");
|
||||
}
|
||||
|
||||
void gncEntrySetInvTaxTable (GncEntry *entry, GncTaxTable *table)
|
||||
{
|
||||
if (!entry) return;
|
||||
if (entry->i_tax_table == table) return;
|
||||
|
||||
ENTER ("%s", gncTaxTableGetName (table));
|
||||
if (entry->i_tax_table == table) {
|
||||
LEAVE ("Value already set");
|
||||
return;
|
||||
}
|
||||
gncEntryBeginEdit (entry);
|
||||
if (entry->i_tax_table)
|
||||
gncTaxTableDecRef (entry->i_tax_table);
|
||||
@ -623,6 +641,7 @@ void gncEntrySetInvTaxTable (GncEntry *entry, GncTaxTable *table)
|
||||
entry->values_dirty = TRUE;
|
||||
mark_entry (entry);
|
||||
gncEntryCommitEdit (entry);
|
||||
LEAVE ("");
|
||||
}
|
||||
|
||||
void gncEntrySetInvDiscount (GncEntry *entry, gnc_numeric discount)
|
||||
@ -715,29 +734,46 @@ void gncEntrySetBillPrice (GncEntry *entry, gnc_numeric price)
|
||||
void gncEntrySetBillTaxable (GncEntry *entry, gboolean taxable)
|
||||
{
|
||||
if (!entry) return;
|
||||
if (entry->b_taxable == taxable) return;
|
||||
|
||||
ENTER ("%d", taxable);
|
||||
if (entry->b_taxable == taxable) {
|
||||
LEAVE ("Value already set");
|
||||
return;
|
||||
}
|
||||
gncEntryBeginEdit (entry);
|
||||
entry->b_taxable = taxable;
|
||||
entry->values_dirty = TRUE;
|
||||
mark_entry (entry);
|
||||
gncEntryCommitEdit (entry);
|
||||
LEAVE ("");
|
||||
}
|
||||
|
||||
void gncEntrySetBillTaxIncluded (GncEntry *entry, gboolean taxincluded)
|
||||
{
|
||||
if (!entry) return;
|
||||
if (entry->b_taxincluded == taxincluded) return;
|
||||
|
||||
ENTER ("%d", taxincluded);
|
||||
if (entry->b_taxincluded == taxincluded) {
|
||||
LEAVE ("Value already set");
|
||||
return;
|
||||
}
|
||||
gncEntryBeginEdit (entry);
|
||||
entry->b_taxincluded = taxincluded;
|
||||
entry->values_dirty = TRUE;
|
||||
mark_entry (entry);
|
||||
gncEntryCommitEdit (entry);
|
||||
LEAVE ("");
|
||||
}
|
||||
|
||||
void gncEntrySetBillTaxTable (GncEntry *entry, GncTaxTable *table)
|
||||
{
|
||||
if (!entry) return;
|
||||
if (entry->b_tax_table == table) return;
|
||||
|
||||
ENTER ("%s", gncTaxTableGetName (table));
|
||||
if (entry->b_tax_table == table) {
|
||||
LEAVE ("Value already set");
|
||||
return;
|
||||
}
|
||||
gncEntryBeginEdit (entry);
|
||||
if (entry->b_tax_table)
|
||||
gncTaxTableDecRef (entry->b_tax_table);
|
||||
@ -747,6 +783,7 @@ void gncEntrySetBillTaxTable (GncEntry *entry, GncTaxTable *table)
|
||||
entry->values_dirty = TRUE;
|
||||
mark_entry (entry);
|
||||
gncEntryCommitEdit (entry);
|
||||
LEAVE ("");
|
||||
}
|
||||
|
||||
void gncEntrySetBillable (GncEntry *entry, gboolean billable)
|
||||
@ -1106,10 +1143,12 @@ static void gncEntryComputeValueInt (gnc_numeric qty, gnc_numeric price,
|
||||
GList * entries = gncTaxTableGetEntries (tax_table);
|
||||
GList * node;
|
||||
|
||||
ENTER ("");
|
||||
/* Step 1: compute the aggregate price */
|
||||
|
||||
aggregate = gnc_numeric_mul (qty, price, GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE | GNC_HOW_RND_ROUND);
|
||||
|
||||
PINFO ("Aggregate value %" PRId64 "/%" PRId64, aggregate.num, aggregate.denom);
|
||||
/* Step 2: compute the pre-tax aggregate */
|
||||
|
||||
/* First, compute the aggregate tpercent and tvalue numbers */
|
||||
@ -1129,14 +1168,14 @@ static void gncEntryComputeValueInt (gnc_numeric qty, gnc_numeric price,
|
||||
GNC_HOW_DENOM_LCD);
|
||||
break;
|
||||
default:
|
||||
g_warning ("Unknown tax type: %d", gncTaxTableEntryGetType (entry));
|
||||
PWARN ("Unknown tax type: %d", gncTaxTableEntryGetType (entry));
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* now we need to convert from 5% -> .05 */
|
||||
tpercent = gnc_numeric_div (tpercent, percent, GNC_DENOM_AUTO,
|
||||
GNC_HOW_DENOM_EXACT | GNC_HOW_RND_NEVER);
|
||||
|
||||
PINFO("Tax rate %" PRId64 "/%" PRId64, tpercent.num, tpercent.denom);
|
||||
/* Next, actually compute the pre-tax aggregate value based on the
|
||||
* taxincluded flag.
|
||||
*/
|
||||
@ -1153,13 +1192,16 @@ static void gncEntryComputeValueInt (gnc_numeric qty, gnc_numeric price,
|
||||
gnc_numeric_create (1, 1),
|
||||
GNC_DENOM_AUTO, GNC_HOW_DENOM_LCD),
|
||||
GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE | GNC_HOW_RND_ROUND);
|
||||
PINFO ("pretax %" PRId64 "/%" PRId64, pretax.num, pretax.denom);
|
||||
if (!gnc_numeric_zero_p(qty))
|
||||
{
|
||||
i_net_price = gnc_numeric_div (pretax, qty, GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE | GNC_HOW_RND_ROUND);
|
||||
}
|
||||
PINFO("i_net_price %" PRId64 "/%" PRId64, i_net_price.num, i_net_price.denom);
|
||||
}
|
||||
else
|
||||
{
|
||||
PINFO ("Tax not included or no tax table, pretax is aggregate");
|
||||
pretax = aggregate;
|
||||
}
|
||||
|
||||
@ -1224,7 +1266,7 @@ static void gncEntryComputeValueInt (gnc_numeric qty, gnc_numeric price,
|
||||
break;
|
||||
|
||||
default:
|
||||
g_warning ("unknown DiscountHow value: %d", discount_how);
|
||||
PWARN ("unknown DiscountHow value: %d", discount_how);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1247,6 +1289,7 @@ static void gncEntryComputeValueInt (gnc_numeric qty, gnc_numeric price,
|
||||
{
|
||||
GList * taxes = NULL;
|
||||
|
||||
PINFO("Computing tax value list");
|
||||
for (node = entries; node; node = node->next)
|
||||
{
|
||||
GncTaxTableEntry *entry = node->data;
|
||||
@ -1276,6 +1319,7 @@ static void gncEntryComputeValueInt (gnc_numeric qty, gnc_numeric price,
|
||||
if (net_price != NULL)
|
||||
*net_price = i_net_price;
|
||||
|
||||
LEAVE ("");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1317,12 +1361,14 @@ gncEntryRecomputeValues (GncEntry *entry)
|
||||
int denom;
|
||||
GList *tv_iter;
|
||||
|
||||
ENTER ("");
|
||||
/* See if either tax table changed since we last computed values */
|
||||
if (entry->i_tax_table)
|
||||
{
|
||||
time64 modtime = gncTaxTableLastModifiedSecs (entry->i_tax_table);
|
||||
if (entry->i_taxtable_modtime != modtime)
|
||||
{
|
||||
PINFO ("Invoice tax table changed");
|
||||
entry->values_dirty = TRUE;
|
||||
entry->i_taxtable_modtime = modtime;
|
||||
}
|
||||
@ -1332,13 +1378,16 @@ gncEntryRecomputeValues (GncEntry *entry)
|
||||
time64 modtime = gncTaxTableLastModifiedSecs (entry->b_tax_table);
|
||||
if (entry->b_taxtable_modtime != modtime)
|
||||
{
|
||||
PINFO ("Bill tax table changed");
|
||||
entry->values_dirty = TRUE;
|
||||
entry->b_taxtable_modtime = modtime;
|
||||
}
|
||||
}
|
||||
|
||||
if (!entry->values_dirty)
|
||||
if (!entry->values_dirty) {
|
||||
LEAVE ("No changes");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Clear the last-computed tax values */
|
||||
if (entry->i_tax_values)
|
||||
@ -1397,6 +1446,7 @@ gncEntryRecomputeValues (GncEntry *entry)
|
||||
denom, GNC_HOW_DENOM_EXACT | GNC_HOW_RND_ROUND_HALF_UP);
|
||||
}
|
||||
entry->values_dirty = FALSE;
|
||||
LEAVE ("");
|
||||
}
|
||||
|
||||
/* The "Int" functions below are for internal use only.
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include <config.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <inttypes.h>
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n.h>
|
||||
#include <qofinstance-p.h>
|
||||
@ -943,6 +944,7 @@ static gnc_numeric gncInvoiceGetNetAndTaxesInternal (GncInvoice *invoice, gboole
|
||||
|
||||
g_return_val_if_fail (invoice, net_total);
|
||||
|
||||
ENTER ("");
|
||||
/* Is the current document an invoice/credit note related to a customer or a vendor/employee ?
|
||||
* The GncEntry code needs to know to return the proper entry amounts
|
||||
*/
|
||||
@ -966,7 +968,7 @@ static gnc_numeric gncInvoiceGetNetAndTaxesInternal (GncInvoice *invoice, gboole
|
||||
if (gnc_numeric_check (value) == GNC_ERROR_OK)
|
||||
net_total = gnc_numeric_add (net_total, value, GNC_DENOM_AUTO, GNC_HOW_DENOM_LCD);
|
||||
else
|
||||
g_warning ("bad value in our entry");
|
||||
PWARN ("bad value in our entry");
|
||||
}
|
||||
|
||||
if (taxes)
|
||||
@ -991,6 +993,7 @@ static gnc_numeric gncInvoiceGetNetAndTaxesInternal (GncInvoice *invoice, gboole
|
||||
*taxes = tv_list;
|
||||
}
|
||||
|
||||
LEAVE ("%" PRId64 "/%" PRId64, net_total.num, net_total.denom);
|
||||
return net_total;
|
||||
}
|
||||
|
||||
@ -1004,6 +1007,7 @@ static gnc_numeric gncInvoiceGetTotalInternal (GncInvoice *invoice, gboolean use
|
||||
|
||||
if (!invoice) return gnc_numeric_zero ();
|
||||
|
||||
ENTER ("");
|
||||
total = gncInvoiceGetNetAndTaxesInternal (invoice, use_value, use_tax? &taxes : NULL, use_payment_type, type);
|
||||
|
||||
if (use_tax)
|
||||
@ -1015,6 +1019,7 @@ static gnc_numeric gncInvoiceGetTotalInternal (GncInvoice *invoice, gboolean use
|
||||
GNC_DENOM_AUTO, GNC_HOW_DENOM_EXACT | GNC_HOW_RND_ROUND_HALF_UP);
|
||||
gncAccountValueDestroy (taxes);
|
||||
}
|
||||
LEAVE ("%" PRId64 "/%" PRId64, total.num, total.denom);
|
||||
return total;
|
||||
}
|
||||
|
||||
@ -1070,6 +1075,7 @@ GList * gncInvoiceGetTypeListForOwnerType (GncOwnerType type)
|
||||
type_list = g_list_append (type_list, GINT_TO_POINTER(GNC_INVOICE_EMPL_CREDIT_NOTE));
|
||||
return type_list;
|
||||
default:
|
||||
PWARN("Bad owner type, no invoices.");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -1379,6 +1385,7 @@ GHashTable *gncInvoiceGetForeignCurrencies (const GncInvoice *invoice)
|
||||
gboolean is_cn = gncInvoiceGetIsCreditNote (invoice);
|
||||
GHashTable *amt_hash = g_hash_table_new_full (g_direct_hash, g_direct_equal,
|
||||
NULL, g_free);
|
||||
ENTER ("");
|
||||
|
||||
for (entries_iter = invoice->entries; entries_iter != NULL; entries_iter = g_list_next(entries_iter))
|
||||
{
|
||||
@ -1429,6 +1436,8 @@ GHashTable *gncInvoiceGetForeignCurrencies (const GncInvoice *invoice)
|
||||
}
|
||||
gncAccountValueDestroy (tt_amts);
|
||||
}
|
||||
|
||||
LEAVE ("");
|
||||
return amt_hash;
|
||||
}
|
||||
|
||||
@ -1442,6 +1451,7 @@ static gboolean gncInvoicePostAddSplit (QofBook *book,
|
||||
{
|
||||
Split *split;
|
||||
|
||||
ENTER ("");
|
||||
split = xaccMallocSplit (book);
|
||||
/* set action and memo? */
|
||||
|
||||
@ -1484,6 +1494,8 @@ static gboolean gncInvoicePostAddSplit (QofBook *book,
|
||||
We can't really do anything sensible about it, and this is
|
||||
a user-interface free zone so we can't try asking the user
|
||||
again either, have to return NULL*/
|
||||
PERR("Multiple commodities with no price.");
|
||||
LEAVE ("FALSE");
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
@ -1496,6 +1508,7 @@ static gboolean gncInvoicePostAddSplit (QofBook *book,
|
||||
}
|
||||
}
|
||||
|
||||
LEAVE ("TRUE");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -1522,6 +1535,7 @@ Transaction * gncInvoicePostToAccount (GncInvoice *invoice, Account *acc,
|
||||
if (!invoice || !acc) return NULL;
|
||||
if (gncInvoiceIsPosted (invoice)) return NULL;
|
||||
|
||||
ENTER ("");
|
||||
gncInvoiceBeginEdit (invoice);
|
||||
book = qof_instance_get_book (invoice);
|
||||
|
||||
@ -1624,6 +1638,8 @@ Transaction * gncInvoicePostToAccount (GncInvoice *invoice, Account *acc,
|
||||
value = gncEntryGetBalValue (entry, TRUE, is_cust_doc);
|
||||
tax = gncEntryGetBalTaxValue (entry, TRUE, is_cust_doc);
|
||||
|
||||
DEBUG ("Tax %" PRId64 "/%" PRId64 " on entry value %" PRId64 "/%" PRId64,
|
||||
tax.num, tax.denom, value.num, value.denom);
|
||||
/* add the value for the account split */
|
||||
this_acc = (is_cust_doc ? gncEntryGetInvAccount (entry) :
|
||||
gncEntryGetBillAccount (entry));
|
||||
@ -1642,6 +1658,8 @@ Transaction * gncInvoicePostToAccount (GncInvoice *invoice, Account *acc,
|
||||
We can't really do anything sensible about it, and this is
|
||||
a user-interface free zone so we can't try asking the user
|
||||
again either, have to return NULL*/
|
||||
PERR("Failed to add split %s", gncEntryGetDescription (entry));
|
||||
LEAVE ("NULL");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -1676,12 +1694,12 @@ Transaction * gncInvoicePostToAccount (GncInvoice *invoice, Account *acc,
|
||||
|
||||
}
|
||||
else
|
||||
g_warning ("bad value in our entry");
|
||||
PWARN ("bad value in our entry");
|
||||
}
|
||||
|
||||
/* check the taxes */
|
||||
if (gnc_numeric_check (tax) != GNC_ERROR_OK)
|
||||
g_warning ("bad tax in our entry");
|
||||
PWARN ("bad tax in our entry");
|
||||
|
||||
} /* for */
|
||||
|
||||
@ -1691,6 +1709,8 @@ Transaction * gncInvoicePostToAccount (GncInvoice *invoice, Account *acc,
|
||||
gncAccountValueDestroy (taxes);
|
||||
|
||||
/* Iterate through the splitinfo list and generate the splits */
|
||||
if (splitinfo)
|
||||
PINFO ("Processing Split List");
|
||||
for (iter = splitinfo; iter; iter = iter->next)
|
||||
{
|
||||
GncAccountValue *acc_val = iter->data;
|
||||
@ -1704,6 +1724,7 @@ Transaction * gncInvoicePostToAccount (GncInvoice *invoice, Account *acc,
|
||||
We can't really do anything sensible about it, and this is
|
||||
a user-interface free zone so we can't try asking the user
|
||||
again either, have to return NULL*/
|
||||
PERR("Failed to add split %s, aborting accumulated splits.", memo);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@ -1720,6 +1741,7 @@ Transaction * gncInvoicePostToAccount (GncInvoice *invoice, Account *acc,
|
||||
gnc_numeric to_charge_bal_amount = (is_cn ? gnc_numeric_neg (invoice->to_charge_amount)
|
||||
: invoice->to_charge_amount);
|
||||
|
||||
PINFO ("Process to_card payment split");
|
||||
/* Set memo. */
|
||||
xaccSplitSetMemo (split, _("Extra to Charge Card"));
|
||||
/* Set action based on book option */
|
||||
@ -1740,6 +1762,7 @@ Transaction * gncInvoicePostToAccount (GncInvoice *invoice, Account *acc,
|
||||
{
|
||||
Split *split = xaccMallocSplit (book);
|
||||
|
||||
PINFO ("Process to_card balancing split");
|
||||
/* Set memo */
|
||||
xaccSplitSetMemo (split, memo);
|
||||
/* Set action based on book option */
|
||||
@ -1778,6 +1801,7 @@ Transaction * gncInvoicePostToAccount (GncInvoice *invoice, Account *acc,
|
||||
if (autopay)
|
||||
gncInvoiceAutoApplyPayments (invoice);
|
||||
|
||||
LEAVE ("");
|
||||
return txn;
|
||||
}
|
||||
|
||||
@ -1797,6 +1821,7 @@ gncInvoiceUnpost (GncInvoice *invoice, gboolean reset_tax_tables)
|
||||
lot = gncInvoiceGetPostedLot (invoice);
|
||||
g_return_val_if_fail (lot, FALSE);
|
||||
|
||||
ENTER ("");
|
||||
/* Destroy the Posted Transaction */
|
||||
xaccTransClearReadOnly (txn);
|
||||
xaccTransBeginEdit (txn);
|
||||
@ -1822,6 +1847,8 @@ gncInvoiceUnpost (GncInvoice *invoice, gboolean reset_tax_tables)
|
||||
// Note: make a copy of the lot list here, when splits are deleted from the lot,
|
||||
// the original list may be destroyed by the lot code.
|
||||
lot_split_list = g_list_copy (gnc_lot_get_split_list (lot));
|
||||
if (lot_split_list)
|
||||
PINFO ("Recreating link transactions for remaining lots");
|
||||
for (lot_split_iter = lot_split_list; lot_split_iter; lot_split_iter = lot_split_iter->next)
|
||||
{
|
||||
Split *split = lot_split_iter->data;
|
||||
@ -1912,6 +1939,8 @@ gncInvoiceUnpost (GncInvoice *invoice, gboolean reset_tax_tables)
|
||||
mark_invoice (invoice);
|
||||
gncInvoiceCommitEdit (invoice);
|
||||
|
||||
LEAVE ("TRUE");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user