patch for split accumulation in invoice/bill posting

Daniel Lindenaar d.j.w.lindenaar at student.tue.nl
Tue Sep 21 08:11:22 EDT 2004


Hi all,
Here is a patch implementing a choice for the user wether or not
multiple entrys in an invoice for the same account should be accumulated
into a single split. If not, each entry is given a split of it's own and
the description of the entry is copied to the "memo" of the split.


There are two patches. the one for 1.8.9 was created against the source
debian package, but it fairly simple and should patch the current 1.8
branch.
the one for 1.9.0 is adapted to the latest CVS checkout of HEAD.

The 1.9.0 branch compiles without any problems with the patch. I wasn't
able to test wether it works correctly in this branch, since posting an
invoice (with or without patch) gives the transactions with zero values.
However, the splits are created as expected, but with all 0's. Is this a
known bug?

I am aware of the fact that this includes some GUI changes and that
these should be made into the gnome2 branch, however, I couldn't compile
that branch and don't have the time to look at it right now. When I do
have time I'll look at that.

greetz Daniel

-------------- next part --------------
diff -urw -x 'Make*' gnucash-1.8.9/src/business/business-core/file/gnc-invoice-xml-v2.c mygnucashpatch/src/business/business-core/file/gnc-invoice-xml-v2.c
--- gnucash-1.8.9/src/business/business-core/file/gnc-invoice-xml-v2.c	2003-09-11 19:45:25.000000000 +0200
+++ mygnucashpatch/src/business/business-core/file/gnc-invoice-xml-v2.c	2004-09-20 15:46:51.000000000 +0200
@@ -66,6 +66,7 @@
 #define invoice_billing_id_string "invoice:billing_id"
 #define invoice_notes_string "invoice:notes"
 #define invoice_active_string "invoice:active"
+#define invoice_accumulatesplits_string "invoice:accsplits"
 #define invoice_posttxn_string "invoice:posttxn"
 #define invoice_postlot_string "invoice:postlot"
 #define invoice_postacc_string "invoice:postacc"
@@ -130,6 +131,9 @@
     xmlAddChild(ret, int_to_dom_tree(invoice_active_string,
 				     gncInvoiceGetActive (invoice)));
 
+    xmlAddChild(ret, int_to_dom_tree(invoice_accumulatesplits_string,
+				     gncInvoiceGetAccumulateSplits (invoice)));
+
     txn = gncInvoiceGetPostedTxn (invoice);
     if (txn)
       xmlAddChild (ret, guid_to_dom_tree (invoice_posttxn_string,
@@ -287,6 +291,20 @@
 }
 
 static gboolean
+invoice_accumulatesplits_handler (xmlNodePtr node, gpointer invoice_pdata)
+{
+    struct invoice_pdata *pdata = invoice_pdata;
+    gint64 val;
+    gboolean ret;
+
+    ret = dom_tree_to_integer(node, &val);
+    if (ret)
+      gncInvoiceSetAccumulateSplits(pdata->invoice, (gboolean)val);
+
+    return ret;
+}
+	
+static gboolean
 invoice_terms_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
     struct invoice_pdata *pdata = invoice_pdata;
@@ -416,6 +434,7 @@
     { invoice_billing_id_string, invoice_billing_id_handler, 0, 0 },
     { invoice_notes_string, invoice_notes_handler, 0, 0 },
     { invoice_active_string, invoice_active_handler, 1, 0 },
+    { invoice_accumulatesplits_string, invoice_accumulatesplits_handler, 0, 0 },
     { invoice_terms_string, invoice_terms_handler, 0, 0 },
     { invoice_posttxn_string, invoice_posttxn_handler, 0, 0 },
     { invoice_postlot_string, invoice_postlot_handler, 0, 0 },


diff -urw -x 'Make*' gnucash-1.8.9/src/business/business-core/gncInvoice.c mygnucashpatch/src/business/business-core/gncInvoice.c
--- gnucash-1.8.9/src/business/business-core/gncInvoice.c	2003-07-31 04:03:33.000000000 +0200
+++ mygnucashpatch/src/business/business-core/gncInvoice.c	2004-09-20 17:09:04.000000000 +0200
@@ -53,6 +53,7 @@
   GNCLot *	posted_lot;
 
   gboolean 	active;
+  gboolean	accumulatesplits;
 
   int		editlevel;
   gboolean	do_free;
@@ -110,6 +111,7 @@
 
   invoice->billto.type = GNC_OWNER_CUSTOMER;
   invoice->active = TRUE;
+  invoice->accumulatesplits = TRUE;
 
   invoice->to_charge_amount = gnc_numeric_zero();
 
@@ -240,6 +242,16 @@
   gncInvoiceCommitEdit (invoice);
 }
 
