mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Add some initial implementation for international (European) SEPA online transfers.
Needs testing, though - my bank doesn't offer it for me. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@22445 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
fb6993ef1c
commit
bc34c7b23b
@ -38,6 +38,8 @@
|
|||||||
#include <aqbanking/jobsingletransfer.h>
|
#include <aqbanking/jobsingletransfer.h>
|
||||||
#include <aqbanking/jobsingledebitnote.h>
|
#include <aqbanking/jobsingledebitnote.h>
|
||||||
#include <aqbanking/jobinternaltransfer.h>
|
#include <aqbanking/jobinternaltransfer.h>
|
||||||
|
#include <aqbanking/jobsepatransfer.h>
|
||||||
|
#include <aqbanking/jobsepadebitnote.h>
|
||||||
|
|
||||||
#include "dialog-ab-trans.h"
|
#include "dialog-ab-trans.h"
|
||||||
#include "dialog-transfer.h"
|
#include "dialog-transfer.h"
|
||||||
@ -143,6 +145,18 @@ struct _GncABTransDialog
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gboolean gnc_ab_trans_isSEPA(GncABTransType t)
|
||||||
|
{
|
||||||
|
switch (t)
|
||||||
|
{
|
||||||
|
case SEPA_TRANSFER:
|
||||||
|
case SEPA_DEBITNOTE:
|
||||||
|
return TRUE;
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnc_ab_trans_dialog_fill_templ_helper(gpointer data, gpointer user_data)
|
gnc_ab_trans_dialog_fill_templ_helper(gpointer data, gpointer user_data)
|
||||||
{
|
{
|
||||||
@ -174,10 +188,20 @@ gnc_ab_trans_dialog_fill_values(GncABTransDialog *td)
|
|||||||
trans, AB_Account_GetAccountNumber(td->ab_acc));
|
trans, AB_Account_GetAccountNumber(td->ab_acc));
|
||||||
AB_Transaction_SetLocalCountry(trans, "DE");
|
AB_Transaction_SetLocalCountry(trans, "DE");
|
||||||
|
|
||||||
AB_Transaction_SetRemoteBankCode(
|
if (gnc_ab_trans_isSEPA(td->trans_type))
|
||||||
trans, gtk_entry_get_text(GTK_ENTRY(td->recp_bankcode_entry)));
|
{
|
||||||
AB_Transaction_SetRemoteAccountNumber(
|
AB_Transaction_SetRemoteBic(
|
||||||
trans, gtk_entry_get_text(GTK_ENTRY(td->recp_account_entry)));
|
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_SetRemoteCountry(trans, "DE");
|
||||||
AB_Transaction_AddRemoteName(
|
AB_Transaction_AddRemoteName(
|
||||||
trans, gtk_entry_get_text(GTK_ENTRY(td->recp_name_entry)), FALSE);
|
trans, gtk_entry_get_text(GTK_ENTRY(td->recp_name_entry)), FALSE);
|
||||||
@ -315,9 +339,11 @@ gnc_ab_trans_dialog_new(GtkWidget *parent, AB_ACCOUNT *ab_acc,
|
|||||||
{
|
{
|
||||||
case SINGLE_TRANSFER:
|
case SINGLE_TRANSFER:
|
||||||
case SINGLE_INTERNAL_TRANSFER:
|
case SINGLE_INTERNAL_TRANSFER:
|
||||||
|
case SEPA_TRANSFER:
|
||||||
/* all labels are already set */
|
/* all labels are already set */
|
||||||
break;
|
break;
|
||||||
case SINGLE_DEBITNOTE:
|
case SINGLE_DEBITNOTE:
|
||||||
|
case SEPA_DEBITNOTE:
|
||||||
gtk_label_set_text(GTK_LABEL (heading_label),
|
gtk_label_set_text(GTK_LABEL (heading_label),
|
||||||
/* Translators: Strings from this file are
|
/* Translators: Strings from this file are
|
||||||
* needed only in countries that have one of
|
* needed only in countries that have one of
|
||||||
@ -352,6 +378,26 @@ gnc_ab_trans_dialog_new(GtkWidget *parent, AB_ACCOUNT *ab_acc,
|
|||||||
break;
|
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_name_label), ab_ownername);
|
||||||
gtk_label_set_text(GTK_LABEL(orig_account_label), ab_accountnumber);
|
gtk_label_set_text(GTK_LABEL(orig_account_label), ab_accountnumber);
|
||||||
gtk_label_set_text(GTK_LABEL(orig_bankname_label), ab_bankname);
|
gtk_label_set_text(GTK_LABEL(orig_bankname_label), ab_bankname);
|
||||||
@ -407,6 +453,13 @@ gnc_ab_trans_dialog_check_ktoblzcheck(const GncABTransDialog *td,
|
|||||||
|
|
||||||
ENTER(" ");
|
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(
|
blzresult = AccountNumberCheck_check(
|
||||||
td->blzcheck,
|
td->blzcheck,
|
||||||
AB_Transaction_GetRemoteBankCode(trans),
|
AB_Transaction_GetRemoteBankCode(trans),
|
||||||
@ -718,6 +771,12 @@ gnc_ab_trans_dialog_get_available_empty_job(AB_ACCOUNT *ab_acc, GncABTransType t
|
|||||||
case SINGLE_INTERNAL_TRANSFER:
|
case SINGLE_INTERNAL_TRANSFER:
|
||||||
job = AB_JobInternalTransfer_new(ab_acc);
|
job = AB_JobInternalTransfer_new(ab_acc);
|
||||||
break;
|
break;
|
||||||
|
case SEPA_TRANSFER:
|
||||||
|
job = AB_JobSepaTransfer_new(ab_acc);
|
||||||
|
break;
|
||||||
|
case SEPA_DEBITNOTE:
|
||||||
|
job = AB_JobSepaDebitNote_new(ab_acc);
|
||||||
|
break;
|
||||||
case SINGLE_TRANSFER:
|
case SINGLE_TRANSFER:
|
||||||
default:
|
default:
|
||||||
job = AB_JobSingleTransfer_new(ab_acc);
|
job = AB_JobSingleTransfer_new(ab_acc);
|
||||||
@ -762,6 +821,12 @@ gnc_ab_get_trans_job(AB_ACCOUNT *ab_acc, const AB_TRANSACTION *ab_trans,
|
|||||||
case SINGLE_INTERNAL_TRANSFER:
|
case SINGLE_INTERNAL_TRANSFER:
|
||||||
AB_JobInternalTransfer_SetTransaction(job, ab_trans);
|
AB_JobInternalTransfer_SetTransaction(job, ab_trans);
|
||||||
break;
|
break;
|
||||||
|
case SEPA_TRANSFER:
|
||||||
|
AB_JobSepaTransfer_SetTransaction(job, ab_trans);
|
||||||
|
break;
|
||||||
|
case SEPA_DEBITNOTE:
|
||||||
|
AB_JobSepaDebitNote_SetTransaction(job, ab_trans);
|
||||||
|
break;
|
||||||
case SINGLE_TRANSFER:
|
case SINGLE_TRANSFER:
|
||||||
default:
|
default:
|
||||||
AB_JobSingleTransfer_SetTransaction(job, ab_trans);
|
AB_JobSingleTransfer_SetTransaction(job, ab_trans);
|
||||||
|
@ -53,7 +53,14 @@ enum _GncABTransType
|
|||||||
SINGLE_TRANSFER = 0,
|
SINGLE_TRANSFER = 0,
|
||||||
SINGLE_DEBITNOTE,
|
SINGLE_DEBITNOTE,
|
||||||
SINGLE_INTERNAL_TRANSFER
|
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
|
* Create a new AqBanking transfer dialog
|
||||||
|
@ -213,6 +213,16 @@ gnc_ab_maketrans(GtkWidget *parent, Account *gnc_acc,
|
|||||||
xfer_dialog, _("Online Banking Bank-Internal Transfer"));
|
xfer_dialog, _("Online Banking Bank-Internal Transfer"));
|
||||||
gnc_xfer_dialog_lock_from_account_tree(xfer_dialog);
|
gnc_xfer_dialog_lock_from_account_tree(xfer_dialog);
|
||||||
break;
|
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:
|
case SINGLE_TRANSFER:
|
||||||
default:
|
default:
|
||||||
gnc_xfer_dialog_set_title(
|
gnc_xfer_dialog_set_title(
|
||||||
|
@ -623,10 +623,12 @@ txn_transaction_cb(const AB_TRANSACTION *element, gpointer user_data)
|
|||||||
case AB_Transaction_TypeDebitNote:
|
case AB_Transaction_TypeDebitNote:
|
||||||
trans_type = SINGLE_DEBITNOTE;
|
trans_type = SINGLE_DEBITNOTE;
|
||||||
break;
|
break;
|
||||||
|
case AB_Transaction_TypeEuTransfer:
|
||||||
|
trans_type = SEPA_TRANSFER;
|
||||||
|
break;
|
||||||
case AB_Transaction_TypeTransaction:
|
case AB_Transaction_TypeTransaction:
|
||||||
/* trans_type = SINGLE_INTERNAL_TRANSFER;
|
/* trans_type = SINGLE_INTERNAL_TRANSFER;
|
||||||
* break; */
|
* break; */
|
||||||
case AB_Transaction_TypeEuTransfer:
|
|
||||||
case AB_Transaction_TypeTransfer:
|
case AB_Transaction_TypeTransfer:
|
||||||
default:
|
default:
|
||||||
trans_type = SINGLE_TRANSFER;
|
trans_type = SINGLE_TRANSFER;
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
<menuitem name="ABGetTrans" action="ABGetTransAction"/>
|
<menuitem name="ABGetTrans" action="ABGetTransAction"/>
|
||||||
<separator name="OnlineActionsSep1"/>
|
<separator name="OnlineActionsSep1"/>
|
||||||
<menuitem name="ABIssueTrans" action="ABIssueTransAction"/>
|
<menuitem name="ABIssueTrans" action="ABIssueTransAction"/>
|
||||||
|
<menuitem name="ABIssueSepaTrans" action="ABIssueSepaTransAction"/>
|
||||||
<menuitem name="ABIssueIntTrans" action="ABIssueIntTransAction"/>
|
<menuitem name="ABIssueIntTrans" action="ABIssueIntTransAction"/>
|
||||||
<menuitem name="ABIssueDirectDebit" action="ABIssueDirectDebitAction"/>
|
<menuitem name="ABIssueDirectDebit" action="ABIssueDirectDebitAction"/>
|
||||||
<separator name="OnlineActionsSep2"/>
|
<separator name="OnlineActionsSep2"/>
|
||||||
|
@ -71,6 +71,7 @@ static void gnc_plugin_ab_cmd_setup(GtkAction *action, GncMainWindowActionData *
|
|||||||
static void gnc_plugin_ab_cmd_get_balance(GtkAction *action, GncMainWindowActionData *data);
|
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_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_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_inttransaction(GtkAction *action, GncMainWindowActionData *data);
|
||||||
static void gnc_plugin_ab_cmd_issue_direct_debit(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);
|
static void gnc_plugin_ab_cmd_view_logwindow(GtkToggleAction *action, GncMainWindow *window);
|
||||||
@ -111,6 +112,11 @@ static GtkActionEntry gnc_plugin_actions [] =
|
|||||||
N_("Issue a new transaction online through Online Banking"),
|
N_("Issue a new transaction online through Online Banking"),
|
||||||
G_CALLBACK(gnc_plugin_ab_cmd_issue_transaction)
|
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,
|
"ABIssueIntTransAction", NULL, N_("I_nternal Transaction..."), NULL,
|
||||||
N_("Issue a new bank-internal transaction online through Online Banking"),
|
N_("Issue a new bank-internal transaction online through Online Banking"),
|
||||||
@ -534,6 +540,27 @@ gnc_plugin_ab_cmd_issue_transaction(GtkAction *action,
|
|||||||
LEAVE(" ");
|
LEAVE(" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
static void
|
||||||
gnc_plugin_ab_cmd_issue_inttransaction(GtkAction *action,
|
gnc_plugin_ab_cmd_issue_inttransaction(GtkAction *action,
|
||||||
GncMainWindowActionData *data)
|
GncMainWindowActionData *data)
|
||||||
|
Loading…
Reference in New Issue
Block a user