Submit a payment from somewhere not in the GUI...
Tom Lofts
dev at loftx.co.uk
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):
gnucash.gnucash_business.Customer.add_method('gncOwnerApplyPayment',
'ApplyPayment')
I also use xaccAccountGetLotList (as it's the lots parameter I'm having
problems with)
gnucash.gnucash_core.Account.add_method('xaccAccountGetLotList',
'GetLotList')
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 = session.book.InvoiceLookupByID('000001')
customer = invoice.GetOwner()
transaction = invoice.GetPostedTxn()
lot = invoice.GetPostedLot()
account_guid = gnucash.gnucash_core.GUID()
gnucash.gnucash_core.GUIDString('6ab0f12d91e944d00a2ffa0588e252e6',
account_guid) # AR
posted_acc = account_guid.AccountLookup(session.book)
account_guid2 = gnucash.gnucash_core.GUID()
gnucash.gnucash_core.GUIDString('1886b76bb07786f2a821356d928ec461',
account_guid2) # Liabilities: CC
xfer_acc = account_guid2.AccountLookup(session.book)
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 "gnucash_rest.py", 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)
File
"/usr/local/lib/python2.7/dist-packages/gnucash/function_class.py", line
91, in method_function
*process_list_convert_to_instance(meth_func_args) )
File
"/usr/local/lib/python2.7/dist-packages/gnucash/gnucash_core_c.py", 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?
Thanks,
Tom
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 ufl.edu> 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 gnucash.org
> https://lists.gnucash.org/mailman/listinfo/gnucash-devel
>
More information about the gnucash-devel
mailing list