rename LedgerTransaction to RawTransaction
This commit is contained in:
parent
f93b988e93
commit
99358f207b
@ -5,7 +5,7 @@ import Types
|
|||||||
import AccountName
|
import AccountName
|
||||||
import Amount
|
import Amount
|
||||||
import LedgerEntry
|
import LedgerEntry
|
||||||
import LedgerTransaction
|
import RawTransaction
|
||||||
import Transaction
|
import Transaction
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -73,7 +73,7 @@ filterLedgerEntries (acctpat,descpat) (RawLedger ms ps es f) =
|
|||||||
where
|
where
|
||||||
filteredentries :: [LedgerEntry]
|
filteredentries :: [LedgerEntry]
|
||||||
filteredentries = (filter matchdesc $ filter (any matchtxn . etransactions) es)
|
filteredentries = (filter matchdesc $ filter (any matchtxn . etransactions) es)
|
||||||
matchtxn :: LedgerTransaction -> Bool
|
matchtxn :: RawTransaction -> Bool
|
||||||
matchtxn t = case matchRegex acctpat (taccount t) of
|
matchtxn t = case matchRegex acctpat (taccount t) of
|
||||||
Nothing -> False
|
Nothing -> False
|
||||||
otherwise -> True
|
otherwise -> True
|
||||||
|
|||||||
@ -2,7 +2,7 @@ module LedgerEntry
|
|||||||
where
|
where
|
||||||
import Utils
|
import Utils
|
||||||
import Types
|
import Types
|
||||||
import LedgerTransaction
|
import RawTransaction
|
||||||
import Amount
|
import Amount
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,13 @@
|
|||||||
{-| all data types & behaviours -}
|
{-|
|
||||||
|
This module makes it easier to import all the hledger "models",
|
||||||
|
the main data types and their "methods".
|
||||||
|
-}
|
||||||
module Models (
|
module Models (
|
||||||
module Types,
|
module Types,
|
||||||
module Currency,
|
module Currency,
|
||||||
module Amount,
|
module Amount,
|
||||||
module AccountName,
|
module AccountName,
|
||||||
module LedgerTransaction,
|
module RawTransaction,
|
||||||
module LedgerEntry,
|
module LedgerEntry,
|
||||||
module TimeLog,
|
module TimeLog,
|
||||||
module Transaction,
|
module Transaction,
|
||||||
@ -19,7 +22,7 @@ import Types
|
|||||||
import Currency
|
import Currency
|
||||||
import Amount
|
import Amount
|
||||||
import AccountName
|
import AccountName
|
||||||
import LedgerTransaction
|
import RawTransaction
|
||||||
import LedgerEntry
|
import LedgerEntry
|
||||||
import TimeLog
|
import TimeLog
|
||||||
import Transaction
|
import Transaction
|
||||||
|
|||||||
6
Parse.hs
6
Parse.hs
@ -248,10 +248,10 @@ ledgerstatus = try (do { char '*'; many1 spacenonewline; return True } ) <|> ret
|
|||||||
ledgercode :: Parser String
|
ledgercode :: Parser String
|
||||||
ledgercode = try (do { char '('; code <- anyChar `manyTill` char ')'; many1 spacenonewline; return code } ) <|> return ""
|
ledgercode = try (do { char '('; code <- anyChar `manyTill` char ')'; many1 spacenonewline; return code } ) <|> return ""
|
||||||
|
|
||||||
ledgertransactions :: Parser [LedgerTransaction]
|
ledgertransactions :: Parser [RawTransaction]
|
||||||
ledgertransactions = (ledgertransaction <?> "transaction") `manyTill` (do {newline <?> "blank line"; return ()} <|> eof)
|
ledgertransactions = (ledgertransaction <?> "transaction") `manyTill` (do {newline <?> "blank line"; return ()} <|> eof)
|
||||||
|
|
||||||
ledgertransaction :: Parser LedgerTransaction
|
ledgertransaction :: Parser RawTransaction
|
||||||
ledgertransaction = do
|
ledgertransaction = do
|
||||||
many1 spacenonewline
|
many1 spacenonewline
|
||||||
account <- ledgeraccount
|
account <- ledgeraccount
|
||||||
@ -259,7 +259,7 @@ ledgertransaction = do
|
|||||||
many spacenonewline
|
many spacenonewline
|
||||||
comment <- ledgercomment
|
comment <- ledgercomment
|
||||||
restofline
|
restofline
|
||||||
return (LedgerTransaction account amount comment)
|
return (RawTransaction account amount comment)
|
||||||
|
|
||||||
-- | account names may have single spaces in them, and are terminated by two or more spaces
|
-- | account names may have single spaces in them, and are terminated by two or more spaces
|
||||||
ledgeraccount :: Parser String
|
ledgeraccount :: Parser String
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
module LedgerTransaction
|
module RawTransaction
|
||||||
where
|
where
|
||||||
import Utils
|
import Utils
|
||||||
import Types
|
import Types
|
||||||
@ -6,9 +6,9 @@ import AccountName
|
|||||||
import Amount
|
import Amount
|
||||||
|
|
||||||
|
|
||||||
instance Show LedgerTransaction where show = showLedgerTransaction
|
instance Show RawTransaction where show = showLedgerTransaction
|
||||||
|
|
||||||
showLedgerTransaction :: LedgerTransaction -> String
|
showLedgerTransaction :: RawTransaction -> String
|
||||||
showLedgerTransaction t = (showaccountname $ taccount t) ++ " " ++ (showamount $ tamount t)
|
showLedgerTransaction t = (showaccountname $ taccount t) ++ " " ++ (showamount $ tamount t)
|
||||||
where
|
where
|
||||||
showaccountname = printf "%-22s" . elideRight 22
|
showaccountname = printf "%-22s" . elideRight 22
|
||||||
@ -19,7 +19,7 @@ elideRight width s =
|
|||||||
True -> take (width - 2) s ++ ".."
|
True -> take (width - 2) s ++ ".."
|
||||||
False -> s
|
False -> s
|
||||||
|
|
||||||
autofillTransactions :: [LedgerTransaction] -> [LedgerTransaction]
|
autofillTransactions :: [RawTransaction] -> [RawTransaction]
|
||||||
autofillTransactions ts =
|
autofillTransactions ts =
|
||||||
case (length blanks) of
|
case (length blanks) of
|
||||||
0 -> ts
|
0 -> ts
|
||||||
@ -30,8 +30,8 @@ autofillTransactions ts =
|
|||||||
isnormal t = (symbol $ currency $ tamount t) /= "AUTO"
|
isnormal t = (symbol $ currency $ tamount t) /= "AUTO"
|
||||||
balance t = if isnormal t then t else t{tamount = -(sumLedgerTransactions normals)}
|
balance t = if isnormal t then t else t{tamount = -(sumLedgerTransactions normals)}
|
||||||
|
|
||||||
sumLedgerTransactions :: [LedgerTransaction] -> Amount
|
sumLedgerTransactions :: [RawTransaction] -> Amount
|
||||||
sumLedgerTransactions = sum . map tamount
|
sumLedgerTransactions = sum . map tamount
|
||||||
|
|
||||||
ledgerTransactionSetPrecision :: Int -> LedgerTransaction -> LedgerTransaction
|
ledgerTransactionSetPrecision :: Int -> RawTransaction -> RawTransaction
|
||||||
ledgerTransactionSetPrecision p (LedgerTransaction a amt c) = LedgerTransaction a amt{precision=p} c
|
ledgerTransactionSetPrecision p (RawTransaction a amt c) = RawTransaction a amt{precision=p} c
|
||||||
30
Tests.hs
30
Tests.hs
@ -59,7 +59,7 @@ assertParseEqual expected parsed =
|
|||||||
|
|
||||||
transaction1_str = " expenses:food:dining $10.00\n"
|
transaction1_str = " expenses:food:dining $10.00\n"
|
||||||
|
|
||||||
transaction1 = LedgerTransaction "expenses:food:dining" (dollars 10) ""
|
transaction1 = RawTransaction "expenses:food:dining" (dollars 10) ""
|
||||||
|
|
||||||
entry1_str = "\
|
entry1_str = "\
|
||||||
\2007/01/28 coopportunity\n\
|
\2007/01/28 coopportunity\n\
|
||||||
@ -69,8 +69,8 @@ entry1_str = "\
|
|||||||
|
|
||||||
entry1 =
|
entry1 =
|
||||||
(LedgerEntry "2007/01/28" False "" "coopportunity" ""
|
(LedgerEntry "2007/01/28" False "" "coopportunity" ""
|
||||||
[LedgerTransaction "expenses:food:groceries" (Amount (getcurrency "$") 47.18 2) "",
|
[RawTransaction "expenses:food:groceries" (Amount (getcurrency "$") 47.18 2) "",
|
||||||
LedgerTransaction "assets:checking" (Amount (getcurrency "$") (-47.18) 2) ""] "")
|
RawTransaction "assets:checking" (Amount (getcurrency "$") (-47.18) 2) ""] "")
|
||||||
|
|
||||||
entry2_str = "\
|
entry2_str = "\
|
||||||
\2007/01/27 * joes diner\n\
|
\2007/01/27 * joes diner\n\
|
||||||
@ -207,10 +207,10 @@ ledger7 = RawLedger
|
|||||||
LedgerEntry {
|
LedgerEntry {
|
||||||
edate="2007/01/01", estatus=False, ecode="*", edescription="opening balance", ecomment="",
|
edate="2007/01/01", estatus=False, ecode="*", edescription="opening balance", ecomment="",
|
||||||
etransactions=[
|
etransactions=[
|
||||||
LedgerTransaction {taccount="assets:cash",
|
RawTransaction {taccount="assets:cash",
|
||||||
tamount=Amount {currency=(getcurrency "$"), quantity=4.82, precision=2},
|
tamount=Amount {currency=(getcurrency "$"), quantity=4.82, precision=2},
|
||||||
tcomment=""},
|
tcomment=""},
|
||||||
LedgerTransaction {taccount="equity:opening balances",
|
RawTransaction {taccount="equity:opening balances",
|
||||||
tamount=Amount {currency=(getcurrency "$"), quantity=(-4.82), precision=2},
|
tamount=Amount {currency=(getcurrency "$"), quantity=(-4.82), precision=2},
|
||||||
tcomment=""}
|
tcomment=""}
|
||||||
],
|
],
|
||||||
@ -220,10 +220,10 @@ ledger7 = RawLedger
|
|||||||
LedgerEntry {
|
LedgerEntry {
|
||||||
edate="2007/02/01", estatus=False, ecode="*", edescription="ayres suites", ecomment="",
|
edate="2007/02/01", estatus=False, ecode="*", edescription="ayres suites", ecomment="",
|
||||||
etransactions=[
|
etransactions=[
|
||||||
LedgerTransaction {taccount="expenses:vacation",
|
RawTransaction {taccount="expenses:vacation",
|
||||||
tamount=Amount {currency=(getcurrency "$"), quantity=179.92, precision=2},
|
tamount=Amount {currency=(getcurrency "$"), quantity=179.92, precision=2},
|
||||||
tcomment=""},
|
tcomment=""},
|
||||||
LedgerTransaction {taccount="assets:checking",
|
RawTransaction {taccount="assets:checking",
|
||||||
tamount=Amount {currency=(getcurrency "$"), quantity=(-179.92), precision=2},
|
tamount=Amount {currency=(getcurrency "$"), quantity=(-179.92), precision=2},
|
||||||
tcomment=""}
|
tcomment=""}
|
||||||
],
|
],
|
||||||
@ -233,10 +233,10 @@ ledger7 = RawLedger
|
|||||||
LedgerEntry {
|
LedgerEntry {
|
||||||
edate="2007/01/02", estatus=False, ecode="*", edescription="auto transfer to savings", ecomment="",
|
edate="2007/01/02", estatus=False, ecode="*", edescription="auto transfer to savings", ecomment="",
|
||||||
etransactions=[
|
etransactions=[
|
||||||
LedgerTransaction {taccount="assets:saving",
|
RawTransaction {taccount="assets:saving",
|
||||||
tamount=Amount {currency=(getcurrency "$"), quantity=200, precision=2},
|
tamount=Amount {currency=(getcurrency "$"), quantity=200, precision=2},
|
||||||
tcomment=""},
|
tcomment=""},
|
||||||
LedgerTransaction {taccount="assets:checking",
|
RawTransaction {taccount="assets:checking",
|
||||||
tamount=Amount {currency=(getcurrency "$"), quantity=(-200), precision=2},
|
tamount=Amount {currency=(getcurrency "$"), quantity=(-200), precision=2},
|
||||||
tcomment=""}
|
tcomment=""}
|
||||||
],
|
],
|
||||||
@ -246,10 +246,10 @@ ledger7 = RawLedger
|
|||||||
LedgerEntry {
|
LedgerEntry {
|
||||||
edate="2007/01/03", estatus=False, ecode="*", edescription="poquito mas", ecomment="",
|
edate="2007/01/03", estatus=False, ecode="*", edescription="poquito mas", ecomment="",
|
||||||
etransactions=[
|
etransactions=[
|
||||||
LedgerTransaction {taccount="expenses:food:dining",
|
RawTransaction {taccount="expenses:food:dining",
|
||||||
tamount=Amount {currency=(getcurrency "$"), quantity=4.82, precision=2},
|
tamount=Amount {currency=(getcurrency "$"), quantity=4.82, precision=2},
|
||||||
tcomment=""},
|
tcomment=""},
|
||||||
LedgerTransaction {taccount="assets:cash",
|
RawTransaction {taccount="assets:cash",
|
||||||
tamount=Amount {currency=(getcurrency "$"), quantity=(-4.82), precision=2},
|
tamount=Amount {currency=(getcurrency "$"), quantity=(-4.82), precision=2},
|
||||||
tcomment=""}
|
tcomment=""}
|
||||||
],
|
],
|
||||||
@ -259,10 +259,10 @@ ledger7 = RawLedger
|
|||||||
LedgerEntry {
|
LedgerEntry {
|
||||||
edate="2007/01/03", estatus=False, ecode="*", edescription="verizon", ecomment="",
|
edate="2007/01/03", estatus=False, ecode="*", edescription="verizon", ecomment="",
|
||||||
etransactions=[
|
etransactions=[
|
||||||
LedgerTransaction {taccount="expenses:phone",
|
RawTransaction {taccount="expenses:phone",
|
||||||
tamount=Amount {currency=(getcurrency "$"), quantity=95.11, precision=2},
|
tamount=Amount {currency=(getcurrency "$"), quantity=95.11, precision=2},
|
||||||
tcomment=""},
|
tcomment=""},
|
||||||
LedgerTransaction {taccount="assets:checking",
|
RawTransaction {taccount="assets:checking",
|
||||||
tamount=Amount {currency=(getcurrency "$"), quantity=(-95.11), precision=2},
|
tamount=Amount {currency=(getcurrency "$"), quantity=(-95.11), precision=2},
|
||||||
tcomment=""}
|
tcomment=""}
|
||||||
],
|
],
|
||||||
@ -272,10 +272,10 @@ ledger7 = RawLedger
|
|||||||
LedgerEntry {
|
LedgerEntry {
|
||||||
edate="2007/01/03", estatus=False, ecode="*", edescription="discover", ecomment="",
|
edate="2007/01/03", estatus=False, ecode="*", edescription="discover", ecomment="",
|
||||||
etransactions=[
|
etransactions=[
|
||||||
LedgerTransaction {taccount="liabilities:credit cards:discover",
|
RawTransaction {taccount="liabilities:credit cards:discover",
|
||||||
tamount=Amount {currency=(getcurrency "$"), quantity=80, precision=2},
|
tamount=Amount {currency=(getcurrency "$"), quantity=80, precision=2},
|
||||||
tcomment=""},
|
tcomment=""},
|
||||||
LedgerTransaction {taccount="assets:checking",
|
RawTransaction {taccount="assets:checking",
|
||||||
tamount=Amount {currency=(getcurrency "$"), quantity=(-80), precision=2},
|
tamount=Amount {currency=(getcurrency "$"), quantity=(-80), precision=2},
|
||||||
tcomment=""}
|
tcomment=""}
|
||||||
],
|
],
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import Utils
|
|||||||
import Types
|
import Types
|
||||||
import Currency
|
import Currency
|
||||||
import Amount
|
import Amount
|
||||||
import LedgerTransaction
|
import RawTransaction
|
||||||
import LedgerEntry
|
import LedgerEntry
|
||||||
import RawLedger
|
import RawLedger
|
||||||
|
|
||||||
@ -32,8 +32,8 @@ entriesFromTimeLogEntries [clockin,clockout] =
|
|||||||
edescription = accountname,
|
edescription = accountname,
|
||||||
ecomment = "",
|
ecomment = "",
|
||||||
etransactions = [
|
etransactions = [
|
||||||
LedgerTransaction accountname amount "",
|
RawTransaction accountname amount "",
|
||||||
LedgerTransaction "TIME" (-amount) ""
|
RawTransaction "TIME" (-amount) ""
|
||||||
],
|
],
|
||||||
epreceding_comment_lines=""}
|
epreceding_comment_lines=""}
|
||||||
]
|
]
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import Utils
|
|||||||
import Types
|
import Types
|
||||||
import AccountName
|
import AccountName
|
||||||
import LedgerEntry
|
import LedgerEntry
|
||||||
import LedgerTransaction
|
import RawTransaction
|
||||||
import Amount
|
import Amount
|
||||||
import Currency
|
import Currency
|
||||||
|
|
||||||
@ -48,11 +48,11 @@ showTransactionsWithBalances ts b =
|
|||||||
showTransactionDescriptionAndBalance :: Transaction -> Amount -> String
|
showTransactionDescriptionAndBalance :: Transaction -> Amount -> String
|
||||||
showTransactionDescriptionAndBalance t b =
|
showTransactionDescriptionAndBalance t b =
|
||||||
(showEntryDescription $ LedgerEntry (date t) False "" (description t) "" [] "")
|
(showEntryDescription $ LedgerEntry (date t) False "" (description t) "" [] "")
|
||||||
++ (showLedgerTransaction $ LedgerTransaction (account t) (amount t) "") ++ (showBalance b)
|
++ (showLedgerTransaction $ RawTransaction (account t) (amount t) "") ++ (showBalance b)
|
||||||
|
|
||||||
showTransactionAndBalance :: Transaction -> Amount -> String
|
showTransactionAndBalance :: Transaction -> Amount -> String
|
||||||
showTransactionAndBalance t b =
|
showTransactionAndBalance t b =
|
||||||
(replicate 32 ' ') ++ (showLedgerTransaction $ LedgerTransaction (account t) (amount t) "") ++ (showBalance b)
|
(replicate 32 ' ') ++ (showLedgerTransaction $ RawTransaction (account t) (amount t) "") ++ (showBalance b)
|
||||||
|
|
||||||
showBalance :: Amount -> String
|
showBalance :: Amount -> String
|
||||||
showBalance b = printf " %12s" (showAmountRoundedOrZero b)
|
showBalance b = printf " %12s" (showAmountRoundedOrZero b)
|
||||||
|
|||||||
16
Types.hs
16
Types.hs
@ -29,8 +29,9 @@ data Amount = Amount {
|
|||||||
-- the chart of accounts
|
-- the chart of accounts
|
||||||
type AccountName = String
|
type AccountName = String
|
||||||
|
|
||||||
-- | a transaction line within a ledger entry.
|
-- | a single transaction line within a ledger entry. We call it raw to
|
||||||
data LedgerTransaction = LedgerTransaction {
|
-- distinguish from the cached 'Transaction'.
|
||||||
|
data RawTransaction = RawTransaction {
|
||||||
taccount :: AccountName,
|
taccount :: AccountName,
|
||||||
tamount :: Amount,
|
tamount :: Amount,
|
||||||
tcomment :: String
|
tcomment :: String
|
||||||
@ -39,13 +40,13 @@ data LedgerTransaction = LedgerTransaction {
|
|||||||
-- | a ledger "modifier" entry. Currently ignored.
|
-- | a ledger "modifier" entry. Currently ignored.
|
||||||
data ModifierEntry = ModifierEntry {
|
data ModifierEntry = ModifierEntry {
|
||||||
valueexpr :: String,
|
valueexpr :: String,
|
||||||
m_transactions :: [LedgerTransaction]
|
m_transactions :: [RawTransaction]
|
||||||
} deriving (Eq)
|
} deriving (Eq)
|
||||||
|
|
||||||
-- | a ledger "periodic" entry. Currently ignored.
|
-- | a ledger "periodic" entry. Currently ignored.
|
||||||
data PeriodicEntry = PeriodicEntry {
|
data PeriodicEntry = PeriodicEntry {
|
||||||
periodexpr :: String,
|
periodexpr :: String,
|
||||||
p_transactions :: [LedgerTransaction]
|
p_transactions :: [RawTransaction]
|
||||||
} deriving (Eq)
|
} deriving (Eq)
|
||||||
|
|
||||||
-- | a regular ledger entry, containing two or more transactions which balance
|
-- | a regular ledger entry, containing two or more transactions which balance
|
||||||
@ -55,12 +56,12 @@ data LedgerEntry = LedgerEntry {
|
|||||||
ecode :: String,
|
ecode :: String,
|
||||||
edescription :: String,
|
edescription :: String,
|
||||||
ecomment :: String,
|
ecomment :: String,
|
||||||
etransactions :: [LedgerTransaction],
|
etransactions :: [RawTransaction],
|
||||||
epreceding_comment_lines :: String
|
epreceding_comment_lines :: String
|
||||||
} deriving (Eq)
|
} deriving (Eq)
|
||||||
|
|
||||||
-- | a parsed ledger file. We call it raw to distinguish from the cached
|
-- | a parsed ledger file. We call it raw to distinguish from the cached
|
||||||
-- version below.
|
-- 'Ledger'.
|
||||||
data RawLedger = RawLedger {
|
data RawLedger = RawLedger {
|
||||||
modifier_entries :: [ModifierEntry],
|
modifier_entries :: [ModifierEntry],
|
||||||
periodic_entries :: [PeriodicEntry],
|
periodic_entries :: [PeriodicEntry],
|
||||||
@ -81,7 +82,8 @@ data TimeLog = TimeLog {
|
|||||||
} deriving (Eq)
|
} deriving (Eq)
|
||||||
|
|
||||||
-- | optimisations: these types provide some caching and are easier to work with.
|
-- | optimisations: these types provide some caching and are easier to work with.
|
||||||
-- A Transaction is a LedgerTransaction with some of its parent
|
--
|
||||||
|
-- A Transaction is a RawTransaction with some of its parent
|
||||||
-- LedgerEntry's data attached.
|
-- LedgerEntry's data attached.
|
||||||
data Transaction = Transaction {
|
data Transaction = Transaction {
|
||||||
entryno :: Int,
|
entryno :: Int,
|
||||||
|
|||||||
@ -28,7 +28,7 @@ hledger ("Main")
|
|||||||
"Transaction"
|
"Transaction"
|
||||||
"RawLedger"
|
"RawLedger"
|
||||||
"LedgerEntry"
|
"LedgerEntry"
|
||||||
"LedgerTransaction"
|
"RawTransaction"
|
||||||
"AccountName"
|
"AccountName"
|
||||||
"Amount"
|
"Amount"
|
||||||
"Currency"
|
"Currency"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user