imp: nicer invalid balance assignment errors
This commit is contained in:
parent
3135753e94
commit
30080a9aa1
@ -350,7 +350,7 @@ type Balancing s = ReaderT (BalancingState s) (ExceptT String (ST s))
|
|||||||
data BalancingState s = BalancingState {
|
data BalancingState s = BalancingState {
|
||||||
-- read only
|
-- read only
|
||||||
bsStyles :: Maybe (M.Map CommoditySymbol AmountStyle) -- ^ commodity display styles
|
bsStyles :: Maybe (M.Map CommoditySymbol AmountStyle) -- ^ commodity display styles
|
||||||
,bsUnassignable :: S.Set AccountName -- ^ accounts in which balance assignments may not be used
|
,bsUnassignable :: S.Set AccountName -- ^ accounts where balance assignments may not be used (because of auto posting rules)
|
||||||
,bsAssrt :: Bool -- ^ whether to check balance assertions
|
,bsAssrt :: Bool -- ^ whether to check balance assertions
|
||||||
-- mutable
|
-- mutable
|
||||||
,bsBalances :: H.HashTable s AccountName MixedAmount -- ^ running account balances, initially empty
|
,bsBalances :: H.HashTable s AccountName MixedAmount -- ^ running account balances, initially empty
|
||||||
@ -422,8 +422,8 @@ journalBalanceTransactions bopts' j' =
|
|||||||
-- display precisions used in balanced checking
|
-- display precisions used in balanced checking
|
||||||
styles = Just $ journalCommodityStyles j
|
styles = Just $ journalCommodityStyles j
|
||||||
bopts = bopts'{commodity_styles_=styles}
|
bopts = bopts'{commodity_styles_=styles}
|
||||||
-- balance assignments will not be allowed on these
|
-- balance assignments are not allowed on accounts affected by auto postings
|
||||||
txnmodifieraccts = S.fromList . map (paccount . tmprPosting) . concatMap tmpostingrules $ jtxnmodifiers j
|
autopostingaccts = S.fromList . map (paccount . tmprPosting) . concatMap tmpostingrules $ jtxnmodifiers j
|
||||||
in
|
in
|
||||||
runST $ do
|
runST $ do
|
||||||
-- We'll update a mutable array of transactions as we balance them,
|
-- We'll update a mutable array of transactions as we balance them,
|
||||||
@ -448,7 +448,7 @@ journalBalanceTransactions bopts' j' =
|
|||||||
-- 2. Sort these items by date, preserving the order of same-day items,
|
-- 2. Sort these items by date, preserving the order of same-day items,
|
||||||
-- and step through them while keeping running account balances,
|
-- and step through them while keeping running account balances,
|
||||||
runningbals <- lift $ H.newSized (length $ journalAccountNamesUsed j)
|
runningbals <- lift $ H.newSized (length $ journalAccountNamesUsed j)
|
||||||
flip runReaderT (BalancingState styles txnmodifieraccts (not $ ignore_assertions_ bopts) runningbals balancedtxns) $ do
|
flip runReaderT (BalancingState styles autopostingaccts (not $ ignore_assertions_ bopts) runningbals balancedtxns) $ do
|
||||||
-- performing balance assignments in, and balancing, the remaining transactions,
|
-- performing balance assignments in, and balancing, the remaining transactions,
|
||||||
-- and checking balance assertions as each posting is processed.
|
-- and checking balance assertions as each posting is processed.
|
||||||
void $ mapM' balanceTransactionAndCheckAssertionsB $ sortOn (either postingDate tdate) psandts
|
void $ mapM' balanceTransactionAndCheckAssertionsB $ sortOn (either postingDate tdate) psandts
|
||||||
@ -618,30 +618,29 @@ checkIllegalBalanceAssignmentB p = do
|
|||||||
checkBalanceAssignmentPostingDateB :: Posting -> Balancing s ()
|
checkBalanceAssignmentPostingDateB :: Posting -> Balancing s ()
|
||||||
checkBalanceAssignmentPostingDateB p =
|
checkBalanceAssignmentPostingDateB p =
|
||||||
when (hasBalanceAssignment p && isJust (pdate p)) $
|
when (hasBalanceAssignment p && isJust (pdate p)) $
|
||||||
throwError . T.unpack $ T.unlines
|
throwError $ chomp $ unlines [
|
||||||
["postings which are balance assignments may not have a custom date."
|
"can't use balance assignment with custom posting date"
|
||||||
,"Please write the posting amount explicitly, or remove the posting date:"
|
|
||||||
,""
|
,""
|
||||||
,maybe (T.unlines $ showPostingLines p) showTransaction $ ptransaction p
|
,chomp1 $ T.unpack $ maybe (T.unlines $ showPostingLines p) showTransaction $ ptransaction p
|
||||||
|
,"Balance assignments may not be used on postings with a custom posting date"
|
||||||
|
,"(it makes balancing the journal impossible)."
|
||||||
|
,"Please write the posting amount explicitly (or remove the posting date)."
|
||||||
]
|
]
|
||||||
|
|
||||||
-- | Throw an error if this posting is trying to do a balance assignment and
|
-- | Throw an error if this posting is trying to do a balance assignment and
|
||||||
-- the account does not allow balance assignments (eg because it is referenced
|
-- the account does not allow balance assignments (eg because it is referenced
|
||||||
-- by a transaction modifier, which might generate additional postings to it).
|
-- by an auto posting rule, which might generate additional postings to it).
|
||||||
checkBalanceAssignmentUnassignableAccountB :: Posting -> Balancing s ()
|
checkBalanceAssignmentUnassignableAccountB :: Posting -> Balancing s ()
|
||||||
checkBalanceAssignmentUnassignableAccountB p = do
|
checkBalanceAssignmentUnassignableAccountB p = do
|
||||||
unassignable <- R.asks bsUnassignable
|
unassignable <- R.asks bsUnassignable
|
||||||
when (hasBalanceAssignment p && paccount p `S.member` unassignable) $
|
when (hasBalanceAssignment p && paccount p `S.member` unassignable) $
|
||||||
throwError . T.unpack $ T.unlines
|
throwError $ chomp $ unlines [
|
||||||
["balance assignments cannot be used with accounts which are"
|
"can't use balance assignment with auto postings"
|
||||||
,"posted to by transaction modifier rules (auto postings)."
|
|
||||||
,"Please write the posting amount explicitly, or remove the rule."
|
|
||||||
,""
|
,""
|
||||||
,"account: " <> paccount p
|
,chomp1 $ T.unpack $ maybe (T.unlines $ showPostingLines p) (showTransaction) $ ptransaction p
|
||||||
,""
|
,"Balance assignments may not be used on accounts affected by auto posting rules"
|
||||||
,"transaction:"
|
,"(it makes balancing the journal impossible)."
|
||||||
,""
|
,"Please write the posting amount explicitly (or remove the auto posting rule)."
|
||||||
,maybe (T.unlines $ showPostingLines p) showTransaction $ ptransaction p
|
|
||||||
]
|
]
|
||||||
|
|
||||||
-- lenses
|
-- lenses
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user