|
GnuCash 2.4.99
|
00001 /* 00002 * gnc-plugin-aqbanking.c -- 00003 * 00004 * This program is free software; you can redistribute it and/or 00005 * modify it under the terms of the GNU General Public License as 00006 * published by the Free Software Foundation; either version 2 of 00007 * the License, or (at your option) any later version. 00008 * 00009 * This program is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with this program; if not, contact: 00016 * 00017 * Free Software Foundation Voice: +1-617-542-5942 00018 * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 00019 * Boston, MA 02110-1301, USA gnu@gnu.org 00020 */ 00021 00031 #include "config.h" 00032 00033 #include <glib/gi18n.h> 00034 00035 #include "Account.h" 00036 #include "dialog-ab-trans.h" 00037 #include "assistant-ab-initial.h" 00038 #include "gnc-ab-getbalance.h" 00039 #include "gnc-ab-gettrans.h" 00040 #include "gnc-ab-transfer.h" 00041 #include "gnc-ab-utils.h" 00042 #include "gnc-ab-kvp.h" 00043 #include "gnc-gwen-gui.h" 00044 #include "gnc-file-aqb-import.h" 00045 #include "gnc-gconf-utils.h" 00046 #include "gnc-plugin-aqbanking.h" 00047 #include "gnc-plugin-manager.h" 00048 #include "gnc-plugin-page-account-tree.h" 00049 #include "gnc-plugin-page-register.h" 00050 #include "gnc-main-window.h" 00051 #include "gnc-ui-util.h" // for gnc_get_current_book 00052 00053 /* This static indicates the debugging module that this .o belongs to. */ 00054 static QofLogModule log_module = G_LOG_DOMAIN; 00055 00056 static void gnc_plugin_aqbanking_class_init(GncPluginAqBankingClass *klass); 00057 static void gnc_plugin_aqbanking_init(GncPluginAqBanking *plugin); 00058 static void gnc_plugin_aqbanking_add_to_window(GncPlugin *plugin, GncMainWindow *window, GQuark type); 00059 static void gnc_plugin_aqbanking_remove_from_window(GncPlugin *plugin, GncMainWindow *window, GQuark type); 00060 00061 /* Object callbacks */ 00062 static void gnc_plugin_ab_main_window_page_added(GncMainWindow *window, GncPluginPage *page, gpointer user_data); 00063 static void gnc_plugin_ab_main_window_page_changed(GncMainWindow *window, GncPluginPage *page, gpointer user_data); 00064 static void gnc_plugin_ab_account_selected(GncPluginPage *plugin_page, Account *account, gpointer user_data); 00065 00066 /* Auxiliary functions */ 00067 static Account *main_window_to_account(GncMainWindow *window); 00068 00069 /* Command callbacks */ 00070 static void gnc_plugin_ab_cmd_setup(GtkAction *action, GncMainWindowActionData *data); 00071 static void gnc_plugin_ab_cmd_get_balance(GtkAction *action, GncMainWindowActionData *data); 00072 static void gnc_plugin_ab_cmd_get_transactions(GtkAction *action, GncMainWindowActionData *data); 00073 static void gnc_plugin_ab_cmd_issue_transaction(GtkAction *action, GncMainWindowActionData *data); 00074 static void gnc_plugin_ab_cmd_issue_inttransaction(GtkAction *action, GncMainWindowActionData *data); 00075 static void gnc_plugin_ab_cmd_issue_direct_debit(GtkAction *action, GncMainWindowActionData *data); 00076 static void gnc_plugin_ab_cmd_view_logwindow(GtkToggleAction *action, GncMainWindow *window); 00077 static void gnc_plugin_ab_cmd_mt940_import(GtkAction *action, GncMainWindowActionData *data); 00078 static void gnc_plugin_ab_cmd_mt942_import(GtkAction *action, GncMainWindowActionData *data); 00079 static void gnc_plugin_ab_cmd_dtaus_import(GtkAction *action, GncMainWindowActionData *data); 00080 static void gnc_plugin_ab_cmd_dtaus_importsend(GtkAction *action, GncMainWindowActionData *data); 00081 00082 #define PLUGIN_ACTIONS_NAME "gnc-plugin-aqbanking-actions" 00083 #define PLUGIN_UI_FILENAME "gnc-plugin-aqbanking-ui.xml" 00084 00085 #define MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW "ABViewLogwindowAction" 00086 00087 00088 static GtkActionEntry gnc_plugin_actions [] = 00089 { 00090 /* Menus */ 00091 { "OnlineActionsAction", NULL, N_("_Online Actions"), NULL, NULL, NULL }, 00092 00093 /* Menu Items */ 00094 { 00095 "ABSetupAction", NULL, N_("_Online Banking Setup..."), NULL, 00096 N_("Initial setup of Online Banking access (HBCI, or OFX DirectConnect, using AqBanking)"), 00097 G_CALLBACK(gnc_plugin_ab_cmd_setup) 00098 }, 00099 { 00100 "ABGetBalanceAction", NULL, N_("Get _Balance"), NULL, 00101 N_("Get the account balance online through Online Banking"), 00102 G_CALLBACK(gnc_plugin_ab_cmd_get_balance) 00103 }, 00104 { 00105 "ABGetTransAction", NULL, N_("Get _Transactions..."), NULL, 00106 N_("Get the transactions online through Online Banking"), 00107 G_CALLBACK(gnc_plugin_ab_cmd_get_transactions) 00108 }, 00109 { 00110 "ABIssueTransAction", NULL, N_("_Issue Transaction..."), NULL, 00111 N_("Issue a new transaction online through Online Banking"), 00112 G_CALLBACK(gnc_plugin_ab_cmd_issue_transaction) 00113 }, 00114 { 00115 "ABIssueIntTransAction", NULL, N_("I_nternal Transaction..."), NULL, 00116 N_("Issue a new bank-internal transaction online through Online Banking"), 00117 G_CALLBACK(gnc_plugin_ab_cmd_issue_inttransaction) 00118 }, 00119 { 00120 "ABIssueDirectDebitAction", NULL, N_("_Direct Debit..."), NULL, 00121 N_("Issue a new direct debit note online through Online Banking"), 00122 G_CALLBACK(gnc_plugin_ab_cmd_issue_direct_debit) 00123 }, 00124 00125 /* File -> Import menu item */ 00126 { 00127 "Mt940ImportAction", GTK_STOCK_CONVERT, N_("Import _MT940"), NULL, 00128 N_("Import a MT940 file into GnuCash"), 00129 G_CALLBACK(gnc_plugin_ab_cmd_mt940_import) 00130 }, 00131 { 00132 "Mt942ImportAction", GTK_STOCK_CONVERT, N_("Import MT94_2"), NULL, 00133 N_("Import a MT942 file into GnuCash"), 00134 G_CALLBACK(gnc_plugin_ab_cmd_mt942_import) 00135 }, 00136 { 00137 "DtausImportAction", GTK_STOCK_CONVERT, N_("Import _DTAUS"), NULL, 00138 N_("Import a DTAUS file into GnuCash"), 00139 G_CALLBACK(gnc_plugin_ab_cmd_dtaus_import) 00140 }, 00141 /* #ifdef CSV_IMPORT_FUNCTIONAL */ 00142 /* { "CsvImportAction", GTK_STOCK_CONVERT, N_("Import _CSV"), NULL, */ 00143 /* N_("Import a CSV file into GnuCash"), */ 00144 /* G_CALLBACK(gnc_plugin_ab_cmd_csv_import) }, */ 00145 /* { "CsvImportSendAction", GTK_STOCK_CONVERT, N_("Import CSV and s_end..."), NULL, */ 00146 /* N_("Import a CSV file into GnuCash and send the transfers online through Online Banking"), */ 00147 /* G_CALLBACK(gnc_plugin_ab_cmd_csv_importsend) }, */ 00148 /* #endif */ 00149 { 00150 "DtausImportSendAction", GTK_STOCK_CONVERT, N_("Import DTAUS and _send..."), NULL, 00151 N_("Import a DTAUS file into GnuCash and send the transfers online through Online Banking"), 00152 G_CALLBACK(gnc_plugin_ab_cmd_dtaus_importsend) 00153 }, 00154 }; 00155 static guint gnc_plugin_n_actions = G_N_ELEMENTS(gnc_plugin_actions); 00156 00157 static GtkToggleActionEntry gnc_plugin_toggle_actions [] = 00158 { 00159 { 00160 MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW, NULL, 00161 N_("Show _log window"), NULL, 00162 N_("Show the online banking log window."), 00163 G_CALLBACK(gnc_plugin_ab_cmd_view_logwindow), TRUE 00164 }, 00165 }; 00166 static guint gnc_plugin_n_toggle_actions = G_N_ELEMENTS(gnc_plugin_toggle_actions); 00167 00168 static const gchar *need_account_actions[] = 00169 { 00170 "ABGetBalanceAction", 00171 "ABGetTransAction", 00172 "ABIssueTransAction", 00173 "ABIssueIntTransAction", 00174 "ABIssueDirectDebitAction", 00175 NULL 00176 }; 00177 00178 static const gchar *readonly_inactive_actions[] = 00179 { 00180 "OnlineActionsAction", 00181 "ABSetupAction", 00182 NULL 00183 }; 00184 00185 static GncMainWindow *gnc_main_window = NULL; 00186 00187 /************************************************************ 00188 * Object Implementation * 00189 ************************************************************/ 00190 00191 G_DEFINE_TYPE(GncPluginAqBanking, gnc_plugin_aqbanking, GNC_TYPE_PLUGIN) 00192 00193 GncPlugin * 00194 gnc_plugin_aqbanking_new(void) 00195 { 00196 return GNC_PLUGIN(g_object_new(GNC_TYPE_PLUGIN_AQBANKING, (gchar*) NULL)); 00197 } 00198 00199 static void 00200 gnc_plugin_aqbanking_class_init(GncPluginAqBankingClass *klass) 00201 { 00202 GncPluginClass *plugin_class = GNC_PLUGIN_CLASS(klass); 00203 00204 /* plugin info */ 00205 plugin_class->plugin_name = GNC_PLUGIN_AQBANKING_NAME; 00206 00207 /* widget addition/removal */ 00208 plugin_class->actions_name = PLUGIN_ACTIONS_NAME; 00209 plugin_class->actions = gnc_plugin_actions; 00210 plugin_class->n_actions = gnc_plugin_n_actions; 00211 plugin_class->toggle_actions = gnc_plugin_toggle_actions; 00212 plugin_class->n_toggle_actions = gnc_plugin_n_toggle_actions; 00213 plugin_class->ui_filename = PLUGIN_UI_FILENAME; 00214 plugin_class->add_to_window = gnc_plugin_aqbanking_add_to_window; 00215 plugin_class->remove_from_window = gnc_plugin_aqbanking_remove_from_window; 00216 } 00217 00218 static void 00219 gnc_plugin_aqbanking_init(GncPluginAqBanking *plugin) 00220 { 00221 } 00222 00227 static void 00228 gnc_plugin_aqbanking_add_to_window(GncPlugin *plugin, GncMainWindow *window, 00229 GQuark type) 00230 { 00231 GtkAction *action; 00232 00233 gnc_main_window = window; 00234 00235 g_signal_connect(window, "page_added", 00236 G_CALLBACK(gnc_plugin_ab_main_window_page_added), 00237 plugin); 00238 g_signal_connect(window, "page_changed", 00239 G_CALLBACK(gnc_plugin_ab_main_window_page_changed), 00240 plugin); 00241 00242 action = gnc_main_window_find_action(window, MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW); 00243 00244 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), FALSE); 00245 } 00246 00247 static void 00248 gnc_plugin_aqbanking_remove_from_window(GncPlugin *plugin, GncMainWindow *window, 00249 GQuark type) 00250 { 00251 g_signal_handlers_disconnect_by_func( 00252 window, G_CALLBACK(gnc_plugin_ab_main_window_page_changed), plugin); 00253 g_signal_handlers_disconnect_by_func( 00254 window, G_CALLBACK(gnc_plugin_ab_main_window_page_added), plugin); 00255 } 00256 00257 /************************************************************ 00258 * Object Callbacks * 00259 ************************************************************/ 00260 00265 static void 00266 gnc_plugin_ab_main_window_page_added(GncMainWindow *window, GncPluginPage *page, 00267 gpointer user_data) 00268 { 00269 const gchar *page_name; 00270 00271 ENTER("main window %p, page %p", window, page); 00272 if (!GNC_IS_PLUGIN_PAGE(page)) 00273 { 00274 LEAVE("no plugin_page"); 00275 return; 00276 } 00277 00278 page_name = gnc_plugin_page_get_plugin_name(page); 00279 if (!page_name) 00280 { 00281 LEAVE("no page_name of plugin_page"); 00282 return; 00283 } 00284 00285 if (strcmp(page_name, GNC_PLUGIN_PAGE_ACCOUNT_TREE_NAME) == 0) 00286 { 00287 DEBUG("account tree page, adding signal"); 00288 g_signal_connect(page, "account_selected", 00289 G_CALLBACK(gnc_plugin_ab_account_selected), NULL); 00290 } 00291 00292 gnc_plugin_ab_main_window_page_changed(window, page, user_data); 00293 00294 LEAVE(" "); 00295 } 00296 00299 static void update_inactive_actions(GncPluginPage *plugin_page) 00300 { 00301 GncMainWindow *window; 00302 GtkActionGroup *action_group; 00303 00304 // We are readonly - so we have to switch particular actions to inactive. 00305 gboolean is_readwrite = !qof_book_is_readonly(gnc_get_current_book()); 00306 00307 // We continue only if the current page is a plugin page 00308 if (!plugin_page || !GNC_IS_PLUGIN_PAGE(plugin_page)) 00309 return; 00310 00311 window = GNC_MAIN_WINDOW(plugin_page->window); 00312 g_return_if_fail(GNC_IS_MAIN_WINDOW(window)); 00313 action_group = gnc_main_window_get_action_group(window, PLUGIN_ACTIONS_NAME); 00314 g_return_if_fail(GTK_IS_ACTION_GROUP(action_group)); 00315 00316 /* Set the action's sensitivity */ 00317 gnc_plugin_update_actions (action_group, readonly_inactive_actions, 00318 "sensitive", is_readwrite); 00319 } 00320 00321 00326 static void 00327 gnc_plugin_ab_main_window_page_changed(GncMainWindow *window, 00328 GncPluginPage *page, gpointer user_data) 00329 { 00330 Account *account = main_window_to_account(window); 00331 00332 /* Make sure not to call this with a NULL GncPluginPage */ 00333 if (page) 00334 { 00335 // Update the menu items according to the selected account 00336 gnc_plugin_ab_account_selected(page, account, user_data); 00337 00338 // Also update the action sensitivity due to read-only 00339 update_inactive_actions(page); 00340 } 00341 } 00342 00347 static void 00348 gnc_plugin_ab_account_selected(GncPluginPage *plugin_page, Account *account, 00349 gpointer user_data) 00350 { 00351 GncMainWindow *window; 00352 GtkActionGroup *action_group; 00353 const gchar *bankcode = NULL; 00354 const gchar *accountid = NULL; 00355 00356 g_return_if_fail(GNC_IS_PLUGIN_PAGE(plugin_page)); 00357 window = GNC_MAIN_WINDOW(plugin_page->window); 00358 g_return_if_fail(GNC_IS_MAIN_WINDOW(window)); 00359 action_group = gnc_main_window_get_action_group(window, PLUGIN_ACTIONS_NAME); 00360 g_return_if_fail(GTK_IS_ACTION_GROUP(action_group)); 00361 00362 if (account) 00363 { 00364 bankcode = gnc_ab_get_account_bankcode(account); 00365 accountid = gnc_ab_get_account_accountid(account); 00366 00367 gnc_plugin_update_actions(action_group, need_account_actions, 00368 "sensitive", 00369 (account && bankcode && *bankcode 00370 && accountid && *accountid)); 00371 gnc_plugin_update_actions(action_group, need_account_actions, 00372 "visible", TRUE); 00373 } 00374 else 00375 { 00376 gnc_plugin_update_actions(action_group, need_account_actions, 00377 "sensitive", FALSE); 00378 gnc_plugin_update_actions(action_group, need_account_actions, 00379 "visible", FALSE); 00380 } 00381 00382 } 00383 00384 /************************************************************ 00385 * Auxiliary Functions * 00386 ************************************************************/ 00387 00399 static Account * 00400 main_window_to_account(GncMainWindow *window) 00401 { 00402 GncPluginPage *page; 00403 const gchar *page_name; 00404 Account *account = NULL; 00405 const gchar *account_name; 00406 00407 ENTER("main window %p", window); 00408 if (!GNC_IS_MAIN_WINDOW(window)) 00409 { 00410 LEAVE("no main_window"); 00411 return NULL; 00412 } 00413 00414 page = gnc_main_window_get_current_page(window); 00415 if (!GNC_IS_PLUGIN_PAGE(page)) 00416 { 00417 LEAVE("no plugin_page"); 00418 return NULL; 00419 } 00420 page_name = gnc_plugin_page_get_plugin_name(page); 00421 if (!page_name) 00422 { 00423 LEAVE("no page_name of plugin_page"); 00424 return NULL; 00425 } 00426 00427 if (strcmp(page_name, GNC_PLUGIN_PAGE_REGISTER_NAME) == 0) 00428 { 00429 DEBUG("register page"); 00430 account = gnc_plugin_page_register_get_account( 00431 GNC_PLUGIN_PAGE_REGISTER(page)); 00432 } 00433 else if (strcmp(page_name, GNC_PLUGIN_PAGE_ACCOUNT_TREE_NAME) == 0) 00434 { 00435 DEBUG("account tree page"); 00436 account = gnc_plugin_page_account_tree_get_current_account( 00437 GNC_PLUGIN_PAGE_ACCOUNT_TREE(page)); 00438 } 00439 else 00440 { 00441 account = NULL; 00442 } 00443 account_name = account ? xaccAccountGetName(account) : NULL; 00444 LEAVE("account %s(%p)", account_name ? account_name : "(null)", account); 00445 return account; 00446 } 00447 00448 void 00449 gnc_plugin_aqbanking_set_logwindow_visible(gboolean logwindow_visible) 00450 { 00451 GtkAction *action; 00452 00453 action = gnc_main_window_find_action(gnc_main_window, 00454 MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW); 00455 if (action) 00456 { 00457 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), 00458 logwindow_visible); 00459 } 00460 } 00461 00462 /************************************************************ 00463 * Command Callbacks * 00464 ************************************************************/ 00465 00466 static void 00467 gnc_plugin_ab_cmd_setup(GtkAction *action, GncMainWindowActionData *data) 00468 { 00469 ENTER("action %p, main window data %p", action, data); 00470 gnc_ab_initial_assistant(); 00471 LEAVE(" "); 00472 } 00473 00474 static void 00475 gnc_plugin_ab_cmd_get_balance(GtkAction *action, GncMainWindowActionData *data) 00476 { 00477 Account *account; 00478 00479 ENTER("action %p, main window data %p", action, data); 00480 account = main_window_to_account(data->window); 00481 if (account == NULL) 00482 { 00483 g_message("No AqBanking account selected"); 00484 LEAVE("no account"); 00485 return; 00486 } 00487 00488 gnc_ab_getbalance(GTK_WIDGET(data->window), account); 00489 00490 LEAVE(" "); 00491 } 00492 00493 static void 00494 gnc_plugin_ab_cmd_get_transactions(GtkAction *action, 00495 GncMainWindowActionData *data) 00496 { 00497 Account *account; 00498 00499 ENTER("action %p, main window data %p", action, data); 00500 account = main_window_to_account(data->window); 00501 if (account == NULL) 00502 { 00503 g_message("No AqBanking account selected"); 00504 LEAVE("no account"); 00505 return; 00506 } 00507 00508 gnc_ab_gettrans(GTK_WIDGET(data->window), account); 00509 00510 LEAVE(" "); 00511 } 00512 00513 static void 00514 gnc_plugin_ab_cmd_issue_transaction(GtkAction *action, 00515 GncMainWindowActionData *data) 00516 { 00517 Account *account; 00518 00519 ENTER("action %p, main window data %p", action, data); 00520 account = main_window_to_account(data->window); 00521 if (account == NULL) 00522 { 00523 g_message("No AqBanking account selected"); 00524 LEAVE("no account"); 00525 return; 00526 } 00527 00528 gnc_ab_maketrans(GTK_WIDGET(data->window), account, SINGLE_TRANSFER); 00529 00530 LEAVE(" "); 00531 } 00532 00533 static void 00534 gnc_plugin_ab_cmd_issue_inttransaction(GtkAction *action, 00535 GncMainWindowActionData *data) 00536 { 00537 Account *account; 00538 00539 ENTER("action %p, main window data %p", action, data); 00540 account = main_window_to_account(data->window); 00541 if (account == NULL) 00542 { 00543 g_message("No AqBanking account selected"); 00544 LEAVE("no account"); 00545 return; 00546 } 00547 00548 gnc_ab_maketrans(GTK_WIDGET(data->window), account, 00549 SINGLE_INTERNAL_TRANSFER); 00550 00551 LEAVE(" "); 00552 } 00553 00554 static void 00555 gnc_plugin_ab_cmd_issue_direct_debit(GtkAction *action, 00556 GncMainWindowActionData *data) 00557 { 00558 Account *account; 00559 00560 ENTER("action %p, main window data %p", action, data); 00561 account = main_window_to_account(data->window); 00562 if (account == NULL) 00563 { 00564 g_message("No AqBanking account selected"); 00565 LEAVE("no account"); 00566 return; 00567 } 00568 00569 gnc_ab_maketrans(GTK_WIDGET(data->window), account, SINGLE_DEBITNOTE); 00570 00571 LEAVE(" "); 00572 } 00573 00574 static void 00575 gnc_plugin_ab_cmd_view_logwindow(GtkToggleAction *action, GncMainWindow *window) 00576 { 00577 if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action))) 00578 { 00579 if (!gnc_GWEN_Gui_show_dialog()) 00580 { 00581 /* Log window could not be made visible */ 00582 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), FALSE); 00583 } 00584 } 00585 else 00586 { 00587 gnc_GWEN_Gui_hide_dialog(); 00588 } 00589 } 00590 00591 00592 static void 00593 gnc_plugin_ab_cmd_mt940_import(GtkAction *action, GncMainWindowActionData *data) 00594 { 00595 gchar *format = gnc_gconf_get_string(GCONF_SECTION_AQBANKING, 00596 KEY_FORMAT_SWIFT940, NULL); 00597 gnc_file_aqbanking_import("swift", format ? format : "swift-mt940", FALSE); 00598 g_free(format); 00599 } 00600 00601 static void 00602 gnc_plugin_ab_cmd_mt942_import(GtkAction *action, GncMainWindowActionData *data) 00603 { 00604 gchar *format = gnc_gconf_get_string(GCONF_SECTION_AQBANKING, 00605 KEY_FORMAT_SWIFT942, NULL); 00606 gnc_file_aqbanking_import("swift", format ? format : "swift-mt942", FALSE); 00607 g_free(format); 00608 } 00609 00610 static void 00611 gnc_plugin_ab_cmd_dtaus_import(GtkAction *action, GncMainWindowActionData *data) 00612 { 00613 gchar *format = gnc_gconf_get_string(GCONF_SECTION_AQBANKING, 00614 KEY_FORMAT_DTAUS, NULL); 00615 gnc_file_aqbanking_import("dtaus", format ? format : "default", FALSE); 00616 g_free(format); 00617 } 00618 00619 static void 00620 gnc_plugin_ab_cmd_dtaus_importsend(GtkAction *action, 00621 GncMainWindowActionData *data) 00622 { 00623 gchar *format = gnc_gconf_get_string(GCONF_SECTION_AQBANKING, 00624 KEY_FORMAT_DTAUS, NULL); 00625 gnc_file_aqbanking_import("dtaus", format ? format : "default", TRUE); 00626 g_free(format); 00627 } 00628 00629 /************************************************************ 00630 * Plugin Bootstrapping * 00631 ************************************************************/ 00632 00633 void 00634 gnc_plugin_aqbanking_create_plugin(void) 00635 { 00636 GncPlugin *plugin = gnc_plugin_aqbanking_new(); 00637 00638 gnc_plugin_manager_add_plugin(gnc_plugin_manager_get(), plugin); 00639 }
1.7.4