Python Bindings
Marc Shapiro
marcnshap at gmail.com
Sun Jun 1 18:07:38 EDT 2014
On 05/31/2014 03:43 PM, John Ralls wrote:
> On May 31, 2014, at 3:14 PM, Marc Shapiro <marcnshap at gmail.com> wrote:
>
>> Ooops! I meant to send this to the list.
>>
>> Marc
>>
>> -----------------
>>
>> All in all it sounds like it would be a lot more work that I am really up to at this time. Of course, learning Scheme/Guile is not really any better.
>>
>> What I want is to be able to generate a Balance Sheet with all current transactions, then add in any budget items and/or future transactions up to an arbitrary date in the future to project all of the Balance Sheet accounts as of that arbitrary future date.
>>
>> It seems like it shouldn't be difficult to merge the Budget and Future Transaction info from their reports into the Balance Sheet if I already knew Guile. Unfortunately, I don't know Guile. LISP and its derivatives are just way too different from, say, C/C++ or Python for me to easily get the hang of it.
> Well, you could always write what you need in C or C++ and call it from Python with ctypes or a custom wrapper.
>
> Regards,
> John Ralls
>
I think that I have found a simpler solution, but it is not quite
working. I have narrowed down where the problem is and I think that
this would be very trivial if I understood guile and the gnucash
reporting system better, but I don't. If anyone could look at what I
have and suggest a fix I would appreciate it.
I am now looking at only the differences between account-summary.scm and
sx-summary.scm. These two reports are virtually identical. The format
is the same for both of them. The only differences are the title
displayed at the top of the report and the values displayed for each
account.
The Account Summary (account-summary.scm) has a single report date in
the title and the values for each account are the sum of the actual
transactions through that date. The Scheduled Transaction summary
(sx-summary.scm) has a date range in the title and the values for each
account are the sum of the future transactions within that date range.
The following code is a combination of code from both reports. This
section begins at line 331 in sx-summary.scm and at line 341 in
account-summary.scm. The differences are as follows:
The line "(sx-value-hash (gnc-sx-all-instantiate-cashflow-all
from-date-tp to-date-tp))" as well as the entire function
"get-balance-fn" are only in sx-summary.scm.
The function "get-total-balance-fn" is only in account-summary.scm and
uses date-tp instead of from-date-tp.
Other than the above differences the code in this section is identical.
(let* (
(sx-value-hash (gnc-sx-all-instantiate-cashflow-all
from-date-tp to-date-tp))
(chart-table #f) ;; gnc:html-acct-table
(hold-table (gnc:make-html-table)) ;; temporary
gnc:html-table
(build-table (gnc:make-html-table)) ;; gnc:html-table
reported
(get-total-balance-fn
(lambda (account)
(gnc:account-get-comm-balance-at-date
account from-date-tp #f)))
(table-env ;; parameters for :make-
(list
(list 'start-date from-date-tp)
(list 'end-date to-date-tp)
(list 'display-tree-depth tree-depth)
(list 'depth-limit-behavior bottom-behavior)
(list 'report-commodity report-commodity)
(list 'exchange-fn exchange-fn)
(list 'parent-account-subtotal-mode parent-total-mode)
(list 'zero-balance-mode (if show-zb-accts?
'show-leaf-acct
'omit-leaf-acct))
(list 'account-label-mode (if use-links?
'anchor
'name))
(list 'get-balance-fn
(lambda (account start-date end-date)
(let* ((balance-collector
(gnc:make-commodity-collector))
(guid (gncAccountGetGUID account))
(num-bal (hash-ref sx-value-hash guid)))
(if num-bal
(if (eq? 0 (gnc:gnc-numeric-denom num-bal))
(gnc:warn "Oops, invalid gnc_numeric when
looking up SX balance for account GUID " guid ": " num-bal)
(begin
(balance-collector
'add
(xaccAccountGetCommodity account)
num-bal)
;;(gnc:warn "Yay, we found SX balance
for account GUID " guid)
))
;;(gnc:warn "No SX balance for account GUID "
guid)
)
balance-collector)))
)
)
If I run the code as above, I get only the value of the scheduled
transactions (identical to sx-summary.scm, even though the function
"get-toal-balance-fn" from account-summary.scm is included). If I
comment out the lines that are unique to sx-summary.scm then I get
values equal to those given by account-summary.scm (as would be
expected). If I comment out only the line "(sx-value-hash
(gnc-sx-all-instantiate-cashflow-all from-date-tp to-date-tp))" then I
get a report error. If I comment out only the function "get-balance-fn"
then I get all zeros for the account balances.
My question is: How can I modify this code so that the balance that I
get for each account is the sum of what I would get from each of the
individual reports? Since I can modify this code, simply by commenting
out certain lines, to give me either set of values then it seems that I
ought to be able to get it to give me the set of the sums of both
values. Unfortunately, I am not familiar enough with either guile, or
the gnucash reporting system to figure this one out. Can anyone help me
with this?
Marc
More information about the gnucash-devel
mailing list