gnucash master: Multiple changes pushed

Mike Alexander mta at code.gnucash.org
Mon Apr 10 01:57:49 EDT 2017


Updated	 via  https://github.com/Gnucash/gnucash/commit/c7226ddd (commit)
	 via  https://github.com/Gnucash/gnucash/commit/ce79222f (commit)
	 via  https://github.com/Gnucash/gnucash/commit/a2687bcb (commit)
	 via  https://github.com/Gnucash/gnucash/commit/e20009a0 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/844a6db3 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/f9d23de8 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/768df3b7 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/448d9755 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/0ad94ddc (commit)
	from  https://github.com/Gnucash/gnucash/commit/cdc94c71 (commit)



commit c7226ddd4f9b7b4e92d7c1d0e4edf0d7381a44be
Author: Mike Alexander <mta at umich.edu>
Date:   Mon Apr 10 01:37:23 2017 -0400

    Delete left over line from previous merge conflict.

diff --git a/README b/README
index d27abc5..642365f 100644
--- a/README
+++ b/README
@@ -212,7 +212,6 @@ Building & Installing
 GnuCash uses GNU Automake to handle the build process, so for most of
 the details, see the generic instructions in INSTALL.  (If you are
 building directly from Git, read the README.git file for more instructions.)
->>>>>>> maint
 Below we detail the GnuCash specific bits.
 
 Prior to building GnuCash, you will have to obtain and install the

commit ce79222f056d2de5b321cdcd32f7b40c291dadb8
Merge: cdc94c7 a2687bc
Author: Mike Alexander <mta at umich.edu>
Date:   Mon Apr 10 01:27:47 2017 -0400

    Merge branch 'maint'


commit a2687bcbe35f98c4646842fdc225f11b58c4a46f
Author: Mike Alexander <mta at umich.edu>
Date:   Tue Apr 4 02:23:44 2017 -0400

    Fix the SWIG Guile wrapping of functions that have a "struct tm" parameter.
    
    The biggest problem was that a pointer to an out of scope struct tm was
    passed to the wrapped function.  With opt level 2, clang doesn't bother
    setting the contents of the struct since it goes out of scope without being
    used.  This caused the transaction report to never report anything since
    the start and end times it got were ridiculous.
    
    Also most functions that take a struct tm pointer can change the contents
    of the struct (if only to normalize it) so pass the new values back to Scheme.
    
    Finally all calls to gnc_localtime and gnc_gmtime from Scheme leaked a struct tm
    and calling gnc_tm_free from Scheme is a really bad idea so don't wrap it.

diff --git a/src/base-typemaps.i b/src/base-typemaps.i
index 727949f..187b64e 100644
--- a/src/base-typemaps.i
+++ b/src/base-typemaps.i
@@ -72,23 +72,23 @@ typedef char gchar;
 %typemap(in) time64 * (time64 t) "t = scm_to_int64($input); $1 = &t;"
 %typemap(out) time64 * " $result = ($1) ? scm_from_int64(*($1)) : SCM_BOOL_F; "
 
-%typemap(in) struct tm * {
+%typemap(in) struct tm * (struct tm t) {
     SCM tm = $input;
-    struct tm t = {
-        scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 0)),
-        scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 1)),
-        scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 2)),
-        scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 3)),
-        scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 4)),
-        scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 5)),
-        scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 6)),
-        scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 7)),
-        scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 8)),
-#ifdef HAVE_STRUCT_TM_GMTOFF
-        scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 9)),
-        scm_to_locale_string(SCM_SIMPLE_VECTOR_REF(tm, 10)),
-#endif
-    };
+    SCM zone;
+    t.tm_sec = scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 0));
+    t.tm_min = scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 1));
+    t.tm_hour = scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 2));
+    t.tm_mday = scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 3));
+    t.tm_mon = scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 4));
+    t.tm_year = scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 5));
+    t.tm_wday = scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 6));
+    t.tm_yday = scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 7));
+    t.tm_isdst = scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 8));
+%#ifdef HAVE_STRUCT_TM_GMTOFF
+    t.tm_gmtoff = scm_to_int(SCM_SIMPLE_VECTOR_REF(tm, 9));
+    zone = SCM_SIMPLE_VECTOR_REF(tm, 10);
+    t.tm_zone = SCM_UNBNDP(zone) ? NULL : scm_to_locale_string(zone);
+%#endif
     $1 = &t;
  }
 
