r21383 - gnucash/trunk/src/business/business-gnome - Add right-click menu item "Assign payment" to assign a transaction as a payment.
Christian Stimming
cstim at code.gnucash.org
Fri Oct 7 17:50:14 EDT 2011
Author: cstim
Date: 2011-10-07 17:50:14 -0400 (Fri, 07 Oct 2011)
New Revision: 21383
Trac: http://svn.gnucash.org/trac/changeset/21383
Modified:
gnucash/trunk/src/business/business-gnome/gnc-plugin-business.c
gnucash/trunk/src/business/business-gnome/ui/gnc-plugin-business-ui.xml
Log:
Add right-click menu item "Assign payment" to assign a transaction as a payment.
Feature request as described on
https://gnucash.uservoice.com/forums/101223-feature-request/suggestions/1536285-reassociate-already-existing-transactions-with-a-b?ref=title
Modified: gnucash/trunk/src/business/business-gnome/gnc-plugin-business.c
===================================================================
--- gnucash/trunk/src/business/business-gnome/gnc-plugin-business.c 2011-10-07 21:49:56 UTC (rev 21382)
+++ gnucash/trunk/src/business/business-gnome/gnc-plugin-business.c 2011-10-07 21:50:14 UTC (rev 21383)
@@ -53,6 +53,11 @@
#include "core-utils/gnc-gconf-utils.h"
#include "gnome-utils/gnc-main-window.h"
+#include "gnc-plugin-page-register.h"
+
+/* This static indicates the debugging module that this .o belongs to. */
+static QofLogModule log_module = G_LOG_DOMAIN;
+
/* g_object functions */
static void gnc_plugin_business_class_init (GncPluginBusinessClass *klass);
static void gnc_plugin_business_init (GncPluginBusiness *plugin);
@@ -135,6 +140,8 @@
static void gnc_plugin_business_cmd_test_init_data (GtkAction *action,
GncMainWindowActionData *data);
+static void gnc_plugin_business_cmd_assign_payment (GtkAction *action,
+ GncMainWindowActionData *data);
#define PLUGIN_ACTIONS_NAME "gnc-plugin-business-actions"
#define PLUGIN_UI_FILENAME "gnc-plugin-business-ui.xml"
@@ -323,6 +330,13 @@
N_("Open the New Invoice dialog"),
G_CALLBACK (gnc_plugin_business_cmd_customer_new_invoice)
},
+
+ /* Register popup menu */
+ {
+ "RegisterAssignPayment", NULL, N_("Assign as payment..."), NULL,
+ N_("Assign the selected transaction as payment"),
+ G_CALLBACK (gnc_plugin_business_cmd_assign_payment)
+ },
};
static guint gnc_plugin_n_actions = G_N_ELEMENTS (gnc_plugin_actions);
@@ -858,7 +872,102 @@
gnc_plugin_business_reload_module("gnucash/report/receivable-report.scm");
}
+static void gnc_business_assign_payment (GtkWidget *parent,
+ Transaction *trans,
+ GncOwner *owner)
+{
+ g_return_if_fail(trans);
+
+ // Do nothing if we don't have more than one split (e.g. in the empty line at the end of the register)
+ if (xaccTransCountSplits(trans) <= 1)
+ return;
+
+ //g_message("Creating payment dialog with trans %p", trans);
+ gnc_ui_payment_new_with_txn(owner, trans);
+}
+
+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;
+
+ 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);
+
+ gnc_business_assign_payment (gnc_plugin_page_get_window(plugin_page),
+ trans,
+ plugin_business_priv->last_customer);
+}
+
+static const gchar *register_txn_actions[] =
+{
+ "RegisterAssignPayment",
+ NULL
+};
+
static void
+gnc_plugin_business_update_menus (GncPluginPage *plugin_page)
+{
+ GncMainWindow *window;
+ GtkActionGroup *action_group;
+ gboolean is_txn_register;
+
+ // We continue only if the current page is a plugin page
+ if (!plugin_page || !GNC_IS_PLUGIN_PAGE(plugin_page))
+ return;
+
+ is_txn_register = GNC_IS_PLUGIN_PAGE_REGISTER(plugin_page);
+ window = GNC_MAIN_WINDOW(plugin_page->window);
+ g_return_if_fail(GNC_IS_MAIN_WINDOW(window));
+ action_group = gnc_main_window_get_action_group(window, PLUGIN_ACTIONS_NAME);
+ g_return_if_fail(GTK_IS_ACTION_GROUP(action_group));
+
+ // Change visibility and also sensitivity according to whether we are in a txn register
+ gnc_plugin_update_actions (action_group, register_txn_actions,
+ "sensitive", is_txn_register);
+ gnc_plugin_update_actions (action_group, register_txn_actions,
+ "visible", is_txn_register);
+}
+
+
+static void gnc_plugin_business_main_window_page_changed(GncMainWindow *window,
+ GncPluginPage *page,
+ gpointer user_data)
+{
+// g_message("gnc_plugin_business_main_window_page_changed, page=%p", page);
+ gnc_plugin_business_update_menus(page);
+}
+
+static void
gnc_plugin_business_cmd_test_init_data (GtkAction *action,
GncMainWindowActionData *data)
{
@@ -995,11 +1104,20 @@
}
}
-/* Update the toolbar button visibility each time our plugin is added
+/**
+ * Called when this plugin is added to a main window. Connect a few callbacks
+ * here to track page changes.
+ *
+ * Update the toolbar button visibility each time our plugin is added
* to a new GncMainWindow. */
static void gnc_plugin_business_add_to_window (GncPlugin *plugin,
GncMainWindow *mainwindow,
GQuark type)
{
+// g_message("gnc_plugin_business_add_to_window");
update_extra_toolbuttons(mainwindow);
+
+ g_signal_connect(mainwindow, "page_changed",
+ G_CALLBACK(gnc_plugin_business_main_window_page_changed),
+ plugin);
}
Modified: gnucash/trunk/src/business/business-gnome/ui/gnc-plugin-business-ui.xml
===================================================================
--- gnucash/trunk/src/business/business-gnome/ui/gnc-plugin-business-ui.xml 2011-10-07 21:49:56 UTC (rev 21382)
+++ gnucash/trunk/src/business/business-gnome/ui/gnc-plugin-business-ui.xml 2011-10-07 21:50:14 UTC (rev 21383)
@@ -1,5 +1,11 @@
<ui>
<menubar>
+ <menu name="Edit" action="EditAction">
+ <placeholder name="EditSelectedPlaceholder">
+ <menuitem name="RegisterAssignPayment" action="RegisterAssignPayment"/>
+ </placeholder>
+ </menu>
+
<placeholder name="AdditionalMenusPlaceholder">
<menu name="Business" action="BusinessAction">
<menu name="CustomerMenu" action="CustomerMenuAction">
@@ -66,4 +72,10 @@
</placeholder>
</toolbar>
+ <popup name="MainPopup" action="FakeToplevel">
+ <!--separator name="PopupSep3"/-->
+ <placeholder name="PopupPlaceholder3">
+ <menuitem name="RegisterAssignPayment" action="RegisterAssignPayment"/>
+ </placeholder>
+ </popup>
</ui>
More information about the gnucash-changes
mailing list