diff --git a/src/base-typemaps.i b/src/base-typemaps.i index 87d67cd6c8..a9ac3777c5 100644 --- a/src/base-typemaps.i +++ b/src/base-typemaps.i @@ -192,8 +192,6 @@ typedef char gchar; PyList_Append(list, SWIG_NewPointerObj(data, SWIGTYPE_p__gncEmployee, 0)); else if (GNC_IS_JOB(data)) PyList_Append(list, SWIG_NewPointerObj(data, SWIGTYPE_p__gncJob, 0)); - else if (GNC_IS_OWNER(data)) - PyList_Append(list, SWIG_NewPointerObj(data, SWIGTYPE_p__gncOwner, 0)); else if ($1_descriptor == $descriptor(MonetaryList *)) PyList_Append(list, SWIG_NewPointerObj(data, $descriptor(gnc_monetary *), 0)); else diff --git a/src/optional/python-bindings/gnucash_business.py b/src/optional/python-bindings/gnucash_business.py index 2c248e9121..a4ce0b5478 100644 --- a/src/optional/python-bindings/gnucash_business.py +++ b/src/optional/python-bindings/gnucash_business.py @@ -63,27 +63,13 @@ class GnuCashBusinessEntity(GnuCashCoreClass): else: GnuCashCoreClass.__init__(self, instance=instance) - def ApplyPayment(self, invoice, posted_acc, xfer_acc, amount, - exch, date, memo, num): - if invoice != None: - invoice = invoice.get_instance() - trans = gncOwnerApplyPayment( - self.get_instance(), invoice, posted_acc.get_instance(), - xfer_acc.get_instance(), amount.get_instance(), - exch.get_instance(), date, memo, num) - if trans != None: - trans = Transaction(instance=trans) - return trans - -class Owner(GnuCashBusinessEntity): pass - -class Customer(Owner): pass +class Customer(GnuCashBusinessEntity): pass -class Employee(Owner): pass +class Employee(GnuCashBusinessEntity): pass -class Vendor(Owner): pass +class Vendor(GnuCashBusinessEntity): pass -class Job(Owner): +class Job(GnuCashBusinessEntity): # override the superclass contructor, as Job doesn't require # a currency but it does require an owner def __init__(self, book=None, id=None, owner=None, name=None, @@ -230,7 +216,7 @@ class Entry(GnuCashCoreClass): GnuCashCoreClass.__init__(self, instance=instance) # Owner -Owner.add_constructor_and_methods_with_prefix('gncOwner', 'New') +GnuCashBusinessEntity.add_methods_with_prefix('gncOwner') owner_dict = { 'GetCustomer' : Customer, @@ -239,10 +225,15 @@ owner_dict = { 'GetJob' : Job, 'GetAddr' : Address, 'GetCurrency' : GncCommodity, - 'GetEndOwner': Owner, + 'GetEndOwner': GnuCashBusinessEntity, 'GetBalanceInCurrency': GncNumeric, } -methods_return_instance(Owner, owner_dict) +methods_return_instance(GnuCashBusinessEntity, owner_dict) + +methods_return_instance_lists( + GnuCashBusinessEntity, { + 'GetCommoditiesList': GncCommodity + }) # Customer Customer.add_constructor_and_methods_with_prefix('gncCustomer', 'Create') diff --git a/src/optional/python-bindings/gnucash_core.i b/src/optional/python-bindings/gnucash_core.i index af9a07d15f..dfdc0cc60a 100644 --- a/src/optional/python-bindings/gnucash_core.i +++ b/src/optional/python-bindings/gnucash_core.i @@ -113,8 +113,6 @@ %include -%include - %typemap(out) GncOwner * { GncOwnerType owner_type = gncOwnerGetType($1); PyObject * owner_tuple = PyTuple_New(2); @@ -189,6 +187,7 @@ %include //business-core includes +%include %include %include %include diff --git a/src/optional/python-bindings/tests/Makefile.am b/src/optional/python-bindings/tests/Makefile.am index eccddb0108..77824f2b66 100644 --- a/src/optional/python-bindings/tests/Makefile.am +++ b/src/optional/python-bindings/tests/Makefile.am @@ -9,4 +9,5 @@ EXTRA_DIST = \ test_account.py \ test_book.py \ test_split.py \ - test_transaction.py + test_transaction.py \ + test_business.py diff --git a/src/optional/python-bindings/tests/runTests.py b/src/optional/python-bindings/tests/runTests.py index 2c28854f0e..1b1bb6926c 100644 --- a/src/optional/python-bindings/tests/runTests.py +++ b/src/optional/python-bindings/tests/runTests.py @@ -6,9 +6,10 @@ from test_book import TestBook from test_account import TestAccount from test_split import TestSplit from test_transaction import TestTransaction +from test_business import TestBusiness def test_main(): - test_support.run_unittest(TestBook, TestAccount, TestSplit, TestTransaction) + test_support.run_unittest(TestBook, TestAccount, TestSplit, TestTransaction, TestBusiness) if __name__ == '__main__': test_main() diff --git a/src/optional/python-bindings/tests/test_book.py b/src/optional/python-bindings/tests/test_book.py index 707e838fbc..ebc25fe1a8 100644 --- a/src/optional/python-bindings/tests/test_book.py +++ b/src/optional/python-bindings/tests/test_book.py @@ -6,6 +6,8 @@ class BookSession( TestCase ): def setUp(self): self.ses = Session() self.book = self.ses.get_book() + table = self.book.get_table() + self.currency = table.lookup('CURRENCY', 'EUR') class TestBook( BookSession ): def test_markclosed(self): diff --git a/src/optional/python-bindings/tests/test_business.py b/src/optional/python-bindings/tests/test_business.py new file mode 100644 index 0000000000..03b8864515 --- /dev/null +++ b/src/optional/python-bindings/tests/test_business.py @@ -0,0 +1,82 @@ +from unittest import main + +from datetime import datetime + +from gnucash import Account, \ + ACCT_TYPE_RECEIVABLE, ACCT_TYPE_INCOME, ACCT_TYPE_BANK, \ + GncNumeric +from gnucash.gnucash_business import Vendor, Employee, Customer, Job, Invoice, Entry + +from test_book import BookSession + +class BusinessSession( BookSession ): + def setUp(self): + BookSession.setUp(self) + + self.today = datetime.today() + + self.bank = Account(self.book) + self.bank.SetType(ACCT_TYPE_BANK) + self.bank.SetCommodity(self.currency) + self.income = Account(self.book) + self.income.SetType(ACCT_TYPE_INCOME) + self.income.SetCommodity(self.currency) + self.receivable = Account(self.book) + self.receivable.SetType(ACCT_TYPE_RECEIVABLE) + self.receivable.SetCommodity(self.currency) + + self.customer = Customer(self.book,'CustomerID',self.currency) + self.vendor = Vendor(self.book,'VendorID',self.currency) + self.employee = Employee(self.book,'EmployeeID',self.currency) + self.job = Job(self.book,'JobID',self.customer) + + self.invoice = Invoice(self.book,'InvoiceID',self.currency,self.customer) + self.invoice.SetDateOpened(self.today) + entry = Entry(self.book) + entry.SetDate(self.today) + entry.SetDescription("Some income") + entry.SetQuantity(GncNumeric(1)) + entry.SetInvAccount(self.income) + entry.SetInvPrice(GncNumeric(100)) + self.invoice.AddEntry(entry) + + self.invoice.PostToAccount(self.receivable, + self.today, self.today, "", True) + +class TestBusiness( BusinessSession ): + def test_equal(self): + self.assertTrue( self.vendor.Equal( self.vendor.GetVendor() ) ) + self.assertTrue( self.customer.Equal( self.job.GetOwner() ) ) + self.assertTrue( self.customer.Equal( self.invoice.GetOwner() ) ) + + def test_post(self): + self.assertTrue( self.invoice.IsPosted() ) + + def test_payment(self): + self.assertFalse( self.invoice.IsPaid() ) + self.customer.ApplyPayment( + self.invoice, + self.receivable, self.bank, + GncNumeric(50), GncNumeric(50), + self.today, + "", "") + self.assertFalse( self.invoice.IsPaid() ) + BAL = self.invoice.GetPostedLot().get_balance() + self.assertTrue( GncNumeric(50).equal( BAL ) ) + self.customer.ApplyPayment( + self.invoice, + self.receivable, self.bank, + GncNumeric(50), GncNumeric(50), + self.today, + "", "") + self.assertTrue( self.invoice.IsPaid() ) + + def test_owner(self): + OWNER = self.invoice.GetOwner() + self.assertTrue( self.customer.Equal( OWNER ) ) + + def test_commodities(self): + self.assertTrue( self.currency.equal( self.customer.GetCommoditiesList()[0] ) ) + +if __name__ == '__main__': + main() diff --git a/src/optional/python-bindings/tests/test_split.py b/src/optional/python-bindings/tests/test_split.py index ee3c6662a3..9d7b203ade 100644 --- a/src/optional/python-bindings/tests/test_split.py +++ b/src/optional/python-bindings/tests/test_split.py @@ -18,12 +18,14 @@ class TestSplit( SplitSession ): def test_account(self): ACCT = Account(self.book) + ACCT.SetCommodity(self.currency) self.split.SetAccount(ACCT) self.assertTrue( ACCT.Equal(self.split.GetAccount(), True) ) def test_transaction(self): TRANS = Transaction(self.book) self.split.SetParent(TRANS) + TRANS.SetCurrency(self.currency) TRANS.SetDescription("Foo") self.assertEquals( TRANS.GetDescription(), self.split.GetParent().GetDescription() ) diff --git a/src/optional/python-bindings/tests/test_transaction.py b/src/optional/python-bindings/tests/test_transaction.py index b5f9d5281a..019ac8bcb0 100644 --- a/src/optional/python-bindings/tests/test_transaction.py +++ b/src/optional/python-bindings/tests/test_transaction.py @@ -13,6 +13,7 @@ class TransactionSession( BookSession ): self.split = Split(self.book) self.split.SetParent(self.trans) ############ + self.trans.SetCurrency(self.currency) class TestTransaction( TransactionSession ): def test_equal(self): @@ -26,6 +27,9 @@ class TestTransaction( TransactionSession ): #Clone and original should have the same balance self.assertTrue( TRANS.Equal(self.trans, False, False, True, False) ) + def test_setcurrency(self): + self.assertTrue( self.currency.equal( self.trans.GetCurrency() ) ) + def test_edit(self): self.assertFalse( self.trans.IsOpen() ) self.trans.BeginEdit() @@ -44,6 +48,7 @@ class TestTransaction( TransactionSession ): def test_findsplit(self): ACCT = Account(self.book) + ACCT.SetCommodity(self.currency) self.split.SetAccount( ACCT ) SPLIT = self.trans.FindSplitByAccount( ACCT ) self.assertTrue( SPLIT.Equal(self.split, True, False, False) )