r22445 - gnucash/trunk/src/import-export/aqbanking - Add some initial implementation for international (European) SEPA online transfers.

Christian Stimming cstim at code.gnucash.org
Tue Oct 16 16:06:10 EDT 2012


Author: cstim
Date: 2012-10-16 16:06:10 -0400 (Tue, 16 Oct 2012)
New Revision: 22445
Trac: http://svn.gnucash.org/trac/changeset/22445

Modified:
   gnucash/trunk/src/import-export/aqbanking/dialog-ab-trans.c
   gnucash/trunk/src/import-export/aqbanking/dialog-ab-trans.h
   gnucash/trunk/src/import-export/aqbanking/gnc-ab-transfer.c
   gnucash/trunk/src/import-export/aqbanking/gnc-ab-utils.c
   gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking-ui.xml
   gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking.c
Log:
Add some initial implementation for international (European) SEPA online transfers.

Needs testing, though - my bank doesn't offer it for me.

Modified: gnucash/trunk/src/import-export/aqbanking/dialog-ab-trans.c
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/dialog-ab-trans.c	2012-10-12 19:35:21 UTC (rev 22444)
+++ gnucash/trunk/src/import-export/aqbanking/dialog-ab-trans.c	2012-10-16 20:06:10 UTC (rev 22445)
@@ -38,6 +38,8 @@
 #include <aqbanking/jobsingletransfer.h>
 #include <aqbanking/jobsingledebitnote.h>
 #include <aqbanking/jobinternaltransfer.h>
+#include <aqbanking/jobsepatransfer.h>
+#include <aqbanking/jobsepadebitnote.h>
 
 #include "dialog-ab-trans.h"
 #include "dialog-transfer.h"
@@ -143,6 +145,18 @@
 #endif
 };
 
+gboolean gnc_ab_trans_isSEPA(GncABTransType t)
+{
+    switch (t)
+    {
+    case SEPA_TRANSFER:
+    case SEPA_DEBITNOTE:
+        return TRUE;
+    default:
+        return FALSE;
+    }
+}
+
 static void
 gnc_ab_trans_dialog_fill_templ_helper(gpointer data, gpointer user_data)
 {
@@ -174,10 +188,20 @@
         trans, AB_Account_GetAccountNumber(td->ab_acc));
     AB_Transaction_SetLocalCountry(trans, "DE");
 
-    AB_Transaction_SetRemoteBankCode(
-        trans, gtk_entry_get_text(GTK_ENTRY(td->recp_bankcode_entry)));
-    AB_Transaction_SetRemoteAccountNumber(
-        trans, gtk_entry_get_text(GTK_ENTRY(td->recp_account_entry)));
+    if (gnc_ab_trans_isSEPA(td->trans_type))
+    {
+        AB_Transaction_SetRemoteBic(
+                    trans, gtk_entry_get_text(GTK_ENTRY(td->recp_bankcode_entry)));
+        AB_Transaction_SetRemoteIban(
+                    trans, gtk_entry_get_text(GTK_ENTRY(td->recp_account_entry)));
+    }
+    else
+    {
+        AB_Transaction_SetRemoteBankCode(
+                    trans, gtk_entry_get_text(GTK_ENTRY(td->recp_bankcode_entry)));
+        AB_Transaction_SetRemoteAccountNumber(
+                    trans, gtk_entry_get_text(GTK_ENTRY(td->recp_account_entry)));
+    }
     AB_Transaction_SetRemoteCountry(trans, "DE");
     AB_Transaction_AddRemoteName(
         trans, gtk_entry_get_text(GTK_ENTRY(td->recp_name_entry)), FALSE);
