static void gnc_plugin_business_cmd_assign_payment (GtkAction *action, GncMainWindowActionData *mw) { GncPluginBusiness *plugin_business; GncPluginBusinessPrivate *plugin_business_priv; GncPluginPage *plugin_page; GNCSplitReg *gsr; SplitRegister *reg; Split *split; Transaction *trans; gboolean have_owner; GncOwner owner; GncOwner *owner_p; g_return_if_fail (mw != NULL); g_return_if_fail (GNC_IS_PLUGIN_BUSINESS (mw->data)); plugin_page = gnc_main_window_get_current_page(mw->window); // We continue only if the current page is a plugin page and more // specifically a register plugin page if (!GNC_IS_PLUGIN_PAGE(plugin_page) || !GNC_IS_PLUGIN_PAGE_REGISTER(plugin_page)) return; gsr = gnc_plugin_page_register_get_gsr(plugin_page); g_return_if_fail(gsr); reg = gnc_ledger_display_get_split_register( gsr->ledger ); g_return_if_fail(reg); split = gnc_split_register_get_current_split(reg); g_return_if_fail(split); trans = xaccSplitGetParent(split); g_return_if_fail(trans); plugin_business = GNC_PLUGIN_BUSINESS (mw->data); plugin_business_priv = GNC_PLUGIN_BUSINESS_GET_PRIVATE (plugin_business); have_owner = gncOwnerGetOwnerFromTxn (trans, &owner); if (have_owner) owner_p = &owner; else if (gnc_ui_payment_is_customer_payment(trans)) owner_p = plugin_business_priv->last_customer; else owner_p = plugin_business_priv->last_vendor; gnc_business_assign_payment (GTK_WINDOW (mw->window), trans, owner_p); }
static gboolean gnc_html_register_url_cb (const char *location, const char *label, gboolean new_window, GNCURLResult *result) { GncPluginPage *page = NULL; GNCSplitReg * gsr = NULL; Split * split = NULL; Account * account = NULL; Transaction * trans; GList * node; QofBook * book = gnc_get_current_book(); GncGUID guid; QofInstance * entity = NULL; g_return_val_if_fail (location != NULL, FALSE); g_return_val_if_fail (result != NULL, FALSE); result->load_to_stream = FALSE; /* href="gnc-register:account=My Bank Account" */ if (strncmp("account=", location, 8) == 0) { account = gnc_account_lookup_by_full_name (gnc_get_current_root_account (), location + 8); } /* href="gnc-register:guid=12345678901234567890123456789012" */ else if (strncmp ("acct-guid=", location, strlen ("acct-guid=")) == 0) { if (!validate_type("acct-guid=", location, GNC_ID_ACCOUNT, result, &guid, &entity)) return FALSE; account = GNC_ACCOUNT(entity); } else if (strncmp ("trans-guid=", location, strlen ("trans-guid=")) == 0) { if (!validate_type("trans-guid=", location, GNC_ID_TRANS, result, &guid, &entity)) return FALSE; trans = (Transaction *) entity; for (node = xaccTransGetSplitList (trans); node; node = node->next) { split = node->data; account = xaccSplitGetAccount(split); if (account) break; } if (!account) { result->error_message = g_strdup_printf (_("Transaction with no Accounts: %s"), location); return FALSE; } } else if (strncmp ("split-guid=", location, strlen ("split-guid=")) == 0) { if (!validate_type("split-guid=", location, GNC_ID_SPLIT, result, &guid, &entity)) return FALSE; split = (Split *) entity; account = xaccSplitGetAccount(split); } else { result->error_message = g_strdup_printf (_("Unsupported entity type: %s"), location); return FALSE; } page = gnc_plugin_page_register_new (account, FALSE); gnc_main_window_open_page (NULL, page); if (split) { gsr = gnc_plugin_page_register_get_gsr(page); gnc_split_reg_jump_to_split( gsr, split ); } return TRUE; }