gnucash maint: Multiple changes pushed

Christian Stimming cstim at code.gnucash.org
Mon Oct 13 12:34:22 EDT 2014


Updated	 via  https://github.com/Gnucash/gnucash/commit/cbe6c230 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/4e99e09e (commit)
	 via  https://github.com/Gnucash/gnucash/commit/fbb5291a (commit)
	from  https://github.com/Gnucash/gnucash/commit/68798181 (commit)



commit cbe6c23087b0b495c3b7049afc772d78e7c35c0c
Author: Christian Stimming <christian at cstimming.de>
Date:   Wed Oct 8 21:24:51 2014 +0200

    Aqbanking: Add display of aqbanking subaccountid in initial correspondence setup

diff --git a/src/import-export/aqb/assistant-ab-initial.c b/src/import-export/aqb/assistant-ab-initial.c
index d0def64..d01b590 100644
--- a/src/import-export/aqb/assistant-ab-initial.c
+++ b/src/import-export/aqb/assistant-ab-initial.c
@@ -569,24 +569,21 @@ ab_account_longname(const AB_ACCOUNT *ab_acc)
 {
     gchar *bankname;
     gchar *result;
-    const char *ab_bankname, *bankcode;
+    const char *ab_bankname, *bankcode, *subAccountId;
 
     g_return_val_if_fail(ab_acc, NULL);
 
     ab_bankname = AB_Account_GetBankName(ab_acc);
     bankname = ab_bankname ? gnc_utf8_strip_invalid_strdup(ab_bankname) : NULL;
     bankcode = AB_Account_GetBankCode(ab_acc);
+    subAccountId = AB_Account_GetSubAccountId(ab_acc);
 
     /* Translators: Strings are 1. Account code, 2. Bank name, 3. Bank code. */
-    if (bankname && *bankname)
-        result = g_strdup_printf(_("%s at %s (code %s)"),
-                                 AB_Account_GetAccountNumber(ab_acc),
-                                 bankname,
-                                 bankcode);
-    else
-        result = g_strdup_printf(_("%s at bank code %s"),
-                                 AB_Account_GetAccountNumber(ab_acc),
-                                 bankcode);
+    result = g_strdup_printf(_("Bank code %s (%s), Account %s (%s)"),
+                             bankcode,
+                             bankname ? bankname : "",
+                             AB_Account_GetAccountNumber(ab_acc),
+                             subAccountId ? subAccountId : "");
     g_free(bankname);
 
     return result;

commit 4e99e09e5fda9750b036a8aa5213083110a38ec0
Author: Christian Stimming <christian at cstimming.de>
Date:   Fri Sep 26 22:48:46 2014 +0200

    Aqbanking online SEPA transfer: Allow transfers without BIC, only IBAN. Also add IBAN checking.

diff --git a/src/import-export/aqb/dialog-ab-trans.c b/src/import-export/aqb/dialog-ab-trans.c
index 355c0e8..93d1216 100644
--- a/src/import-export/aqb/dialog-ab-trans.c
+++ b/src/import-export/aqb/dialog-ab-trans.c
@@ -490,6 +490,27 @@ static void
 gnc_ab_trans_dialog_check_ktoblzcheck(const GncABTransDialog *td,
                                       const AB_TRANSACTION *trans)
 {
+    if (gnc_ab_trans_isSEPA(td->trans_type))
+    {
+        int rv = AB_Banking_CheckIban(AB_Transaction_GetRemoteIban(trans));
+        if (rv != 0) {
+            gchar *message = g_strdup_printf(_("The internal check of the destination IBAN '%s' "
+                                               "failed. This means "
+                                               "the account number might contain an error."),
+                                             AB_Transaction_GetRemoteIban(trans));
+            gnc_ab_trans_dialog_entry_set (td->recp_account_entry, message,
+                                           GTK_STOCK_DIALOG_WARNING);
+        }
+        else
+        {
+            gnc_ab_trans_dialog_entry_set (td->recp_account_entry, "",
+                                           NULL);
+            gnc_ab_trans_dialog_entry_set (td->recp_bankcode_entry, "",
+                                           NULL);
+        }
+    }
+    else
+    {
 #ifndef HAVE_KTOBLZCHECK_H
     return;
 #else
@@ -548,6 +569,7 @@ gnc_ab_trans_dialog_check_ktoblzcheck(const GncABTransDialog *td,
     LEAVE("KtoBlzCheck said check is %d = %s",
           blzresult, blztext ? blztext : "(none)");
 #endif
+    }
 }
 
 static void
@@ -633,7 +655,7 @@ gnc_ab_trans_dialog_verify_values(GncABTransDialog *td)
     bankcode = gnc_ab_trans_isSEPA(td->trans_type)
             ? AB_Transaction_GetRemoteBic(td->ab_trans)
             : AB_Transaction_GetRemoteBankCode(td->ab_trans);
-    if (!bankcode || !strlen(bankcode))
+    if (!gnc_ab_trans_isSEPA(td->trans_type) && (!bankcode || !strlen(bankcode)))
     {
         gnc_ab_trans_dialog_entry_set (td->recp_bankcode_entry,
                                        _("You did not enter a recipient bank. A recipient bank is "

commit fbb5291ac3267a266e56338a25befccc5f0aa3d5
Author: Christian Stimming <christian at cstimming.de>
Date:   Mon Sep 1 20:58:15 2014 +0200

    Aqbanking transfer: Make IBAN and BIC text entry fields filter digits or alphas correctly as needed.

diff --git a/src/import-export/aqb/dialog-ab-trans.c b/src/import-export/aqb/dialog-ab-trans.c
index c034fe8..355c0e8 100644
--- a/src/import-export/aqb/dialog-ab-trans.c
+++ b/src/import-export/aqb/dialog-ab-trans.c
@@ -82,7 +82,12 @@ G_MODULE_EXPORT void gnc_ab_trans_dialog_moveup_templ_cb(GtkButton *button, gpoi
 G_MODULE_EXPORT void gnc_ab_trans_dialog_movedown_templ_cb(GtkButton *button, gpointer user_data);
 G_MODULE_EXPORT void gnc_ab_trans_dialog_sort_templ_cb(GtkButton *button, gpointer user_data);
 G_MODULE_EXPORT void gnc_ab_trans_dialog_del_templ_cb(GtkButton *button, gpointer user_data);
-G_MODULE_EXPORT void gnc_ab_trans_dialog_entry_filter_cb (GtkEditable *editable,
+G_MODULE_EXPORT void gnc_ab_trans_dialog_ibanentry_filter_cb (GtkEditable *editable,
+        const gchar *text,
+        gint         length,
+        gint        *position,
+        gpointer     user_data);
+G_MODULE_EXPORT void gnc_ab_trans_dialog_bicentry_filter_cb (GtkEditable *editable,
         const gchar *text,
         gint         length,
         gint        *position,
@@ -1300,7 +1305,60 @@ gnc_ab_trans_dialog_del_templ_cb(GtkButton *button, gpointer user_data)
 }
 
 void
-gnc_ab_trans_dialog_entry_filter_cb (GtkEditable *editable,
+gnc_ab_trans_dialog_ibanentry_filter_cb (GtkEditable *editable,
+                                     const gchar *text,
+                                     gint         length,
+                                     gint        *position,
+                                     gpointer     data)
+{
+    GString* result = g_string_new(NULL);
+    gint i;
+    GncABTransDialog *td = data;
+
+    if (length == -1)
+        length = strlen(text);
+    g_assert(position);
+
+    /* Filter digits / non digits as needed */
+    for (i = 0; i < length; i++)
+    {
+        gchar c = text[i];
+
+        if (gnc_ab_trans_isSEPA(td->trans_type))
+        {
+            // SEPA: Only alphas in the first two places (only upper case, though), then only digits
+            if (*position + i < 2)
+            {
+                if (g_ascii_isalpha(c))
+                    g_string_append_c(result, g_ascii_toupper(c));
+            }
+            else
+            {
+                if (g_ascii_isdigit(c))
+                    g_string_append_c(result, c);
+            }
+        }
+        else
+        {
+            // Non-SEPA: Only accept digits.
+            if (g_ascii_isdigit(c))
+            {
+                g_string_append_c(result, c);
+            }
+        }
+    }
+
+    g_signal_handlers_block_by_func (editable,
+                                     (gpointer) gnc_ab_trans_dialog_ibanentry_filter_cb, data);
+    gtk_editable_insert_text (editable, result->str, result->len, position);
+    g_signal_handlers_unblock_by_func (editable,
+                                       (gpointer) gnc_ab_trans_dialog_ibanentry_filter_cb, data);
+    g_signal_stop_emission_by_name (editable, "insert_text");
+    g_string_free (result, TRUE);
+}
+
+void
+gnc_ab_trans_dialog_bicentry_filter_cb (GtkEditable *editable,
                                      const gchar *text,
                                      gint         length,
                                      gint        *position,
@@ -1312,27 +1370,42 @@ gnc_ab_trans_dialog_entry_filter_cb (GtkEditable *editable,
 
     if (length == -1)
         length = strlen(text);
+    g_assert(position);
 
     /* Filter non digits */
     for (i = 0; i < length; i++)
     {
         gchar c = text[i];
 
-        // Only accept digits. FIXME: In the SEPA dialogs, alphanumerics are
-        // allowed, but we could also verify the input according to actual BIC
-        // and IBAN rules. This is not yet done here.
-        if (g_ascii_isdigit(c)
-                || (gnc_ab_trans_isSEPA(td->trans_type) && g_ascii_isalnum(c)))
+        if (gnc_ab_trans_isSEPA(td->trans_type))
+        {
+            // SEPA: Only alphas in the first 6 places (only upper case, though), then both upper-case alphas and digits
+            if (*position + i < 6)
+            {
+                if (g_ascii_isalpha(c))
+                    g_string_append_c(result, g_ascii_toupper(c));
+            }
+            else
+            {
+                if (g_ascii_isalnum(c))
+                    g_string_append_c(result, g_ascii_toupper(c));
+            }
+        }
+        else
         {
-            g_string_append_c(result, c);
+            // Non-SEPA: Only digits accepted.
+            if (g_ascii_isdigit(c))
+            {
+                g_string_append_c(result, c);
+            }
         }
     }
 
     g_signal_handlers_block_by_func (editable,
-                                     (gpointer) gnc_ab_trans_dialog_entry_filter_cb, data);
+                                     (gpointer) gnc_ab_trans_dialog_bicentry_filter_cb, data);
     gtk_editable_insert_text (editable, result->str, result->len, position);
     g_signal_handlers_unblock_by_func (editable,
-                                       (gpointer) gnc_ab_trans_dialog_entry_filter_cb, data);
+                                       (gpointer) gnc_ab_trans_dialog_bicentry_filter_cb, data);
     g_signal_stop_emission_by_name (editable, "insert_text");
     g_string_free (result, TRUE);
 }
diff --git a/src/import-export/aqb/dialog-ab.glade b/src/import-export/aqb/dialog-ab.glade
index d2bb114..543e06d 100644
--- a/src/import-export/aqb/dialog-ab.glade
+++ b/src/import-export/aqb/dialog-ab.glade
@@ -1023,7 +1023,7 @@
                     <property name="primary_icon_activatable">False</property>
                     <property name="secondary_icon_activatable">False</property>
                     <signal name="changed" handler="gnc_ab_trans_dialog_verify_values" swapped="yes"/>
-                    <signal name="insert-text" handler="gnc_ab_trans_dialog_entry_filter_cb" swapped="no"/>
+                    <signal name="insert-text" handler="gnc_ab_trans_dialog_ibanentry_filter_cb" swapped="no"/>
                   </object>
                   <packing>
                     <property name="top_attach">3</property>
@@ -1055,7 +1055,7 @@
                     <property name="primary_icon_activatable">False</property>
                     <property name="secondary_icon_activatable">False</property>
                     <signal name="changed" handler="gnc_ab_trans_dialog_bankcode_changed_cb" swapped="no"/>
-                    <signal name="insert-text" handler="gnc_ab_trans_dialog_entry_filter_cb" swapped="no"/>
+                    <signal name="insert-text" handler="gnc_ab_trans_dialog_bicentry_filter_cb" swapped="no"/>
                   </object>
                   <packing>
                     <property name="left_attach">2</property>



Summary of changes:
 src/import-export/aqb/assistant-ab-initial.c |  17 ++--
 src/import-export/aqb/dialog-ab-trans.c      | 117 ++++++++++++++++++++++++---
 src/import-export/aqb/dialog-ab.glade        |   4 +-
 3 files changed, 115 insertions(+), 23 deletions(-)



More information about the gnucash-changes mailing list