penny-lib-0.14.0.0: lib/Penny/Lincoln.hs
-- | Lincoln - the Penny core
--
-- Penny's core types and classes are here. This module re-exports the
-- most useful things. For more details you will want to look at the
-- sub-modules. Also, not all types and functions are re-exported due
-- to naming conflicts. In particular, neither
-- "Penny.Lincoln.Predicates" nor "Penny.Lincoln.Queries" is exported
-- from here due to the blizzard of name conflicts that would result.
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.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.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
--
-- | Displays a PostFam in a one line format.
--
-- Format:
--
-- File LineNo Date Payee Acct DrCr Cmdty Qty
display :: Posting -> Text
display 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
qt = show . Q.qty $ p
labelNo s = "(no " ++ s ++ ")"