Generic transaction import
Benoit Grégoire
bock@step.polymtl.ca
Thu, 6 Jun 2002 20:34:39 -0400
> > -Identifying and if necessary creating the source account: The account
> > is identified using the account number for ofx and HBCI, and the account
> > description for qif, if available. This identifier is stored in a
> > kvp_string with key account_online_id. The format of this string is
> > bankID/branchID/accountID for a bank account. If one of these fields
> > isn't present, it is ommited, so for a credit card, we would have
> > //cardnumber.
>
> 1. We have several numbers here (bankID, branchID, accountID) and I wonder
> whether it is a good idea to store them in one string which needs to be
> parsed by anyone who's gonna use it. Couldn't we just add one kvp_string
> for each of the single data fields? i.e. one with key
> account_online_bankid, one with account_online_branchid and so on.
>
> 2. As it turned out in our IRC discussion, the account and bank number
> format is quite different from country to country. So I just suggest to add
> a forth field, "country" to the above mentioned.
> http://www.ecbs.org/iban.htm is a document describing the efforts for an
> International Bank Account Number, IBAN. Even in that IBAN the country code
> (according to ISO-3166) is the very first two digits of the number, so
> obviously it does matter what country the rest of the account
> identification applies to. We can just add a forth kvp_string with key
> account_online_country and values taken from ISO-3166.
After thinking about it, here is the new paragraph:
-Identifying and if necessary creating the source account: The account is
identified using the account number for ofx and HBCI, and the account
description for qif, if available. The account number or identifier is
stored in a kvp_string with key account_online_id. The online system can use
and format this frame however it sees fit, but it must be a kvp_string. A
function:
const char * gnc_import_get_acc_online_id(Account * account)
is provided for searching. If no account is found with a matching online_id,
the function:
Account * gnc_import_select_account(char * account_online_id_value)
must be called. The user can then select an existing account from a list (the
current account_online_id are displayed alongside the accounts), or create a
new one. The account_online_id is then stored in the selected or created
account's kvp_frame.
> > Present the list of matches to the user in decreasing order of
> > likelyhood. User has the option of selecting one of the match or creating
> > a new transaction.
>
> Err, do you intend to present a list of matches for each transaction
> individually? I think that would result in a long series of individual
> dialogs, and IIRC in the current QIF importer this was solved differently
> so that the user gets only *one* dialog with all transaction in question
> from the importing process.
I was thinking more about a two pane dialog. The first pane lists the
downloaded transaction, you click a transaction in the first pane and the
second pane shows the potential matches (or new). What I havent figured out
is how you add the other splits potentially needed to balance the
transaction. But I am not much of a UI guy, I just complain a lot about UIs
;)
> > Remarks and things to remember:
> > -void gnc_import_add_trans(Transaction *trans) should return as soon as
> > possible (BEFORE user interaction) so that for systems that maintain a
> > connection (such as HBCI) the user won't run into timeouts.
>
> You don't have to worry about HBCI here -- the network connections will be
> handeled asynchronous (no, not by jsled :) and if we get to the point of
> transaction importing, then all connections have long been closed.
Great, but is the calling convention fine for you?