@@ -315,9 +339,11 @@
     {
     case SINGLE_TRANSFER:
     case SINGLE_INTERNAL_TRANSFER:
+    case SEPA_TRANSFER:
         /* all labels are already set */
         break;
     case SINGLE_DEBITNOTE:
+    case SEPA_DEBITNOTE:
         gtk_label_set_text(GTK_LABEL (heading_label),
                            /* Translators: Strings from this file are
                              * needed only in countries that have one of
@@ -352,6 +378,26 @@
         break;
     }
 
+    /* Additionally change the labels for the European (SEPA) transactions */
+    switch (trans_type)
+    {
+    case SEPA_TRANSFER:
+        gtk_label_set_text(GTK_LABEL(recp_account_heading),
+                           _("Recipient IBAN (International Account Number)"));
+        gtk_label_set_text(GTK_LABEL(recp_bankcode_heading),
+                           _("Recipient BIC (Bank Code)"));
+        break;
+    case SEPA_DEBITNOTE:
+        gtk_label_set_text(GTK_LABEL(recp_account_heading),
+                           _("Debited IBAN (International Account Number)"));
+        gtk_label_set_text(GTK_LABEL(recp_bankcode_heading),
+                           _("Debited BIC (Bank Code)"));
+        break;
+    default:
+        // do nothing
+        break;
+    }
+
     gtk_label_set_text(GTK_LABEL(orig_name_label), ab_ownername);
     gtk_label_set_text(GTK_LABEL(orig_account_label), ab_accountnumber);
     gtk_label_set_text(GTK_LABEL(orig_bankname_label), ab_bankname);
@@ -407,6 +453,13 @@
 
     ENTER(" ");
 
+    if (gnc_ab_trans_isSEPA(td->trans_type))
+    {
+        // FIXME: libktoblzcheck also has <iban.h>, maybe add this here?
+        LEAVE("No ktoblzcheck implemented for IBAN");
+        return;
+    }
+
     blzresult = AccountNumberCheck_check(
                     td->blzcheck,
                     AB_Transaction_GetRemoteBankCode(trans),
@@ -718,6 +771,12 @@
     case SINGLE_INTERNAL_TRANSFER:
         job = AB_JobInternalTransfer_new(ab_acc);
         break;
+    case SEPA_TRANSFER:
+        job = AB_JobSepaTransfer_new(ab_acc);
+        break;
+    case SEPA_DEBITNOTE:
+        job = AB_JobSepaDebitNote_new(ab_acc);
+        break;
     case SINGLE_TRANSFER:
     default:
         job = AB_JobSingleTransfer_new(ab_acc);
@@ -762,6 +821,12 @@
         case SINGLE_INTERNAL_TRANSFER:
             AB_JobInternalTransfer_SetTransaction(job, ab_trans);
             break;
+        case SEPA_TRANSFER:
+            AB_JobSepaTransfer_SetTransaction(job, ab_trans);
+            break;
+        case SEPA_DEBITNOTE:
+            AB_JobSepaDebitNote_SetTransaction(job, ab_trans);
+            break;
         case SINGLE_TRANSFER:
         default:
             AB_JobSingleTransfer_SetTransaction(job, ab_trans);

Modified: gnucash/trunk/src/import-export/aqbanking/dialog-ab-trans.h
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/dialog-ab-trans.h	2012-10-12 19:35:21 UTC (rev 22444)
+++ gnucash/trunk/src/import-export/aqbanking/dialog-ab-trans.h	2012-10-16 20:06:10 UTC (rev 22445)
@@ -53,7 +53,14 @@
     SINGLE_TRANSFER = 0,
     SINGLE_DEBITNOTE,
     SINGLE_INTERNAL_TRANSFER
+    , SEPA_TRANSFER
+    , SEPA_DEBITNOTE
 };
+/**
+  * Returns true if the given GncABTransType is an European (SEPA) transaction
+  * (transfer or debit note), otherwise false.
+  */
+gboolean gnc_ab_trans_isSEPA(GncABTransType t);
 
 /**
  * Create a new AqBanking transfer dialog

Modified: gnucash/trunk/src/import-export/aqbanking/gnc-ab-transfer.c
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/gnc-ab-transfer.c	2012-10-12 19:35:21 UTC (rev 22444)
+++ gnucash/trunk/src/import-export/aqbanking/gnc-ab-transfer.c	2012-10-16 20:06:10 UTC (rev 22445)
@@ -213,6 +213,16 @@
                 xfer_dialog, _("Online Banking Bank-Internal Transfer"));
             gnc_xfer_dialog_lock_from_account_tree(xfer_dialog);
             break;
+        case SEPA_TRANSFER:
+            gnc_xfer_dialog_set_title(
+                xfer_dialog, _("Online Banking European (SEPA) Transfer"));
+            gnc_xfer_dialog_lock_from_account_tree(xfer_dialog);
+            break;
+        case SEPA_DEBITNOTE:
+            gnc_xfer_dialog_set_title(
+                xfer_dialog, _("Online Banking European (SEPA) Debit Note"));
+            gnc_xfer_dialog_lock_to_account_tree(xfer_dialog);
+            break;
         case SINGLE_TRANSFER:
         default:
             gnc_xfer_dialog_set_title(

Modified: gnucash/trunk/src/import-export/aqbanking/gnc-ab-utils.c
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/gnc-ab-utils.c	2012-10-12 19:35:21 UTC (rev 22444)
+++ gnucash/trunk/src/import-export/aqbanking/gnc-ab-utils.c	2012-10-16 20:06:10 UTC (rev 22445)
@@ -623,10 +623,12 @@
         case AB_Transaction_TypeDebitNote:
             trans_type = SINGLE_DEBITNOTE;
             break;
+        case AB_Transaction_TypeEuTransfer:
+            trans_type = SEPA_TRANSFER;
+            break;
         case AB_Transaction_TypeTransaction:
             /* trans_type = SINGLE_INTERNAL_TRANSFER;
              * break; */
-        case AB_Transaction_TypeEuTransfer:
         case AB_Transaction_TypeTransfer:
         default:
             trans_type = SINGLE_TRANSFER;

Modified: gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking-ui.xml
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking-ui.xml	2012-10-12 19:35:21 UTC (rev 22444)
+++ gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking-ui.xml	2012-10-16 20:06:10 UTC (rev 22445)
@@ -21,6 +21,7 @@
           <menuitem name="ABGetTrans"           action="ABGetTransAction"/>
           <separator name="OnlineActionsSep1"/>
           <menuitem name="ABIssueTrans"         action="ABIssueTransAction"/>
+          <menuitem name="ABIssueSepaTrans"         action="ABIssueSepaTransAction"/>
           <menuitem name="ABIssueIntTrans"      action="ABIssueIntTransAction"/>
           <menuitem name="ABIssueDirectDebit"   action="ABIssueDirectDebitAction"/>
           <separator name="OnlineActionsSep2"/>

Modified: gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking.c
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking.c	2012-10-12 19:35:21 UTC (rev 22444)
+++ gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking.c	2012-10-16 20:06:10 UTC (rev 22445)
@@ -71,6 +71,7 @@
 static void gnc_plugin_ab_cmd_get_balance(GtkAction *action, GncMainWindowActionData *data);
 static void gnc_plugin_ab_cmd_get_transactions(GtkAction *action, GncMainWindowActionData *data);
 static void gnc_plugin_ab_cmd_issue_transaction(GtkAction *action, GncMainWindowActionData *data);
+static void gnc_plugin_ab_cmd_issue_sepatransaction(GtkAction *action, GncMainWindowActionData *data);
 static void gnc_plugin_ab_cmd_issue_inttransaction(GtkAction *action, GncMainWindowActionData *data);
 static void gnc_plugin_ab_cmd_issue_direct_debit(GtkAction *action, GncMainWindowActionData *data);
 static void gnc_plugin_ab_cmd_view_logwindow(GtkToggleAction *action, GncMainWindow *window);
@@ -112,6 +113,11 @@
         G_CALLBACK(gnc_plugin_ab_cmd_issue_transaction)
     },
     {
+        "ABIssueSepaTransAction", NULL, N_("_Issue SEPA Transaction..."), NULL,
+        N_("Issue a new international European (SEPA) transaction online through Online Banking"),
+        G_CALLBACK(gnc_plugin_ab_cmd_issue_sepatransaction)
+    },
+    {
         "ABIssueIntTransAction", NULL, N_("I_nternal Transaction..."), NULL,
         N_("Issue a new bank-internal transaction online through Online Banking"),
         G_CALLBACK(gnc_plugin_ab_cmd_issue_inttransaction)
@@ -535,6 +541,27 @@
 }
 
 static void
+gnc_plugin_ab_cmd_issue_sepatransaction(GtkAction *action,
+                                    GncMainWindowActionData *data)
+{
+    Account *account;
+
+    ENTER("action %p, main window data %p", action, data);
+    account = main_window_to_account(data->window);
+    if (account == NULL)
+    {
+        g_message("No AqBanking account selected");
+        LEAVE("no account");
+        return;
+    }
+
+    gnc_main_window = data->window;
+    gnc_ab_maketrans(GTK_WIDGET(data->window), account, SEPA_TRANSFER);
+
+    LEAVE(" ");
+}
+
+static void
 gnc_plugin_ab_cmd_issue_inttransaction(GtkAction *action,
                                        GncMainWindowActionData *data)
 {



More information about the gnucash-changes mailing list