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/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 @@ struct _GncABTransDialog
|
||||
#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 @@ gnc_ab_trans_dialog_fill_values(GncABTransDialog *td)
|
||||
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 @@ gnc_ab_trans_dialog_new(GtkWidget *parent, AB_ACCOUNT *ab_acc,
|
||||
{
|
||||
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 @@ gnc_ab_trans_dialog_new(GtkWidget *parent, AB_ACCOUNT *ab_acc,
|
||||
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 @@ gnc_ab_trans_dialog_check_ktoblzcheck(const GncABTransDialog *td,
|
||||
|
||||
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 @@ gnc_ab_trans_dialog_get_available_empty_job(AB_ACCOUNT *ab_acc, GncABTransType t
|
||||
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 @@ gnc_ab_get_trans_job(AB_ACCOUNT *ab_acc, const AB_TRANSACTION *ab_trans,
|
||||
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);
|
||||
|
@ -53,7 +53,14 @@ enum _GncABTransType
|
||||
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
|
||||
|
@ -213,6 +213,16 @@ gnc_ab_maketrans(GtkWidget *parent, Account *gnc_acc,
|
||||
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(
|
||||
|
@ -623,10 +623,12 @@ txn_transaction_cb(const AB_TRANSACTION *element, gpointer user_data)
|
||||
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;
|
||||
|
@ -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"/>
|
||||
|
@ -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_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);
|
||||
@ -111,6 +112,11 @@ static GtkActionEntry gnc_plugin_actions [] =
|
||||
N_("Issue a new transaction online through Online Banking"),
|
||||
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"),
|
||||
@ -534,6 +540,27 @@ gnc_plugin_ab_cmd_issue_transaction(GtkAction *action,
|
||||
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
|
||||
gnc_plugin_ab_cmd_issue_inttransaction(GtkAction *action,
|
||||
GncMainWindowActionData *data)
|
||||
|
Loading…
Reference in New Issue
Block a user