mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-08 07:09:28 +03:00
0eceeb5542
Preserves most inter-entry comment lines and whitespace (but not yet a comment immediately after an entry, or whitespace/comments after the last entry.) Whitespace and comment lines are stored as part of the following entry. Lines after the last entry are stored as an extra ledger file field. Inspired by Nafai on #ledger.
60 lines
2.2 KiB
Haskell
60 lines
2.2 KiB
Haskell
module Transaction
|
|
where
|
|
import Utils
|
|
import Types
|
|
import AccountName
|
|
import LedgerEntry
|
|
import LedgerTransaction
|
|
import Amount
|
|
import Currency
|
|
|
|
|
|
instance Show Transaction where
|
|
show (Transaction eno d desc a amt) =
|
|
unwords [d,desc,a,show amt]
|
|
|
|
-- we use the entry number e to remember the grouping of txns
|
|
flattenEntry :: (LedgerEntry, Int) -> [Transaction]
|
|
flattenEntry (LedgerEntry d _ _ desc _ ts _, e) =
|
|
[Transaction e d desc (taccount t) (tamount t) | t <- ts]
|
|
|
|
transactionSetPrecision :: Int -> Transaction -> Transaction
|
|
transactionSetPrecision p (Transaction e d desc a amt) = Transaction e d desc a amt{precision=p}
|
|
|
|
accountNamesFromTransactions :: [Transaction] -> [AccountName]
|
|
accountNamesFromTransactions ts = nub $ map account ts
|
|
|
|
sumTransactions :: [Transaction] -> Amount
|
|
sumTransactions = sum . map amount
|
|
|
|
-- for register command
|
|
|
|
showTransactionsWithBalances :: [Transaction] -> Amount -> String
|
|
showTransactionsWithBalances [] _ = []
|
|
showTransactionsWithBalances ts b =
|
|
unlines $ showTransactionsWithBalances' ts dummyt b
|
|
where
|
|
dummyt = Transaction 0 "" "" "" (dollars 0)
|
|
showTransactionsWithBalances' [] _ _ = []
|
|
showTransactionsWithBalances' (t:ts) tprev b =
|
|
(if sameentry t tprev
|
|
then [showTransactionAndBalance t b']
|
|
else [showTransactionDescriptionAndBalance t b'])
|
|
++ (showTransactionsWithBalances' ts t b')
|
|
where
|
|
b' = b + (amount t)
|
|
sameentry (Transaction e1 _ _ _ _) (Transaction e2 _ _ _ _) = e1 == e2
|
|
|
|
showTransactionDescriptionAndBalance :: Transaction -> Amount -> String
|
|
showTransactionDescriptionAndBalance t b =
|
|
(showEntryDescription $ LedgerEntry (date t) False "" (description t) "" [] "")
|
|
++ (showLedgerTransaction $ LedgerTransaction (account t) (amount t) "") ++ (showBalance b)
|
|
|
|
showTransactionAndBalance :: Transaction -> Amount -> String
|
|
showTransactionAndBalance t b =
|
|
(replicate 32 ' ') ++ (showLedgerTransaction $ LedgerTransaction (account t) (amount t) "") ++ (showBalance b)
|
|
|
|
showBalance :: Amount -> String
|
|
showBalance b = printf " %12s" (showAmountRoundedOrZero b)
|
|
|