33 #include <glib/gi18n.h> 39 #include "gnc-ab-gettrans.h" 44 #include "gnc-file-aqb-import.h" 56 static void gnc_plugin_aqbanking_add_to_window(GncPlugin *plugin, GncMainWindow *window, GQuark type);
57 static void gnc_plugin_aqbanking_remove_from_window(GncPlugin *plugin, GncMainWindow *window, GQuark type);
60 static void gnc_plugin_ab_main_window_page_added(GncMainWindow *window,
GncPluginPage *page, gpointer user_data);
61 static void gnc_plugin_ab_main_window_page_changed(GncMainWindow *window,
GncPluginPage *page, gpointer user_data);
62 static void gnc_plugin_ab_account_selected(
GncPluginPage *plugin_page,
Account *account, gpointer user_data);
65 static Account *main_window_to_account(GncMainWindow *window);
68 static void gnc_plugin_ab_cmd_setup (GSimpleAction *simple, GVariant *parameter, gpointer user_data);
69 static void gnc_plugin_ab_cmd_get_balance (GSimpleAction *simple, GVariant *parameter, gpointer user_data);
70 static void gnc_plugin_ab_cmd_get_transactions (GSimpleAction *simple, GVariant *parameter, gpointer user_data);
71 static void gnc_plugin_ab_cmd_issue_sepatransaction (GSimpleAction *simple, GVariant *parameter, gpointer user_data);
72 static void gnc_plugin_ab_cmd_issue_sepainternaltransaction (GSimpleAction *simple, GVariant *parameter, gpointer user_data);
73 static void gnc_plugin_ab_cmd_issue_inttransaction (GSimpleAction *simple, GVariant *parameter, gpointer user_data);
74 static void gnc_plugin_ab_cmd_issue_sepa_direct_debit (GSimpleAction *simple, GVariant *parameter, gpointer user_data);
75 static void gnc_plugin_ab_cmd_view_logwindow (GSimpleAction *simple, GVariant *parameter, gpointer user_data);
76 static void gnc_plugin_ab_cmd_aqb_import (GSimpleAction *simple, GVariant *parameter, gpointer user_data);
78 #define PLUGIN_ACTIONS_NAME "gnc-plugin-aqbanking-actions" 79 #define PLUGIN_UI_FILENAME "gnc-plugin-aqbanking.ui" 81 #define MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW "ABViewLogwindowAction" 83 static GActionEntry gnc_plugin_actions [] =
85 {
"OnlineActionsAction", NULL, NULL, NULL, NULL },
86 {
"ABSetupAction", gnc_plugin_ab_cmd_setup, NULL, NULL, NULL },
87 {
"ABGetBalanceAction", gnc_plugin_ab_cmd_get_balance, NULL, NULL, NULL },
88 {
"ABGetTransAction", gnc_plugin_ab_cmd_get_transactions, NULL, NULL, NULL },
89 {
"ABIssueSepaTransAction", gnc_plugin_ab_cmd_issue_sepatransaction, NULL, NULL, NULL },
90 {
"ABIssueSepaIntTransAction", gnc_plugin_ab_cmd_issue_sepainternaltransaction, NULL, NULL, NULL },
91 {
"ABIssueIntTransAction", gnc_plugin_ab_cmd_issue_inttransaction, NULL, NULL, NULL },
92 {
"ABIssueSepaDirectDebitAction", gnc_plugin_ab_cmd_issue_sepa_direct_debit, NULL, NULL, NULL },
93 {
"AQBankingImportAction", gnc_plugin_ab_cmd_aqb_import, NULL, NULL, NULL },
94 { MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW, gnc_plugin_ab_cmd_view_logwindow, NULL,
"true", NULL },
97 static guint gnc_plugin_n_actions = G_N_ELEMENTS(gnc_plugin_actions);
100 static const gchar *gnc_plugin_load_ui_items [] =
104 "ActionsPlaceholder1",
108 static const gchar *need_account_actions[] =
110 "ABGetBalanceAction",
112 "ABIssueSepaTransAction",
113 #if (AQBANKING_VERSION_INT >= 60400) 114 "ABIssueSepaIntTransAction",
116 "ABIssueIntTransAction",
117 "ABIssueSepaDirectDebitAction",
121 #if (AQBANKING_VERSION_INT < 60400) 122 static const gchar *inactive_account_actions[] =
124 "ABIssueSepaIntTransAction",
129 static const gchar *readonly_inactive_actions[] =
131 "OnlineActionsAction",
136 static GncMainWindow *gnc_main_window = NULL;
144 GncPlugin gnc_plugin;
147 G_DEFINE_TYPE(GncPluginAqBanking, gnc_plugin_aqbanking, GNC_TYPE_PLUGIN)
152 return GNC_PLUGIN(g_object_new(GNC_TYPE_PLUGIN_AQBANKING, (gchar*) NULL));
156 gnc_plugin_aqbanking_class_init(GncPluginAqBankingClass *klass)
158 GncPluginClass *plugin_class = GNC_PLUGIN_CLASS(klass);
161 plugin_class->plugin_name = GNC_PLUGIN_AQBANKING_NAME;
165 plugin_class->actions = gnc_plugin_actions;
166 plugin_class->n_actions = gnc_plugin_n_actions;
168 plugin_class->ui_updates = gnc_plugin_load_ui_items;
169 plugin_class->add_to_window = gnc_plugin_aqbanking_add_to_window;
170 plugin_class->remove_from_window = gnc_plugin_aqbanking_remove_from_window;
174 gnc_plugin_aqbanking_init(GncPluginAqBanking *plugin)
183 gnc_plugin_aqbanking_add_to_window(GncPlugin *plugin, GncMainWindow *window,
188 gnc_main_window = window;
190 g_signal_connect (window,
"page_added",
191 G_CALLBACK(gnc_plugin_ab_main_window_page_added),
193 g_signal_connect (window,
"page_changed",
194 G_CALLBACK(gnc_plugin_ab_main_window_page_changed),
198 MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW);
202 GVariant *state = g_action_get_state (G_ACTION(action));
203 g_action_change_state (G_ACTION(action), g_variant_new_boolean (FALSE));
204 g_variant_unref (state);
209 gnc_plugin_aqbanking_remove_from_window(GncPlugin *plugin, GncMainWindow *window,
212 g_signal_handlers_disconnect_by_func(
213 window, G_CALLBACK(gnc_plugin_ab_main_window_page_changed), plugin);
214 g_signal_handlers_disconnect_by_func(
215 window, G_CALLBACK(gnc_plugin_ab_main_window_page_added), plugin);
227 gnc_plugin_ab_main_window_page_added(GncMainWindow *window,
GncPluginPage *page,
230 const gchar *page_name;
232 ENTER(
"main window %p, page %p", window, page);
233 if (!GNC_IS_PLUGIN_PAGE(page))
235 LEAVE(
"no plugin_page");
242 LEAVE(
"no page_name of plugin_page");
246 if (strcmp(page_name, GNC_PLUGIN_PAGE_ACCOUNT_TREE_NAME) == 0)
248 DEBUG(
"account tree page, adding signal");
249 g_signal_connect(page,
"account_selected",
250 G_CALLBACK(gnc_plugin_ab_account_selected), NULL);
253 gnc_plugin_ab_main_window_page_changed(window, page, user_data);
260 static void update_inactive_actions(
GncPluginPage *plugin_page)
262 GncMainWindow *window;
263 GSimpleActionGroup *simple_action_group;
269 if (!plugin_page || !GNC_IS_PLUGIN_PAGE(plugin_page))
272 window = GNC_MAIN_WINDOW(plugin_page->
window);
273 g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
275 g_return_if_fail (G_IS_SIMPLE_ACTION_GROUP(simple_action_group));
288 gnc_plugin_ab_main_window_page_changed (GncMainWindow *window,
291 Account *account = main_window_to_account (window);
297 gnc_plugin_ab_account_selected (page, account, user_data);
300 update_inactive_actions (page);
312 GncMainWindow *window;
313 GSimpleActionGroup *simple_action_group;
314 const gchar *bankcode = NULL;
315 const gchar *accountid = NULL;
317 g_return_if_fail(GNC_IS_PLUGIN_PAGE(plugin_page));
318 window = GNC_MAIN_WINDOW(plugin_page->
window);
319 g_return_if_fail(GNC_IS_MAIN_WINDOW(window));
321 g_return_if_fail (G_IS_SIMPLE_ACTION_GROUP(simple_action_group));
329 (account && bankcode && *bankcode
330 && accountid && *accountid));
334 #if (AQBANKING_VERSION_INT < 60400) 336 inactive_account_actions, FALSE);
344 need_account_actions, FALSE);
367 main_window_to_account(GncMainWindow *window)
370 const gchar *page_name;
372 const gchar *account_name;
374 ENTER(
"main window %p", window);
375 if (!GNC_IS_MAIN_WINDOW(window))
377 LEAVE(
"no main_window");
382 if (!GNC_IS_PLUGIN_PAGE(page))
384 LEAVE(
"no plugin_page");
390 LEAVE(
"no page_name of plugin_page");
394 if (strcmp(page_name, GNC_PLUGIN_PAGE_REGISTER_NAME) == 0)
396 DEBUG(
"register page");
398 GNC_PLUGIN_PAGE_REGISTER(page));
400 else if (strcmp(page_name, GNC_PLUGIN_PAGE_ACCOUNT_TREE_NAME) == 0)
402 DEBUG(
"account tree page");
404 GNC_PLUGIN_PAGE_ACCOUNT_TREE(page));
411 LEAVE(
"account %s(%p)", account_name ? account_name :
"(null)", account);
419 MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW);
423 GVariant *state = g_action_get_state (G_ACTION(action));
424 g_action_change_state (G_ACTION(action), g_variant_new_boolean (logwindow_visible));
425 g_variant_unref (state);
434 gnc_plugin_ab_cmd_setup (GSimpleAction *simple,
439 ENTER(
"action %p, main window data %p", simple, data);
440 gnc_main_window = data->window;
446 gnc_plugin_ab_cmd_get_balance (GSimpleAction *simple,
453 ENTER(
"action %p, main window data %p", simple, data);
454 account = main_window_to_account(data->window);
457 PINFO(
"No AqBanking account selected");
462 gnc_main_window = data->window;
469 gnc_plugin_ab_cmd_get_transactions (GSimpleAction *simple,
476 ENTER(
"action %p, main window data %p", simple, data);
477 account = main_window_to_account(data->window);
480 PINFO(
"No AqBanking account selected");
485 gnc_main_window = data->window;
492 gnc_plugin_ab_cmd_issue_sepatransaction (GSimpleAction *simple,
499 ENTER(
"action %p, main window data %p", simple, data);
500 account = main_window_to_account(data->window);
503 PINFO(
"No AqBanking account selected");
508 gnc_main_window = data->window;
514 #if (AQBANKING_VERSION_INT >= 60400) 516 gnc_plugin_ab_cmd_issue_sepainternaltransaction (GSimpleAction *simple,
523 ENTER(
"action %p, main window data %p", simple, data);
524 account = main_window_to_account(data->window);
527 PINFO(
"No AqBanking account selected");
532 gnc_main_window = data->window;
533 gnc_ab_maketrans(GTK_WIDGET(data->window), account, SEPA_INTERNAL_TRANSFER);
539 gnc_plugin_ab_cmd_issue_sepainternaltransaction (GSimpleAction *simple,
545 ENTER(
"action %p, main window data %p", simple, data);
546 PINFO(
"Sepa Internal Transfer not supported by your aqbanking version!");
547 LEAVE(
"Sepa Internal Transfer not supported!");
552 gnc_plugin_ab_cmd_issue_inttransaction (GSimpleAction *simple,
559 ENTER(
"action %p, main window data %p", simple, data);
560 account = main_window_to_account(data->window);
563 PINFO(
"No AqBanking account selected");
568 gnc_main_window = data->window;
570 SINGLE_INTERNAL_TRANSFER);
576 gnc_plugin_ab_cmd_issue_sepa_direct_debit (GSimpleAction *simple,
583 ENTER(
"action %p, main window data %p", simple, data);
584 account = main_window_to_account(data->window);
587 PINFO(
"No AqBanking account selected");
592 gnc_main_window = data->window;
599 gnc_plugin_ab_cmd_view_logwindow (GSimpleAction *simple,
603 GVariant *state = g_action_get_state (G_ACTION(simple));
604 gboolean toggle = g_variant_get_boolean (state);
605 g_variant_unref (state);
607 gboolean new_toggle = !toggle;
608 g_action_change_state (G_ACTION(simple), g_variant_new_boolean (new_toggle));
615 g_action_change_state (G_ACTION(simple), g_variant_new_boolean (FALSE));
625 gnc_plugin_ab_cmd_aqb_import (GSimpleAction *simple,
630 gnc_main_window = data->window;
Dialog for AqBanking transaction data.
gboolean gnc_GWEN_Gui_show_dialog()
Unhides Online Banking Connection Window (Make log visible)
Account * gnc_plugin_page_account_tree_get_current_account(GncPluginPageAccountTree *page)
Given a pointer to an account tree plugin page, return the selected account (if any).
The instance data structure for a content plugin.
utility functions for the GnuCash UI
#define G_LOG_DOMAIN
Functions providing the SX List as a plugin page.
#define PINFO(format, args...)
Print an informational note.
void gnc_main_window_set_vis_of_items_by_action(GncMainWindow *window, const gchar **action_names, gboolean vis)
Show or hide menu and toolbar items based on a NULL terminated list of action names.
AqBanking setup functionality.
#define DEBUG(format, args...)
Print a debugging message.
Plugin management functions for the GnuCash UI.
GtkWidget * window
The window that contains the display widget for this plugin.
void gnc_plugin_manager_add_plugin(GncPluginManager *manager, GncPlugin *plugin)
Add a plugin to the list maintained by the plugin manager.
const gchar * gnc_ab_get_account_bankcode(const Account *a)
Return the bankcode string in the Account a.
#define ENTER(format, args...)
Print a function entry debugging message.
GncPluginPage * gnc_main_window_get_current_page(GncMainWindow *window)
Retrieve a pointer to the page that is currently at the front of the specified window.
Functions for adding content to a window.
AqBanking getbalance functions.
GAction * gnc_main_window_find_action_in_group(GncMainWindow *window, const gchar *group_name, const gchar *action_name)
Find the GAction in a specific action group for window.
Functions providing a register page for the GnuCash UI.
Account handling public routines.
Dialog for AqBanking transaction data.
void gnc_plugin_aqbanking_set_logwindow_visible(gboolean logwindow_visible)
Set MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW.
GncPluginManager * gnc_plugin_manager_get(void)
Retrieve a pointer to the plugin manager.
Generic api to store and retrieve preferences.
Functions providing a chart of account page.
gboolean qof_book_is_readonly(const QofBook *book)
Return whether the book is read only.
Plugin registration of the AqBanking module.
#define PLUGIN_ACTIONS_NAME
The label given to the main window for this plugin.
#define LEAVE(format, args...)
Print a function exit debugging message.
GncPlugin * gnc_plugin_aqbanking_new(void)
Account * gnc_plugin_page_register_get_account(GncPluginPageRegister *page)
Get the Account associated with this register page.
void gnc_ab_initial_assistant(void)
Create and show an assistant for the aqbanking setup.
GSimpleActionGroup * gnc_main_window_get_action_group(GncMainWindow *window, const gchar *group_name)
Retrieve a specific set of user interface actions from a window.
void gnc_plugin_aqbanking_create_plugin(void)
Create a new GncPluginAqBanking object and register it.
const gchar * gnc_ab_get_account_accountid(const Account *a)
Return accountid string in the Account a.
void gnc_file_aqbanking_import_dialog(GtkWindow *parent)
Import files via AQBanking's Import Dialog.
void gnc_ab_getbalance(GtkWidget *parent, Account *gnc_acc)
Execute a GetBalance job, show the resulting balance and offer to reconcile the GnuCash account...
const char * xaccAccountGetName(const Account *acc)
Get the account's name.
GUI callbacks for AqBanking.
void gnc_ab_gettrans(GtkWidget *parent, Account *gnc_acc)
Execute a GetTransactions job.
AqBanking utility functions.
#define PLUGIN_UI_FILENAME
The name of the UI description file for this plugin.
void gnc_GWEN_Gui_hide_dialog()
Hides Online Banking Connection Window (Close log window)
const gchar * gnc_plugin_page_get_plugin_name(GncPluginPage *plugin_page)
Retrieve the textual name of a plugin.
void gnc_ab_maketrans(GtkWidget *parent, Account *gnc_acc, GncABTransType trans_type)
Create SEPA transfers.