emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] Org and ledger


From: Sharon Kimble
Subject: Re: [O] Org and ledger
Date: Fri, 07 Nov 2014 13:19:10 +0000
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux)

Alan Schmitt <address@hidden> writes:

Thanks Alan for this. Ledger is something that I would dearly love to be
using, but I can't find a good tutorial [by which I mean, it works in
small steps which build on the previous steps]. I've looked at

http://lists.gnu.org/archive/html/emacs-orgmode/2014-04/msg00727.html
http://orgmode.org/worg/org-tutorials/weaving-a-budget.html
http://hledger.org/step-by-step

The last one looked the most promising until I tried "ledger add" which
replied -

--8<---------------cut here---------------start------------->8---
ledger add -f ~/.emacs.d/ledger/ledger.journal
Error: Unrecognized command 'add'
--8<---------------cut here---------------end--------------->8---

So now I'm stumped!

Sharon.

> On 2014-10-31 12:32, Vikas Rawal <address@hidden> writes:
<snip>.
>
> I generate reports and deal with my budget using org. I describe my
> setup here:
> http://lists.gnu.org/archive/html/emacs-orgmode/2014-04/msg00727.html
>
> Since then, I've slightly refined these functions, here is the current
> version:
>
> #+begin_src org
> #+name: call_ledger
> #+begin_src emacs-lisp :var lcmd="bal" :var bucket="Quotidien" :var 
> prefix="Expenses:" :var period=()
>   (let* ((name (org-trim bucket))
>          (bname (concat "'^" prefix name "'"))
>          (ledger "ledger -f ~/Documents/Org/mescomptes.ledger")
>          (parg (when period (concat " -p '" period "'")))
>          (cutcmd "tail -1 | cut -d ' ' -f 2")
>          (cmd 
>           (concat ledger " -J " parg " " lcmd " " bname " | " cutcmd))
>          (res (org-trim (shell-command-to-string cmd))))
>     (if (equal res "") 0 res))
> #+end_src
> #+name: monthly_average_since
> #+begin_src emacs-lisp :var start-date="2014-03-01" :var amount=100
>   (let ((nbdays (- (time-to-days (current-time))
>                    (time-to-days (org-read-date nil t start-date)))))
>     (calc-eval "round($ / (12 * ($$ / 365.25)), 2)" nil amount nbdays))
> #+end_src
>
> #+name: monthly_average
> #+begin_src emacs-lisp :var starty=2014 :var startm=3 :var amount=100 
>   (let* ((tm (decode-time))
>          (cmonth (nth 4 tm))
>          (cyear (nth 5 tm))
>          (nbmonths (+ (* 12 (- cyear starty)) (- cmonth startm))))
>     (calc-eval "round($ / $$, 2)" nil amount nbmonths))
> #+end_src
>
> #+name: ledger_average
> #+begin_src emacs-lisp :var b="Quotidien" :var sy=2014 :var sm=3  :var 
> sd="2014-03-01" :var p="Expenses:"
>   (let* ((per (format "from %d-%d-01 to this month" sy sm))
>          (a (org-sbe call_ledger (bucket (eval b)) (prefix (eval p)) (period 
> (eval per)))))
>     (org-sbe monthly_average (amount (eval a)) (starty (eval sy)) (startm 
> (eval sm))))
> #+end_src
>
> #+name: ledger_budget
> #+BEGIN_SRC emacs-lisp :results output :var table=budget :var year=2014 :var 
> month=04
>   (princ (format "%d-%02d-01 * Budget %d %02d\n" year month year month))
>   (mapcar
>    (lambda (tuple)
>      (princ (format "    Bucket:Expenses:%s    %d €\n" (car tuple) (cadr 
> tuple))))
>    (butlast (cdr table) 1))
>   (princ "    Bucket:Unallocated:EUR\n")
> #+END_SRC
> #+end_src
>
> The table looks like this now
>
> #+begin_src org
> #+name: budget
> | Bucket | Planned | Remaining | This Month | Last Month | Average |
> |--------+---------+-----------+------------+------------+---------|
> | Name   | &       | &         | &          | &          | &       |
> |--------+---------+-----------+------------+------------+---------|
> | Total  | &       | &         | &          | &          | &       |
> #+TBLFM: @2$3..@>>$3='(org-sbe call_ledger (bucket (concat "\"" $1 "\"")) 
> (prefix "\"Bucket:Expenses:\""))
> #+TBLFM: @2$4..@>>$4='(org-sbe call_ledger (bucket (concat "\"" $1 "\"")) 
> (period "\"this month\""))
> #+TBLFM: @2$5..@>>$5='(org-sbe call_ledger (bucket (concat "\"" $1 "\"")) 
> (period "\"last month\""))
> #+TBLFM: @2$6..@>>$6='(org-sbe ledger_average (b (concat "\"" $1 "\"")))
> #+TBLFM: @>$2..@>$6=vsum(@address@hidden)
> #+end_src
>
> Best,
>
> Alan

-- 
A taste of linux = http://www.sharons.org.uk
my git repo = https://bitbucket.org/boudiccas/dots
TGmeds = http://www.tgmeds.org.uk
Debian testing, fluxbox 1.3.5, emacs 24.4.1.0

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]