Bill Gribble's QIF import patch.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@3656 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Dave Peticolas 2001-02-14 22:08:17 +00:00
parent 1da310e7c8
commit 596eabc8a0
11 changed files with 175 additions and 169 deletions

View File

@ -1,3 +1,15 @@
2001-02-14 Bill Gribble <grib@billgribble.com>
* src/scm/qif-import/*.scm: fuzzify account type rules a bit to
make imports more likely to match up with existing accounts. Fix
broken "New" detection.
* src/gnome/druid-qif-import.c: add default acct based on file
name
* src/gnome/dialog-account-picker.c: make sure picker gets
scrolled to initial selection.
2001-02-14 Christian Stimming <stimming@tuhh.de>
* src/scm/html-utilities.scm (gnc:html-build-acct-table): Add

View File

@ -118,7 +118,6 @@ build_acct_tree(QIFAccountPickerDialog * picker, QIFImportWindow * import) {
int row = 0;
gtk_clist_clear(GTK_CLIST(picker->treeview));
gtk_clist_set_column_justification (GTK_CLIST(picker->treeview),
1, GTK_JUSTIFY_CENTER);
@ -217,8 +216,22 @@ gnc_ui_qif_account_picker_unselect_cb(GtkCTree * tree,
wind->selected_name = NULL;
}
static int
gnc_ui_qif_account_picker_map_cb(GtkWidget * w, gpointer user_data) {
QIFAccountPickerDialog * wind =
gtk_object_get_data(GTK_OBJECT(user_data),
"account_picker_struct");
/* update the tree display with all the existing accounts plus all
* the ones the QIF importer thinks it will be creating. this will
* also select the map_entry line. */
build_acct_tree(wind, wind->qif_wind);
return FALSE;
}
/****************************************************************
* accountPickerBox
* qif_account_picker_dialog
* select an account from the ones that the engine knows about, plus
* the ones that will be created newly by the QIF import. this is
* sort of like fileBox... it returns a string for the account name or
@ -259,11 +272,14 @@ qif_account_picker_dialog(QIFImportWindow * qif_wind, SCM map_entry) {
GTK_SIGNAL_FUNC(gnc_ui_qif_account_picker_unselect_cb),
wind->dialog);
/* update the tree display with all the existing accounts plus all
* the ones the QIF importer thinks it will be creating. this will
* also select the map_entry line. */
build_acct_tree(wind, qif_wind);
gtk_signal_connect_after(GTK_OBJECT(wind->dialog), "map",
GTK_SIGNAL_FUNC(gnc_ui_qif_account_picker_map_cb),
wind->dialog);
/* this is to get the checkmarks set up right.. it will get called
* again after the window is mapped. */
build_acct_tree(wind, wind->qif_wind);
retval = gnome_dialog_run_and_close(GNOME_DIALOG(wind->dialog));
scm_unprotect_object(wind->map_entry);
@ -277,3 +293,4 @@ qif_account_picker_dialog(QIFImportWindow * qif_wind, SCM map_entry) {
return saved_entry;
}
}

View File

