module Penny.Lincoln (
B.Balance
, B.unBalance
, B.Balanced(Balanced, Inferable, NotInferable)
, B.isBalanced
, B.entryToBalance
, B.addBalances
, B.removeZeroCommodities
, B.BottomLine (Zero, NonZero)
, B.Column (Column)
, I.SubAccount (SubAccount, unSubAccount)
, I.Account(Account, unAccount)
, I.Amount (Amount, qty, commodity, side, spaceBetween)
, I.Commodity (Commodity, unCommodity)
, I.TimeZoneOffset ( offsetToMins )
, I.minsToOffset
, I.noOffset
, I.Hours ( unHours )
, I.intToHours
, I.Minutes ( unMinutes )
, I.intToMinutes
, I.Seconds ( unSeconds )
, I.intToSeconds
, I.zeroSeconds
, I.midnight
, I.DateTime ( .. )
, I.dateTimeMidnightUTC
, I.toUTC
, I.toZonedTime
, I.fromZonedTime
, I.sameInstant
, I.showDateTime
, I.DrCr(Debit, Credit)
, I.opposite
, I.Entry (Entry, drCr, amount)
, I.Flag (Flag, unFlag)
, I.Memo (Memo, unMemo)
, I.Number (Number, unNumber)
, I.Payee (Payee, unPayee)
, I.From(From, unFrom)
, I.To(To, unTo)
, I.CountPerUnit(CountPerUnit, unCountPerUnit)
, I.Price(from, to, countPerUnit)
, I.newPrice
, I.PricePoint ( PricePoint, dateTime, price, ppSide,
ppSpaceBetween, priceLine)
, I.Qty
, I.NumberStr(..)
, I.toQty
, I.mantissa
, I.places
, I.add
, I.mult
, I.difference
, I.equivalent
, I.newQty
, I.Mantissa, I.Places
, I.Difference(..)
, I.allocate
, I.Tag(Tag, unTag)
, I.Tags(Tags, unTags)
, Bd.account
, F.Family(Family)
, F.Child(Child)
, F.Siblings(Siblings)
, F.children
, F.orphans
, F.adopt
, F.marryWith
, F.marry
, F.divorceWith
, F.divorce
, F.filterChildren
, F.find
, F.mapChildren
, F.mapChildrenA
, F.mapParent
, F.mapParentA
, HT.HasText(text)
, HT.HasTextList(textList)
, T.Posting
, T.Transaction
, T.PostFam
, T.transaction
, T.RTransaction(..)
, T.rTransaction
, T.Error ( UnbalancedError, CouldNotInferError)
, T.toUnverified
, T.Inferred(Inferred, NotInferred)
, T.pPayee
, T.pNumber
, T.pFlag
, T.pAccount
, T.pTags
, T.pEntry
, T.pMemo
, T.pInferred
, T.pPostingLine
, T.pGlobalPosting
, T.pFilePosting
, T.TopLine
, T.tDateTime
, T.tFlag
, T.tNumber
, T.tPayee
, T.tMemo
, T.tTopLineLine
, T.tTopMemoLine
, T.tFilename
, T.tGlobalTransaction
, T.tFileTransaction
, T.postFam
, T.unTransaction
, T.unPostFam
, T.Box (Box, boxMeta, boxPostFam)
, T.TopLineChangeData(..)
, T.emptyTopLineChangeData
, T.PostingChangeData(..)
, T.emptyPostingChangeData
, T.changeTransaction
, I.TopLineLine(..)
, I.TopMemoLine(..)
, I.Side(CommodityOnLeft, CommodityOnRight)
, I.SpaceBetween(SpaceBetween, NoSpaceBetween)
, I.Filename(Filename, unFilename)
, I.PriceLine(PriceLine, unPriceLine)
, I.PostingLine(PostingLine, unPostingLine)
, I.GlobalPosting(GlobalPosting, unGlobalPosting)
, I.FilePosting(FilePosting, unFilePosting)
, I.GlobalTransaction(GlobalTransaction, unGlobalTransaction)
, I.FileTransaction(FileTransaction, unFileTransaction)
, DB.PriceDb
, DB.emptyDb
, DB.addPrice
, DB.getPrice
, DB.PriceDbError(FromNotFound, ToNotFound, CpuNotFound)
, DB.convert
, S.Serial
, S.forward
, S.backward
, S.GenSerial
, S.incrementBack
, S.getSerial
, S.makeSerials
, S.serialItems
, S.nSerials
, Matchers.Factory
, display
) where
import qualified Penny.Lincoln.Balance as B
import qualified Penny.Lincoln.Bits as I
import qualified Penny.Lincoln.Builders as Bd
import qualified Penny.Lincoln.Family as F
import qualified Penny.Lincoln.HasText as HT
import qualified Penny.Lincoln.Matchers as Matchers
import qualified Penny.Lincoln.PriceDb as DB
import qualified Penny.Lincoln.Serial as S
import qualified Penny.Lincoln.Transaction as T
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 :: T.PostFam -> Text
display p = X.pack $ concat (intersperse " " ls)
where
ls = [file, lineNo, dt, pye, acct, dc, cmdty, qt]
file = maybe (labelNo "filename") (X.unpack . I.unFilename)
(Q.filename p)
lineNo = maybe (labelNo "line number")
(show . I.unPostingLine) (Q.postingLine p)
dateFormat = "%Y-%m-%d %T %z"
dt = Time.formatTime defaultTimeLocale dateFormat
. Time.utctDay
. I.toUTC
. Q.dateTime
$ p
pye = maybe (labelNo "payee")
(X.unpack . HT.text) (Q.payee p)
acct = X.unpack . X.intercalate (X.singleton ':')
. map I.unSubAccount . I.unAccount . Q.account $ p
dc = case Q.drCr p of
I.Debit -> "Dr"
I.Credit -> "Cr"
cmdty = X.unpack . I.unCommodity . Q.commodity $ p
qt = show . Q.qty $ p
labelNo s = "(no " ++ s ++ ")"