Re: Custom .scm script: Query account balance
On Wed, 5 Oct 2016, John Ralls wrote: > > > On Oct 5, 2016, at 1:35 AM, Eric Wheeler> > wrote: > > > > On Tue, 4 Oct 2016, Derek Atkins wrote: > > > >> Hi, > >> > >> Eric Wheeler writes: > >> > >>> Hello all, > >>> > >>> I would like to update our invoice .scm template to include a balance > >>> from > >>> an account containing the customer's name (this is separate from any > >>> accounts receivable, it is a retainer liability account). > >>> > >>> I tried digging through the account piechart.scm and the taxinvoice.scm > >>> to > >>> see if I can come up with a way to query the account something like this: > >>> > >>> gnc:account-get-comm-balance-at-date append("Liabilities::Retainers::" > >>> coyname) > >> > >> First, you probably don't need the double-colons. > >> > >>> But I'm not sure how to pass today's date. It's been years since I've > >>> written scheme so any help would be greatly appreciated! > >> > >> (current-time) ?? Or perhaps (localtime (current-time)) -- depending > >> on what you need. > > > > I'm still trying to get to the point where I can specify an account > > (hard-coded) by name in my report to get that account's balance. > > > > I can map all of numerical values for balanaces, but they report all 0s > > for all accounts. This makes me think that "current-time" is being > > evaluated as the epoch, perhaps because it is an invalid data type for the > > gnc:account-get-balance-at-date function. > > > > Do you know how the gnc:account-get-balance-at-date function expects date > > to be represented? > > > > (display (append > >(map > >(lambda (x) (gnc:gnc-numeric-num (gnc:account-get-balance-at-date x > > (current-time) 0))) > >(gnc-account-get-descendants-sorted (gnc-get-current-root-account)) > >)) > > ) > > > > > It's calling gnc:account-get-comm-balance-at-date > (src/report/report-system/report-utilities.scm:462) which in turn sets > the date in the query with xaccQueryAddDateMatchTS (ibid:489). That "TS" > on the end means it's looking for a timespec, a struct containing an > int64_t of seconds since the epoch and an int32_t of nanoseconds (always > 0 in GnuCash, so we're working slowly on replacing timespecs with just > an int64_t of seconds). You'll find functions for creating timespecs in > src/app-utils/date-utilities.scm. Thank you everyone for your help getting balanaces from an account for our invoice report! These are the defines that wrote to simplify the implementation in case it helps anyone else: (define (account-exists name) (let* ( (accts (gnc-account-get-descendants-sorted (gnc-get-current-root-account)) ) ) (not (= (length (filter (lambda (acct) (string=? name (gnc-account-get-full-name acct))) accts ) ) 0 ) ) ) ) (define (get-account-balance acct) (let* ( (bal (gnc:account-get-balance-at-date acct (gnc:date->timepair (localtime (current-time))) 0 ) ) (num (gnc:gnc-numeric-num bal)) (denom (gnc:gnc-numeric-denom bal)) ) (/ num denom 1.0) ) ) (define (get-account-balance-by-name name) (let* ( (accts (gnc-account-get-descendants-sorted (gnc-get-current-root-account)) ) (balpair (map (lambda (acct) (get-account-balance acct)) (filter (lambda (acct) (string=? name (gnc-account-get-full-name acct))) accts ) ) ) ) (car balpair) ) ) -- bal -0.01) (<= bal 0.0)) 0 (* -1 bal) ) ) ) (begin ?> $ remains on
Re: Custom .scm script: Query account balance
> On Oct 5, 2016, at 1:35 AM, Eric Wheeler> wrote: > > On Tue, 4 Oct 2016, Derek Atkins wrote: > >> Hi, >> >> Eric Wheeler writes: >> >>> Hello all, >>> >>> I would like to update our invoice .scm template to include a balance from >>> an account containing the customer's name (this is separate from any >>> accounts receivable, it is a retainer liability account). >>> >>> I tried digging through the account piechart.scm and the taxinvoice.scm to >>> see if I can come up with a way to query the account something like this: >>> >>> gnc:account-get-comm-balance-at-date append("Liabilities::Retainers::" >>> coyname) >> >> First, you probably don't need the double-colons. >> >>> But I'm not sure how to pass today's date. It's been years since I've >>> written scheme so any help would be greatly appreciated! >> >> (current-time) ?? Or perhaps (localtime (current-time)) -- depending >> on what you need. > > I'm still trying to get to the point where I can specify an account > (hard-coded) by name in my report to get that account's balance. > > I can map all of numerical values for balanaces, but they report all 0s > for all accounts. This makes me think that "current-time" is being > evaluated as the epoch, perhaps because it is an invalid data type for the > gnc:account-get-balance-at-date function. > > Do you know how the gnc:account-get-balance-at-date function expects date > to be represented? > > (display (append >(map >(lambda (x) (gnc:gnc-numeric-num (gnc:account-get-balance-at-date x > (current-time) 0))) >(gnc-account-get-descendants-sorted (gnc-get-current-root-account)) >)) > ) > It's calling gnc:account-get-comm-balance-at-date (src/report/report-system/report-utilities.scm:462) which in turn sets the date in the query with xaccQueryAddDateMatchTS (ibid:489). That "TS" on the end means it's looking for a timespec, a struct containing an int64_t of seconds since the epoch and an int32_t of nanoseconds (always 0 in GnuCash, so we're working slowly on replacing timespecs with just an int64_t of seconds). You'll find functions for creating timespecs in src/app-utils/date-utilities.scm. Regards, John Ralls ___ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel
Re: Custom .scm script: Query account balance
On Tue, 4 Oct 2016, Derek Atkins wrote: > Hi, > > Eric Wheelerwrites: > > > Hello all, > > > > I would like to update our invoice .scm template to include a balance from > > an account containing the customer's name (this is separate from any > > accounts receivable, it is a retainer liability account). > > > > I tried digging through the account piechart.scm and the taxinvoice.scm to > > see if I can come up with a way to query the account something like this: > > > > gnc:account-get-comm-balance-at-date append("Liabilities::Retainers::" > > coyname) > > First, you probably don't need the double-colons. > > > But I'm not sure how to pass today's date. It's been years since I've > > written scheme so any help would be greatly appreciated! > > (current-time) ?? Or perhaps (localtime (current-time)) -- depending > on what you need. I'm still trying to get to the point where I can specify an account (hard-coded) by name in my report to get that account's balance. I can map all of numerical values for balanaces, but they report all 0s for all accounts. This makes me think that "current-time" is being evaluated as the epoch, perhaps because it is an invalid data type for the gnc:account-get-balance-at-date function. Do you know how the gnc:account-get-balance-at-date function expects date to be represented? (display (append (map (lambda (x) (gnc:gnc-numeric-num (gnc:account-get-balance-at-date x (current-time) 0))) (gnc-account-get-descendants-sorted (gnc-get-current-root-account)) )) ) -- Eric Wheeler > > > -Eric > > > > -- > > Eric Wheeler > > ___ > > gnucash-devel mailing list > > gnucash-devel@gnucash.org > > https://lists.gnucash.org/mailman/listinfo/gnucash-devel > > -derek > > -- >Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory >Member, MIT Student Information Processing Board (SIPB) >URL: http://web.mit.edu/warlord/PP-ASEL-IA N1NWH >warl...@mit.eduPGP key available > ___ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel
Re: Custom .scm script: Query account balance
Hi, Eric Wheelerwrites: > Hello all, > > I would like to update our invoice .scm template to include a balance from > an account containing the customer's name (this is separate from any > accounts receivable, it is a retainer liability account). > > I tried digging through the account piechart.scm and the taxinvoice.scm to > see if I can come up with a way to query the account something like this: > > gnc:account-get-comm-balance-at-date append("Liabilities::Retainers::" > coyname) First, you probably don't need the double-colons. > But I'm not sure how to pass today's date. It's been years since I've > written scheme so any help would be greatly appreciated! (current-time) ?? Or perhaps (localtime (current-time)) -- depending on what you need. > -Eric > > -- > Eric Wheeler > ___ > gnucash-devel mailing list > gnucash-devel@gnucash.org > https://lists.gnucash.org/mailman/listinfo/gnucash-devel -derek -- Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory Member, MIT Student Information Processing Board (SIPB) URL: http://web.mit.edu/warlord/PP-ASEL-IA N1NWH warl...@mit.eduPGP key available ___ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel
Custom .scm script: Query account balance
Hello all, I would like to update our invoice .scm template to include a balance from an account containing the customer's name (this is separate from any accounts receivable, it is a retainer liability account). I tried digging through the account piechart.scm and the taxinvoice.scm to see if I can come up with a way to query the account something like this: gnc:account-get-comm-balance-at-date append("Liabilities::Retainers::" coyname) But I'm not sure how to pass today's date. It's been years since I've written scheme so any help would be greatly appreciated! -Eric -- Eric Wheeler ___ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel