module Penny.Lincoln
( module Penny.Lincoln.Balance
, module Penny.Lincoln.Bits
, module Penny.Lincoln.Builders
, module Penny.Lincoln.Ents
, module Penny.Lincoln.Equivalent
, module Penny.Lincoln.HasText
, module Penny.Lincoln.Matchers
, module Penny.Lincoln.Natural
, module Penny.Lincoln.PriceDb
, module Penny.Lincoln.Serial
, display
) where
import Penny.Lincoln.Bits
import Penny.Lincoln.Ents
import Penny.Lincoln.Balance
import Penny.Lincoln.Builders
import Penny.Lincoln.Equivalent
import Penny.Lincoln.HasText
import Penny.Lincoln.Matchers
import Penny.Lincoln.Natural
import Penny.Lincoln.PriceDb
import Penny.Lincoln.Serial
import Data.List (intersperse)
import Data.Text (Text)
import qualified Data.Text as X
import qualified Penny.Lincoln.Queries as Q
import qualified Data.Time as Time
import System.Locale (defaultTimeLocale)
display
:: (Amount Qty -> X.Text)
-> Posting
-> Text
display fmt p = X.pack $ concat (intersperse " " ls)
where
ls = [file, lineNo, dt, pye, acct, dc, cmdty, qt]
file = maybe (labelNo "filename") (X.unpack . unFilename)
(fmap tFilename . tlFileMeta . fst . unPosting $ p)
lineNo = maybe (labelNo "line number")
(show . unPostingLine)
(Q.postingLine p)
dateFormat = "%Y-%m-%d %T %z"
dt = Time.formatTime defaultTimeLocale dateFormat
. Time.utctDay
. toUTC
. Q.dateTime
$ p
pye = maybe (labelNo "payee")
(X.unpack . text) (Q.payee p)
acct = X.unpack . X.intercalate (X.singleton ':')
. map unSubAccount . unAccount . Q.account $ p
dc = case Q.drCr p of
Debit -> "Dr"
Credit -> "Cr"
cmdty = X.unpack . unCommodity . Q.commodity $ p
getFmt q = fmt $ Amount q (Q.commodity p)
qt = X.unpack . either showQtyRep getFmt . Q.eiQty $ p
labelNo s = "(no " ++ s ++ ")"