fix: account display order is now tracked across all files (fix #1909)
This commit is contained in:
parent
3b34987bdd
commit
09d66c5fc1
@ -199,7 +199,9 @@ instance Show Journal where
|
||||
-- Note that (<>) is right-biased, so nulljournal is only a left identity.
|
||||
-- In particular, this prevents Journal from being a monoid.
|
||||
instance Semigroup Journal where
|
||||
j1 <> j2 = Journal {
|
||||
j1 <> j2 =
|
||||
journalRenumberAccountDeclarations $
|
||||
Journal {
|
||||
jparsedefaultyear = jparsedefaultyear j2
|
||||
,jparsedefaultcommodity = jparsedefaultcommodity j2
|
||||
,jparsedecimalmark = jparsedecimalmark j2
|
||||
@ -226,6 +228,14 @@ instance Semigroup Journal where
|
||||
,jlastreadtime = max (jlastreadtime j1) (jlastreadtime j2)
|
||||
}
|
||||
|
||||
-- | Renumber all the account declarations. Call this after combining two journals into one,
|
||||
-- so that account declarations have a total order again.
|
||||
journalRenumberAccountDeclarations :: Journal -> Journal
|
||||
journalRenumberAccountDeclarations j = j{jdeclaredaccounts=jdas'}
|
||||
where
|
||||
jdas' = [(a, adi{adideclarationorder=n}) | (n, (a,adi)) <- zip [1..] $ jdeclaredaccounts j]
|
||||
-- XXX the per-file declaration order saved during parsing is discarded; it seems unneeded
|
||||
|
||||
instance Default Journal where
|
||||
def = nulljournal
|
||||
|
||||
|
||||
@ -401,6 +401,9 @@ addAccountDeclaration (a,cmt,tags) =
|
||||
adicomment = cmt
|
||||
,aditags = tags
|
||||
,adideclarationorder = length decls + 1
|
||||
-- this restarts from 1 in each file, which is not that useful
|
||||
-- when there are multiple files; so it gets renumbered
|
||||
-- automatically when combining Journals with <>
|
||||
})
|
||||
in
|
||||
j{jdeclaredaccounts = d:decls})
|
||||
|
||||
Loading…
Reference in New Issue
Block a user