hledger/bin/hledger-report1.hs
Simon Michael 666abefba9 ;pkg:stack: bump all to 2025-04-01 snapshot
This also bumps to fsnotify-0.4.2.0 and hfsevents-0.1.8, fixing some
events being ignored on mac (https://github.com/luite/hfsevents/pull/19),
which could make hledger-ui --watch more reliable (though I haven't
noticed that problem).
2025-04-02 13:20:03 -10:00

62 lines
2.4 KiB
Haskell
Executable File

#!/usr/bin/env stack
-- stack runghc --verbosity error --package hledger --package hledger-lib --package text --package safe
-- (use the local hledger source)
-- -- stack script --compile --resolver nightly-2025-04-01 --verbosity info --package hledger --package text
-- -- (use a released hledger from stackage)
-- A custom compound report - like incomestatement but with different,
-- customisable subheadings/subreports. More verbose and haskelly than
-- hledger-report1.sh but also more robust and powerful.
{-# 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
["report1"
,"A custom compound report - like the incomestatement command but easier to customise."
,"Usage: hledger-report1 [OPTS] [ARGS]"
,"or: hledger report1 -- [OPTS] [ARGS]"
]) [] [generalflagsgroup1] [] ([], Just $ argsFlag "[ARGS]")
main = do
opts@CliOpts{reportspec_=rspec} <- getHledgerCliOpts cmdmode
withJournalDo opts $ flip compoundBalanceCommand opts $
-- see https://hackage.haskell.org/package/hledger/docs/Hledger-Cli-CompoundBalanceCommand.html
-- and https://hackage.haskell.org/package/hledger-lib-1.31/docs/Hledger-Query.html
CompoundBalanceCommandSpec {
cbcdoc = "report1 help text",
cbctitle = "Report1 Statement",
cbcaccum = PerPeriod,
cbcqueries = [
CBCSubreportSpec{
cbcsubreporttitle="Revenues"
,cbcsubreportquery=Type [Revenue]
,cbcsubreportoptions=(\ropts -> ropts{normalbalance_=Just NormallyNegative})
,cbcsubreporttransform=fmap maNegate
,cbcsubreportincreasestotal=True
}
,CBCSubreportSpec{
cbcsubreporttitle="Operating Expenses"
,cbcsubreportquery=And [Type [Expense], Acct $ toRegex' "Operating"]
,cbcsubreportoptions=(\ropts -> ropts{normalbalance_=Just NormallyPositive})
,cbcsubreporttransform=id
,cbcsubreportincreasestotal=False
}
,CBCSubreportSpec{
cbcsubreporttitle="Other Expenses"
,cbcsubreportquery=And [Type [Expense], Not $ Acct $ toRegex' "Operating"]
,cbcsubreportoptions=(\ropts -> ropts{normalbalance_=Just NormallyPositive})
,cbcsubreporttransform=id
,cbcsubreportincreasestotal=False
}
]
}