@ -489,7 +489,8 @@ gnc_ui_qif_import_load_file_next_cb(GnomeDruidPage * page,
char * path_to_load;
char * error_string = NULL;
char * default_acctname = NULL;
GList * format_strings;
GList * listit;
@ -499,6 +500,7 @@ gnc_ui_qif_import_load_file_next_cb(GnomeDruidPage * page,
SCM qif_file_loaded = gh_eval_str("qif-dialog:qif-file-loaded?");
SCM unload_qif_file = gh_eval_str("qif-dialog:unload-qif-file");
SCM check_from_acct = gh_eval_str("qif-file:check-from-acct");
SCM default_acct = gh_eval_str("qif-file:path-to-accountname");
SCM date_formats;
SCM scm_filename;
SCM scm_qiffile;
@ -660,6 +662,13 @@ gnc_ui_qif_import_load_file_next_cb(GnomeDruidPage * page,
}
else if(gh_call1(check_from_acct, gh_car(imported_files)) != SCM_BOOL_T) {
/* skip to the "ask account name" page */
default_acctname = gh_scm2newstr(gh_call1(default_acct,
gh_car(imported_files)),
NULL);
gtk_entry_set_text(GTK_ENTRY(wind->acct_entry), default_acctname);
if(default_acctname) free(default_acctname);
gnome_druid_set_page(GNOME_DRUID(wind->druid),
get_named_page(wind, "account_name_page"));
return TRUE;
@ -864,7 +873,6 @@ gnc_ui_qif_import_default_acct_next_cb(GnomeDruidPage * page,
else {
scm_name = gh_str02scm(acct_name);
gh_call2(fix_default, wind->selected_file, scm_name);
gtk_entry_set_text(GTK_ENTRY(wind->acct_entry), "");
return FALSE;
}
}
@ -1535,6 +1543,7 @@ gnc_ui_qif_import_comm_check_cb(GnomeDruidPage * page,
gnome_druid_set_page(GNOME_DRUID(wind->druid),
get_named_page(wind, "end_page"));
}
return TRUE;
}
else {
return FALSE;

View File

@ -3848,7 +3848,6 @@ create_QIF_Import_Druid (void)
GdkColor memo_match_page_logo_bg_color = { 0, 65535, 65535, 65535 };
GdkColor memo_match_page_title_color = { 0, 65535, 65535, 65535 };
GtkWidget *druid_vbox40;
GtkWidget *label847713;
GtkWidget *scrolledwindow25;
GtkWidget *memo_page_list;
GtkWidget *label847708;
@ -4376,13 +4375,6 @@ create_QIF_Import_Druid (void)
gtk_widget_show (druid_vbox40);
gtk_container_set_border_width (GTK_CONTAINER (druid_vbox40), 25);
label847713 = gtk_label_new (_("This doesn't actually affect the QIF import yet. \nGive it a couple more days :)"));
gtk_widget_ref (label847713);
gtk_object_set_data_full (GTK_OBJECT (QIF_Import_Druid), "label847713", label847713,
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (label847713);
gtk_box_pack_start (GTK_BOX (druid_vbox40), label847713, FALSE, FALSE, 0);
scrolledwindow25 = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_ref (scrolledwindow25);
gtk_object_set_data_full (GTK_OBJECT (QIF_Import_Druid), "scrolledwindow25", scrolledwindow25,

View File

@ -6483,24 +6483,6 @@ files. </label>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label847713</name>
<label>This doesn't actually affect the QIF import yet.
Give it a couple more days :)</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkScrolledWindow</class>
<name>scrolledwindow25</name>

View File

@ -64,7 +64,7 @@
(for-each
(lambda (acct)
(if (string=? (qif-map-entry:gnc-name map-entry)
(car acct))
(cadr acct))
(set! retval #t)))
acct-list)
retval))
@ -78,18 +78,12 @@
(define (qif-dialog:make-account-display qif-files acct-hash gnc-acct-info)
;; first, clear the "display" flags in the acct-hash and set up the
;; new-file? flags. If there's nothing to show any more, don't.
(for-each
(lambda (bin)
(for-each
(lambda (elt)
(qif-map-entry:set-display?! (cdr elt) #f)
(qif-map-entry:set-new-acct?!
(cdr elt)
(if (qif-import:gnc-account-exists (cdr elt) gnc-acct-info)
#f #t)))
bin))
(vector->list acct-hash))
(hash-fold
(lambda (k v p)
(qif-map-entry:set-display?! v #f)
#f)
#f acct-hash)
(let ((retval '()))
;; we want to make two passes here. The first pass picks the
;; explicit Account descriptions out of each file. These are the
@ -99,12 +93,6 @@
;; we'll have most of the accounts already located by that point.
;; Otherwise, we have to guess them.
;; guess-acct returns a list that's
;; (qif-name gnc-name gnc-type new-acct?)
;; acct-hash hashes QIF account name to a list that's composed of
;; (qif-acct-name gnc-acct-name gnc-acct-type gnc-acct-new?
;; num-qif-xtns qif-object) so we can find the properties later.
;; acct-hash hashes the qif name to a <qif-map-entry> object.
;; guess-acct returns one.
(for-each
@ -116,7 +104,7 @@
(if (not entry)
(set! entry
(qif-import:guess-acct (qif-acct:name acct)
(list (qif-acct:type acct))
(qif-acct:type acct)
gnc-acct-info)))
(qif-map-entry:set-description! entry (qif-acct:description acct))
(hash-set! acct-hash (qif-acct:name acct) entry)))
@ -155,15 +143,15 @@
(set! qif-account
(default-stock-acct from-acct stock-acct))
(set! qif-account-types (list GNC-STOCK-TYPE
GNC-MUTUAL-TYPE
GNC-ASSET-TYPE)))
GNC-MUTUAL-TYPE)))
((div cgshort cgmid cglong intinc miscinc miscexp
margint rtrncap xin xout)
(set! qif-account from-acct)
(set! qif-account-types (list GNC-BANK-TYPE
GNC-CCARD-TYPE
GNC-CASH-TYPE
GNC-ASSET-TYPE)))
GNC-ASSET-TYPE
GNC-LIABILITY-TYPE)))
((divx cgshortx cgmidx cglongx intincx margintx rtrncapx)
(set! qif-account
@ -172,7 +160,8 @@
(set! qif-account-types (list GNC-BANK-TYPE
GNC-CCARD-TYPE
GNC-CASH-TYPE
GNC-ASSET-TYPE)))
GNC-ASSET-TYPE
GNC-LIABILITY-TYPE)))
((miscincx miscexpx)
(set! qif-account
(qif-split:miscx-category
@ -180,7 +169,8 @@
(set! qif-account-types (list GNC-BANK-TYPE
GNC-CCARD-TYPE
GNC-CASH-TYPE
GNC-ASSET-TYPE))))
GNC-ASSET-TYPE
GNC-LIABILITY-TYPE))))
;; now reference the near-end account
(if qif-account
@ -198,7 +188,7 @@
;; the far end will be the brokerage for buy, sell,
;; etc, or the "L"-referenced account for buyx,
;; sellx, etc, or an equity account for ShrsIn/ShrsOut
;; miscintx and miscexpx are very, very "special"
;; cases ... I'm not sure this is right.
;; the L line looks like :
@ -206,7 +196,7 @@
;; so I assume near-acct is Account and far acct
;; is Category. This matches the intincx/divx
;; behavior.
(set! qif-account #f)
(case action
((buy sell)
@ -214,7 +204,8 @@
(set! qif-account-types (list GNC-BANK-TYPE
GNC-CCARD-TYPE
GNC-CASH-TYPE
GNC-ASSET-TYPE)))
GNC-ASSET-TYPE
GNC-LIABILITY-TYPE)))
((buyx sellx xin xout)
(set! qif-account
(qif-split:category
@ -222,19 +213,21 @@
(set! qif-account-types (list GNC-BANK-TYPE
GNC-CCARD-TYPE
GNC-CASH-TYPE
GNC-ASSET-TYPE)))
GNC-ASSET-TYPE
GNC-LIABILITY-TYPE)))
((stksplit)
(set! qif-account
(default-stock-acct from-acct stock-acct))
(set! qif-account-types (list GNC-STOCK-TYPE
GNC-MUTUAL-TYPE
GNC-ASSET-TYPE)))
GNC-ASSET-TYPE
GNC-LIABILITY-TYPE)))
((cgshort cgshortx reinvsg reinvsh)
(set! qif-account
(default-cgshort-acct from-acct stock-acct))
(set! qif-account-types (list GNC-INCOME-TYPE)))
((cgmid cgmidx reinvmd)
(set! qif-account
(default-cgmid-acct from-acct stock-acct))
@ -254,7 +247,7 @@
(set! qif-account
(default-dividend-acct from-acct stock-acct))
(set! qif-account-types (list GNC-INCOME-TYPE)))
((rtrncap rtrncapx)
(set! qif-account
(default-capital-return-acct from-acct))
@ -300,7 +293,7 @@
(list GNC-EXPENSE-TYPE)
gnc-acct-info)))
(qif-map-entry:set-display?! entry #t)
(hash-set! acct-hash qif-account entry))))
(hash-set! acct-hash qif-account entry))))
;; non-stock transactions. these are a bit easier.
;; the near-end account (from) is always in the
@ -314,7 +307,8 @@
GNC-BANK-TYPE
GNC-CCARD-TYPE
GNC-CASH-TYPE
GNC-ASSET-TYPE)
GNC-ASSET-TYPE
GNC-LIABILITY-TYPE)
gnc-acct-info)))
(qif-map-entry:set-display?! entry #t)
(hash-set! acct-hash from-acct entry)
@ -337,7 +331,8 @@
GNC-BANK-TYPE
GNC-CCARD-TYPE
GNC-CASH-TYPE
GNC-ASSET-TYPE)
GNC-ASSET-TYPE
GNC-LIABILITY-TYPE)
gnc-acct-info)))
(qif-map-entry:set-display?! entry #t)
(hash-set! acct-hash xtn-acct entry)))))
@ -346,15 +341,15 @@
qif-files)
;; now that the hash table is filled, make the display list
(for-each
(lambda (bin)
(for-each
(lambda (elt)
(if (qif-map-entry:display? (cdr elt))
(set! retval
(cons (cdr elt) retval))))
bin))
(vector->list acct-hash))
(hash-fold
(lambda (k v p)
(if (qif-map-entry:display? v)
(begin
(qif-map-entry:set-new-acct?!
v (not (qif-import:gnc-account-exists v gnc-acct-info)))
(set! retval (cons v retval))))
#f)
#f acct-hash)
;; sort by number of transactions with that account so the
;; most important are at the top
@ -372,18 +367,12 @@
(define (qif-dialog:make-category-display qif-files cat-hash gnc-acct-info)
;; first, clear the "display" flags in the cat-hash. If there's
;; nothing to show any more, don't.
(for-each
(lambda (bin)
(for-each
(lambda (elt)
(qif-map-entry:set-display?! (cdr elt) #f)
(qif-map-entry:set-new-acct?!
(cdr elt)
(if (qif-import:gnc-account-exists (cdr elt) gnc-acct-info)
#f #t)))
bin))
(vector->list cat-hash))
(hash-fold
(lambda (k v p)
(qif-map-entry:set-display?! v #f)
#f)
#f cat-hash)
(let ((retval '())
(entry #f))
;; get the Cat entries from each file
@ -437,15 +426,16 @@
qif-files)
;; now that the hash table is filled, make the display list
(for-each
(lambda (bin)
(for-each
(lambda (elt)
(if (qif-map-entry:display? (cdr elt))
(set! retval (cons (cdr elt) retval))))
bin))
(vector->list cat-hash))
(hash-fold
(lambda (k v p)
(if (qif-map-entry:display? v)
(begin
(qif-map-entry:set-new-acct?!
v (not (qif-import:gnc-account-exists v gnc-acct-info)))
(set! retval (cons v retval))))
#f)
#f cat-hash)
;; sort by qif account name
(set! retval (sort retval
(lambda (a b)
@ -453,24 +443,17 @@
(qif-map-entry:qif-name b)))))
retval))
;; UNFINISHED (and currently not connected to anything)
;; this one's like the other display builders, it just looks at the
;; payee and memo too.
(define (qif-dialog:make-memo-display qif-files memo-hash gnc-acct-info)
(let ((retval '()))
;; clear the display flags for existing items
(for-each
(lambda (bin)
(for-each
(lambda (elt)
(qif-map-entry:set-new-acct?!
(cdr elt)
(if (qif-import:gnc-account-exists (cdr elt) gnc-acct-info)
#f #t))
(qif-map-entry:set-display?! (cdr elt) #f))
bin))
(vector->list memo-hash))
(hash-fold
(lambda (k v p)
(qif-map-entry:set-display?! v #f)
#f)
#f memo-hash)
;; iterate over every imported transaction. If there's no
;; category in the transaction, look at the payee to get a clue.
@ -506,14 +489,11 @@
(qif-map-entry:set-qif-name! entry key-string)
(qif-map-entry:set-gnc-name!
entry (default-unspec-acct))
(qif-map-entry:set-new-acct?!
entry (if (qif-import:gnc-account-exists
entry gnc-acct-info)
#f #t))
(qif-map-entry:set-allowed-types!
entry (if (> (qif-split:amount split) 0)
(list GNC-INCOME-TYPE)
(list GNC-EXPENSE-TYPE)))))
entry
(if (> (qif-split:amount split) 0)
(list GNC-INCOME-TYPE GNC-EXPENSE-TYPE)
(list GNC-EXPENSE-TYPE GNC-INCOME-TYPE)))))
(qif-map-entry:set-display?! entry #t)
(hash-set! memo-hash key-string entry)))))
splits)))
@ -521,14 +501,15 @@
qif-files)
;; build display list
(for-each
(lambda (bin)
(for-each
(lambda (elt)
(if (qif-map-entry:display? (cdr elt))
(set! retval (cons (cdr elt) retval))))
bin))
(vector->list memo-hash))
(hash-fold
(lambda (k v p)
(if (qif-map-entry:display? v)
(begin
(qif-map-entry:set-new-acct?!
v (not (qif-import:gnc-account-exists v gnc-acct-info)))
(set! retval (cons v retval))))
#f)
#f memo-hash)
;; sort by qif memo/payee name
(set! retval (sort retval
@ -546,7 +527,7 @@
(if (memq #t status)
#t
#f)))
(define (qif-dialog:unload-qif-file oldfile list-of-files)
(delq oldfile list-of-files))
@ -629,7 +610,7 @@
(begin
(display "stock-name #f.. name ==")
(display name)(newline)))
(if (not (hash-ref newhash stock-name))
(begin
(set! names (cons stock-name names))
@ -684,7 +665,7 @@
(set! newtree (cons (cvt-to-tree path new?)
newtree))))))
(sort newtree (lambda (a b) (string<? (car a) (car b))))))))
(let ((accts '())
(acct-tree '())

View File

@ -568,7 +568,7 @@
(setter obj (parser unparsed)))))
objects)
#t)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; check-and-parse-field

View File

@ -210,7 +210,7 @@
(begin
(qif-map-entry:set-gnc-name! retval (car mapped-gnc-acct))
(qif-map-entry:set-allowed-types! retval
(list (cadr mapped-gnc-acct)))
(cadr mapped-gnc-acct))
(qif-map-entry:set-new-acct?! retval #f))
;; we haven't found a match, so by default just create a new
;; one. Try to put the new account in a similar place in
@ -219,7 +219,7 @@
(qif-import:find-new-acct acct-name allowed-types
gnc-acct-info)))
(qif-map-entry:set-gnc-name! retval (car new-acct-info))
(qif-map-entry:set-allowed-types! retval (list (cadr new-acct-info)))
(qif-map-entry:set-allowed-types! retval (cadr new-acct-info))
(qif-map-entry:set-new-acct?! retval #t)))
retval))
@ -239,7 +239,7 @@
(let ((acct-matches? #f))
(for-each
(lambda (type)
(if (eq? type (gnc:account-get-type (caddr gnc-acct)))
(if (= type (gnc:account-get-type (caddr gnc-acct)))
(set! acct-matches? #t)))
allowed-types)
(if acct-matches?
@ -260,8 +260,8 @@
(if (not (null? matching-name-accts))
(set! retval (list
(cadr (car matching-name-accts))
(gnc:account-get-type
(caddr (car matching-name-accts)))))
(list (gnc:account-get-type
(caddr (car matching-name-accts))))))
#f)
retval))
@ -305,11 +305,11 @@
(list GNC-EQUITY-TYPE)
gnc-acct-info)))
(if existing-equity
(cdr existing-equity)
(list (default-equity-account) GNC-EQUITY-TYPE))))
existing-equity
(list (default-equity-account) (list GNC-EQUITY-TYPE)))))
((and (string? qif-acct)
(not (string=? qif-acct "")))
(list qif-acct (car allowed-types)))
(list qif-acct allowed-types))
(#t
(list (default-unspec-acct) (car allowed-types)))))
(list (default-unspec-acct) allowed-types))))

View File

@ -517,6 +517,32 @@
(qif-map-entry:set-display?! me (qif-map-entry:display? orig))
me))
(define (qif-map-entry:allowed-parent-types self)
(let ((types-list (qif-map-entry:allowed-types self)))
(define (add-types . rest)
(for-each
(lambda (t)
(if (not (memv t types-list))
(set! types-list (cons t types-list))))
rest))
(for-each
(lambda (t)
(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))
(add-types GNC-BANK-TYPE GNC-CASH-TYPE GNC-CCARD-TYPE
GNC-STOCK-TYPE GNC-MUTUAL-TYPE
GNC-ASSET-TYPE GNC-LIABILITY-TYPE))
((memv t (list GNC-INCOME-TYPE GNC-EXPENSE-TYPE))
(add-types GNC-INCOME-TYPE GNC-EXPENSE-TYPE))
(#t
(add-types t))))
(qif-map-entry:allowed-types self))
(reverse types-list)))
(define qif-map-entry:qif-name
(simple-obj-getter <qif-map-entry> 'qif-name))

View File

@ -144,40 +144,27 @@
(string-remove-leading-space read-value)))))
(cond
((string=? mangled-string "bank")
GNC-BANK-TYPE)
(list GNC-BANK-TYPE))
((string=? mangled-string "port")
GNC-BANK-TYPE)
(list GNC-BANK-TYPE))
((string=? mangled-string "cash")
GNC-CASH-TYPE)
(list GNC-CASH-TYPE))
((string=? mangled-string "ccard")
GNC-CCARD-TYPE)
(list GNC-CCARD-TYPE))
((string=? mangled-string "invst") ;; these are brokerage accounts.
GNC-BANK-TYPE)
(list GNC-BANK-TYPE))
((string=? mangled-string "oth a")
GNC-ASSET-TYPE)
(list GNC-ASSET-TYPE GNC-BANK-TYPE GNC-CASH-TYPE GNC-STOCK-TYPE
GNC-MUTUAL-TYPE))
((string=? mangled-string "oth l")
GNC-LIABILITY-TYPE)
(list GNC-LIABILITY-TYPE GNC-CCARD-TYPE))
((string=? mangled-string "mutual")
GNC-MUTUAL-TYPE)
(list GNC-MUTUAL-TYPE GNC-STOCK-TYPE))
(#t
(display "qif-parse:parse-acct-type : unhandled account type ")
(display read-value)
(display "... substituting Bank.")
GNC-BANK-TYPE))))
(define (qif-parse:state-to-account-type qstate)
(cond ((eq? qstate 'type:bank)
GNC-BANK-TYPE)
((eq? qstate 'type:cash)
GNC-CASH-TYPE)
((eq? qstate 'type:ccard)
GNC-CCARD-TYPE)
((eq? qstate 'type:invst) ;; these are brokerage accounts in quicken
GNC-BANK-TYPE)
((eq? qstate '#{type:oth\ a}#)
GNC-ASSET-TYPE)
((eq? qstate '#{type:oth\ l}#)
GNC-LIABILITY-TYPE)))
(list GNC-BANK-TYPE)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; parse-bang-field : the bang fields switch the parse context for

View File

@ -29,7 +29,7 @@
(qif-map-entry:allowed-types acct-info))
(make-new-acct #f)
(incompatible-acct #f))
(define (make-unique-name-variant long-name short-name)
(if (gnc:get-account-from-full-name old-group long-name separator)
(let loop ((count 2))
@ -38,9 +38,9 @@
(if (gnc:get-account-from-full-name
old-group test-name separator)
(loop (+ 1 count))
test-name)))
(string-append short-name (sprintf #f " %a" count)))))
short-name))
;; just because we found an account doesn't mean we can use it.
;; if the name is in use but the currency, security, or type are
;; incompatible, we need to create a new account with a modified
@ -52,7 +52,7 @@
(gnc:commodity-equiv?
security (gnc:account-get-security same-gnc-account)))
(list? allowed-types)
(memq (gnc:account-get-type same-gnc-account)
(memv (gnc:account-get-type same-gnc-account)
allowed-types))
(begin
;; everything is ok, so we can just use the same
@ -83,7 +83,7 @@
(set! last-colon (string-rindex gnc-name separator))
(gnc:account-begin-edit new-acct)
;; if this is a copy of an existing gnc account, copy the
;; account properties. For incompatible existing accts,
;; we'll do something different later.
@ -114,7 +114,7 @@
(qif-map-entry:set-qif-name! pinfo parent-name)
(qif-map-entry:set-gnc-name! pinfo parent-name)
(qif-map-entry:set-allowed-types!
pinfo (qif-map-entry:allowed-types acct-info))
pinfo (qif-map-entry:allowed-parent-types acct-info))
(set! parent-acct (qif-import:find-or-make-acct
pinfo currency security
@ -244,7 +244,7 @@
(qif-import:get-account-name
(qif-map-entry:qif-name acctinfo)))))
(ok-types (qif-map-entry:allowed-types acctinfo))
(equity? (memq GNC-EQUITY-TYPE ok-types)))
(equity? (memv GNC-EQUITY-TYPE ok-types)))
(cond ((and equity? security) ;; a "retained holdings" acct
(qif-import:find-or-make-acct acctinfo