[GNC] GnuCash 3.7 and Portfolio Report

Christopher Lam christopher.lck at gmail.com
Sun Oct 6 09:31:27 EDT 2019


Hello
If you're using flatpak your portfolio.scm is probably located in another
folder. I am sorry I don't know where exactly. Does anyone know if there is
a flatpak nightly available?

On Sun, 6 Oct 2019 at 13:02, NOSTOP <nostop at tutanota.com> wrote:

> Hello John.
>
> I'm on ver 3.7, Flatpak, Linux Mint 18.3
>
> My file : portfolio.scm is different. There is no "report-currency" to
> change into "currency" at line 199 or anywhere else in the file.
>
>
> *
> portfolio.scm :*
>
>
>
> (define-module (gnucash report standard-reports portfolio))
>
> (use-modules (gnucash main)) ;; FIXME: delete after we finish modularizing.
> (use-modules (srfi srfi-1))
> (use-modules (gnucash gnc-module))
> (use-modules (gnucash gettext))
>
> (use-modules (gnucash printf))
>
> (gnc:module-load "gnucash/report/report-system" 0)
>
> (define reportname (N_ "Investment Portfolio"))
>
> (define optname-price-source (N_ "Price Source"))
> (define optname-shares-digits (N_ "Share decimal places"))
> (define optname-zero-shares (N_ "Include accounts with no shares"))
>
> (define (options-generator)
>   (let* ((options (gnc:new-options))
>          ;; This is just a helper function for making options.
>          ;; See gnucash/src/scm/options.scm for details.
>          (add-option
>           (lambda (new-option)
>             (gnc:register-option options new-option))))
>
>     ;; General Tab
>     ;; date at which to report balance
>     (gnc:options-add-report-date!
>      options gnc:pagename-general
>      (N_ "Date") "a")
>
>     (gnc:options-add-currency!
>      options gnc:pagename-general (N_ "Report's currency") "c")
>
>     (gnc:options-add-price-source!
>      options gnc:pagename-general
>      optname-price-source "d" 'pricedb-latest)
>
>     (add-option
>      (gnc:make-number-range-option
>       gnc:pagename-general optname-shares-digits
>       "e" (N_ "The number of decimal places to use for share numbers.") 2
>       0 6 0 1))
>
>     ;; Account tab
>     (add-option
>      (gnc:make-account-list-option
>       gnc:pagename-accounts (N_ "Accounts")
>       "b"
>       (N_ "Stock Accounts to report on.")
>       (lambda () (filter gnc:account-is-stock?
>                          (gnc-account-get-descendants-sorted
>                           (gnc-get-current-root-account))))
>       (lambda (accounts) (list  #t
>                                 (filter gnc:account-is-stock? accounts)))
>       #t))
>
>     (gnc:register-option
>      options
>      (gnc:make-simple-boolean-option
>       gnc:pagename-accounts optname-zero-shares "e"
>       (N_ "Include accounts that have a zero share balances.")
>       #f))
>
>     (gnc:options-set-default-section options gnc:pagename-general)
>     options))
>
> ;; This is the rendering function. It accepts a database of options
> ;; and generates an object of type <html-document>.  See the file
> ;; report-html.txt for documentation; the file report-html.scm
> ;; includes all the relevant Scheme code. The option database passed
> ;; to the function is one created by the options-generator function
> ;; defined above.
> (define (portfolio-renderer report-obj)
>
>  (let ((work-done 0)
>        (work-to-do 0))
>
>   ;; These are some helper functions for looking up option values.
>   (define (get-op section name)
>     (gnc:lookup-option (gnc:report-options report-obj) section name))
>
>   (define (get-option section name)
>     (gnc:option-value (get-op section name)))
>
>   (define (table-add-stock-rows table accounts to-date currency
>                                 exchange-fn price-fn include-empty
> collector)
>
>    (let ((share-print-info
>           (gnc-share-print-info-places
>            (inexact->exact (get-option gnc:pagename-general
>                                        optname-shares-digits)))))
>
>     (define (table-add-stock-rows-internal accounts odd-row?)
>       (if (null? accounts) collector
>           (let* ((row-style (if odd-row? "normal-row" "alternate-row"))
>                  (current (car accounts))
>                  (rest (cdr accounts))
>                  (commodity (xaccAccountGetCommodity current))
>                  (ticker-symbol (gnc-commodity-get-mnemonic commodity))
>                  (listing (gnc-commodity-get-namespace commodity))
>                  (unit-collector (gnc:account-get-comm-balance-at-date
>                                   current to-date #f))
>                  (units (cadr (unit-collector 'getpair commodity #f)))
>
>                  (price-info (price-fn commodity to-date))
>                  (price (car price-info))
>                  (price-monetary (if price
>                                      (gnc:make-gnc-monetary
>                                       (gnc-price-get-currency price)
>                                       (gnc-price-get-value price))
>                                      (gnc:make-gnc-monetary
>                                       currency
>                                       (cdr price-info))))
>                  (value (exchange-fn (gnc:make-gnc-monetary commodity
> units)
>                                      currency)))
>
>             (set! work-done (+ 1 work-done))
>             (gnc:report-percent-done (* 100 (/ work-done work-to-do)))
>             (if (or include-empty (not (gnc-numeric-zero-p units)))
>                 (begin (collector 'add currency (gnc:gnc-monetary-amount
> value))
>                        (gnc:html-table-append-row/markup!
>                         table
>                         row-style
>                         (list (gnc:html-account-anchor current)
>                               (gnc:make-html-table-header-cell/markup
> "text-cell" ticker-symbol)
>                               (gnc:make-html-table-header-cell/markup
> "text-cell" listing)
>                               (gnc:make-html-table-header-cell/markup
>                                "number-cell"
>                                (xaccPrintAmount units share-print-info))
>                               (gnc:make-html-table-header-cell/markup
>                                "number-cell"
>                                (gnc:html-price-anchor price
> price-monetary))
>                               (gnc:make-html-table-header-cell/markup
>                                "number-cell" value)))
>                        ;;(display (sprintf #f "Shares: %6.6d  "
> (gnc-numeric-to-double
> units)))
>                        ;;(display units) (newline)
>                        (if price (gnc-price-unref price))
>                        (table-add-stock-rows-internal rest (not odd-row?)))
>                 (begin (if price (gnc-price-unref price))
>                        (table-add-stock-rows-internal rest odd-row?))))))
>
>     (set! work-to-do (length accounts))
>     (table-add-stock-rows-internal accounts #t)))
>
>   ;; Tell the user that we're starting.
>   (gnc:report-starting reportname)
>
>   ;; The first thing we do is make local variables for all the specific
>   ;; options in the set of options given to the function. This set will
>   ;; be generated by the options generator above.
>   (let ((to-date     (gnc:date-option-absolute-time
>                       (get-option gnc:pagename-general "Date")))
>         (accounts    (get-option gnc:pagename-accounts "Accounts"))
>         (currency    (get-option gnc:pagename-general "Report's currency"))
>         (report-title (get-option gnc:pagename-general
>                                   gnc:optname-reportname))
>         (price-source (get-option gnc:pagename-general
>                                   optname-price-source))
>         (include-empty (get-option gnc:pagename-accounts
>                                   optname-zero-shares))
>
>         (collector   (gnc:make-commodity-collector))
>         ;; document will be the HTML document that we return.
>         (table (gnc:make-html-table))
>         (document (gnc:make-html-document)))
>
>     (gnc:html-document-set-title!
>      document (string-append
>                report-title
>                (sprintf #f " %s" (gnc-print-date to-date))))
>
>     ;(gnc:debug "accounts" accounts)
>     (if (not (null? accounts))
>         (let* ((commodity-list (gnc:accounts-get-commodities
>                                 (append
>                                  (gnc:acccounts-get-all-subaccounts
>                                   accounts) accounts) currency))
>                (pricedb (gnc-pricedb-get-db (gnc-get-current-book)))
>                (exchange-fn (gnc:case-exchange-fn price-source currency
> to-date))
>                (price-fn
>                 (case price-source
>                   ((weighted-average average-cost)
>                    (lambda (foreign date)
>                     (cons #f (gnc-numeric-div
>                                (gnc:gnc-monetary-amount
>                                   (exchange-fn (gnc:make-gnc-monetary
> foreign
>                                                   (gnc-numeric-create 10000
> 1))
>                                                   currency))
>                                (gnc-numeric-create 10000 1)
>                                GNC-DENOM-AUTO
>                                (logior (GNC-DENOM-SIGFIGS 5)
> GNC-RND-ROUND)))))
>                   ((pricedb-latest)
>                    (lambda (foreign date)
>                      (let* ((price
>                              (gnc-pricedb-lookup-latest-any-currency
>                               pricedb foreign))
>                             (fn (if (and price (> (length price) 0))
>                                         (let ((v (gnc-price-get-value (car
> price))))
>                                           (gnc-price-ref (car price))
>                                           (cons (car price) v))
>                                         (cons #f (gnc-numeric-zero)))))
>                        (if price (gnc-price-list-destroy price))
>                        fn)))
>                   ((pricedb-nearest)
>                    (lambda (foreign date)
>                      (let*  ((price
>
> (gnc-pricedb-lookup-nearest-in-time-any-currency
>                               pricedb foreign (timespecCanonicalDayTime
> date)))
>                             (fn (if (and price (> (length price) 0))
>                                          (let ((v (gnc-price-get-value (car
> price))))
>                                            (gnc-price-ref (car price))
>                                            (cons (car price) v))
>                                          (cons #f (gnc-numeric-zero)))))
>                        (if price (gnc-price-list-destroy price))
>                        fn))))))
>
>           (gnc:html-table-set-col-headers!
>            table
>            (list (_ "Account")
>                  (_ "Symbol")
>                  (_ "Listing")
>                  (_ "Units")
>                  (_ "Price")
>                  (_ "Value")))
>
>           (table-add-stock-rows
>            table accounts to-date currency
>            exchange-fn price-fn include-empty collector)
>
>           (gnc:html-table-append-row/markup!
>            table
>            "grand-total"
>            (list
>             (gnc:make-html-table-cell/size
>              1 6 (gnc:make-html-text (gnc:html-markup-hr)))))
>
>           (collector
>            'format
>            (lambda (currency amount)
>              (gnc:html-table-append-row/markup!
>               table
>               "grand-total"
>               (list (gnc:make-html-table-cell/markup
>                      "total-label-cell" (_ "Total"))
>                     (gnc:make-html-table-cell/size/markup
>                      1 5 "total-number-cell"
>                      (gnc:make-gnc-monetary currency amount)))))
>            #f)
>
>           (gnc:html-document-add-object! document table))
>
>                                         ;if no accounts selected.
>         (gnc:html-document-add-object!
>          document
>          (gnc:html-make-no-account-warning
>           report-title (gnc:report-id report-obj))))
>
>     (gnc:report-finished)
>     document)))
>
> (gnc:define-report
>  'version 1
>  'name reportname
>  'report-guid "4a6b82e8678c4f3d9e85d9f09634ca89"
>  'menu-path (list gnc:menuname-asset-liability)
>  'options-generator options-generator
>  'renderer portfolio-renderer)
>
>
>
>
>
>
> --
> Sent from: http://gnucash.1415818.n4.nabble.com/GnuCash-User-f1415819.html
> _______________________________________________
> gnucash-user mailing list
> gnucash-user at gnucash.org
> To update your subscription preferences or to unsubscribe:
> https://lists.gnucash.org/mailman/listinfo/gnucash-user
> If you are using Nabble or Gmane, please see
> https://wiki.gnucash.org/wiki/Mailing_Lists for more information.
> -----
> Please remember to CC this list on all your replies.
> You can do this by using Reply-To-List or Reply-All.
>


More information about the gnucash-user mailing list