hledger/bin/hledger-swap-dates.hs

41 lines
1.2 KiB
Haskell
Raw Normal View History

2019-07-16 07:19:52 +03:00
#!/usr/bin/env stack
2020-12-08 23:57:40 +03:00
-- stack script --compile --resolver lts-16.25
2019-07-16 07:19:52 +03:00
{-# OPTIONS_GHC -Wno-missing-signatures -Wno-name-shadowing #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE RecordWildCards #-}
2019-07-16 07:19:52 +03:00
import Data.String.QQ (s)
2019-07-16 07:19:52 +03:00
import Hledger
import Hledger.Cli
------------------------------------------------------------------------------
cmdmode = hledgerCommandMode
[s| swap-dates
Swap date and date2, on transactions which have date2 defined.
(Does not yet swap posting dates.)
_FLAGS
2019-07-16 07:19:52 +03:00
|]
[]
[generalflagsgroup1]
[]
([], Nothing) -- Just $ argsFlag "[QUERY]")
------------------------------------------------------------------------------
main :: IO ()
main = do
opts@CliOpts{reportspec_=rspec} <- getHledgerCliOpts cmdmode
2019-07-16 07:19:52 +03:00
withJournalDo opts $
\j -> do
2019-07-16 07:19:52 +03:00
d <- getCurrentDay
let
q = rsQuery rspec
ts = filter (q `matchesTransaction`) $ jtxns $ journalSelectingAmountFromOpts (rsOpts rspec) j
ts' = map transactionSwapDates ts
mapM_ (putStrLn . showTransaction) ts'
transactionSwapDates :: Transaction -> Transaction
transactionSwapDates t@Transaction{tdate2=Nothing} = t
transactionSwapDates t@Transaction{tdate2=Just d} = t{tdate=d, tdate2=Just $ tdate t}