module Penny.Lincoln.Queries where
import qualified Penny.Lincoln.Bits as B
import Penny.Lincoln.Family.Child (child, parent)
import qualified Penny.Lincoln.Transaction as T
import Penny.Lincoln.Balance (Balance, entryToBalance)
import qualified Data.Time as Time
best ::
(T.Posting -> Maybe a)
-> (T.TopLine -> Maybe a)
-> T.PostFam
-> Maybe a
best fp ft c = case fp . child . T.unPostFam $ c of
Just r -> Just r
Nothing -> ft . parent . T.unPostFam $ c
payee :: T.PostFam -> Maybe B.Payee
payee = best T.pPayee T.tPayee
number :: T.PostFam -> Maybe B.Number
number = best T.pNumber T.tNumber
flag :: T.PostFam -> Maybe B.Flag
flag = best T.pFlag T.tFlag
postingMemo :: T.PostFam -> Maybe B.Memo
postingMemo = T.pMemo . child . T.unPostFam
transactionMemo :: T.PostFam -> Maybe B.Memo
transactionMemo = T.tMemo . parent . T.unPostFam
dateTime :: T.PostFam -> B.DateTime
dateTime = T.tDateTime . parent . T.unPostFam
localDay :: T.PostFam -> Time.Day
localDay = B.day . dateTime
account :: T.PostFam -> B.Account
account = T.pAccount . child . T.unPostFam
tags :: T.PostFam -> B.Tags
tags = T.pTags . child . T.unPostFam
entry :: T.PostFam -> B.Entry
entry = T.pEntry . child . T.unPostFam
balance :: T.PostFam -> Balance
balance = entryToBalance . entry
drCr :: T.PostFam -> B.DrCr
drCr = B.drCr . entry
amount :: T.PostFam -> B.Amount
amount = B.amount . entry
qty :: T.PostFam -> B.Qty
qty = B.qty . amount
commodity :: T.PostFam -> B.Commodity
commodity = B.commodity . amount
topMemoLine :: T.PostFam -> Maybe B.TopMemoLine
topMemoLine = T.tTopMemoLine . parent . T.unPostFam
topLineLine :: T.PostFam -> Maybe B.TopLineLine
topLineLine = T.tTopLineLine . parent . T.unPostFam
filename :: T.PostFam -> Maybe B.Filename
filename = T.tFilename . parent . T.unPostFam
globalTransaction :: T.PostFam -> Maybe B.GlobalTransaction
globalTransaction = T.tGlobalTransaction . parent . T.unPostFam
fileTransaction :: T.PostFam -> Maybe B.FileTransaction
fileTransaction = T.tFileTransaction . parent . T.unPostFam
postingLine :: T.PostFam -> Maybe B.PostingLine
postingLine = T.pPostingLine . child . T.unPostFam
side :: T.PostFam -> Maybe B.Side
side = B.side . amount
spaceBetween :: T.PostFam -> Maybe B.SpaceBetween
spaceBetween = B.spaceBetween . amount
globalPosting :: T.PostFam -> Maybe B.GlobalPosting
globalPosting = T.pGlobalPosting . child . T.unPostFam
filePosting :: T.PostFam -> Maybe B.FilePosting
filePosting = T.pFilePosting . child . T.unPostFam