diff --git a/hledger-lib/Hledger/Data/PeriodicTransaction.hs b/hledger-lib/Hledger/Data/PeriodicTransaction.hs index 153d67e87..3f986cff5 100644 --- a/hledger-lib/Hledger/Data/PeriodicTransaction.hs +++ b/hledger-lib/Hledger/Data/PeriodicTransaction.hs @@ -45,6 +45,17 @@ _ptgen str = do nullperiodictransaction{ ptperiodexpr=t , ptspan=s, ptinterval=i, ptpostings=["a" `post` usd 1] } nulldatespan +_ptgenspan str span = do + let + t = T.pack str + (i,s) = parsePeriodExpr' nulldate t + case checkPeriodicTransactionStartDate i s t of + Just e -> error' e + Nothing -> + mapM_ (putStr . showTransaction) $ + runPeriodicTransaction + nullperiodictransaction{ ptperiodexpr=t , ptspan=s, ptinterval=i, ptpostings=["a" `post` usd 1] } + span --deriving instance Show PeriodicTransaction -- for better pretty-printing: @@ -199,6 +210,28 @@ instance Show PeriodicTransaction where -- >>> let reportperiod="daily from 2018/01/03" in let (i,s) = parsePeriodExpr' nulldate reportperiod in runPeriodicTransaction (nullperiodictransaction{ptperiodexpr=reportperiod, ptspan=s, ptinterval=i, ptpostings=["a" `post` usd 1]}) (DateSpan (Just $ parsedate "2018-01-01") (Just $ parsedate "2018-01-03")) -- [] -- +-- >>> _ptgenspan "every 3 months from 2019-05" (mkdatespan "2020-01-01" "2020-02-01") +-- +-- >>> _ptgenspan "every 3 months from 2019-05" (mkdatespan "2020-02-01" "2020-03-01") +-- 2020/02/01 +-- ; generated-transaction:~ every 3 months from 2019-05 +-- a $1.00 +-- +-- >>> _ptgenspan "every 3 days from 2018" (mkdatespan "2018-01-01" "2018-01-05") +-- 2018/01/01 +-- ; generated-transaction:~ every 3 days from 2018 +-- a $1.00 +-- +-- 2018/01/04 +-- ; generated-transaction:~ every 3 days from 2018 +-- a $1.00 +-- +-- >>> _ptgenspan "every 3 days from 2018" (mkdatespan "2018-01-02" "2018-01-05") +-- 2018/01/04 +-- ; generated-transaction:~ every 3 days from 2018 +-- a $1.00 +-- + runPeriodicTransaction :: PeriodicTransaction -> DateSpan -> [Transaction] runPeriodicTransaction PeriodicTransaction{..} requestedspan = [ t{tdate=d} | (DateSpan (Just d) _) <- alltxnspans, spanContainsDate requestedspan d ]