I've searched this list and it appears some people use Org Mode for outline 
hierarchy, I don't see much mention of using the other Org capabilities 
with beancount.

I've just set up some Org Babel and tables to simplify the process of 
entering and updating currency positions.

First, a babel bash shell block that converts from one currency to another. 
The default here is 1 USD to USD, but you can change the "curfrom" and 
"curto" and "amt" if you want. 

#+NAME: cconv
#+BEGIN_SRC sh :results output :eval no-export :var amt="1", curfrom="USD", 
curto="USD"
val=$(wget -qO- 
"http://www.google.com/finance/converter?a=${amt}&from=${curfrom}&to=${curto}"; 
| gsed '/res/!d;s/<[^>]*>//g' | cut -d" " -f4)
echo $val
#+END_SRC
#+RESULTS: cconv
: 1

Then, an inline babel call to test that the function works when passed 
other arguments

#+CALL: cconv(amt="1", curfrom="USD", curto="CHF")
#+RESULTS:
: 0.9622

Then, an Org Table of all of my currencies I would like to track:

#+NAME: currency_table
| Input | Output |  Value |
|-------+--------+--------|
| USD   | DKK    | 6.5135 |
| USD   | CHF    | 0.9622 |
| DKK   | CAD    | 0.1992 |
#+TBLFM: $3='(org-sbe cconv (amt 1) (curfrom '$1) (curto '$2))

Pressing "C-c C-c" on the #+TBLFM line should update the 3rd column with 
the current conversion rate of each currency.

Finally, another Babel bash shell block that takes the current conversion 
rate and prints the appropriate beancount lines.
Note that because we are using NAMED blocks, all of this code can be 
located anywhere in your document, and the #+RESULTS: prices line located 
in a separate location, and it will still be updated. Also, "prepend" can 
be removed if you want to sort by date decreasing.

#+NAME: prices
#+BEGIN_SRC sh :results output raw prepend :eval no-export :var 
c=currency_table
cc=( $c )
len=$(echo ${#cc[@]})
for (( i=0; i<$len; i+=3 )); do
    line=$(echo $c | cut -d" " -f1-3)   # first three
    c=$(echo $c | cut -d" " -f4-)       # rest of line
    curin=$(echo $line | cut -d" " -f1) # break out first three
    curout=$(echo $line | cut -d" " -f2)
    val=$(echo $line | cut -d" " -f3)
    echo $(date "+%Y-%m-%d") price $curin \\t\\t\\t $val $curout
done
#+END_SRC
#+RESULTS: prices
2017-07-07 price USD 6.5135 DKK
2017-07-07 price USD 0.9622 CHF
2017-07-07 price DKK 0.1992 CAD


Currently this requires evaluating (C-c C-c) the TBLFM and then evaluating 
the #+NAME:prices code block. I think there is a way to force the code 
block to update the table when it is evaluated, saving a bit of time, but I 
am not yet sure how to do that.

I hope this is helpful to someone else,

   -k.


-- 
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/d4d5550c-86e8-49d9-972a-c222d94e0375%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to