[Gnucash-changes] r13497 - gnucash/trunk - Use utf8 collation routines when sorting splits in a register. Also,

David Hampton hampton at cvs.gnucash.org
Sun Mar 5 16:14:20 EST 2006


Author: hampton
Date: 2006-03-05 16:14:19 -0500 (Sun, 05 Mar 2006)
New Revision: 13497
Trac: http://svn.gnucash.org/trac/changeset/13497

Modified:
   gnucash/trunk/ChangeLog
   gnucash/trunk/src/engine/Split.c
   gnucash/trunk/src/engine/Transaction.c
Log:
Use utf8 collation routines when sorting splits in a register.  Also,
only sort on the date of transactions (not date and time) since
gnucash doesn't allow times to be input.  Fixes #127809.


Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog	2006-03-05 20:24:04 UTC (rev 13496)
+++ gnucash/trunk/ChangeLog	2006-03-05 21:14:19 UTC (rev 13497)
@@ -1,3 +1,11 @@
+2006-03-05  David Hampton  <hampton at employees.org>
+
+	* src/engine/Transaction.c:
+	* src/engine/Split.c: Use utf8 collation routines when sorting
+	splits in a register.  Also, only sort on the date of
+	transactions (not date and time) since gnucash doesn't allow times
+	to be input.  Fixes #127809.
+
 2006-03-05  Joshua Sled  <jsled at asynchronous.org>
 
 	* packaging/gnucash-1.9.x.ebuild: Add checks for libgsf and

Modified: gnucash/trunk/src/engine/Split.c
===================================================================
--- gnucash/trunk/src/engine/Split.c	2006-03-05 20:24:04 UTC (rev 13496)
+++ gnucash/trunk/src/engine/Split.c	2006-03-05 21:14:19 UTC (rev 13497)
@@ -1108,14 +1108,18 @@
   if (retval) return retval;
 
   /* otherwise, sort on memo strings */
-  da = sa->memo;
-  db = sb->memo;
-  SAFE_STRCMP (da, db);
+  da = sa->memo ? sa->memo : "";
+  db = sb->memo ? sb->memo : "";
+  retval = g_utf8_collate (da, db);
+  if (retval)
+    return retval;
 
   /* otherwise, sort on action strings */
-  da = sa->action;
-  db = sb->action;
-  SAFE_STRCMP (da, db);
+  da = sa->action ? sa->action : "";
+  db = sb->action ? sb->action : "";
+  retval = g_utf8_collate (da, db);
+  if (retval != 0)
+    return retval;
 
   /* the reconciled flag ... */
   if (sa->reconciled < sb->reconciled) return -1;
@@ -1242,7 +1246,7 @@
   ab = sb->acc;
   full_a = xaccAccountGetFullName(aa);
   full_b = xaccAccountGetFullName(ab);
-  retval = safe_strcmp(full_a, full_b);
+  retval = g_utf8_collate(full_a, full_b);
   g_free(full_a);
   g_free(full_b);
   return retval;

Modified: gnucash/trunk/src/engine/Transaction.c
===================================================================
--- gnucash/trunk/src/engine/Transaction.c	2006-03-05 20:24:04 UTC (rev 13496)
+++ gnucash/trunk/src/engine/Transaction.c	2006-03-05 21:14:19 UTC (rev 13497)
@@ -1203,18 +1203,25 @@
   return trans ? trans->version : 0;
 }
 
+#define SECS_PER_DAY 86400
+
 int
 xaccTransOrder (const Transaction *ta, const Transaction *tb)
 {
   char *da, *db;
-  int na, nb;
+  int na, nb, retval;
 
   if ( ta && !tb ) return -1;
   if ( !ta && tb ) return +1;
   if ( !ta && !tb ) return 0;
 
-  /* if dates differ, return */
-  DATE_CMP(ta,tb,date_posted);
+  /* Only sort on the date, since time info isn't displayed */
+  na = ta->date_posted.tv_sec / SECS_PER_DAY;
+  nb = tb->date_posted.tv_sec / SECS_PER_DAY;
+  if (na < nb)
+    return -1;
+  if (na > nb)
+    return 1;
 
   /* otherwise, sort on number string */
   na = atoi(ta->num);
@@ -1222,13 +1229,17 @@
   if (na < nb) return -1;
   if (na > nb) return +1;
 
+#ifdef ANYONE_CARES_ABOUT_SORT_ON_DATE_ENTERED
   /* if dates differ, return */
   DATE_CMP(ta,tb,date_entered);
+#endif
 
   /* otherwise, sort on description string */
-  da = ta->description;
-  db = tb->description;
-  SAFE_STRCMP (da, db);
+  da = ta->description ? ta->description : "";
+  db = tb->description ? tb->description : "";
+  retval = g_utf8_collate (da, db);
+  if (retval)
+    return retval;
 
   /* else, sort on guid - keeps sort stable. */
   return guid_compare(&(ta->inst.entity.guid), &(tb->inst.entity.guid));



More information about the gnucash-changes mailing list