From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alan Schmitt Subject: Re: Org and ledger Date: Thu, 06 Nov 2014 18:27:32 +0100 Message-ID: References: <4AA4F46C-5ABD-481A-8F95-2401FC407E03@agrarianresearch.org> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:39667) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XmQqY-0001Xq-Sz for emacs-orgmode@gnu.org; Thu, 06 Nov 2014 12:27:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XmQqT-00079E-I3 for emacs-orgmode@gnu.org; Thu, 06 Nov 2014 12:27:46 -0500 Received: from mail3-relais-sop.national.inria.fr ([192.134.164.104]:64046) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XmQqT-000790-3t for emacs-orgmode@gnu.org; Thu, 06 Nov 2014 12:27:41 -0500 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Vikas Rawal Cc: org-mode mailing list --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 2014-10-31 12:32, Vikas Rawal writes: > 2. Generating reports: Babel results do not use the standard Org table > syntax. Given my limited knowledge of lisp, I am finding it difficult > to programme customising these reports in Org. It would be of much > benefit if other users could share how they customise ledger reports > in Org. Some examples would be great. 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=3D"bal" :var bucket=3D"Quotidien" :var pre= fix=3D"Expenses:" :var period=3D() (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=20 (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=3D"2014-03-01" :var amount=3D100 (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=3D2014 :var startm=3D3 :var amount=3D100= =20 (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=3D"Quotidien" :var sy=3D2014 :var sm=3D3 :va= r sd=3D"2014-03-01" :var p=3D"Expenses:" (let* ((per (format "from %d-%d-01 to this month" sy sm)) (a (org-sbe call_ledger (bucket (eval b)) (prefix (eval p)) (perio= d (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=3Dbudget :var year=3D2014= :var month=3D04 (princ (format "%d-%02d-01 * Budget %d %02d\n" year month year month)) (mapcar (lambda (tuple) (princ (format " Bucket:Expenses:%s %d =E2=82=AC\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 | =E2=80=A6 | =E2=80=A6 | =E2=80=A6 | =E2= =80=A6 | =E2=80=A6 | |--------+---------+-----------+------------+------------+---------| | Total | =E2=80=A6 | =E2=80=A6 | =E2=80=A6 | =E2= =80=A6 | =E2=80=A6 | #+TBLFM: @2$3..@>>$3=3D'(org-sbe call_ledger (bucket (concat "\"" $1 "\""))= (prefix "\"Bucket:Expenses:\"")) #+TBLFM: @2$4..@>>$4=3D'(org-sbe call_ledger (bucket (concat "\"" $1 "\""))= (period "\"this month\"")) #+TBLFM: @2$5..@>>$5=3D'(org-sbe call_ledger (bucket (concat "\"" $1 "\""))= (period "\"last month\"")) #+TBLFM: @2$6..@>>$6=3D'(org-sbe ledger_average (b (concat "\"" $1 "\""))) #+TBLFM: @>$2..@>$6=3Dvsum(@2..@-1) #+end_src Best, Alan =2D-=20 OpenPGP Key ID : 040D0A3B4ED2E5C7 --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.22 (Darwin) iQEcBAEBCgAGBQJUW6+JAAoJEAQNCjtO0uXHrK0H/0EC7rrCYAMzNCxeV/Wd5CPF d5Aury9vNTcdQfHL4cNhCGoDBMxgTBLqXz5C1VABlhVFbTFL7J2PNaUqRTm8ruP9 sGLhnQhYaNLv3LwejakAJehOFKHTbNMq/5b28x3Nz6dMTG2qnyddenXOk2lDA5Uv cgYUL7J56OOMplghEyz++jUXR+8Fku7M316vLCWfYIb1/3Uwk0NHAzjTd0HQdTeU 0ra6OKEvywRp45YJpn1igM0L4AtyMDDVVzSrYRDEIsyYBt/TtxeqxnV1zAOw5Hhu ktGW5A2cF8JiIbVM7IAsP6Yg8WR3/YQjP2vO9liB2tjVcI4zatqmw34OAjK+E/s= =e/3O -----END PGP SIGNATURE----- --=-=-=--