@@ -104,15 +104,38 @@ typedef char gchar;
     SCM_SIMPLE_VECTOR_SET(tm, 6, scm_from_int(t->tm_wday));
     SCM_SIMPLE_VECTOR_SET(tm, 7, scm_from_int(t->tm_yday));
     SCM_SIMPLE_VECTOR_SET(tm, 8, scm_from_int(t->tm_isdst));
-#ifdef HAVE_STRUCT_TM_GMTOFF
+%#ifdef HAVE_STRUCT_TM_GMTOFF
     SCM_SIMPLE_VECTOR_SET(tm, 9, scm_from_long(t->tm_gmtoff));
-    SCM_SIMPLE_VECTOR_SET(tm, 10, scm_from_locale_string(t->tm_zone));
-#else
+    SCM_SIMPLE_VECTOR_SET(tm, 10, scm_from_locale_string(t->tm_zone?t->tm_zone:"Unset"));
+%#else
     SCM_SIMPLE_VECTOR_SET(tm, 9, scm_from_long(0));
     SCM_SIMPLE_VECTOR_SET(tm, 10, scm_from_locale_string("GMT"));
-#endif
+%#endif
     $result = tm;
  }
+ 
+%typemap(newfree) struct tm * "gnc_tm_free($1);"
+
+%typemap(argout) struct tm * {
+    struct tm* t = $1;
+    SCM tm = $input;
+    SCM_SIMPLE_VECTOR_SET(tm, 0, scm_from_int(t->tm_sec));
+    SCM_SIMPLE_VECTOR_SET(tm, 1, scm_from_int(t->tm_min));
+    SCM_SIMPLE_VECTOR_SET(tm, 2, scm_from_int(t->tm_hour));
+    SCM_SIMPLE_VECTOR_SET(tm, 3, scm_from_int(t->tm_mday));
+    SCM_SIMPLE_VECTOR_SET(tm, 4, scm_from_int(t->tm_mon));
+    SCM_SIMPLE_VECTOR_SET(tm, 5, scm_from_int(t->tm_year));
+    SCM_SIMPLE_VECTOR_SET(tm, 6, scm_from_int(t->tm_wday));
+    SCM_SIMPLE_VECTOR_SET(tm, 7, scm_from_int(t->tm_yday));
+    SCM_SIMPLE_VECTOR_SET(tm, 8, scm_from_int(t->tm_isdst));
+%#ifdef HAVE_STRUCT_TM_GMTOFF
+    SCM_SIMPLE_VECTOR_SET(tm, 9, scm_from_long(t->tm_gmtoff));
+    SCM_SIMPLE_VECTOR_SET(tm, 10, scm_from_locale_string(t->tm_zone?t->tm_zone:"Unset"));
+%#else
+    SCM_SIMPLE_VECTOR_SET(tm, 9, scm_from_long(0));
+    SCM_SIMPLE_VECTOR_SET(tm, 10, scm_from_locale_string("GMT"));
+%#endif
+ }
 
 %define GLIST_HELPER_INOUT(ListType, ElemSwigType)
 %typemap(in) ListType * {
diff --git a/src/engine/engine.i b/src/engine/engine.i
index 14c1214..9001eb6 100644
--- a/src/engine/engine.i
+++ b/src/engine/engine.i
@@ -107,6 +107,9 @@ functions. */
 %newobject xaccSplitGetCorrAccountFullName;
 %newobject gnc_numeric_to_string;
 
+%newobject gnc_localtime;
+%newobject gnc_gmtime;
+
 /* Parse the header file to generate wrappers */
 %inline {
   static QofIdType QOF_ID_BOOK_SCM (void) { return QOF_ID_BOOK; }
@@ -168,6 +171,7 @@ void qof_book_kvp_changed (QofBook *book);
 const char *qof_session_get_url (QofSession *session);
 
 %ignore qof_print_date_time_buff;
+%ignore gnc_tm_free;
 %include <gnc-date.h>
 extern const char *gnc_default_strftime_date_format;
 

commit e20009a08da7c83d3a3d35bcec6c336dfccfc293
Author: John Ralls <jralls at ceridwen.us>
Date:   Mon Apr 3 21:16:43 2017 -0700

    Save Changes Bug 780889 - Split-register transactions result in invalid...
    
    price:type "transaction".
    
    Add 'transaction' to the schema and document it in gnc-pricedb.h.

diff --git a/src/doc/xml/gnucash-v2.rnc b/src/doc/xml/gnucash-v2.rnc
index 7a66c92..752b03a 100644
--- a/src/doc/xml/gnucash-v2.rnc
+++ b/src/doc/xml/gnucash-v2.rnc
@@ -199,7 +199,7 @@ Price = element price {
 
 # from the doc string of gnc_price_class_init in src/engine/gnc-pricedb.c
 
-  element price:type { "bid" | "ask" | "last" | "nav" | "unknown" }?,
+  element price:type { "bid" | "ask" | "last" | "nav" | "transaction" | "unknown" }?,
 
   element price:value { GncNumeric }
 }
diff --git a/src/engine/gnc-pricedb.c b/src/engine/gnc-pricedb.c
index f777f5f..37aee84 100644
--- a/src/engine/gnc-pricedb.c
+++ b/src/engine/gnc-pricedb.c
@@ -225,7 +225,8 @@ gnc_price_class_init(GNCPriceClass *klass)
                           "Quote type",
                           "The quote type is a string describing the "
                           "type of a price quote.  Types possible now "
-                          "are 'bid', 'ask', 'last', 'nav' and 'unknown'.",
+                          "are 'bid', 'ask', 'last', 'nav', 'transaction', "
+                          "and 'unknown'.",
                           NULL,
                           G_PARAM_READWRITE));
 
