aboutsummaryrefslogtreecommitdiffstats
path: root/finance
diff options
context:
space:
mode:
Diffstat (limited to 'finance')
-rw-r--r--finance/gnucash-docs/Makefile7
-rw-r--r--finance/gnucash-docs/distinfo6
-rw-r--r--finance/gnucash/Makefile9
-rw-r--r--finance/gnucash/distinfo6
-rw-r--r--finance/gnucash/files/patch-CMakeLists.txt9
-rw-r--r--finance/gnucash/files/patch-libgnucash_app-utils_guile-util.c4
-rw-r--r--finance/gnucash/files/patch-missing-files1372
-rw-r--r--finance/gnucash/pkg-plist7
8 files changed, 22 insertions, 1398 deletions
diff --git a/finance/gnucash-docs/Makefile b/finance/gnucash-docs/Makefile
index 280e239b5dd3..9c421851bb0c 100644
--- a/finance/gnucash-docs/Makefile
+++ b/finance/gnucash-docs/Makefile
@@ -3,12 +3,9 @@
# $MCom: ports/finance/gnucash-docs/Makefile,v 1.7 2007/08/04 03:51:29 marcus Exp $
PORTNAME= gnucash-docs
-PORTVERSION= 3.2
+PORTVERSION= 3.3
CATEGORIES= finance gnome
-MASTER_SITES= SF/gnucash/${PORTNAME}/${PORTVERSION} \
- http://www.gnucash.org/pub/gnucash/sources/stable/ \
- ftp://ftp.gnucash.org/pub/gnucash/sources/stable/ \
- http://www.linas.org/pub/
+MASTER_SITES= SF/gnucash/gnucash%20%28stable%29/${PORTVERSION}
MAINTAINER= madpilot@FreeBSD.org
COMMENT= Documentation for gnucash
diff --git a/finance/gnucash-docs/distinfo b/finance/gnucash-docs/distinfo
index b3335bfed355..42f370cdbb94 100644
--- a/finance/gnucash-docs/distinfo
+++ b/finance/gnucash-docs/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1529916216
-SHA256 (gnucash-docs-3.2.tar.gz) = 469a524352a3b0e5308ba68a3c0fac79a501998b29db9c16a714ce879aa9c39c
-SIZE (gnucash-docs-3.2.tar.gz) = 92315385
+TIMESTAMP = 1538390171
+SHA256 (gnucash-docs-3.3.tar.gz) = cc84ca9b45c8e691347c5a9859156fe849f777c6771cb23dca08214809876483
+SIZE (gnucash-docs-3.3.tar.gz) = 92348594
diff --git a/finance/gnucash/Makefile b/finance/gnucash/Makefile
index ca396b49fe36..88ac7fb52f2b 100644
--- a/finance/gnucash/Makefile
+++ b/finance/gnucash/Makefile
@@ -2,8 +2,7 @@
# $MCom: ports/finance/gnucash/Makefile,v 1.26 2008/12/31 03:25:18 mezz Exp $
PORTNAME= gnucash
-PORTVERSION= 3.2
-PORTREVISION= 5
+PORTVERSION= 3.3
CATEGORIES= finance gnome
MASTER_SITES= SF/${PORTNAME}/${PORTNAME}%20%28stable%29/${PORTVERSION}
@@ -101,7 +100,11 @@ post-patch-TEST-off:
post-install:
@(cd ${STAGEDIR}${DATADIR}/icons/hicolor && \
- ${RMDIR} 22x22 32x32 48x48 64x64 96x96 128x128 256x256 scalable)
+ ${RMDIR} 16x16/apps 22x22/apps 22x22 24x24/apps 32x32/apps 32x32\
+ 48x48/apps 48x48 64x64/apps 64x64 96x96/apps 96x96 \
+ 128x128/apps 128x128 256x256/apps 256x256 scalable/apps scalable)
+ @(cd ${STAGEDIR}${PREFIX}/share/icons/hicolor && \
+ ${RMDIR} 24x24/actions 16x16/actions)
post-install-PYTHON-on:
@(cd ${STAGEDIR}${PREFIX} \
diff --git a/finance/gnucash/distinfo b/finance/gnucash/distinfo
index 802c677923e4..70059306c0cb 100644
--- a/finance/gnucash/distinfo
+++ b/finance/gnucash/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1529915625
-SHA256 (gnucash-3.2.tar.bz2) = 63e5b00c148ed0f7021ebc03e4e70c4a9c549feb3ea49d6c810f2abaaf592452
-SIZE (gnucash-3.2.tar.bz2) = 13384008
+TIMESTAMP = 1538344925
+SHA256 (gnucash-3.3.tar.bz2) = 8396ed8d2a88ac358ecf458c253cf38f55a13aaba7958e4fde3dd85c222e393f
+SIZE (gnucash-3.3.tar.bz2) = 13440713
diff --git a/finance/gnucash/files/patch-CMakeLists.txt b/finance/gnucash/files/patch-CMakeLists.txt
index b79b636afb1b..856ba520df0a 100644
--- a/finance/gnucash/files/patch-CMakeLists.txt
+++ b/finance/gnucash/files/patch-CMakeLists.txt
@@ -1,4 +1,4 @@
---- CMakeLists.txt.orig 2018-06-24 21:43:51 UTC
+--- CMakeLists.txt.orig 2018-09-29 21:16:50 UTC
+++ CMakeLists.txt
@@ -43,6 +43,7 @@ include (MacroAppendForeach)
include (MacroAddSourceFileCompileFlags)
@@ -8,14 +8,15 @@
include (GncAddSchemeTargets)
include (GncAddGSchemaTargets)
include (GncAddTest)
-@@ -560,8 +561,8 @@ set(CMAKE_CXX_FLAGS "-std=gnu++11 ${CMAKE_CXX_FLAGS}")
+@@ -573,9 +574,9 @@ set(CMAKE_CXX_FLAGS "-std=gnu++11 ${CMAKE_CXX_FLAGS}")
if (UNIX)
- set( CMAKE_C_FLAGS "-Werror -Wdeclaration-after-statement -Wno-pointer-sign -Wall -Wmissing-prototypes -Wmissing-declarations -Wno-unused ${CMAKE_C_FLAGS}")
-- set( CMAKE_CXX_FLAGS "-Werror -Wall -Wmissing-declarations -Wno-unused -Wno-error=parentheses ${CMAKE_CXX_FLAGS}")
+ set( CMAKE_C_FLAGS "-Wdeclaration-after-statement -Wno-pointer-sign -Wall -Wmissing-prototypes -Wmissing-declarations -Wno-unused ${CMAKE_C_FLAGS}")
-+ set( CMAKE_CXX_FLAGS "-Wall -Wmissing-declarations -Wno-unused -Wno-error=parentheses ${CMAKE_CXX_FLAGS}")
set( CMAKE_C_FLAGS "-Wno-deprecated-declarations -std=gnu11 -Wno-error=parentheses ${CMAKE_C_FLAGS}")
+- set( CMAKE_CXX_FLAGS "-Werror -Wall -Wmissing-declarations -Wno-unused -Wno-error=parentheses ${CMAKE_CXX_FLAGS}")
++ set( CMAKE_CXX_FLAGS "-Wall -Wmissing-declarations -Wno-unused -Wno-error=parentheses ${CMAKE_CXX_FLAGS}")
+ set( CMAKE_CXX_FLAGS "-Wno-deprecated-declarations -Wno-register ${CMAKE_CXX_FLAGS}")
set( CMAKE_C_FLAGS_RELEASE "-O3 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 ${CMAKE_C_FLAGS}")
endif (UNIX)
diff --git a/finance/gnucash/files/patch-libgnucash_app-utils_guile-util.c b/finance/gnucash/files/patch-libgnucash_app-utils_guile-util.c
index cdc44f7b5816..d25074ee41d9 100644
--- a/finance/gnucash/files/patch-libgnucash_app-utils_guile-util.c
+++ b/finance/gnucash/files/patch-libgnucash_app-utils_guile-util.c
@@ -1,6 +1,6 @@
---- libgnucash/app-utils/guile-util.c.orig 2018-03-31 22:46:38 UTC
+--- libgnucash/app-utils/guile-util.c.orig 2018-09-04 21:53:12 UTC
+++ libgnucash/app-utils/guile-util.c
-@@ -1095,6 +1095,8 @@ gnc_parse_time_to_time64 (const gchar *s, const gchar
+@@ -996,6 +996,8 @@ gnc_parse_time_to_time64 (const gchar *s, const gchar
g_return_val_if_fail(s && format, -1);
diff --git a/finance/gnucash/files/patch-missing-files b/finance/gnucash/files/patch-missing-files
deleted file mode 100644
index 3a6f90e6646a..000000000000
--- a/finance/gnucash/files/patch-missing-files
+++ /dev/null
@@ -1,1372 +0,0 @@
---- src/optional/python-bindings/__init__.py.orig 2018-04-04 21:00:06 UTC
-+++ src/optional/python-bindings/__init__.py
-@@ -0,0 +1,11 @@
-+# import all the symbols from gnucash_core, so basic gnucash stuff can be
-+# loaded with:
-+# >>> from gnucash import thingy
-+# instead of
-+# >>> from gnucash.gnucash_core import thingy
-+from gnucash_core import *
-+## @file
-+# @brief helper file for the importing of gnucash
-+# @author Mark Jenkins, ParIT Worker Co-operative <mark@parit.ca>
-+# @author Jeff Green, ParIT Worker Co-operative <jeff@parit.ca>
-+# @ingroup python_bindings
---- src/optional/python-bindings/function_class.py.orig 2018-04-04 21:44:51 UTC
-+++ src/optional/python-bindings/function_class.py
-@@ -0,0 +1,227 @@
-+# function_class.py -- Library for making python classes from a set
-+# of functions.
-+#
-+# Copyright (C) 2008 ParIT Worker Co-operative <paritinfo@parit.ca>
-+# This program is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU General Public License as
-+# published by the Free Software Foundation; either version 2 of
-+# the License, or (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, contact:
-+# Free Software Foundation Voice: +1-617-542-5942
-+# 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
-+# Boston, MA 02110-1301, USA gnu@gnu.org
-+#
-+# @author Mark Jenkins, ParIT Worker Co-operative <mark@parit.ca>
-+
-+## @file
-+# @brief Library for making python classes from a set of functions.
-+# @author Mark Jenkins, ParIT Worker Co-operative <mark@parit.ca>
-+# @author Jeff Green, ParIT Worker Co-operative <jeff@parit.ca>
-+# @ingroup python_bindings
-+
-+INSTANCE_ARGUMENT = "instance"
-+
-+class ClassFromFunctions(object):
-+ """Inherit this class to give yourself a python class that wraps a set of
-+ functions that together constitute the methods of the class.
-+
-+ The method functions must all have as a first argument an object
-+ holding the instance data. There must also be a function that
-+ returns a new instance of the class, the constructor.
-+
-+ Your subclass must define
-+ _module - The module where the method functions, including the
-+ constructor can be found
-+ _new_instance - The name of a function that serves as a constructor,
-+ returning the instance data.
-+
-+ To access the instance data, use the read-only property instance.
-+
-+ To add some functions from _module as methods, call classmethods like
-+ add_method and add_methods_with_prefix.
-+ """
-+ def __new__(cls, *args, **kargs):
-+ # why reimpliment __new__? Because later on we're going to
-+ # use new to avoid creating new instances when existing instances
-+ # already exist with the same __instance value, or equivalent __instance
-+ # values, where this is desirable...
-+ return super(ClassFromFunctions, cls).__new__(cls)
-+
-+ def __init__(self, *args, **kargs):
-+ """Construct a new instance, using either the function
-+ self._module[self._new_instance] or using existing instance
-+ data. (specified with the keyword argument, instance)
-+
-+ Pass the arguments that should be passed on to
-+ self._module[self._new_instance] . Any arguments of that
-+ are instances of ClassFromFunctions will be switched with the instance
-+ data. (by calling the .instance property)
-+ """
-+ if INSTANCE_ARGUMENT in kargs:
-+ self.__instance = kargs[INSTANCE_ARGUMENT]
-+ else:
-+ self.__instance = getattr(self._module, self._new_instance)(
-+ *process_list_convert_to_instance(args) )
-+
-+ def get_instance(self):
-+ """Get the instance data.
-+
-+ You can also call the instance property
-+ """
-+ return self.__instance
-+
-+ instance = property(get_instance)
-+
-+ # CLASS METHODS
-+
-+ @classmethod
-+ def add_method(cls, function_name, method_name):
-+ """Add the function, method_name to this class as a method named name
-+ """
-+ def method_function(self, *meth_func_args):
-+ return getattr(self._module, function_name)(
-+ self.instance,
-+ *process_list_convert_to_instance(meth_func_args) )
-+
-+ setattr(cls, method_name, method_function)
-+ setattr(method_function, "__name__", method_name)
-+ return method_function
-+
-+ @classmethod
-+ def ya_add_classmethod(cls, function_name, method_name):
-+ """Add the function, method_name to this class as a classmethod named name
-+
-+ Taken from function_class and slightly modified.
-+ """
-+ def method_function(self, *meth_func_args):
-+ return getattr(self._module, function_name)(
-+ self,
-+ *process_list_convert_to_instance(meth_func_args) )
-+
-+ setattr(cls, method_name, classmethod(method_function))
-+ setattr(method_function, "__name__", method_name)
-+ return method_function
-+
-+ @classmethod
-+ def ya_add_method(cls, function_name, method_name):
-+ """Add the function, method_name to this class as a method named name
-+
-+ Taken from function_class and slightly modified.
-+ """
-+ def method_function(self, *meth_func_args):
-+ return getattr(self._module, function_name)(
-+ self,
-+ *process_list_convert_to_instance(meth_func_args) )
-+
-+ setattr(cls, method_name, method_function)
-+ setattr(method_function, "__name__", method_name)
-+ return method_function
-+
-+ @classmethod
-+ def add_methods_with_prefix(cls, prefix):
-+ """Add a group of functions with the same prefix
-+ """
-+ for function_name, function_value, after_prefix in \
-+ extract_attributes_with_prefix(cls._module, prefix):
-+ cls.add_method(function_name, after_prefix)
-+
-+ @classmethod
-+ def add_constructor_and_methods_with_prefix(cls, prefix, constructor):
-+ """Add a group of functions with the same prefix, and set the
-+ _new_instance attribute to prefix + constructor
-+ """
-+ cls.add_methods_with_prefix(prefix)
-+ cls._new_instance = prefix + constructor
-+
-+ @classmethod
-+ def decorate_functions(cls, decorator, *args):
-+ for function_name in args:
-+ setattr( cls, function_name,
-+ decorator( getattr(cls, function_name) ) )
-+
-+def method_function_returns_instance(method_function, cls):
-+ """A function decorator that is used to decorate method functions that
-+ return instance data, to return instances instead.
-+
-+ You can't use this decorator with @, because this function has a second
-+ argument.
-+ """
-+ assert( 'instance' == INSTANCE_ARGUMENT )
-+ def new_function(*args):
-+ kargs = { INSTANCE_ARGUMENT : method_function(*args) }
-+ if kargs['instance'] == None:
-+ return None
-+ else:
-+ return cls( **kargs )
-+
-+ return new_function
-+
-+def method_function_returns_instance_list(method_function, cls):
-+ def new_function(*args):
-+ return [ cls( **{INSTANCE_ARGUMENT: item} )
-+ for item in method_function(*args) ]
-+ return new_function
-+
-+def methods_return_instance_lists(cls, function_dict):
-+ for func_name, instance_name in function_dict.iteritems():
-+ setattr(cls, func_name,
-+ method_function_returns_instance_list(
-+ getattr(cls, func_name), instance_name))
-+
-+def default_arguments_decorator(function, *args):
-+ """Decorates a function to give it default, positional arguments
-+
-+ You can't use this decorator with @, because this function has more
-+ than one argument.
-+ """
-+ def new_function(*function_args):
-+ new_argset = list(function_args)
-+ new_argset.extend( args[ len(function_args): ] )
-+ return function( *new_argset )
-+ return new_function
-+
-+def return_instance_if_value_has_it(value):
-+ """Return value.instance if value is an instance of ClassFromFunctions,
-+ else return value
-+ """
-+ if isinstance(value, ClassFromFunctions):
-+ return value.instance
-+ else:
-+ return value
-+
-+def process_list_convert_to_instance( value_list ):
-+ """Return a list built from value_list, where if a value is in an instance
-+ of ClassFromFunctions, we put value.instance in the list instead.
-+
-+ Things that are not instances of ClassFromFunctions are returned to
-+ the new list unchanged.
-+ """
-+ return [ return_instance_if_value_has_it(value)
-+ for value in value_list ]
-+
-+def extract_attributes_with_prefix(obj, prefix):
-+ """Generator that iterates through the attributes of an object and
-+ for any attribute that matches a prefix, this yields
-+ the attribute name, the attribute value, and the text that appears
-+ after the prefix in the name
-+ """
-+ for attr_name, attr_value in obj.__dict__.iteritems():
-+ if attr_name.startswith(prefix):
-+ after_prefix = attr_name[ len(prefix): ]
-+ yield attr_name, attr_value, after_prefix
-+
-+def methods_return_instance(cls, function_dict):
-+ """Iterates through a dictionary of function name strings and instance names
-+ and sets the function to return the associated instance
-+ """
-+ for func_name, instance_name in function_dict.iteritems():
-+ setattr(cls, func_name,
-+ method_function_returns_instance( getattr(cls, func_name), instance_name))
-+
---- src/optional/python-bindings/gnucash_business.py.orig 2018-04-04 23:06:43 UTC
-+++ src/optional/python-bindings/gnucash_business.py
-@@ -0,0 +1,370 @@
-+# gnucash_business.py -- High level python wrapper classes for the business
-+# parts of GnuCash
-+#
-+# Copyright (C) 2008,2010 ParIT Worker Co-operative <paritinfo@parit.ca>
-+# This program is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU General Public License as
-+# published by the Free Software Foundation; either version 2 of
-+# the License, or (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, contact:
-+# Free Software Foundation Voice: +1-617-542-5942
-+# 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
-+# Boston, MA 02110-1301, USA gnu@gnu.org
-+#
-+# @author Mark Jenkins, ParIT Worker Co-operative <mark@parit.ca>
-+# @author Jeff Green, ParIT Worker Co-operative <jeff@parit.ca>
-+## @file
-+# @brief High level python wrapper classes for the business parts of GnuCash
-+# @author Mark Jenkins, ParIT Worker Co-operative <mark@parit.ca>
-+# @author Jeff Green, ParIT Worker Co-operative <jeff@parit.ca>
-+# @ingroup python_bindings
-+
-+import gnucash_core_c
-+
-+from function_class import \
-+ ClassFromFunctions, extract_attributes_with_prefix, \
-+ default_arguments_decorator, method_function_returns_instance, \
-+ methods_return_instance, methods_return_instance_lists
-+
-+from gnucash_core import \
-+ GnuCashCoreClass, GncNumeric, GncCommodity, Transaction, \
-+ Split, Book, GncLot, Account
-+
-+from gnucash_core_c import GNC_OWNER_CUSTOMER, GNC_OWNER_JOB, \
-+ GNC_OWNER_EMPLOYEE, GNC_OWNER_VENDOR, \
-+ GNC_PAYMENT_CASH, GNC_PAYMENT_CARD, \
-+ GNC_DISC_PRETAX, GNC_DISC_SAMETIME, GNC_DISC_POSTTAX, \
-+ GNC_TAXINCLUDED_YES, GNC_TAXINCLUDED_NO, GNC_TAXINCLUDED_USEGLOBAL, \
-+ GNC_AMT_TYPE_VALUE, GNC_AMT_TYPE_PERCENT, GNC_ID_INVOICE
-+
-+import datetime
-+
-+class GnuCashBusinessEntity(GnuCashCoreClass):
-+ def __init__(self, book=None, id=None, currency=None, name=None,
-+ instance=None):
-+ if instance == None:
-+ if book==None or id==None or currency==None:
-+ raise Exception(
-+ "you must call GnuCashBusinessEntity.__init__ "
-+ "with either a book, id, and currency, or an existing "
-+ "low level swig proxy in the argument instance")
-+ GnuCashCoreClass.__init__(self, book)
-+ self.BeginEdit()
-+ self.SetID(id)
-+ self.SetCurrency(currency)
-+ if name != None:
-+ self.SetName(name)
-+ self.CommitEdit()
-+ else:
-+ GnuCashCoreClass.__init__(self, instance=instance)
-+
-+class Customer(GnuCashBusinessEntity): pass
-+
-+class Employee(GnuCashBusinessEntity): pass
-+
-+class Vendor(GnuCashBusinessEntity): pass
-+
-+class Job(GnuCashBusinessEntity):
-+ # override the superclass constructor, as Job doesn't require
-+ # a currency but it does require an owner
-+ def __init__(self, book=None, id=None, owner=None, name=None,
-+ instance=None):
-+ if instance == None:
-+ if book==None or id==None or owner==None:
-+ raise Exception(
-+ "you must call Job.__init__ "
-+ "with either a book, id, and owner or an existing "
-+ "low level swig proxy in the argument instance")
-+ GnuCashCoreClass.__init__(self, book)
-+ self.SetID(id)
-+ self.SetOwner(owner)
-+ if name != None:
-+ self.SetName(name)
-+ else:
-+ GnuCashCoreClass.__init__(self, instance=instance)
-+
-+class Address(GnuCashCoreClass): pass
-+
-+class BillTerm(GnuCashCoreClass): pass
-+
-+class TaxTable(GnuCashCoreClass):
-+ def __init__(self, book=None, name=None, first_entry=None, instance=None):
-+ if instance == None:
-+ if book==None or name==None or first_entry==None:
-+ raise Exception(
-+ "you must call TaxTable.__init__ with either a "
-+ "book, name, and first_entry, or an existing "
-+ "low level swig proxy in the argument instance")
-+ GnuCashCoreClass.__init__(self, book)
-+ self.SetName(name)
-+ self.AddEntry(first_entry)
-+ else:
-+ GnuCashCoreClass.__init__(self, instance=instance)
-+
-+class TaxTableEntry(GnuCashCoreClass):
-+ def __init__(self, account=None, percent=True, amount=None, instance=None):
-+ """TaxTableEntry constructor
-+
-+ You must provide an account, or be initizing this with an existing
-+ swig proxy object via the instance keyword argument.
-+
-+ You may also optionally set the percent keyword argument to False to get
-+ a fixed value instead of percentage based tax (which is the default, or
-+ when percent=True).
-+
-+ The tax will be zero percent or zero unless you set the amount keyword
-+ argument to a GncNumeric value as well.
-+ """
-+
-+ if instance == None:
-+ if account==None:
-+ raise Exception(
-+ "you must call TaxTableEntry.__init__ with either a "
-+ "account or an existing "
-+ "low level swig proxy in the argument instance")
-+ GnuCashCoreClass.__init__(self)
-+ self.SetAccount(account)
-+ if percent:
-+ self.SetType(GNC_AMT_TYPE_PERCENT)
-+ else:
-+ self.SetType(GNC_AMT_TYPE_VALUE)
-+ if amount != None:
-+ self.SetAmount(amount)
-+ else:
-+ GnuCashCoreClass.__init__(self, instance=instance)
-+
-+class Invoice(GnuCashCoreClass):
-+ def __init__(self, book=None, id=None, currency=None, owner=None,
-+ date_opened=None, instance=None):
-+ """Invoice Contstructor
-+
-+ You must provide a book, id, currency and owner
-+ (Customer, Job, Employee, Vendor) or an existing swig proxy object
-+ in the keyword argument instance.
-+
-+ Optionally, you may provide a date the invoice is opened on
-+ (datetime.date or datetime.datetime), otherwise today's date is used.
-+ """
-+ if instance == None:
-+ if book==None or id==None or currency==None or owner==None:
-+ raise Exception(
-+ "you must call Invoice.__init__ "
-+ "with either a book, id, currency and owner, or an existing"
-+ "low level swig proxy in the argument instance")
-+ GnuCashCoreClass.__init__(self, book)
-+ self.BeginEdit()
-+ self.SetID(id)
-+ self.SetCurrency(currency)
-+ self.SetOwner(owner)
-+ if date_opened == None:
-+ date_opened = datetime.date.today()
-+ self.SetDateOpened(date_opened)
-+ self.CommitEdit()
-+ else:
-+ GnuCashCoreClass.__init__(self, instance=instance)
-+
-+class Bill(Invoice):
-+ pass
-+
-+def decorate_to_return_instance_instead_of_owner(dec_function):
-+ def new_get_owner_function(self):
-+ (owner_type, instance) = dec_function(self)
-+ if owner_type == GNC_OWNER_CUSTOMER:
-+ return Customer(instance=instance)
-+ elif owner_type == GNC_OWNER_JOB:
-+ return Job(instance=instance)
-+ elif owner_type == GNC_OWNER_EMPLOYEE:
-+ return Employee(instance=instance)
-+ elif owner_type == GNC_OWNER_VENDOR:
-+ return Vendor(instance=instance)
-+ else:
-+ return None
-+ return new_get_owner_function
-+
-+class Entry(GnuCashCoreClass):
-+ def __init__(self, book=None, invoice=None, date=None, instance=None):
-+ """Invoice Entry constructor
-+
-+ You must provide a book or be initizing this with an existing
-+ swig proxy object via the instance keyword argument.
-+
-+ The optional invoice argument can be set to a Bill or Invoice
-+ that you would like to associate the entry with. You might as well
-+ assign one now, as an Entry can't exist without one, but you can
-+ always use Invoice.AddEntry or Bill.AddEntry later on.
-+
-+ By default, the entry will be set to today's date unless you
-+ override with the date argument.
-+ """
-+ if instance == None:
-+ if book==None:
-+ raise Exception(
-+ "you must call Entry.__init__ with either a "
-+ "book or an existing "
-+ "low level swig proxy in the argument instance")
-+ GnuCashCoreClass.__init__(self, book)
-+
-+ if date == None:
-+ date = datetime.date.today()
-+ self.SetDate(date)
-+ if invoice != None:
-+ invoice.AddEntry(self)
-+ else:
-+
-+ GnuCashCoreClass.__init__(self, instance=instance)
-+
-+ def test_type(self, invoice):
-+ if invoice.GetTypeString() == "Invoice" and self.GetInvoice() == None:
-+ raise Exception("Entry type error. Check that Entry type matches Invoice.")
-+ if invoice.GetTypeString() == "Bill" and self.GetBill() == None:
-+ raise Exception("Entry type error. Check that Entry type matches Bill.")
-+
-+
-+# Owner
-+GnuCashBusinessEntity.add_methods_with_prefix('gncOwner')
-+
-+owner_dict = {
-+ 'GetCustomer' : Customer,
-+ 'GetVendor' : Vendor,
-+ 'GetEmployee' : Employee,
-+ 'GetJob' : Job,
-+ 'GetAddr' : Address,
-+ 'GetCurrency' : GncCommodity,
-+ 'GetEndOwner': GnuCashBusinessEntity,
-+ 'GetBalanceInCurrency': GncNumeric,
-+ }
-+methods_return_instance(GnuCashBusinessEntity, owner_dict)
-+
-+methods_return_instance_lists(
-+ GnuCashBusinessEntity, {
-+ 'GetCommoditiesList': GncCommodity
-+ })
-+
-+# Customer
-+Customer.add_constructor_and_methods_with_prefix('gncCustomer', 'Create')
-+
-+customer_dict = {
-+ 'GetAddr' : Address,
-+ 'GetShipAddr' : Address,
-+ 'GetDiscount' : GncNumeric,
-+ 'GetCredit' : GncNumeric,
-+ 'GetTerms' : BillTerm,
-+ 'GetCurrency' : GncCommodity,
-+ 'GetTaxTable': TaxTable,
-+ }
-+methods_return_instance(Customer, customer_dict)
-+
-+# Employee
-+Employee.add_constructor_and_methods_with_prefix('gncEmployee', 'Create')
-+
-+employee_dict = {
-+ 'GetBook' : Book,
-+ 'GetAddr' : Address,
-+ 'GetWorkday' : GncNumeric,
-+ 'GetRate' : GncNumeric,
-+ 'GetCurrency' : GncCommodity
-+ }
-+methods_return_instance(Employee, employee_dict)
-+
-+# Vendor
-+Vendor.add_constructor_and_methods_with_prefix('gncVendor', 'Create')
-+
-+vendor_dict = {
-+ 'GetAddr' : Address,
-+ 'GetTerms' : BillTerm,
-+ 'GetCurrency' : GncCommodity,
-+ 'GetTaxTable': TaxTable,
-+ }
-+methods_return_instance(Vendor, vendor_dict)
-+
-+# Job
-+Job.add_constructor_and_methods_with_prefix('gncJob', 'Create')
-+Job.decorate_functions(
-+ decorate_to_return_instance_instead_of_owner,
-+ 'GetOwner')
-+
-+# Address
-+Address.add_constructor_and_methods_with_prefix('gncAddress', 'Create')
-+
-+# BillTerm
-+BillTerm.add_constructor_and_methods_with_prefix('gncBillTerm', 'Create')
-+
-+billterm_dict = {
-+ 'LookupByName' : BillTerm,
-+ 'GetDiscount' : GncNumeric,
-+ 'GetParent' : BillTerm,
-+ 'ReturnChild' : BillTerm
-+ }
-+methods_return_instance(BillTerm, billterm_dict)
-+
-+# TaxTable
-+TaxTable.add_constructor_and_methods_with_prefix('gncTaxTable', 'Create')
-+
-+taxtable_dict = {
-+ 'GetParent': TaxTable,
-+ }
-+methods_return_instance(TaxTable, taxtable_dict)
-+
-+# TaxTableEntry
-+TaxTableEntry.add_constructor_and_methods_with_prefix(
-+ 'gncTaxTableEntry', 'Create')
-+
-+taxtableentry_dict = {
-+ 'GetAccount': Account,
-+ 'GetAmount': GncNumeric,
-+ }
-+
-+# Invoice
-+Invoice.add_constructor_and_methods_with_prefix('gncInvoice', 'Create')
-+methods_return_instance_lists(
-+ Invoice, { 'GetEntries': Entry })
-+
-+# Bill
-+Bill.add_methods_with_prefix('gncBill')
-+
-+invoice_dict = {
-+ 'GetTerms': BillTerm,
-+ 'GetCurrency': GncCommodity,
-+ 'GetToChargeAmount': GncNumeric,
-+ 'GetPostedLot': GncLot,
-+ 'GetPostedTxn': Transaction,
-+ 'GetPostedAcc': Account,
-+ 'GetTotal': GncNumeric,
-+ 'GetTotalOf': GncNumeric,
-+ 'GetTotalSubtotal': GncNumeric,
-+ 'GetTotalTax': GncNumeric,
-+ 'PostToAccount': Transaction,
-+ 'GetBook': Book,
-+ }
-+methods_return_instance(Invoice, invoice_dict)
-+Invoice.decorate_functions(
-+ decorate_to_return_instance_instead_of_owner,
-+ 'GetOwner', 'GetBillTo')
-+
-+# Entry
-+Entry.add_constructor_and_methods_with_prefix('gncEntry', 'Create')
-+
-+entry_dict = {
-+ 'GetQuantity': GncNumeric,
-+ 'GetInvAccount': Account,
-+ 'GetInvPrice': GncNumeric,
-+ 'GetInvDiscount': GncNumeric,
-+ 'GetInvTaxTable': TaxTable,
-+ 'GetBillAccount': Account,
-+ 'GetBillPrice': GncNumeric,
-+ 'GetBillTaxTable': TaxTable,
-+ 'Copy': Entry,
-+ 'GetInvoice': Invoice,
-+ 'GetBill': Invoice
-+ }
-+methods_return_instance(Entry, entry_dict)
-+Entry.decorate_functions(
-+ decorate_to_return_instance_instead_of_owner,
-+ 'GetBillTo' )
---- src/optional/python-bindings/gnucash_core.py.orig 2018-04-04 22:55:00 UTC
-+++ src/optional/python-bindings/gnucash_core.py
-@@ -0,0 +1,752 @@
-+# gnucash_core.py -- High level python wrapper classes for the core parts
-+# of GnuCash
-+#
-+# Copyright (C) 2008 ParIT Worker Co-operative <paritinfo@parit.ca>
-+# This program is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU General Public License as
-+# published by the Free Software Foundation; either version 2 of
-+# the License, or (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, contact:
-+# Free Software Foundation Voice: +1-617-542-5942
-+# 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
-+# Boston, MA 02110-1301, USA gnu@gnu.org
-+#
-+# @author Mark Jenkins, ParIT Worker Co-operative <mark@parit.ca>
-+# @author Jeff Green, ParIT Worker Co-operative <jeff@parit.ca>
-+
-+# The following is for doxygen
-+## @file
-+# @brief High level python wrapper classes for the core parts of GnuCash
-+# @author Mark Jenkins, ParIT Worker Co-operative <mark@parit.ca>
-+# @author Jeff Green, ParIT Worker Co-operative <jeff@parit.ca>
-+# @ingroup python_bindings
-+
-+import gnucash_core_c
-+
-+from function_class import \
-+ ClassFromFunctions, extract_attributes_with_prefix, \
-+ default_arguments_decorator, method_function_returns_instance, \
-+ methods_return_instance, process_list_convert_to_instance, \
-+ method_function_returns_instance_list, methods_return_instance_lists
-+
-+from gnucash_core_c import gncInvoiceLookup, gncInvoiceGetInvoiceFromTxn, \
-+ gncInvoiceGetInvoiceFromLot, gncEntryLookup, gncInvoiceLookup, \
-+ gncCustomerLookup, gncVendorLookup, gncJobLookup, gncEmployeeLookup, \
-+ gncTaxTableLookup, gncTaxTableLookupByName, gnc_search_invoice_on_id, \
-+ gnc_search_customer_on_id, gnc_search_bill_on_id , gnc_search_vendor_on_id, \
-+ gncInvoiceNextID, gncCustomerNextID, gncTaxTableGetTables, gncVendorNextID
-+
-+class GnuCashCoreClass(ClassFromFunctions):
-+ _module = gnucash_core_c
-+
-+ def do_lookup_create_oo_instance(self, lookup_function, cls, *args):
-+ thing = lookup_function(self.get_instance(), *args)
-+ if thing != None:
-+ thing = cls(instance=thing)
-+ return thing
-+
-+
-+class GnuCashBackendException(Exception):
-+ def __init__(self, msg, errors):
-+ Exception.__init__(self, msg)
-+ self.errors = errors
-+
-+class Session(GnuCashCoreClass):
-+ """A GnuCash book editing session
-+
-+ To commit changes to the session you may need to call save,
-+ (this is always the case with the file backend).
-+
-+ When you're down with a session you may need to call end()
-+
-+ Every Session has a Book in the book attribute, which you'll definitely
-+ be interested in, as every GnuCash entity (Transaction, Split, Vendor,
-+ Invoice..) is associated with a particular book where it is stored.
-+ """
-+
-+ def __init__(self, book_uri=None, ignore_lock=False, is_new=False,
-+ force_new= False):
-+ """A convenient constructor that allows you to specify a book URI,
-+ begin the session, and load the book.
-+
-+ This can give you the power of calling
-+ qof_session_new, qof_session_begin, and qof_session_load all in one!
-+
-+ book_uri can be None to skip the calls to qof_session_begin and
-+ qof_session_load, or it can be a string like "file:/test.xac"
-+
-+ qof_session_load is only called if is_new is set to False
-+
-+ is_new is passed to qof_session_begin as the argument create,
-+ and force_new as the argument force. Is_new will create a new
-+ database or file; force will force creation even if it will
-+ destroy an existing dataset.
-+
-+ ignore_lock is passed to qof_session_begin's argument of the
-+ same name and is used to break an existing lock on a dataset.
-+
-+
-+
-+ This function can raise a GnuCashBackendException. If it does,
-+ you don't need to cleanup and call end() and destroy(), that is handled
-+ for you, and the exception is raised.
-+ """
-+ GnuCashCoreClass.__init__(self)
-+ if book_uri is not None:
-+ try:
-+ self.begin(book_uri, ignore_lock, is_new, force_new)
-+ # Take care of backend inconsistency
-+ # New xml file can't be loaded, new sql store
-+ # has to be loaded before it can be altered
-+ # Any existing store obviously has to be loaded
-+ # More background: https://bugzilla.gnome.org/show_bug.cgi?id=726891
-+ if book_uri[:3] != "xml" or not is_new:
-+ self.load()
-+ except GnuCashBackendException, backend_exception:
-+ self.end()
-+ self.destroy()
-+ raise
-+
-+ def raise_backend_errors(self, called_function="qof_session function"):
-+ """Raises a GnuCashBackendException if there are outstanding
-+ QOF_BACKEND errors.
-+
-+ set called_function to name the function that was last called
-+ """
-+ errors = self.pop_all_errors()
-+ if errors != ():
-+ raise GnuCashBackendException(
-+ "call to %s resulted in the "
-+ "following errors, %s" % (called_function, backend_error_dict[errors[0]]),
-+ errors )
-+
-+ def generate_errors(self):
-+ """A generator that yields any outstanding QofBackend errors
-+ """
-+ while self.get_error() is not ERR_BACKEND_NO_ERR:
-+ error = self.pop_error()
-+ yield error
-+
-+ def pop_all_errors(self):
-+ """Returns any accumulated qof backend errors as a tuple
-+ """
-+ return tuple( self.generate_errors() )
-+
-+ # STATIC METHODS
-+ @staticmethod
-+ def raise_backend_errors_after_call(function):
-+ """A function decorator that results in a call to
-+ raise_backend_errors after execution.
-+ """
-+ def new_function(self, *args):
-+ return_value = function(self, *args)
-+ self.raise_backend_errors(function.__name__)
-+ return return_value
-+ return new_function
-+
-+class Book(GnuCashCoreClass):
-+ """A Book encapsulates all of the GnuCash data, it is the place where
-+ all GnuCash entities (Transaction, Split, Vendor, Invoice...), are
-+ stored. You'll notice that all of the constructors for those entities
-+ need a book to be associated with.
-+
-+ The most common way to get a book is through the book property in the
-+ Session class, that is, create a session that connects to some storage,
-+ such as through 'my_session = Session('file:my_books.xac')', and access
-+ the book via the book property, 'my_session.book'
-+
-+ If you would like to create a Book without any backing storage, call the
-+ Book constructor without any parameters, 'Book()'. You can later merge
-+ such a book into a book with actual store by using merge_init.
-+
-+ Methods of interest
-+ get_root_account -- Returns the root level Account
-+ get_table -- Returns a commodity lookup table, of type GncCommodityTable
-+ """
-+ def InvoiceLookup(self, guid):
-+ from gnucash_business import Invoice
-+ return self.do_lookup_create_oo_instance(
-+ gncInvoiceLookup, Invoice, guid.get_instance() )
-+
-+ def EntryLookup(self, guid):
-+ from gnucash_business import Entr
-+ return self.do_lookup_create_oo_instance(
-+ gncEntryLookup, Entry, guid.get_instance() )
-+
-+ def CustomerLookup(self, guid):
-+ from gnucash_business import Customer
-+ return self.do_lookup_create_oo_instance(
-+ gncCustomerLookup, Customer, guid.get_instance())
-+
-+ def JobLookup(self, guid):
-+ from gnucash_business import Job
-+ return self.do_lookup_create_oo_instance(
-+ gncJobLookup, Job, guid.get_instance() )
-+
-+ def VendorLookup(self, guid):
-+ from gnucash_business import Vendor
-+ return self.do_lookup_create_oo_instance(
-+ gncVendorLookup, Vendor, guid.get_instance() )
-+
-+ def EmployeeLookup(self, guid):
-+ from gnucash_business import Employee
-+ return self.do_lookup_create_oo_instance(
-+ gncEmployeeLookup, Employee, guid.get_instance() )
-+
-+ def TaxTableLookup(self, guid):
-+ from gnucash_business import TaxTable
-+ return self.do_lookup_create_oo_instance(
-+ gncTaxTableLookup, TaxTable, guid.get_instance() )
-+
-+ def TaxTableLookupByName(self, name):
-+ from gnucash_business import TaxTable
-+ return self.do_lookup_create_oo_instance(
-+ gncTaxTableLookupByName, TaxTable, name)
-+
-+ def TaxTableGetTables(self):
-+ from gnucash_business import TaxTable
-+ return [ TaxTable(instance=item) for item in gncTaxTableGetTables(self.instance) ]
-+
-+ def BillLoookupByID(self, id):
-+ from gnucash_business import Bill
-+ return self.do_lookup_create_oo_instance(
-+ gnc_search_bill_on_id, Bill, id)
-+
-+ def InvoiceLookupByID(self, id):
-+ from gnucash_business import Invoice
-+ return self.do_lookup_create_oo_instance(
-+ gnc_search_invoice_on_id, Invoice, id)
-+
-+ def CustomerLookupByID(self, id):
-+ from gnucash_business import Customer
-+ return self.do_lookup_create_oo_instance(
-+ gnc_search_customer_on_id, Customer, id)
-+
-+ def VendorLookupByID(self, id):
-+ from gnucash_business import Vendor
-+ return self.do_lookup_create_oo_instance(
-+ gnc_search_vendor_on_id, Vendor, id)
-+
-+ def InvoiceNextID(self, customer):
-+ ''' Return the next invoice ID.
-+ This works but I'm not entirely happy with it. FIX ME'''
-+ from gnucash.gnucash_core_c import gncInvoiceNextID
-+ return gncInvoiceNextID(self.get_instance(),customer.GetEndOwner().get_instance()[1])
-+
-+ def BillNextID(self, vendor):
-+ ''' Return the next Bill ID. '''
-+ from gnucash.gnucash_core_c import gncInvoiceNextID
-+ return gncInvoiceNextID(self.get_instance(),vendor.GetEndOwner().get_instance()[1])
-+
-+ def CustomerNextID(self):
-+ ''' Return the next Customer ID. '''
-+ from gnucash.gnucash_core_c import gncCustomerNextID
-+ return gncCustomerNextID(self.get_instance())
-+
-+ def VendorNextID(self):
-+ ''' Return the next Vendor ID. '''
-+ from gnucash.gnucash_core_c import gncVendorNextID
-+ return gncVendorNextID(self.get_instance())
-+
-+class GncNumeric(GnuCashCoreClass):
-+ """Object used by GnuCash to store all numbers. Always consists of a
-+ numerator and denominator.
-+
-+ The constants GNC_DENOM_AUTO,
-+ GNC_HOW_RND_FLOOR, GNC_HOW_RND_CEIL, GNC_HOW_RND_TRUNC,
-+ GNC_HOW_RND_PROMOTE, GNC_HOW_RND_ROUND_HALF_DOWN,
-+ GNC_HOW_RND_ROUND_HALF_UP, GNC_HOW_RND_ROUND, GNC_HOW_RND_NEVER,
-+ GNC_HOW_DENOM_EXACT, GNC_HOW_DENOM_REDUCE, GNC_HOW_DENOM_LCD,
-+ and GNC_HOW_DENOM_FIXED are available for arithmetic
-+ functions like GncNumeric.add
-+
-+ Look at gnc-numeric.h to see how to use these
-+ """
-+
-+ def __init__(self, num=0, denom=1, **kargs):
-+ """Constructor that allows you to set the numerator and denominator or
-+ leave them blank with a default value of 0 (not a good idea since there
-+ is currently no way to alter the value after instantiation)
-+ """
-+ GnuCashCoreClass.__init__(self, num, denom, **kargs)
-+ #if INSTANCE_ARG in kargs:
-+ # GnuCashCoreClass.__init__(**kargs)
-+ #else:
-+ # self.set_denom(denom) # currently undefined
-+ # self.set_num(num) # currently undefined
-+
-+ def __unicode__(self):
-+ """Returns a human readable numeric value string as UTF8."""
-+ if self.denom() == 0:
-+ return "Division by zero"
-+ else:
-+ value_float = self.to_double()
-+ value_str = u"{0:.{1}f}".format(value_float,2) ## The second argument is the precision. It would be nice to be able to make it configurable.
-+ return value_str
-+
-+ def __str__(self):
-+ """returns a human readable numeric value string as bytes."""
-+ return unicode(self).encode('utf-8')
-+
-+class GncPrice(GnuCashCoreClass):
-+ '''
-+ Each priceEach price in the database represents an "instantaneous"
-+ quote for a given commodity with respect to another commodity.
-+ For example, a given price might represent the value of LNUX in USD on 2001-02-03.
-+
-+ Fields:
-+ * commodity: the item being priced.
-+ * currency: the denomination of the value of the item being priced.
-+ * value: the value of the item being priced.
-+ * time: the time the price was valid.
-+ * source: a string describing the source of the quote. These strings will be something like this:
-+ "Finance::Quote", "user:misc", "user:foo", etc. If the quote came from a user, as a matter of policy,
-+ you *must* prefix the string you give with "user:". For now, the only other reserved values are
-+ "Finance::Quote" and "old-file-import". Any string used must be added to the source_list array in
-+ dialog-price-edit-db.c so that it can be properly translated. (There are unfortunately 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.Each price in the database represents an "instantaneous" quote for a given
-+ commodity with respect to another commodity.
-+ For example, a given price might represent the value of LNUX in USD on 2001-02-03.
-+
-+ See also http://code.gnucash.org/docs/head/group__Price.html
-+ '''
-+ pass
-+GncPrice.add_methods_with_prefix('gnc_price_')
-+
-+
-+class GncPriceDB(GnuCashCoreClass):
-+ '''
-+ a simple price database for gnucash.
-+ The PriceDB is intended to be a database of price quotes, or more specifically,
-+ a database of GNCPrices. For the time being, it is still a fairly simple
-+ database supporting only fairly simple queries. It is expected that new
-+ queries will be added as needed, and that there is some advantage to delaying
-+ complex queries for now in the hope that we get a real DB implementation
-+ before they're really needed.
-+
-+ Every QofBook contains a GNCPriceDB, accessible via gnc_pricedb_get_db.
-+
-+ Definition in file gnc-pricedb.h.
-+ See also http://code.gnucash.org/docs/head/gnc-pricedb_8h.html
-+ '''
-+
-+GncPriceDB.add_methods_with_prefix('gnc_pricedb_')
-+PriceDB_dict = {
-+ 'lookup_latest' : GncPrice,
-+ 'lookup_nearest_in_time' : GncPrice,
-+ 'lookup_latest_before' : GncPrice,
-+ 'convert_balance_latest_price' : GncNumeric,
-+ 'convert_balance_nearest_price' : GncNumeric,
-+ }
-+methods_return_instance(GncPriceDB,PriceDB_dict)
-+GncPriceDB.get_prices = method_function_returns_instance_list(
-+ GncPriceDB.get_prices, GncPrice )
-+
-+
-+class GncCommodity(GnuCashCoreClass): pass
-+
-+class GncCommodityTable(GnuCashCoreClass):
-+ """A CommodityTable provides a way to store and lookup commodities.
-+ Commodities are primarily currencies, but other tradable things such as
-+ stocks, mutual funds, and material substances are possible.
-+
-+ Users of this library should not create their own CommodityTable, instead
-+ the get_table method from the Book class should be used.
-+
-+ This table is automatically populated with the GnuCash default commodity's
-+ which includes most of the world's currencies.
-+ """
-+
-+ pass
-+
-+class GncCommodityNamespace(GnuCashCoreClass):
-+ pass
-+
-+class GncLot(GnuCashCoreClass):
-+ def GetInvoiceFromLot(self):
-+ from gnucash_business import Invoice
-+ return self.do_lookup_create_oo_instance(
-+ gncInvoiceGetInvoiceFromLot, Invoice )
-+
-+class Transaction(GnuCashCoreClass):
-+ """A GnuCash Transaction
-+
-+ Consists of at least one (generally two) splits to represent a transaction
-+ between two accounts.
-+
-+
-+ Has a GetImbalance() method that returns a list of all the imbalanced
-+ currencies. Each list item is a two element tuple, the first element is
-+ the imbalanced commodity, the second element is the value.
-+
-+ Warning, the commodity.get_instance() value can be None when there
-+ is no currency set for the transaction.
-+ """
-+ _new_instance = 'xaccMallocTransaction'
-+ def GetNthSplit(self, n):
-+ return self.GetSplitList().pop(n)
-+
-+ def GetInvoiceFromTxn(self):
-+ from gnucash_business import Transaction
-+ return self.do_lookup_create_oo_instance(
-+ gncInvoiceGetInvoiceFromTxn, Transaction )
-+
-+def decorate_monetary_list_returning_function(orig_function):
-+ def new_function(self):
-+ # warning, item.commodity has been shown to be None
-+ # when the transaction doesn't have a currency
-+ return [(GncCommodity(instance=item.commodity),
-+ GncNumeric(instance=item.value))
-+ for item in orig_function(self) ]
-+ return new_function
-+
-+class Split(GnuCashCoreClass):
-+ """A GnuCash Split
-+
-+ The most basic representation of a movement of currency from one account to
-+ another.
-+ """
-+ _new_instance = 'xaccMallocSplit'
-+
-+class Account(GnuCashCoreClass):
-+ """A GnuCash Account.
-+
-+ A fundamental entity in accounting, an Account provides representation
-+ for a financial object, such as a ACCT_TYPE_BANK account, an
-+ ACCT_TYPE_ASSET (like a building),
-+ a ACCT_TYPE_LIABILITY (such as a bank loan), a summary of some type of
-+ ACCT_TYPE_EXPENSE, or a summary of some source of ACCT_TYPE_INCOME .
-+
-+ The words in upper case are the constants that GnuCash and this library uses
-+ to describe account type. Here is the full list:
-+ ACCT_TYPE_ASSET, ACCT_TYPE_BANK, ACCT_TYPE_CASH, ACCT_TYPE_CHECKING, \
-+ ACCT_TYPE_CREDIT, ACCT_TYPE_EQUITY, ACCT_TYPE_EXPENSE, ACCT_TYPE_INCOME, \
-+ ACCT_TYPE_LIABILITY, ACCT_TYPE_MUTUAL, ACCT_TYPE_PAYABLE, \
-+ ACCT_TYPE_RECEIVABLE, ACCT_TYPE_STOCK, ACCT_TYPE_ROOT, ACCT_TYPE_TRADING
-+
-+ These are not strings, they are attributes you can import from this
-+ module
-+ """
-+ _new_instance = 'xaccMallocAccount'
-+
-+class GUID(GnuCashCoreClass):
-+ _new_instance = 'guid_new_return'
-+
-+# Session
-+Session.add_constructor_and_methods_with_prefix('qof_session_', 'new')
-+
-+def one_arg_default_none(function):
-+ return default_arguments_decorator(function, None, None)
-+Session.decorate_functions(one_arg_default_none, "load", "save")
-+
-+Session.decorate_functions( Session.raise_backend_errors_after_call,
-+ "begin", "load", "save", "end")
-+Session.get_book = method_function_returns_instance(
-+ Session.get_book, Book )
-+
-+Session.book = property( Session.get_book )
-+
-+# import all of the session backend error codes into this module
-+this_module_dict = globals()
-+for error_name, error_value, error_name_after_prefix in \
-+ extract_attributes_with_prefix(gnucash_core_c, 'ERR_'):
-+ this_module_dict[ error_name ] = error_value
-+
-+#backend error codes used for reverse lookup
-+backend_error_dict = {}
-+for error_name, error_value, error_name_after_prefix in \
-+ extract_attributes_with_prefix(gnucash_core_c, 'ERR_'):
-+ backend_error_dict[ error_value ] = error_name
-+
-+# GncNumeric denominator computation schemes
-+# Used for the denom argument in arithmetic functions like GncNumeric.add
-+from gnucash.gnucash_core_c import GNC_DENOM_AUTO
-+
-+# GncNumeric rounding instructions
-+# used for the how argument in arithmetic functions like GncNumeric.add
-+from gnucash.gnucash_core_c import \
-+ GNC_HOW_RND_FLOOR, GNC_HOW_RND_CEIL, GNC_HOW_RND_TRUNC, \
-+ GNC_HOW_RND_PROMOTE, GNC_HOW_RND_ROUND_HALF_DOWN, \
-+ GNC_HOW_RND_ROUND_HALF_UP, GNC_HOW_RND_ROUND, GNC_HOW_RND_NEVER
-+
-+# GncNumeric denominator types
-+# used for the how argument in arithmetic functions like GncNumeric.add
-+from gnucash.gnucash_core_c import \
-+ GNC_HOW_DENOM_EXACT, GNC_HOW_DENOM_REDUCE, GNC_HOW_DENOM_LCD, \
-+ GNC_HOW_DENOM_FIXED
-+
-+# import account types
-+from gnucash.gnucash_core_c import \
-+ ACCT_TYPE_ASSET, ACCT_TYPE_BANK, ACCT_TYPE_CASH, ACCT_TYPE_CHECKING, \
-+ ACCT_TYPE_CREDIT, ACCT_TYPE_EQUITY, ACCT_TYPE_EXPENSE, ACCT_TYPE_INCOME, \
-+ ACCT_TYPE_LIABILITY, ACCT_TYPE_MUTUAL, ACCT_TYPE_PAYABLE, \
-+ ACCT_TYPE_RECEIVABLE, ACCT_TYPE_STOCK, ACCT_TYPE_ROOT, ACCT_TYPE_TRADING
-+
-+#Book
-+Book.add_constructor_and_methods_with_prefix('qof_book_', 'new')
-+Book.add_method('gnc_book_get_root_account', 'get_root_account')
-+Book.add_method('gnc_book_set_root_account', 'set_root_account')
-+Book.add_method('gnc_commodity_table_get_table', 'get_table')
-+Book.add_method('gnc_pricedb_get_db', 'get_price_db')
-+Book.add_method('qof_book_increment_and_format_counter', 'increment_and_format_counter')
-+
-+#Functions that return Account
-+Book.get_root_account = method_function_returns_instance(
-+ Book.get_root_account, Account )
-+#Functions that return GncCommodityTable
-+Book.get_table = method_function_returns_instance(
-+ Book.get_table, GncCommodityTable )
-+#Functions that return GNCPriceDB
-+Book.get_price_db = method_function_returns_instance(
-+ Book.get_price_db, GncPriceDB)
-+
-+# GncNumeric
-+GncNumeric.add_constructor_and_methods_with_prefix('gnc_numeric_', 'create')
-+
-+gncnumeric_dict = {
-+ 'same' : GncNumeric,
-+ 'add' : GncNumeric,
-+ 'sub' : GncNumeric,
-+ 'mul' : GncNumeric,
-+ 'div' : GncNumeric,
-+ 'neg' : GncNumeric,
-+ 'abs' : GncNumeric,
-+ 'add_fixed' : GncNumeric,
-+ 'sub_fixed' : GncNumeric,
-+ 'add_with_error' : GncNumeric,
-+ 'sub_with_error' : GncNumeric,
-+ 'mul_with_error' : GncNumeric,
-+ 'div_with_error' : GncNumeric,
-+ 'convert' : GncNumeric,
-+ 'reduce' : GncNumeric
-+ }
-+methods_return_instance(GncNumeric, gncnumeric_dict)
-+
-+# GncCommodity
-+GncCommodity.add_constructor_and_methods_with_prefix('gnc_commodity_', 'new')
-+#Functions that return GncCommodity
-+GncCommodity.clone = method_function_returns_instance(
-+ GncCommodity.clone, GncCommodity )
-+
-+# GncCommodityTable
-+GncCommodityTable.add_methods_with_prefix('gnc_commodity_table_')
-+commoditytable_dict = {
-+ 'lookup' : GncCommodity,
-+ 'lookup_unique' : GncCommodity,
-+ 'find_full' : GncCommodity,
-+ 'insert' : GncCommodity,
-+ 'add_namespace': GncCommodityNamespace,
-+ 'find_namespace': GncCommodityNamespace,
-+ }
-+methods_return_instance(GncCommodityTable, commoditytable_dict)
-+
-+methods_return_instance_lists(
-+ GncCommodityTable, { 'get_namespaces': GncCommodityNamespace,
-+ 'get_namespaces_list': GncCommodityNamespace,
-+ 'get_commodities': GncCommodity,
-+ 'get_quotable_commodities': GncCommodity,
-+
-+ } )
-+
-+# GncCommodityNamespace
-+GncCommodityNamespace.add_methods_with_prefix('gnc_commodity_namespace_')
-+GncCommodityNamespace.get_commodity_list = \
-+ method_function_returns_instance_list(
-+ GncCommodityNamespace.get_commodity_list, GncCommodity )
-+
-+# GncLot
-+GncLot.add_constructor_and_methods_with_prefix('gnc_lot_', 'new')
-+
-+gnclot_dict = {
-+ 'get_account' : Account,
-+ 'get_book' : Book,
-+ 'get_earliest_split' : Split,
-+ 'get_latest_split' : Split,
-+ 'get_balance' : GncNumeric,
-+ 'lookup' : GncLot,
-+ 'make_default' : GncLot
-+ }
-+methods_return_instance(GncLot, gnclot_dict)
-+
-+# Transaction
-+Transaction.add_methods_with_prefix('xaccTrans')
-+Transaction.add_method('gncTransGetGUID', 'GetGUID');
-+
-+trans_dict = {
-+ 'GetSplit': Split,
-+ 'FindSplitByAccount': Split,
-+ 'Clone': Transaction,
-+ 'Reverse': Transaction,
-+ 'GetReversedBy': Transaction,
-+ 'GetImbalanceValue': GncNumeric,
-+ 'GetAccountValue': GncNumeric,
-+ 'GetAccountAmount': GncNumeric,
-+ 'GetAccountConvRate': GncNumeric,
-+ 'GetAccountBalance': GncNumeric,
-+ 'GetCurrency': GncCommodity,
-+ 'GetGUID': GUID
-+ }
-+
-+methods_return_instance(Transaction, trans_dict)
-+methods_return_instance_lists(
-+ Transaction, { 'GetSplitList': Split,
-+ })
-+Transaction.decorate_functions(
-+ decorate_monetary_list_returning_function, 'GetImbalance')
-+
-+# Split
-+Split.add_methods_with_prefix('xaccSplit')
-+Split.add_method('gncSplitGetGUID', 'GetGUID');
-+
-+split_dict = {
-+ 'GetBook': Book,
-+ 'GetAccount': Account,
-+ 'GetParent': Transaction,
-+ 'Lookup': Split,
-+ 'GetOtherSplit': Split,
-+ 'GetAmount': GncNumeric,
-+ 'GetValue': GncNumeric,
-+ 'GetSharePrice': GncNumeric,
-+ 'ConvertAmount': GncNumeric,
-+ 'GetBaseValue': GncNumeric,
-+ 'GetBalance': GncNumeric,
-+ 'GetClearedBalance': GncNumeric,
-+ 'GetReconciledBalance': GncNumeric,
-+ 'VoidFormerAmount': GncNumeric,
-+ 'VoidFormerValue': GncNumeric,
-+ 'GetGUID': GUID
-+ }
-+methods_return_instance(Split, split_dict)
-+
-+Split.account = property( Split.GetAccount, Split.SetAccount )
-+Split.parent = property( Split.GetParent, Split.SetParent )
-+
-+# Account
-+Account.add_methods_with_prefix('xaccAccount')
-+Account.add_methods_with_prefix('gnc_account_')
-+Account.add_method('gncAccountGetGUID', 'GetGUID');
-+
-+account_dict = {
-+ 'get_book' : Book,
-+ 'Lookup' : Account,
-+ 'get_parent' : Account,
-+ 'get_root' : Account,
-+ 'nth_child' : Account,
-+ 'lookup_by_code' : Account,
-+ 'lookup_by_name' : Account,
-+ 'lookup_by_full_name' : Account,
-+ 'FindTransByDesc' : Transaction,
-+ 'FindSplitByDesc' : Split,
-+ 'GetBalance' : GncNumeric,
-+ 'GetClearedBalance' : GncNumeric,
-+ 'GetReconciledBalance' : GncNumeric,
-+ 'GetPresentBalance' : GncNumeric,
-+ 'GetProjectedMinimumBalance' : GncNumeric,
-+ 'GetBalanceAsOfDate' : GncNumeric,
-+ 'ConvertBalanceToCurrency' : GncNumeric,
-+ 'ConvertBalanceToCurrencyAsOfDate' : GncNumeric,
-+ 'GetBalanceInCurrency' : GncNumeric,
-+ 'GetClearedBalanceInCurrency' : GncNumeric,
-+ 'GetReconciledBalanceInCurrency' : GncNumeric,
-+ 'GetPresentBalanceInCurrency' : GncNumeric,
-+ 'GetProjectedMinimumBalanceInCurrency' : GncNumeric,
-+ 'GetBalanceAsOfDateInCurrency' : GncNumeric,
-+ 'GetBalanceChangeForPeriod' : GncNumeric,
-+ 'GetCommodity' : GncCommodity,
-+ 'GetGUID': GUID
-+ }
-+methods_return_instance(Account, account_dict)
-+methods_return_instance_lists(
-+ Account, { 'GetSplitList': Split,
-+ 'get_children': Account,
-+ 'get_children_sorted': Account,
-+ 'get_descendants': Account,
-+ 'get_descendants_sorted': Account
-+ })
-+Account.name = property( Account.GetName, Account.SetName )
-+
-+#GUID
-+GUID.add_methods_with_prefix('guid_')
-+GUID.add_method('xaccAccountLookup', 'AccountLookup')
-+GUID.add_method('xaccTransLookup', 'TransLookup')
-+GUID.add_method('xaccSplitLookup', 'SplitLookup')
-+
-+## define addition methods for GUID object - do we need these
-+GUID.add_method('guid_to_string', 'to_string')
-+#GUID.add_method('string_to_guid', 'string_to_guid')
-+
-+guid_dict = {
-+ 'copy' : GUID,
-+ 'TransLookup': Transaction,
-+ 'AccountLookup': Account,
-+ 'SplitLookup': Split
-+ }
-+methods_return_instance(GUID, guid_dict)
-+
-+#GUIDString
-+class GUIDString(GnuCashCoreClass):
-+ pass
-+
-+GUIDString.add_constructor_and_methods_with_prefix('string_', 'to_guid')
-+
-+#Query
-+from gnucash_core_c import \
-+ QOF_QUERY_AND, \
-+ QOF_QUERY_OR, \
-+ QOF_QUERY_NAND, \
-+ QOF_QUERY_NOR, \
-+ QOF_QUERY_XOR
-+
-+from gnucash_core_c import \
-+ QOF_STRING_MATCH_NORMAL, \
-+ QOF_STRING_MATCH_CASEINSENSITIVE
-+
-+from gnucash_core_c import \
-+ QOF_COMPARE_LT, \
-+ QOF_COMPARE_LTE, \
-+ QOF_COMPARE_EQUAL, \
-+ QOF_COMPARE_GT, \
-+ QOF_COMPARE_GTE, \
-+ QOF_COMPARE_NEQ
-+
-+from gnucash_core_c import \
-+ INVOICE_TYPE
-+
-+from gnucash_core_c import \
-+ INVOICE_IS_PAID
-+
-+class Query(GnuCashCoreClass):
-+ pass
-+
-+Query.add_constructor_and_methods_with_prefix('qof_query_', 'create')
-+
-+Query.add_method('qof_query_set_book', 'set_book')
-+Query.add_method('qof_query_search_for', 'search_for')
-+Query.add_method('qof_query_run', 'run')
-+Query.add_method('qof_query_add_term', 'add_term')
-+Query.add_method('qof_query_add_boolean_match', 'add_boolean_match')
-+Query.add_method('qof_query_destroy', 'destroy')
-+
-+class QueryStringPredicate(GnuCashCoreClass):
-+ pass
-+
-+QueryStringPredicate.add_constructor_and_methods_with_prefix('qof_query_', 'string_predicate')
-+
-+class QueryBooleanPredicate(GnuCashCoreClass):
-+ pass
-+
-+QueryBooleanPredicate.add_constructor_and_methods_with_prefix('qof_query_', 'boolean_predicate')
-+
-+class QueryInt32Predicate(GnuCashCoreClass):
-+ pass
-+
-+QueryInt32Predicate.add_constructor_and_methods_with_prefix('qof_query_', 'int32_predicate')
diff --git a/finance/gnucash/pkg-plist b/finance/gnucash/pkg-plist
index 9ddd17da7f6c..3421f5181070 100644
--- a/finance/gnucash/pkg-plist
+++ b/finance/gnucash/pkg-plist
@@ -243,6 +243,7 @@ lib/gnucash/libgncmod-ledger-core.so
lib/gnucash/libgncmod-locale-reports-us.so
lib/gnucash/libgncmod-log-replay.so
%%OFX%%lib/gnucash/libgncmod-ofx.so
+%%PYTHON%%lib/gnucash/libgncmod-python.so
lib/gnucash/libgncmod-qif-import.so
lib/gnucash/libgncmod-register-core.so
lib/gnucash/libgncmod-register-gnome.so
@@ -287,11 +288,9 @@ lib/gnucash/scm/ccache/2.0/gnucash/report/aging.go
lib/gnucash/scm/ccache/2.0/gnucash/report/balsheet-eg.go
lib/gnucash/scm/ccache/2.0/gnucash/report/business-reports.go
lib/gnucash/scm/ccache/2.0/gnucash/report/customer-summary.go
-lib/gnucash/scm/ccache/2.0/gnucash/report/easy-invoice.go
lib/gnucash/scm/ccache/2.0/gnucash/report/eguile-gnc.go
lib/gnucash/scm/ccache/2.0/gnucash/report/eguile-html-utilities.go
lib/gnucash/scm/ccache/2.0/gnucash/report/eguile-utilities.go
-lib/gnucash/scm/ccache/2.0/gnucash/report/fancy-invoice.go
lib/gnucash/scm/ccache/2.0/gnucash/report/hello-world.go
lib/gnucash/scm/ccache/2.0/gnucash/report/invoice.go
lib/gnucash/scm/ccache/2.0/gnucash/report/job-report.go
@@ -308,7 +307,6 @@ lib/gnucash/scm/ccache/2.0/gnucash/report/report-system/report-collectors.go
%%TEST%%lib/gnucash/scm/ccache/2.0/gnucash/report/report-system/test/test-collectors.go
%%TEST%%lib/gnucash/scm/ccache/2.0/gnucash/report/report-system/test/test-extras.go
%%TEST%%lib/gnucash/scm/ccache/2.0/gnucash/report/report-system/test/test-load-report-system-module.go
-%%TEST%%lib/gnucash/scm/ccache/2.0/gnucash/report/report-system/test/test-report-utilities.go
%%TEST%%lib/gnucash/scm/ccache/2.0/gnucash/report/report-system/test/test-test-extras.go
lib/gnucash/scm/ccache/2.0/gnucash/report/standard-reports.go
lib/gnucash/scm/ccache/2.0/gnucash/report/standard-reports/account-piecharts.go
@@ -1060,11 +1058,9 @@ share/applications/gnucash.desktop
%%DATADIR%%/scm/gnucash/report/balsheet-eg.scm
%%DATADIR%%/scm/gnucash/report/business-reports.scm
%%DATADIR%%/scm/gnucash/report/customer-summary.scm
-%%DATADIR%%/scm/gnucash/report/easy-invoice.scm
%%DATADIR%%/scm/gnucash/report/eguile-gnc.scm
%%DATADIR%%/scm/gnucash/report/eguile-html-utilities.scm
%%DATADIR%%/scm/gnucash/report/eguile-utilities.scm
-%%DATADIR%%/scm/gnucash/report/fancy-invoice.scm
%%DATADIR%%/scm/gnucash/report/hello-world.scm
%%DATADIR%%/scm/gnucash/report/invoice.scm
%%DATADIR%%/scm/gnucash/report/job-report.scm
@@ -1083,7 +1079,6 @@ share/applications/gnucash.desktop
%%TEST%%%%DATADIR%%/scm/gnucash/report/report-system/test/test-collectors.scm
%%TEST%%%%DATADIR%%/scm/gnucash/report/report-system/test/test-extras.scm
%%TEST%%%%DATADIR%%/scm/gnucash/report/report-system/test/test-load-report-system-module.scm
-%%TEST%%%%DATADIR%%/scm/gnucash/report/report-system/test/test-report-utilities.scm
%%TEST%%%%DATADIR%%/scm/gnucash/report/report-system/test/test-test-extras.scm
%%DATADIR%%/scm/gnucash/report/standard-reports.scm
%%DATADIR%%/scm/gnucash/report/standard-reports/account-piecharts.scm