From d8eac7b083c8a88eafd50ae0823a80cee6012a41 Mon Sep 17 00:00:00 2001 From: Charles Day Date: Thu, 29 May 2008 15:23:56 +0000 Subject: [PATCH] QIF Import: Add support for importing to A/R and A/P account types, which were previously unknown to the importer. I also had to adjust a function in the engine's Account API that caused imported accounts trees to not merge properly in rare cases where one an existing GnuCash account has a NULL string pointer but an importer-created account has an empty string instead. This situation arises as a side effect of using SWIG, which doesn't let Scheme distinguish between NULL and an empty string (a string containing only NUL). BP git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@17180 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/engine/Account.c | 8 +-- .../qif-import/qif-dialog-utils.scm | 52 ++++++++++++------- .../qif-import/qif-guess-map.scm | 2 + src/import-export/qif-import/qif-objects.scm | 6 ++- 4 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/engine/Account.c b/src/engine/Account.c index 790904a948..70df6a9b54 100644 --- a/src/engine/Account.c +++ b/src/engine/Account.c @@ -4250,15 +4250,15 @@ gnc_account_merge_children (Account *parent) Account *acc_b = node_b->data; priv_b = GET_PRIVATE(acc_b); - if (0 != safe_strcmp(priv_a->accountName, priv_b->accountName)) + if (0 != null_strcmp(priv_a->accountName, priv_b->accountName)) continue; - if (0 != safe_strcmp(priv_a->accountCode, priv_b->accountCode)) + if (0 != null_strcmp(priv_a->accountCode, priv_b->accountCode)) continue; - if (0 != safe_strcmp(priv_a->description, priv_b->description)) + if (0 != null_strcmp(priv_a->description, priv_b->description)) continue; if (!gnc_commodity_equiv(priv_a->commodity, priv_b->commodity)) continue; - if (0 != safe_strcmp(xaccAccountGetNotes(acc_a), + if (0 != null_strcmp(xaccAccountGetNotes(acc_a), xaccAccountGetNotes(acc_b))) continue; if (priv_a->type != priv_b->type) diff --git a/src/import-export/qif-import/qif-dialog-utils.scm b/src/import-export/qif-import/qif-dialog-utils.scm index cfc0c16575..9dc10a8137 100644 --- a/src/import-export/qif-import/qif-dialog-utils.scm +++ b/src/import-export/qif-import/qif-dialog-utils.scm @@ -149,7 +149,9 @@ GNC-CCARD-TYPE GNC-CASH-TYPE GNC-ASSET-TYPE - GNC-LIABILITY-TYPE))) + GNC-LIABILITY-TYPE + GNC-RECEIVABLE-TYPE + GNC-PAYABLE-TYPE))) ((divx cgshortx cgmidx cglongx intincx margintx rtrncapx) (set! qif-account @@ -159,7 +161,9 @@ GNC-CCARD-TYPE GNC-CASH-TYPE GNC-ASSET-TYPE - GNC-LIABILITY-TYPE))) + GNC-LIABILITY-TYPE + GNC-RECEIVABLE-TYPE + GNC-PAYABLE-TYPE))) ((miscincx miscexpx) (set! qif-account (qif-split:miscx-category @@ -168,7 +172,9 @@ GNC-CCARD-TYPE GNC-CASH-TYPE GNC-ASSET-TYPE - GNC-LIABILITY-TYPE)))) + GNC-LIABILITY-TYPE + GNC-RECEIVABLE-TYPE + GNC-PAYABLE-TYPE)))) ;; now reference the near-end account (if qif-account @@ -203,7 +209,9 @@ GNC-CCARD-TYPE GNC-CASH-TYPE GNC-ASSET-TYPE - GNC-LIABILITY-TYPE))) + GNC-LIABILITY-TYPE + GNC-RECEIVABLE-TYPE + GNC-PAYABLE-TYPE))) ((buyx sellx xin xout) (set! qif-account (qif-split:category @@ -212,7 +220,9 @@ GNC-CCARD-TYPE GNC-CASH-TYPE GNC-ASSET-TYPE - GNC-LIABILITY-TYPE))) + GNC-LIABILITY-TYPE + GNC-RECEIVABLE-TYPE + GNC-PAYABLE-TYPE))) ((stksplit) (set! qif-account @@ -220,7 +230,9 @@ (set! qif-account-types (list GNC-STOCK-TYPE GNC-MUTUAL-TYPE GNC-ASSET-TYPE - GNC-LIABILITY-TYPE))) + GNC-LIABILITY-TYPE + GNC-RECEIVABLE-TYPE + GNC-PAYABLE-TYPE))) ((cgshort cgshortx reinvsg reinvsh) (set! qif-account (default-cgshort-acct from-acct stock-acct)) @@ -301,12 +313,13 @@ (if (not entry) (set! entry (qif-import:guess-acct from-acct - (list - GNC-BANK-TYPE - GNC-CCARD-TYPE - GNC-CASH-TYPE - GNC-ASSET-TYPE - GNC-LIABILITY-TYPE) + (list GNC-BANK-TYPE + GNC-CCARD-TYPE + GNC-CASH-TYPE + GNC-ASSET-TYPE + GNC-LIABILITY-TYPE + GNC-RECEIVABLE-TYPE + GNC-PAYABLE-TYPE) gnc-acct-info))) (qif-map-entry:set-display?! entry #t) (hash-set! acct-hash from-acct entry) @@ -325,12 +338,13 @@ (set! entry (qif-import:guess-acct xtn-acct - (list - GNC-BANK-TYPE - GNC-CCARD-TYPE - GNC-CASH-TYPE - GNC-ASSET-TYPE - GNC-LIABILITY-TYPE) + (list GNC-BANK-TYPE + GNC-CCARD-TYPE + GNC-CASH-TYPE + GNC-ASSET-TYPE + GNC-LIABILITY-TYPE + GNC-RECEIVABLE-TYPE + GNC-PAYABLE-TYPE) gnc-acct-info))) (qif-map-entry:set-display?! entry #t) (hash-set! acct-hash xtn-acct entry))))) @@ -497,10 +511,12 @@ (list GNC-INCOME-TYPE GNC-EXPENSE-TYPE GNC-BANK-TYPE GNC-CCARD-TYPE GNC-LIABILITY-TYPE GNC-ASSET-TYPE + GNC-RECEIVABLE-TYPE GNC-PAYABLE-TYPE GNC-STOCK-TYPE GNC-MUTUAL-TYPE) (list GNC-EXPENSE-TYPE GNC-INCOME-TYPE GNC-BANK-TYPE GNC-CCARD-TYPE GNC-LIABILITY-TYPE GNC-ASSET-TYPE + GNC-RECEIVABLE-TYPE GNC-PAYABLE-TYPE GNC-STOCK-TYPE GNC-MUTUAL-TYPE))))) (qif-map-entry:set-display?! entry #t) (hash-set! memo-hash key-string entry))))) diff --git a/src/import-export/qif-import/qif-guess-map.scm b/src/import-export/qif-import/qif-guess-map.scm index fc15a7242a..d64eb48734 100644 --- a/src/import-export/qif-import/qif-guess-map.scm +++ b/src/import-export/qif-import/qif-guess-map.scm @@ -17,6 +17,8 @@ (define GNC-INCOME-TYPE 8) (define GNC-EXPENSE-TYPE 9) (define GNC-EQUITY-TYPE 10) +(define GNC-RECEIVABLE-TYPE 11) +(define GNC-PAYABLE-TYPE 12) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/src/import-export/qif-import/qif-objects.scm b/src/import-export/qif-import/qif-objects.scm index 414de81c09..e62dd79538 100644 --- a/src/import-export/qif-import/qif-objects.scm +++ b/src/import-export/qif-import/qif-objects.scm @@ -552,10 +552,12 @@ (cond ((memv t (list GNC-BANK-TYPE GNC-CASH-TYPE GNC-CCARD-TYPE GNC-STOCK-TYPE GNC-MUTUAL-TYPE - GNC-ASSET-TYPE GNC-LIABILITY-TYPE)) + GNC-ASSET-TYPE GNC-LIABILITY-TYPE + GNC-RECEIVABLE-TYPE GNC-PAYABLE-TYPE)) (add-types GNC-BANK-TYPE GNC-CASH-TYPE GNC-CCARD-TYPE GNC-STOCK-TYPE GNC-MUTUAL-TYPE - GNC-ASSET-TYPE GNC-LIABILITY-TYPE)) + GNC-ASSET-TYPE GNC-LIABILITY-TYPE + GNC-RECEIVABLE-TYPE GNC-PAYABLE-TYPE)) ((memv t (list GNC-INCOME-TYPE GNC-EXPENSE-TYPE)) (add-types GNC-INCOME-TYPE GNC-EXPENSE-TYPE)) (#t