Submit a payment from somewhere not in the GUI...

Tom Lofts dev at
Fri Nov 14 15:35:47 EST 2014

Hi Allen,

As part of some of the work I've been doing to create a REST like API 
via the Python bindings I've also been trying to make payments via the 
Python API.

I think I've managed to find out how this is intended to be done but 
can't quite get it to work.

The relevant function in the GnuCash core is I believe is 
gncOwnerApplyPayment. This isn't exposed in the Python bindings, so I 
add it to the Customer object with (I can provide an example file with 
this in, but don't have a clean version of the code at the moment):


I also use xaccAccountGetLotList (as it's the lots parameter I'm having 
problems with)


Then attempt to use the following (please note I've hardcoded the GUIDs 
used for the accounts:

session = gnucash.Session(arguments[0], ignore_lock=True)

invoice ='000001')
customer = invoice.GetOwner()

transaction = invoice.GetPostedTxn()
lot = invoice.GetPostedLot()

account_guid = gnucash.gnucash_core.GUID()
account_guid) # AR

posted_acc = account_guid.AccountLookup(

account_guid2 = gnucash.gnucash_core.GUID()
account_guid2) # Liabilities: CC

xfer_acc = account_guid2.AccountLookup(

customer.ApplyPayment(transaction, posted_acc.GetLotList(), posted_acc, 
xfer_acc, invoice.GetTotal(), GncNumeric(0), 
datetime.datetime.strptime('2014-08-11', '%Y-%m-%d'), '', '', False)

Unfortunately this fails with the error:

Traceback (most recent call last):
   File "", line 1622, in <module>
     customer.ApplyPayment(transaction, posted_acc.GetLotList(), 
posted_acc, xfer_acc, invoice.GetTotal(), GncNumeric(0), 
datetime.datetime.strptime('2014-08-11', '%Y-%m-%d'), '', '', False)
"/usr/local/lib/python2.7/dist-packages/gnucash/", line 
91, in method_function
     *process_list_convert_to_instance(meth_func_args) )
"/usr/local/lib/python2.7/dist-packages/gnucash/", line 
2922, in gncOwnerApplyPayment
     return _gnucash_core_c.gncOwnerApplyPayment(*args)
TypeError: in method 'gncOwnerApplyPayment', argument 3 of type 'GList *'

I'm afraid I'm not an expert in either Python, C or SWIG, so I'm not 
sure what the problem is. I've tried a large number of values for the 
lots parameter which this is failing on which is a GList in core:

gncOwnerApplyPayment(GncOwner owner, Transaction txn, GList lots, 
Account posted_acc, Account xfer_acc, gnc_numeric amount,
         gnc_numeric exch, Timespec date, char memo,
         char num, gboolean auto_pay)

So I had assumed this would be a list of lots in Python, but nothing I 
try seems to work here.

Would anyone with experience in this area be able to lend a hand?



On 14/11/14 16:01, Allen S. Rout wrote:
> On 11/14/2014 10:37 AM, John Ralls wrote:
>>> On Nov 14, 2014, at 5:00 AM, Allen S. Rout <asr at> wrote:
>> Ah, from your original question it sounded like you wanted to pass
>> arguments to the command line.
>> I don't know what you mean by "hooks for payments",
> The python includes bindings to make an invoice, make an entry, add the
> entry to the invoice, etc.   No similar collection for payments leapt
> out at my grep. :)
>> but it's possible
>> that the code you want is in the GUI (yeah, we know it doesn't belong
>> there) which would prevent it being exposed in bindings, or written
>> in Scheme.
> Understood, and I totally get your 'yeah, we know'.  I have deep
> sympathy for the fact that you're maintaining, in spare time,  a code
> base which does 'X' pretty darn well and reliably, and people like me
> are whining that it doesn't do 'Y'.
> At the moment it takes me an hour or so to give my club's customer base
> their monthly statements.   It takes me about another hour to carefully
> type in all their payments.  Barring those two repetitive tasks, GnuCash
> is just what the doctor ordered.
> I'm now thinking I'll take a shot at translating Stripe payments
> downloads into quicken format, so GnuCash can absorb them.   I'd be
> pleased to contribute that, if it's something the project would like.
> I'll pay my personal out-of-pocket money for someone to make it possible
> to tell GnuCash, at some command line, the equivalent of
> please export a customer report, for customer [thus], in HTML, to
> [thus].html, with all the other options defaulted.
> I've tilted at that three different times now, and feel like I've
> stopped making progress.
> - Allen S. Rout
> _______________________________________________
> gnucash-devel mailing list
> gnucash-devel at

More information about the gnucash-devel mailing list