diff --git a/src/engine/gnc-pricedb.h b/src/engine/gnc-pricedb.h
index 5c3a625..304aee5 100644
--- a/src/engine/gnc-pricedb.h
+++ b/src/engine/gnc-pricedb.h
@@ -116,8 +116,10 @@ GType gnc_pricedb_get_type(void);
       many strings in users' databases, so this string must be
       translated on output instead of always being used in untranslated
       form).
-    - type: the type of quote - types possible right now are bid, ask,
-      last, nav, and unknown.
+    - type: the type of quote - types possible right now are bid, ask, last,
+      nav, transaction, and unknown. 'Transaction' is set when the price is
+      created from an amount and value in a Split and is not available for users
+      to set via the GUI.
 
     \par Implementation Details:
 

commit 844a6db32b95aa540c0c27497fdf3ef98fc06a40
Author: John Ralls <jralls at ceridwen.us>
Date:   Sun Apr 2 09:22:16 2017 -0700

    Bug 780845 - link in github repo README file needs correction/editing

diff --git a/README b/README
index 4f208e4..812e964 100644
--- a/README
+++ b/README
@@ -333,7 +333,7 @@ Before you start developing GnuCash, you should do the following:
 1. Read http://wiki.gnucash.org/wiki/Development
 
 2. Look over the doxygen-generated documentation at
-    http://code.gnucash.org/docs/HEAD/
+    http://code.gnucash.org/docs/MAINT/
 
 3. Go to the GnuCash website and skim the archives of the GnuCash
    development mailing list.

commit f9d23de8c061ae8348a74abe3a8b40d29decadd0
Merge: 509ce16 768df3b
Author: John Ralls <jralls at ceridwen.us>
Date:   Thu Mar 30 12:42:59 2017 -0700

    Merge Ueli Neiderer's swift-transactiontxt branch into maint.


commit 768df3b70974a9f55ea21aad05ebcb4a8b647e86
Author: Ueli Niederer <github.com at junix.ch>
Date:   Thu Mar 30 20:53:45 2017 +0200

    Obey GNUcash coding style
    
    Corrected brace position.

diff --git a/src/import-export/aqb/gnc-ab-utils.c b/src/import-export/aqb/gnc-ab-utils.c
index b3db650..3419ec4 100644
--- a/src/import-export/aqb/gnc-ab-utils.c
+++ b/src/import-export/aqb/gnc-ab-utils.c
@@ -319,7 +319,7 @@ join_ab_strings_cb(const gchar *str, gpointer user_data)
 
     if (!str || !*str)
         return NULL;
-
+ 
     tmp = g_strdup(str);
     g_strstrip(tmp);
     gnc_utf8_strip_invalid(tmp);
@@ -369,7 +369,8 @@ gnc_ab_get_purpose(const AB_TRANSACTION *ab_trans)
 
     g_return_val_if_fail(ab_trans, g_strdup(""));
 
