Bug #95635: QIF import: Mark matched transactions as cleared

Patch by Tristan Faujour:

Please describe the problem:
My bank allows me to download bank statement files in the QIF format. They
contain paid transactions, but there is no status ("C") line, so all
transactions are left in the "not cleared" status.
I wish it would be possible to define the default status in user preferences.

Steps to reproduce:
- Import a QIF file with no "C" line.

Actual results:
- Transactions are not cleared.

Expected results:
- The "near split" of the imported transactions should be set to a default
status 'defined in user preferences).

Does this happen every time?
- Yes

Other information:
- I developed a patch. See attachment. It allows defining another status that
will be applied to the transactions that are imported as "not cleared".
- It is my first contribution, it should be taken with all due prudence.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@20015 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Christian Stimming
2010-12-31 12:25:30 +00:00
parent 039c603bf8
commit e224205e11
4 changed files with 122 additions and 6 deletions
@@ -56,6 +56,7 @@
#define DRUID_QIF_IMPORT_CM_CLASS "druid-qif-import"
#define GCONF_SECTION "dialogs/import/qif"
#define GCONF_NAME_SHOW_DOC "show_doc"
#define GCONF_NAME_DEFAULT_TRANSACTION_STATUS "default_status"
#define PREV_ROW "prev_row"
@@ -165,6 +166,7 @@ struct _qifimportwindow
SCM imported_account_tree;
SCM match_transactions;
SCM transaction_status;
int selected_transaction;
};
@@ -2637,12 +2639,13 @@ gnc_ui_qif_import_convert_progress_show_cb(GtkWidget *widget,
/* This step will fill 70% of the bar. */
gnc_progress_dialog_push(wind->convert_progress, 0.7);
retval = scm_apply(qif_to_gnc,
SCM_LIST7(wind->imported_files,
SCM_LIST8(wind->imported_files,
wind->acct_map_info,
wind->cat_map_info,
wind->memo_map_info,
wind->security_hash,
scm_makfrom0str(currname),
wind->transaction_status,
progress),
SCM_EOL);
gnc_progress_dialog_pop(wind->convert_progress);
@@ -3214,6 +3217,8 @@ static void
get_preferences(QIFImportWindow *wind)
{
GError * err = NULL;
gchar *status_pref = NULL;
gchar tmp_transaction_status = 'n';
g_return_if_fail(wind);
@@ -3231,6 +3236,27 @@ get_preferences(QIFImportWindow *wind)
g_warning("QIF import: Documentation pages will be shown by default.");
wind->show_doc_pages = TRUE;
}
/* Clear / Reconcile transaction if not specified in QIF file. */
status_pref = gnc_gconf_get_string(
GCONF_SECTION, GCONF_NAME_DEFAULT_TRANSACTION_STATUS, &err);
if (err != NULL)
{
g_warning("QIF import: gnc_gconf_get_string error: %s", err->message);
g_error_free(err);
g_warning("QIF import: Couldn't get %s setting from gconf.",
GCONF_NAME_DEFAULT_TRANSACTION_STATUS);
} else {
if (g_strcmp0(status_pref, "cleared") == 0)
{
tmp_transaction_status = 'c';
} else if (g_strcmp0(status_pref, "reconciled") == 0)
{
tmp_transaction_status = 'y';
}
}
g_free(status_pref);
wind->transaction_status = SCM_MAKE_CHAR(tmp_transaction_status);
}
+13 -4
View File
@@ -215,7 +215,9 @@
(define (qif-import:qif-to-gnc qif-files-list
qif-acct-map qif-cat-map
qif-memo-map stock-map
default-currency-name progress-dialog)
default-currency-name
transaction-status-pref
progress-dialog)
;; This procedure does all the work. We'll define it, then call it safely.
(define (private-convert)
@@ -392,6 +394,7 @@
qif-acct-map
qif-cat-map
qif-memo-map
transaction-status-pref
progress-dialog)
;; rebalance and commit everything
@@ -423,6 +426,7 @@
(define (qif-import:qif-xtn-to-gnc-xtn qif-xtn qif-file gnc-xtn
gnc-acct-hash
qif-acct-map qif-cat-map qif-memo-map
transaction-status-pref
progress-dialog)
(let ((splits (qif-xtn:splits qif-xtn))
(gnc-near-split (xaccMallocSplit (gnc-get-current-book)))
@@ -490,10 +494,15 @@
;; the debit/credit lines. See bug 495219 for more information.
(xaccTransSetNotes gnc-xtn qif-memo)))
;; Look for the transaction status (QIF "C" line). When it exists, apply
;; the cleared (c) or reconciled (y) status to the split. Otherwise, apply
;; user preference.
(if (eq? qif-cleared 'cleared)
(xaccSplitSetReconcile gnc-near-split #\c))
(if (eq? qif-cleared 'reconciled)
(xaccSplitSetReconcile gnc-near-split #\y))
(xaccSplitSetReconcile gnc-near-split #\c)
(if (eq? qif-cleared 'reconciled)
(xaccSplitSetReconcile gnc-near-split #\y)
;; Apply user preference by default.
(xaccSplitSetReconcile gnc-near-split transaction-status-pref)))
(if (not qif-security)
(begin
+68 -1
View File
@@ -1380,7 +1380,74 @@ Click "Cancel" to abort the QIF import process.</property>
</packing>
</child>
<child>
<placeholder/>
<widget class="GtkRadioButton" id="gconf/dialogs/import/qif/default_status/reconciled">
<property name="label" translatable="yes">_Reconciled</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip" translatable="yes">When the status is not specified in a QIF file, the transactions are marked as reconciled.</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
<property name="x_padding">12</property>
</packing>
</child>
<child>
<widget class="GtkRadioButton" id="gconf/dialogs/import/qif/default_status/cleared">
<property name="label" translatable="yes">_Cleared</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip" translatable="yes">When the status is not specified in a QIF file, the transactions are marked as cleared.</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
<property name="group">gconf/dialogs/import/qif/default_status/reconciled</property>
</widget>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
<property name="x_padding">12</property>
</packing>
</child>
<child>
<widget class="GtkRadioButton" id="gconf/dialogs/import/qif/default_status/not_cleared">
<property name="label" translatable="yes">_Not cleared</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip" translatable="yes">When the status is not specified in a QIF file, the transactions are marked as not cleared.</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
<property name="group">gconf/dialogs/import/qif/default_status/reconciled</property>
</widget>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
<property name="x_padding">12</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="qif_default_transation_status">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Default transaction status (overridden by the status given by the QIF file):</property>
</widget>
<packing>
<property name="right_attach">4</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<placeholder/>
@@ -16,5 +16,19 @@
</locale>
</schema>
<schema>
<key>/schemas/apps/gnucash/dialogs/import/qif/default_status</key>
<applyto>/apps/gnucash/dialogs/import/qif/default_status</applyto>
<owner>gnucash</owner>
<type>string</type>
<default>not_cleared</default>
<locale name="C">
<short>Default QIF transaction status</short>
<long>
Default status for QIF transaction when not specified in QIF file.
</long>
</locale>
</schema>
</schemalist>
</gconfschemafile>