[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