-    if (gnc_prefs_get_bool(GNC_PREFS_GROUP_AQBANKING, GNC_PREF_USE_TRANSACTION_TXT)) {
+    if (gnc_prefs_get_bool(GNC_PREFS_GROUP_AQBANKING, GNC_PREF_USE_TRANSACTION_TXT)) 
+    {
         /* According to AqBanking, some of the non-swift lines have a special
          * meaning. Some banks place valuable text into the transaction text,
          * hence we put this text in front of the purpose. */

commit 448d97553ff1765b8ac753220af19374fe95f09f
Author: Ueli Niederer <gnucash at junix.ch>
Date:   Thu Mar 30 20:17:44 2017 +0200

    Added a preference to control import behaivour of transaction text
    
    In order to allow to revert the newly introduced behaviour of putting
    transaction text in front of the extracted purpose, the feature can now
    be disabled through the preferences dialog.

diff --git a/src/import-export/aqb/dialog-ab.glade b/src/import-export/aqb/dialog-ab.glade
index 543e06d..b5c4ee3 100644
--- a/src/import-export/aqb/dialog-ab.glade
+++ b/src/import-export/aqb/dialog-ab.glade
@@ -853,6 +853,25 @@
           </packing>
         </child>
         <child>
+          <object class="GtkCheckButton" id="pref/dialogs.import.hbci/use-ns-transaction-text">
+            <property name="label" translatable="yes">Use Non-SWIFT _transaction text</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="use_action_appearance">False</property>
+            <property name="use_underline">True</property>
+            <property name="draw_indicator">True</property>
+          </object>
+          <packing>
+            <property name="right_attach">4</property>
+            <property name="top_attach">3</property>
+            <property name="bottom_attach">4</property>
+            <property name="x_options">GTK_FILL</property>
+            <property name="y_options"></property>
+            <property name="x_padding">12</property>
+          </packing>
+        </child>
+        <child>
           <object class="GtkCheckButton" id="checkbutton3">
             <property name="label" translatable="yes">_Verbose debug messages</property>
             <property name="visible">True</property>
@@ -864,8 +883,8 @@
           </object>
           <packing>
             <property name="right_attach">4</property>
-            <property name="top_attach">3</property>
-            <property name="bottom_attach">4</property>
+            <property name="top_attach">4</property>
+            <property name="bottom_attach">5</property>
             <property name="x_options">GTK_FILL</property>
             <property name="y_options"></property>
             <property name="x_padding">12</property>
diff --git a/src/import-export/aqb/gnc-ab-utils.c b/src/import-export/aqb/gnc-ab-utils.c
index 0c80948..b3db650 100644
--- a/src/import-export/aqb/gnc-ab-utils.c
+++ b/src/import-export/aqb/gnc-ab-utils.c
@@ -369,12 +369,14 @@ gnc_ab_get_purpose(const AB_TRANSACTION *ab_trans)
 
     g_return_val_if_fail(ab_trans, g_strdup(""));
 
-    /* According to AqBanking, some of the non-swift lines have a special
-     * meaning. Some banks place valuable text into the transaction text,
-     * hence we put this text in front of the purpose. */
-    ab_transactionText = AB_Transaction_GetTransactionText(ab_trans);
-    if (ab_transactionText)
-        gnc_description = g_strdup(ab_transactionText);
+    if (gnc_prefs_get_bool(GNC_PREFS_GROUP_AQBANKING, GNC_PREF_USE_TRANSACTION_TXT)) {
+        /* According to AqBanking, some of the non-swift lines have a special
+         * meaning. Some banks place valuable text into the transaction text,
+         * hence we put this text in front of the purpose. */
+        ab_transactionText = AB_Transaction_GetTransactionText(ab_trans);
+        if (ab_transactionText)
+            gnc_description = g_strdup(ab_transactionText);
+    }
 
     ab_purpose = AB_Transaction_GetPurpose(ab_trans);
     if (ab_purpose)
diff --git a/src/import-export/aqb/gnc-ab-utils.h b/src/import-export/aqb/gnc-ab-utils.h
index 12d112a..641f299 100644
--- a/src/import-export/aqb/gnc-ab-utils.h
+++ b/src/import-export/aqb/gnc-ab-utils.h
@@ -70,11 +70,12 @@ G_BEGIN_DECLS
 # define AQBANKING_VERSION_4_EXACTLY
 #endif
 
-#define GNC_PREFS_GROUP_AQBANKING "dialogs.import.hbci"
-#define GNC_PREF_FORMAT_SWIFT940  "format-swift-mt940"
-#define GNC_PREF_FORMAT_SWIFT942  "format-swift-mt942"
-#define GNC_PREF_FORMAT_DTAUS     "format-dtaus"
-#define GNC_PREF_VERBOSE_DEBUG    "verbose-debug"
+#define GNC_PREFS_GROUP_AQBANKING       "dialogs.import.hbci"
+#define GNC_PREF_FORMAT_SWIFT940        "format-swift-mt940"
+#define GNC_PREF_FORMAT_SWIFT942        "format-swift-mt942"
+#define GNC_PREF_FORMAT_DTAUS           "format-dtaus"
+#define GNC_PREF_USE_TRANSACTION_TXT    "use-ns-transaction-text"
+#define GNC_PREF_VERBOSE_DEBUG          "verbose-debug"
 
 typedef struct _GncABImExContextImport GncABImExContextImport;
 
diff --git a/src/import-export/aqb/gschemas/org.gnucash.dialogs.import.hbci.gschema.xml.in.in b/src/import-export/aqb/gschemas/org.gnucash.dialogs.import.hbci.gschema.xml.in.in
index f12289c..4eccf0f 100644
--- a/src/import-export/aqb/gschemas/org.gnucash.dialogs.import.hbci.gschema.xml.in.in
+++ b/src/import-export/aqb/gschemas/org.gnucash.dialogs.import.hbci.gschema.xml.in.in
@@ -20,6 +20,11 @@
       <summary>Remember the PIN in memory</summary>
       <description>If active, the PIN for HBCI/AqBanking actions will be remembered in memory during a session. Otherwise it will have to be entered again each time during a session when it is needed.</description>
     </key>
+    <key name="use-ns-transaction-text" type="b">
+      <default>true</default>
+      <summary>Put the transaction text in front of the purpose of a transaction.</summary>
+      <description>Some banks place part of transaction description as "transaction text" in the MT940 file. Normally GNUcash ignores this text. However by activating this option, the transaction text is used for the transaction description too.</description>
+    </key>
     <key name="verbose-debug" type="b">
       <default>false</default>
       <summary>Verbose HBCI debug messages</summary>

commit 0ad94ddcc01ea11282b0875d4edb1f77c6db5644
Author: Ueli Niederer <gnucash at junix.ch>
Date:   Tue Mar 28 22:16:30 2017 +0200

    Including the transaction text into the purpose text
    
    Some banks include additional purpose information for a transaction in
    non-swift-section 17 (aka transaction text). If available, this
    transaction text is put in front of the other purpose texts to provide
    full transaction information.
    
    While the final solution is still under discussion. This change is a
    first low-impact implementation backported and distilled from the work
    discussed in gnucash/gnucash#139.

diff --git a/src/import-export/aqb/gnc-ab-utils.c b/src/import-export/aqb/gnc-ab-utils.c
index b0b2ffb..0c80948 100644
--- a/src/import-export/aqb/gnc-ab-utils.c
+++ b/src/import-export/aqb/gnc-ab-utils.c
@@ -364,10 +364,18 @@ gchar *
 gnc_ab_get_purpose(const AB_TRANSACTION *ab_trans)
 {
     const GWEN_STRINGLIST *ab_purpose;
+    const char *ab_transactionText = NULL;
     gchar *gnc_description = NULL;
 
     g_return_val_if_fail(ab_trans, g_strdup(""));
 
+    /* According to AqBanking, some of the non-swift lines have a special
+     * meaning. Some banks place valuable text into the transaction text,
+     * hence we put this text in front of the purpose. */
+    ab_transactionText = AB_Transaction_GetTransactionText(ab_trans);
+    if (ab_transactionText)
+        gnc_description = g_strdup(ab_transactionText);
+
     ab_purpose = AB_Transaction_GetPurpose(ab_trans);
     if (ab_purpose)
         GWEN_StringList_ForEach(ab_purpose, join_ab_strings_cb,



Summary of changes:
 README                                             |  1 -
 src/base-typemaps.i                                | 63 +++++++++++++++-------
 src/doc/xml/gnucash-v2.rnc                         |  2 +-
 src/engine/engine.i                                |  4 ++
 src/engine/gnc-pricedb.c                           |  3 +-
 src/engine/gnc-pricedb.h                           |  6 ++-
 src/import-export/aqb/dialog-ab.glade              | 23 +++++++-
 src/import-export/aqb/gnc-ab-utils.c               | 13 ++++-
 src/import-export/aqb/gnc-ab-utils.h               | 11 ++--
 ...g.gnucash.dialogs.import.hbci.gschema.xml.in.in |  5 ++
 10 files changed, 98 insertions(+), 33 deletions(-)



More information about the gnucash-changes mailing list