From b49b760497537ce867ac1b90294038bdc17d91e2 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Sun, 29 Jan 2023 16:29:58 -1000 Subject: [PATCH] ;bin: a version of hledger-register-max using a newer API This one uses Hledger.Cli.Script to reduce import boilerplate, and supports --help. --- bin/hledger-register-max2.hs | 53 ++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 bin/hledger-register-max2.hs diff --git a/bin/hledger-register-max2.hs b/bin/hledger-register-max2.hs new file mode 100755 index 000000000..c7b8ef944 --- /dev/null +++ b/bin/hledger-register-max2.hs @@ -0,0 +1,53 @@ +#!/usr/bin/env stack +-- stack runghc --verbosity error --package hledger +-- stack runghc --verbosity error --package hledger --package hledger-lib --package text --package safe +-- stack script --compile --resolver lts-20.8 --verbosity error --package hledger --package text +-- stack script --compile --resolver lts-20.8 --verbosity error --package hledger --package hledger-lib --package text --package safe +-- The topmost stack command above is used to run this script. +-- stack script uses released hledger, stack runghc uses local hledger source. +-- This script currently requires local hledger source, for Hledger.Cli.Script. +------------------------------------78---------------------------------------- + +{-# LANGUAGE OverloadedStrings, PackageImports #-} + +import Hledger.Cli.Script +import qualified "text" Data.Text as T +import qualified "text" Data.Text.IO as T + +cmdmode = hledgerCommandMode (unlines + -- Command name, then --help text, then _FLAGS; empty help lines get stripped: + ["register-match" + ,"Show the register item(s) with maximum (or with --invert, minimum) balance." + ,"Usage: hledger-register-max [REGISTERARGS]" + ,"or: hledger register-max -- [REGISTERARGS]" + ,"For historical balances, add -H. For value, add -V --infer-market-prices." + ,"Examples:" + ,"$ hledger-register-max -f examples/bcexample.hledger -H checking" + ,"2013-01-03 Payroll Assets:US:BofA:Checking 1350.60 USD 8799.22 USD" + ------------------------------------78---------------------------------------- + ,"" + ,"_FLAGS" + ]) + [] [generalflagsgroup1] [] ([], Just $ argsFlag "[ARGS]") -- or Nothing + +main = do + opts@CliOpts{reportspec_=rspec} <- getHledgerCliOpts cmdmode + withJournalDo opts $ \j -> do + let + r = postingsReport rspec j + maxbal = fifth5 $ maximumBy (comparing fifth5) r + is = filter ((== maxbal).fifth5) r + mapM_ printItem is + +printItem (_, _, _, p, bal) = do + let + d = postingDate p + mt = ptransaction p + desc = fmt 30 $ maybe "-" tdescription mt + acct = fmt 30 $ paccount p + amt = fmta 12 $ T.pack $ showMixedAmountOneLine $ pamount p + baltxt = fmta 12 $ T.pack $ showMixedAmountOneLine bal + T.putStrLn $ T.unwords [showDate d, desc, "", acct, "", amt, " ", baltxt] + where + fmt w = formatText True (Just w) (Just w) . textElideRight w + fmta w = formatText False (Just w) Nothing