+void gncInvoiceSetAccumulateSplits (GncInvoice *invoice, gboolean accumulate)
+{
+  if (!invoice) return;
+  if (invoice->accumulatesplits == accumulate) return;
+  gncInvoiceBeginEdit (invoice);
+  invoice->accumulatesplits = accumulate;
+  mark_invoice (invoice);
+  gncInvoiceCommitEdit (invoice);
+}
+
 void gncInvoiceSetCurrency (GncInvoice *invoice, gnc_commodity *currency)
 {
   if (!invoice || !currency) return;
@@ -552,6 +564,12 @@
   return invoice->active;
 }
 
+gboolean gncInvoiceGetAccumulateSplits (GncInvoice *invoice)
+{
+  if (!invoice) return FALSE;
+  return invoice->accumulatesplits;
+}
+
 gnc_numeric gncInvoiceGetToChargeAmount (GncInvoice *invoice)
 {
   if (!invoice) return gnc_numeric_zero();
@@ -699,12 +717,15 @@
   GList *splitinfo = NULL;
   gnc_numeric total;
   gboolean reverse;
+  gboolean accumulatesplits;
   const char *name, *type;
   Account *ccard_acct = NULL;
   GncOwner *owner;
 
   if (!invoice || !acc) return NULL;
 
+  accumulatesplits = gncInvoiceGetAccumulateSplits(invoice);
+  
   gncInvoiceBeginEdit (invoice);
 
   /* Stabilize the Billing Terms of this invoice */
@@ -795,7 +816,26 @@
 		gncEntryGetBillAccount (entry));
     if (this_acc) {
       if (gnc_numeric_check (value) == GNC_ERROR_OK) {
-	splitinfo = gncAccountValueAdd (splitinfo, this_acc, value);
+	if (accumulatesplits) {
+	    gncAccountValueAdd (splitinfo, this_acc, value);
+	} else {
+		Split *split;
+		//gncAccountValueAppend (splitinfo, this_acc, value));
+
+		split = xaccMallocSplit (invoice->book);
+		/* set action and memo? */
+
+		xaccSplitSetMemo (split, gncEntryGetDescription (entry));
+		xaccSplitSetAction (split, type);
+
+		xaccSplitSetBaseValue (split, (reverse ? gnc_numeric_neg (value)
+				: value),
+				 invoice->currency);
+        	xaccAccountBeginEdit (this_acc);
+	        xaccAccountInsertSplit (this_acc, split);
+	        xaccAccountCommitEdit (this_acc);
+	        xaccTransAppendSplit (txn, split);
+	}
 
 	/* If there is a credit-card account, and this is a CCard
 	 * payment type, the don't add it to the total, and instead

diff -urw -x 'Make*' gnucash-1.8.9/src/business/business-core/gncInvoice.h mygnucashpatch/src/business/business-core/gncInvoice.h
--- gnucash-1.8.9/src/business/business-core/gncInvoice.h	2003-05-29 18:22:36.000000000 +0200
+++ mygnucashpatch/src/business/business-core/gncInvoice.h	2004-09-20 14:17:53.000000000 +0200
@@ -35,7 +35,7 @@
 void gncInvoiceSetActive (GncInvoice *invoice, gboolean active);
 void gncInvoiceSetBillTo (GncInvoice *invoice, GncOwner *billto);
 void gncInvoiceSetToChargeAmount (GncInvoice *invoice, gnc_numeric amount);
-
+void gncInvoiceSetAccumulateSplits (GncInvoice *invoice, gboolean accumulate);
 void gncInvoiceAddEntry (GncInvoice *invoice, GncEntry *entry);
 void gncInvoiceRemoveEntry (GncInvoice *invoice, GncEntry *entry);
 
@@ -60,6 +60,7 @@
 GncOwner * gncInvoiceGetBillTo (GncInvoice *invoice);
 gnc_numeric gncInvoiceGetToChargeAmount (GncInvoice *invoice);
 gboolean gncInvoiceGetActive (GncInvoice *invoice);
+gboolean gncInvoiceGetAccumulateSplits (GncInvoice *invoice);
 
 GNCLot * gncInvoiceGetPostedLot (GncInvoice *invoice);
 Transaction * gncInvoiceGetPostedTxn (GncInvoice *invoice);
@@ -138,6 +139,7 @@
 #define INVOICE_POST_LOT	"posted_lot"
 #define INVOICE_TYPE	"type"
 #define INVOICE_BILLTO	"bill-to"
+#define INVOICE_ACCUSPLITS "Accumulate_splits?"
 
 #define INVOICE_FROM_LOT	"invoice-from-lot"
 #define INVOICE_FROM_TXN	"invoice-from-txn"

diff -urw -x 'Make*' gnucash-1.8.9/src/business/business-gnome/dialog-invoice.c mygnucashpatch/src/business/business-gnome/dialog-invoice.c
--- gnucash-1.8.9/src/business/business-gnome/dialog-invoice.c	2003-06-16 04:26:03.000000000 +0200
+++ mygnucashpatch/src/business/business-gnome/dialog-invoice.c	2004-09-20 15:56:51.000000000 +0200
@@ -114,6 +114,7 @@
   GtkWidget *	posted_date_hbox;
   GtkWidget *	posted_date;
   GtkWidget *	active_check;
+  GtkWidget *	accumulatesplits_check;
 
   GtkWidget *	owner_box;
   GtkWidget *	owner_label;
@@ -191,6 +192,7 @@
 void gnc_invoice_window_summarybar_cb (GtkWidget *widget, gpointer data);
 
 void gnc_invoice_window_active_toggled_cb (GtkWidget *widget, gpointer data);
+void gnc_invoice_window_accumulatesplits_toggled_cb(GtkWidget *widget, gpointer data);
 void gnc_invoice_window_leave_notes_cb (GtkWidget *widget, GdkEventFocus *event, gpointer data);
 
 #define INV_WIDTH_PREFIX "invoice_reg"
@@ -227,6 +229,10 @@
     gncInvoiceSetActive (invoice, gtk_toggle_button_get_active
 			 (GTK_TOGGLE_BUTTON (iw->active_check)));
 
+  if (iw->accumulatesplits_check)
+    gncInvoiceSetAccumulateSplits (invoice, gtk_toggle_button_get_active
+			 (GTK_TOGGLE_BUTTON (iw->accumulatesplits_check)));
+
   gncInvoiceSetNotes (invoice, gtk_editable_get_chars
 		      (GTK_EDITABLE (iw->notes_text), 0, -1));
 
@@ -887,6 +893,18 @@
 }
 
 void
+gnc_invoice_window_accumulatesplits_toggled_cb (GtkWidget *widget, gpointer data)
+{
+  InvoiceWindow *iw = data;
+  GncInvoice *invoice = iw_get_invoice(iw);
+
+  if (!invoice) return;
+
+  gncInvoiceSetAccumulateSplits (invoice,
+		       gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)));
+}
+
+void
 gnc_invoice_window_leave_notes_cb (GtkWidget *widget, GdkEventFocus *event,
 				   gpointer data)
 {
@@ -1587,6 +1605,10 @@
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (iw->active_check),
 				    gncInvoiceGetActive (invoice));
 
+    if (iw->accumulatesplits_check)
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (iw->accumulatesplits_check),
+				    gncInvoiceGetAccumulateSplits (invoice));
+
     ts = gncInvoiceGetDateOpened (invoice);
     if (timespec_equal (&ts, &ts_zero)) {
       gnc_date_edit_set_time (GNC_DATE_EDIT (iw->opened_date), time(NULL));
@@ -1852,6 +1874,7 @@
   iw->terms_menu = glade_xml_get_widget (xml, "terms_menu");
   iw->notes_text = glade_xml_get_widget (xml, "notes_text");
   iw->active_check = glade_xml_get_widget (xml, "active_check");
+  iw->accumulatesplits_check = glade_xml_get_widget (xml, "accumulatesplits_check");
   iw->owner_box = glade_xml_get_widget (xml, "owner_hbox");
   iw->owner_label = glade_xml_get_widget (xml, "owner_label");
   iw->job_label = glade_xml_get_widget (xml, "job_label");
Only in mygnucashpatch/src/business/business-gnome: g-wrapped
diff -urw -x 'Make*' gnucash-1.8.9/src/business/business-gnome/glade/invoice.glade mygnucashpatch/src/business/business-gnome/glade/invoice.glade
--- gnucash-1.8.9/src/business/business-gnome/glade/invoice.glade	2003-04-01 23:17:32.000000000 +0200
+++ mygnucashpatch/src/business/business-gnome/glade/invoice.glade	2004-09-20 16:23:55.000000000 +0200
@@ -1543,6 +1543,23 @@
 
 	      <widget>
 		<class>GtkLabel</class>
+		<name>label9</name>
+		<label></label>
+		<justify>GTK_JUSTIFY_CENTER</justify>
+		<wrap>False</wrap>
+		<xalign>0.5</xalign>
+		<yalign>0.5</yalign>
+		<xpad>0</xpad>
+		<ypad>0</ypad>
+		<child>
+		  <padding>0</padding>
+		  <expand>False</expand>
+		  <fill>False</fill>
+		</child>
+	      </widget>
+
+	      <widget>
+		<class>GtkLabel</class>
 		<name>hide3</name>
 		<label></label>
 		<justify>GTK_JUSTIFY_CENTER</justify>
@@ -1653,6 +1670,26 @@
 	      </widget>
 
 	      <widget>
+		<class>GtkCheckButton</class>
+		<name>accumulatesplits_check</name>
+		<can_focus>True</can_focus>
+		<signal>
+		  <name>toggled</name>
+		  <handler>gnc_invoice_window_accumulatesplits_toggled_cb</handler>
+		  <data>Invoice Entry Window</data>
+		  <last_modification_time>Mon, 20 Sep 2004 12:47:48 GMT</last_modification_time>
+		</signal>
+		<label>Accumulate Splits</label>
+		<active>False</active>
+		<draw_indicator>True</draw_indicator>
+		<child>
+		  <padding>0</padding>
+		  <expand>False</expand>
+		  <fill>False</fill>
+		</child>
+	      </widget>
+
+	      <widget>
 		<class>GtkLabel</class>
 		<name>hide4</name>
 		<label></label>

-------------- next part --------------
? src/business/business-core/.gncInvoice.h.rej.swp
Index: src/business/business-core/gncInvoice.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/business/business-core/gncInvoice.c,v
retrieving revision 1.92
diff -u -r1.92 gncInvoice.c
--- src/business/business-core/gncInvoice.c	19 Aug 2004 19:47:34 -0000	1.92
+++ src/business/business-core/gncInvoice.c	20 Sep 2004 16:06:49 -0000
@@ -67,6 +67,7 @@
   char *	id;
   char *	notes;
   gboolean 	active;
+  gboolean	accumulatesplits;
 
   char *	billing_id;
   char *	printname;
@@ -134,6 +135,7 @@
 
   invoice->billto.type = GNC_OWNER_CUSTOMER;
   invoice->active = TRUE;
+  invoice->accumulatesplits = TRUE;
 
   invoice->to_charge_amount = gnc_numeric_zero();
 
@@ -317,6 +319,16 @@
   gncInvoiceCommitEdit (invoice);
 }
 
+void gncInvoiceSetAccumulateSplits (GncInvoice *invoice, gboolean accumulate)
+{
+  if (!invoice) return;
+  if (invoice->accumulatesplits == accumulate) return;
+  gncInvoiceBeginEdit (invoice);
+  invoice->accumulatesplits = accumulate;
+  mark_invoice (invoice);
+  gncInvoiceCommitEdit (invoice);
+}
+
 void gncInvoiceSetCurrency (GncInvoice *invoice, gnc_commodity *currency)
 {
   if (!invoice || !currency) return;
@@ -612,6 +624,12 @@
   return invoice->active;
 }
 
+gboolean gncInvoiceGetAccumulateSplits (GncInvoice *invoice)
+{
+  if (!invoice) return FALSE;
+  return invoice->accumulatesplits;
+}
+
 gnc_numeric gncInvoiceGetToChargeAmount (GncInvoice *invoice)
 {
   if (!invoice) return gnc_numeric_zero();
@@ -751,12 +769,15 @@
   gnc_numeric total;
   gboolean reverse;
   const char *name, *type;
+  gboolean accumulatesplits;
   char *lot_title;
   Account *ccard_acct = NULL;
   GncOwner *owner;
 
   if (!invoice || !acc) return NULL;
 
+  accumulatesplits = gncInvoiceGetAccumulateSplits(invoice);
+
   gncInvoiceBeginEdit (invoice);
 
   /* Stabilize the Billing Terms of this invoice */
@@ -853,7 +874,26 @@
 		gncEntryGetBillAccount (entry));
     if (this_acc) {
       if (gnc_numeric_check (value) == GNC_ERROR_OK) {
-	splitinfo = gncAccountValueAdd (splitinfo, this_acc, value);
+	if (accumulatesplits) {
+	    gncAccountValueAdd (splitinfo, this_acc, value);
+	} else {
+		Split *split;
+		//gncAccountValueAppend (splitinfo, this_acc, value));
+
+		split = xaccMallocSplit (invoice->book);
+		/* set action and memo? */
+
+		xaccSplitSetMemo (split, gncEntryGetDescription (entry));
+		xaccSplitSetAction (split, type);
+
+		xaccSplitSetBaseValue (split, (reverse ? gnc_numeric_neg (value)
+				: value),
+				 invoice->currency);
+        	xaccAccountBeginEdit (this_acc);
+	        xaccAccountInsertSplit (this_acc, split);
+	        xaccAccountCommitEdit (this_acc);
+	        xaccTransAppendSplit (txn, split);
+	}
 
 	/* If there is a credit-card account, and this is a CCard
 	 * payment type, the don't add it to the total, and instead
Index: src/business/business-core/gncInvoice.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/business/business-core/gncInvoice.h,v
retrieving revision 1.41
diff -u -r1.41 gncInvoice.h
--- src/business/business-core/gncInvoice.h	7 May 2004 05:11:49 -0000	1.41
+++ src/business/business-core/gncInvoice.h	20 Sep 2004 16:06:49 -0000
@@ -65,6 +65,7 @@
 void gncInvoiceSetActive (GncInvoice *invoice, gboolean active);
 void gncInvoiceSetBillTo (GncInvoice *invoice, GncOwner *billto);
 void gncInvoiceSetToChargeAmount (GncInvoice *invoice, gnc_numeric amount);
+void gncInvoiceSetAccumulateSplits(GncInvoice *invoice, gboolean accumulate);
 /** @} */
 
 void gncInvoiceAddEntry (GncInvoice *invoice, GncEntry *entry);
@@ -89,6 +90,7 @@
 GncOwner * gncInvoiceGetBillTo (GncInvoice *invoice);
 gnc_numeric gncInvoiceGetToChargeAmount (GncInvoice *invoice);
 gboolean gncInvoiceGetActive (GncInvoice *invoice);
+gboolean gncInvoiceGetAccumulateSplits (GncInvoice *invoice);
 
 GNCLot * gncInvoiceGetPostedLot (GncInvoice *invoice);
 Transaction * gncInvoiceGetPostedTxn (GncInvoice *invoice);
@@ -176,6 +178,7 @@
 #define INVOICE_POST_LOT	"posted_lot"
 #define INVOICE_TYPE	"type"
 #define INVOICE_BILLTO	"bill-to"
+#define INVOICE_ACCUSPLITS "Accumulate_splits?"
 
 #define INVOICE_FROM_LOT	"invoice-from-lot"
 #define INVOICE_FROM_TXN	"invoice-from-txn"
Index: src/business/business-core/file/gnc-invoice-xml-v2.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/business/business-core/file/gnc-invoice-xml-v2.c,v
retrieving revision 1.19
diff -u -r1.19 gnc-invoice-xml-v2.c
--- src/business/business-core/file/gnc-invoice-xml-v2.c	19 Oct 2003 05:13:52 -0000	1.19
+++ src/business/business-core/file/gnc-invoice-xml-v2.c	20 Sep 2004 16:06:49 -0000
@@ -67,6 +67,7 @@
 #define invoice_billing_id_string "invoice:billing_id"
 #define invoice_notes_string "invoice:notes"
 #define invoice_active_string "invoice:active"
+#define invoice_accumulatesplits_string "invoice:accsplits"
 #define invoice_posttxn_string "invoice:posttxn"
 #define invoice_postlot_string "invoice:postlot"
 #define invoice_postacc_string "invoice:postacc"
@@ -131,6 +132,9 @@
     xmlAddChild(ret, int_to_dom_tree(invoice_active_string,
 				     gncInvoiceGetActive (invoice)));
 
+    xmlAddChild(ret, int_to_dom_tree(invoice_accumulatesplits_string,
+				     gncInvoiceGetAccumulateSplits (invoice)));
+
     txn = gncInvoiceGetPostedTxn (invoice);
     if (txn)
       xmlAddChild (ret, guid_to_dom_tree (invoice_posttxn_string,
@@ -286,6 +290,20 @@
 }
 
 static gboolean
+invoice_accumulatesplits_handler (xmlNodePtr node, gpointer invoice_pdata)
+{
+    struct invoice_pdata *pdata = invoice_pdata;
+    gint64 val;
+    gboolean ret;
+
+    ret = dom_tree_to_integer(node, &val);
+    if (ret)
+      gncInvoiceSetAccumulateSplits(pdata->invoice, (gboolean)val);
+
+    return ret;
+}
+	
+static gboolean
 invoice_terms_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
     struct invoice_pdata *pdata = invoice_pdata;
@@ -415,6 +433,7 @@
     { invoice_billing_id_string, invoice_billing_id_handler, 0, 0 },
     { invoice_notes_string, invoice_notes_handler, 0, 0 },
     { invoice_active_string, invoice_active_handler, 1, 0 },
+    { invoice_accumulatesplits_string, invoice_accumulatesplits_handler, 0, 0 },
     { invoice_terms_string, invoice_terms_handler, 0, 0 },
     { invoice_posttxn_string, invoice_posttxn_handler, 0, 0 },
     { invoice_postlot_string, invoice_postlot_handler, 0, 0 },
Index: src/business/business-gnome/dialog-invoice.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/business/business-gnome/dialog-invoice.c,v
retrieving revision 1.100
diff -u -r1.100 dialog-invoice.c
--- src/business/business-gnome/dialog-invoice.c	26 Jun 2004 14:52:12 -0000	1.100
+++ src/business/business-gnome/dialog-invoice.c	20 Sep 2004 16:06:52 -0000
@@ -137,6 +137,7 @@
   GtkWidget *	posted_date_hbox;
   GtkWidget *	posted_date;
   GtkWidget *	active_check;
+  GtkWidget *	accumulatesplits_check;
 
   GtkWidget *	owner_box;
   GtkWidget *	owner_label;
@@ -217,6 +218,7 @@
 void gnc_invoice_window_summarybar_cb (GtkWidget *widget, gpointer data);
 
 void gnc_invoice_window_active_toggled_cb (GtkWidget *widget, gpointer data);
+void gnc_invoice_window_accumulatesplits_toggled_cb(GtkWidget *widget, gpointer data);
 void gnc_invoice_window_leave_notes_cb (GtkWidget *widget, GdkEventFocus *event, gpointer data);
 
 #define INV_WIDTH_PREFIX "invoice_reg"
@@ -308,6 +310,10 @@
     gncInvoiceSetActive (invoice, gtk_toggle_button_get_active
 			 (GTK_TOGGLE_BUTTON (iw->active_check)));
 
+  if (iw->accumulatesplits_check)
+    gncInvoiceSetAccumulateSplits (invoice, gtk_toggle_button_get_active
+			 (GTK_TOGGLE_BUTTON (iw->accumulatesplits_check)));
+
   gncInvoiceSetNotes (invoice, gtk_editable_get_chars
 		      (GTK_EDITABLE (iw->notes_text), 0, -1));
 
@@ -964,6 +970,18 @@
 }
 
 void
+gnc_invoice_window_accumulatesplits_toggled_cb (GtkWidget *widget, gpointer data)
+{
+  InvoiceWindow *iw = data;
+  GncInvoice *invoice = iw_get_invoice(iw);
+
+  if (!invoice) return;
+
+  gncInvoiceSetAccumulateSplits (invoice,
+		       gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)));
+}
+
+void
 gnc_invoice_window_leave_notes_cb (GtkWidget *widget, GdkEventFocus *event,
 				   gpointer data)
 {
@@ -1664,6 +1682,10 @@
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (iw->active_check),
 				    gncInvoiceGetActive (invoice));
 
+    if (iw->accumulatesplits_check)
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (iw->accumulatesplits_check),
+				    gncInvoiceGetAccumulateSplits (invoice));
+
     ts = gncInvoiceGetDateOpened (invoice);
     if (timespec_equal (&ts, &ts_zero)) {
       gnc_date_edit_set_time (GNC_DATE_EDIT (iw->opened_date), time(NULL));
@@ -1929,6 +1951,7 @@
   iw->terms_menu = glade_xml_get_widget (xml, "terms_menu");
   iw->notes_text = glade_xml_get_widget (xml, "notes_text");
   iw->active_check = glade_xml_get_widget (xml, "active_check");
+  iw->accumulatesplits_check = glade_xml_get_widget (xml, "accumulatesplits_check");
   iw->owner_box = glade_xml_get_widget (xml, "owner_hbox");
   iw->owner_label = glade_xml_get_widget (xml, "owner_label");
   iw->job_label = glade_xml_get_widget (xml, "job_label");
Index: src/business/business-gnome/glade/invoice.glade
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/business/business-gnome/glade/invoice.glade,v
retrieving revision 1.19
diff -u -r1.19 invoice.glade
--- src/business/business-gnome/glade/invoice.glade	29 May 2003 03:02:11 -0000	1.19
+++ src/business/business-gnome/glade/invoice.glade	20 Sep 2004 16:06:53 -0000
@@ -1543,6 +1543,23 @@
 
 	      <widget>
 		<class>GtkLabel</class>
+		<name>label9</name>
+		<label></label>
+		<justify>GTK_JUSTIFY_CENTER</justify>
+		<wrap>False</wrap>
+		<xalign>0.5</xalign>
+		<yalign>0.5</yalign>
+		<xpad>0</xpad>
+		<ypad>0</ypad>
+		<child>
+		  <padding>0</padding>
+		  <expand>False</expand>
+		  <fill>False</fill>
+		</child>
+	      </widget>
+
+	      <widget>
+		<class>GtkLabel</class>
 		<name>hide3</name>
 		<label></label>
 		<justify>GTK_JUSTIFY_CENTER</justify>
@@ -1653,6 +1670,26 @@
 	      </widget>
 
 	      <widget>
+		<class>GtkCheckButton</class>
+		<name>accumulatesplits_check</name>
+		<can_focus>True</can_focus>
+		<signal>
+		  <name>toggled</name>
+		  <handler>gnc_invoice_window_accumulatesplits_toggled_cb</handler>
+		  <data>Invoice Entry Window</data>
+		  <last_modification_time>Mon, 20 Sep 2004 12:47:48 GMT</last_modification_time>
+		</signal>
+		<label>Accumulate Splits</label>
+		<active>False</active>
+		<draw_indicator>True</draw_indicator>
+		<child>
+		  <padding>0</padding>
+		  <expand>False</expand>
+		  <fill>False</fill>
+		</child>
+	      </widget>
+
+	      <widget>
 		<class>GtkLabel</class>
 		<name>hide4</name>
 		<label></label>



More information about the gnucash-patches mailing list