rename NormalBalance -> NormalSign
This commit is contained in:
parent
02516ef987
commit
79812f974a
@ -189,14 +189,14 @@ filterAccounts p a
|
|||||||
-- so that the accounts with largest normal balances are listed first.
|
-- so that the accounts with largest normal balances are listed first.
|
||||||
-- The provided normal balance sign determines whether normal balances
|
-- The provided normal balance sign determines whether normal balances
|
||||||
-- are negative or positive.
|
-- are negative or positive.
|
||||||
sortAccountTreeByAmount :: NormalBalance -> Account -> Account
|
sortAccountTreeByAmount :: NormalSign -> Account -> Account
|
||||||
sortAccountTreeByAmount normalsign a
|
sortAccountTreeByAmount normalsign a
|
||||||
| null $ asubs a = a
|
| null $ asubs a = a
|
||||||
| otherwise = a{asubs=
|
| otherwise = a{asubs=
|
||||||
sortBy (maybeflip $ comparing aibalance) $
|
sortBy (maybeflip $ comparing aibalance) $
|
||||||
map (sortAccountTreeByAmount normalsign) $ asubs a}
|
map (sortAccountTreeByAmount normalsign) $ asubs a}
|
||||||
where
|
where
|
||||||
maybeflip | normalsign==NormalNegative = id
|
maybeflip | normalsign==NormallyNegative = id
|
||||||
| otherwise = flip
|
| otherwise = flip
|
||||||
|
|
||||||
-- | Search an account list by name.
|
-- | Search an account list by name.
|
||||||
|
|||||||
@ -362,13 +362,14 @@ data Account = Account {
|
|||||||
aboring :: Bool -- ^ used in the accounts report to label elidable parents
|
aboring :: Bool -- ^ used in the accounts report to label elidable parents
|
||||||
} deriving (Typeable, Data, Generic)
|
} deriving (Typeable, Data, Generic)
|
||||||
|
|
||||||
-- | Whether an account's balance is normally a positive number (in accounting terms,
|
-- | Whether an account's balance is normally a positive number (in
|
||||||
-- normally a debit balance), as for asset and expense accounts, or a negative number
|
-- accounting terms, a debit balance) or a negative number (credit balance).
|
||||||
-- (in accounting terms, normally a credit balance), as for liability, equity and
|
-- Assets and expenses are normally positive (debit), while liabilities, equity
|
||||||
-- income accounts. Cf https://en.wikipedia.org/wiki/Normal_balance .
|
-- and income are normally negative (credit).
|
||||||
data NormalBalance =
|
-- https://en.wikipedia.org/wiki/Normal_balance
|
||||||
NormalPositive -- ^ normally debit - assets, expenses...
|
data NormalSign =
|
||||||
| NormalNegative -- ^ normally credit - liabilities, equity, income...
|
NormallyPositive -- ^ normally debit - assets, expenses...
|
||||||
|
| NormallyNegative -- ^ normally credit - liabilities, equity, income...
|
||||||
deriving (Show, Data, Eq)
|
deriving (Show, Data, Eq)
|
||||||
|
|
||||||
-- | A Ledger has the journal it derives from, and the accounts
|
-- | A Ledger has the journal it derives from, and the accounts
|
||||||
|
|||||||
@ -108,8 +108,8 @@ balanceReport opts q j = (items, total)
|
|||||||
maybesortflat | sort_amount_ opts = sortBy (maybeflip $ comparing balance)
|
maybesortflat | sort_amount_ opts = sortBy (maybeflip $ comparing balance)
|
||||||
| otherwise = id
|
| otherwise = id
|
||||||
where
|
where
|
||||||
maybeflip = if normalbalance_ opts == Just NormalNegative then id else flip
|
maybeflip = if normalbalance_ opts == Just NormallyNegative then id else flip
|
||||||
maybesorttree | sort_amount_ opts = sortAccountTreeByAmount (fromMaybe NormalPositive $ normalbalance_ opts)
|
maybesorttree | sort_amount_ opts = sortAccountTreeByAmount (fromMaybe NormallyPositive $ normalbalance_ opts)
|
||||||
| otherwise = id
|
| otherwise = id
|
||||||
items = dbg1 "items" $ map (balanceReportItem opts q) accts'
|
items = dbg1 "items" $ map (balanceReportItem opts q) accts'
|
||||||
total | not (flat_ opts) = dbg1 "total" $ sum [amt | (_,_,indent,amt) <- items, indent == 0]
|
total | not (flat_ opts) = dbg1 "total" $ sum [amt | (_,_,indent,amt) <- items, indent == 0]
|
||||||
|
|||||||
@ -192,7 +192,7 @@ multiBalanceReport opts q j = MultiBalanceReport (displayspans, sorteditems, tot
|
|||||||
-- Sort the report rows, representing a flat account list, by row total.
|
-- Sort the report rows, representing a flat account list, by row total.
|
||||||
sortFlatMultiBalanceReportRowsByAmount = sortBy (maybeflip $ comparing fifth6)
|
sortFlatMultiBalanceReportRowsByAmount = sortBy (maybeflip $ comparing fifth6)
|
||||||
where
|
where
|
||||||
maybeflip = if normalbalance_ opts == Just NormalNegative then id else flip
|
maybeflip = if normalbalance_ opts == Just NormallyNegative then id else flip
|
||||||
|
|
||||||
-- Sort the report rows, representing a tree of accounts, by row total at each level.
|
-- Sort the report rows, representing a tree of accounts, by row total at each level.
|
||||||
-- To do this we recreate an Account tree with the row totals as balances,
|
-- To do this we recreate an Account tree with the row totals as balances,
|
||||||
@ -209,7 +209,7 @@ multiBalanceReport opts q j = MultiBalanceReport (displayspans, sorteditems, tot
|
|||||||
where
|
where
|
||||||
-- this error should not happen, but it's ugly TODO
|
-- this error should not happen, but it's ugly TODO
|
||||||
setibalance a = a{aibalance=fromMaybe (error "sortTreeMultiBalanceReportRowsByAmount 1") $ lookup (aname a) atotals}
|
setibalance a = a{aibalance=fromMaybe (error "sortTreeMultiBalanceReportRowsByAmount 1") $ lookup (aname a) atotals}
|
||||||
sortedaccounttree = sortAccountTreeByAmount (fromMaybe NormalPositive $ normalbalance_ opts) accounttreewithbals
|
sortedaccounttree = sortAccountTreeByAmount (fromMaybe NormallyPositive $ normalbalance_ opts) accounttreewithbals
|
||||||
sortedaccounts = drop 1 $ flattenAccounts sortedaccounttree
|
sortedaccounts = drop 1 $ flattenAccounts sortedaccounttree
|
||||||
sortedrows = [
|
sortedrows = [
|
||||||
-- this error should not happen, but it's ugly TODO
|
-- this error should not happen, but it's ugly TODO
|
||||||
|
|||||||
@ -102,10 +102,11 @@ data ReportOpts = ReportOpts {
|
|||||||
,value_ :: Bool
|
,value_ :: Bool
|
||||||
,pretty_tables_ :: Bool
|
,pretty_tables_ :: Bool
|
||||||
,sort_amount_ :: Bool
|
,sort_amount_ :: Bool
|
||||||
,normalbalance_ :: Maybe NormalBalance
|
,normalbalance_ :: Maybe NormalSign
|
||||||
-- ^ when running a balance report on accounts of the same normal balance type,
|
-- ^ This can be set when running balance reports on a set of accounts
|
||||||
-- eg in the income section of an income statement, this helps --sort-amount know
|
-- with the same normal balance type (eg all assets, or all incomes).
|
||||||
-- how to sort negative numbers.
|
-- It helps --sort-amount know how to sort negative numbers
|
||||||
|
-- (eg in the income section of an income statement)
|
||||||
,color_ :: Bool
|
,color_ :: Bool
|
||||||
,forecast_ :: Bool
|
,forecast_ :: Bool
|
||||||
,auto_ :: Bool
|
,auto_ :: Bool
|
||||||
|
|||||||
@ -29,8 +29,8 @@ It assumes that these accounts are under a top-level `asset` or `liability`
|
|||||||
account (case insensitive, plural forms also allowed).
|
account (case insensitive, plural forms also allowed).
|
||||||
|],
|
|],
|
||||||
cbctitle = "Balance Sheet",
|
cbctitle = "Balance Sheet",
|
||||||
cbcqueries = [ ("Assets" , journalAssetAccountQuery, Just NormalPositive),
|
cbcqueries = [ ("Assets" , journalAssetAccountQuery, Just NormallyPositive),
|
||||||
("Liabilities", journalLiabilityAccountQuery, Just NormalNegative)
|
("Liabilities", journalLiabilityAccountQuery, Just NormallyNegative)
|
||||||
],
|
],
|
||||||
cbctype = HistoricalBalance
|
cbctype = HistoricalBalance
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,9 +26,9 @@ It assumes that these accounts are under a top-level `asset`, `liability` and `e
|
|||||||
account (plural forms also allowed).
|
account (plural forms also allowed).
|
||||||
|],
|
|],
|
||||||
cbctitle = "Balance Sheet With Equity",
|
cbctitle = "Balance Sheet With Equity",
|
||||||
cbcqueries = [("Assets", journalAssetAccountQuery, Just NormalPositive),
|
cbcqueries = [("Assets", journalAssetAccountQuery, Just NormallyPositive),
|
||||||
("Liabilities", journalLiabilityAccountQuery, Just NormalNegative),
|
("Liabilities", journalLiabilityAccountQuery, Just NormallyNegative),
|
||||||
("Equity", journalEquityAccountQuery, Just NormalNegative)
|
("Equity", journalEquityAccountQuery, Just NormallyNegative)
|
||||||
],
|
],
|
||||||
cbctype = HistoricalBalance
|
cbctype = HistoricalBalance
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,7 +32,7 @@ in "cash" accounts. It assumes that these accounts are under a top-level
|
|||||||
contain `receivable` or `A/R` in their name.
|
contain `receivable` or `A/R` in their name.
|
||||||
|],
|
|],
|
||||||
cbctitle = "Cashflow Statement",
|
cbctitle = "Cashflow Statement",
|
||||||
cbcqueries = [("Cash flows", journalCashAccountQuery, Just NormalPositive)],
|
cbcqueries = [("Cash flows", journalCashAccountQuery, Just NormallyPositive)],
|
||||||
cbctype = PeriodChange
|
cbctype = PeriodChange
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -29,8 +29,8 @@ top-level `revenue` or `income` or `expense` account (case insensitive,
|
|||||||
plural forms also allowed).
|
plural forms also allowed).
|
||||||
|],
|
|],
|
||||||
cbctitle = "Income Statement",
|
cbctitle = "Income Statement",
|
||||||
cbcqueries = [ ("Revenues", journalIncomeAccountQuery, Just NormalNegative),
|
cbcqueries = [ ("Revenues", journalIncomeAccountQuery, Just NormallyNegative),
|
||||||
("Expenses", journalExpenseAccountQuery, Just NormalPositive)
|
("Expenses", journalExpenseAccountQuery, Just NormallyPositive)
|
||||||
],
|
],
|
||||||
cbctype = PeriodChange
|
cbctype = PeriodChange
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,8 +39,8 @@ data CompoundBalanceCommandSpec = CompoundBalanceCommandSpec {
|
|||||||
cbcaliases :: [String], -- ^ command aliases
|
cbcaliases :: [String], -- ^ command aliases
|
||||||
cbchelp :: String, -- ^ command line help
|
cbchelp :: String, -- ^ command line help
|
||||||
cbctitle :: String, -- ^ overall report title
|
cbctitle :: String, -- ^ overall report title
|
||||||
cbcqueries :: [(String, Journal -> Query, Maybe NormalBalance)],
|
cbcqueries :: [(String, Journal -> Query, Maybe NormalSign)],
|
||||||
-- ^ title, journal-parameterised query, and expected normal balance for each subreport.
|
-- ^ title, journal-parameterised query, and normal balance sign for each subreport.
|
||||||
-- The normal balance helps --sort-amount know how to sort negative amounts.
|
-- The normal balance helps --sort-amount know how to sort negative amounts.
|
||||||
cbctype :: BalanceType -- ^ the type of "balance" this report shows (overrides command line flags)
|
cbctype :: BalanceType -- ^ the type of "balance" this report shows (overrides command line flags)
|
||||||
}
|
}
|
||||||
@ -197,7 +197,7 @@ compoundBalanceCommandSingleColumnReport
|
|||||||
-> Journal
|
-> Journal
|
||||||
-> String
|
-> String
|
||||||
-> (Journal -> Query)
|
-> (Journal -> Query)
|
||||||
-> Maybe NormalBalance
|
-> Maybe NormalSign
|
||||||
-> ([String], Sum MixedAmount)
|
-> ([String], Sum MixedAmount)
|
||||||
compoundBalanceCommandSingleColumnReport ropts userq j subreporttitle subreportqfn subreportnormalsign =
|
compoundBalanceCommandSingleColumnReport ropts userq j subreporttitle subreportqfn subreportnormalsign =
|
||||||
([subreportstr], Sum total)
|
([subreportstr], Sum total)
|
||||||
@ -233,7 +233,7 @@ type CompoundBalanceReport =
|
|||||||
|
|
||||||
-- | Run one subreport for a compound balance command in multi-column mode.
|
-- | Run one subreport for a compound balance command in multi-column mode.
|
||||||
-- This returns a MultiBalanceReport.
|
-- This returns a MultiBalanceReport.
|
||||||
compoundBalanceSubreport :: ReportOpts -> Query -> Journal -> (Journal -> Query) -> Maybe NormalBalance -> MultiBalanceReport
|
compoundBalanceSubreport :: ReportOpts -> Query -> Journal -> (Journal -> Query) -> Maybe NormalSign -> MultiBalanceReport
|
||||||
compoundBalanceSubreport ropts userq j subreportqfn subreportnormalsign = r'
|
compoundBalanceSubreport ropts userq j subreportqfn subreportnormalsign = r'
|
||||||
where
|
where
|
||||||
-- force --empty to ensure same columns in all sections
|
-- force --empty to ensure same columns in all sections
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user