ref: areg: Avoid reversing transactions list by making sure we sort them

in the correct order to start with.
This commit is contained in:
Stephen Morgan 2021-08-02 13:33:03 +10:00 committed by Simon Michael
parent 4e0dcec096
commit b7e40a9e63

View File

@ -23,9 +23,10 @@ module Hledger.Reports.AccountTransactionsReport (
) )
where where
import Data.List (mapAccumL, nub, partition, sortOn) import Data.List (mapAccumR, nub, partition, sortOn)
import Data.List.Extra (nubSort) import Data.List.Extra (nubSort)
import Data.Maybe (catMaybes) import Data.Maybe (catMaybes)
import Data.Ord (Down(..))
import Data.Text (Text) import Data.Text (Text)
import qualified Data.Text as T import qualified Data.Text as T
import Data.Time.Calendar (Day, addDays) import Data.Time.Calendar (Day, addDays)
@ -116,7 +117,7 @@ accountTransactionsReport rspec@ReportSpec{_rsReportOpts=ropts} j thisacctq = it
-- sort by the transaction's register date, for accurate starting balance -- sort by the transaction's register date, for accurate starting balance
transactions = transactions =
ptraceAtWith 5 (("ts4:\n"++).pshowTransactions) ptraceAtWith 5 (("ts4:\n"++).pshowTransactions)
. sortOn (transactionRegisterDate reportq thisacctq) . sortOn (Down . transactionRegisterDate reportq thisacctq)
. jtxns . jtxns
. ptraceAtWith 5 (("ts3:\n"++).pshowTransactions.jtxns) . ptraceAtWith 5 (("ts3:\n"++).pshowTransactions.jtxns)
-- maybe convert these transactions to cost or value -- maybe convert these transactions to cost or value
@ -154,7 +155,7 @@ accountTransactionsReport rspec@ReportSpec{_rsReportOpts=ropts} j thisacctq = it
mstartdate = queryStartDate (date2_ ropts) reportq mstartdate = queryStartDate (date2_ ropts) reportq
datelessreportq = filterQuery (not . queryIsDateOrDate2) reportq datelessreportq = filterQuery (not . queryIsDateOrDate2) reportq
items = reverse $ accountTransactionsReportItems reportq thisacctq startbal maNegate transactions items = accountTransactionsReportItems reportq thisacctq startbal maNegate transactions
pshowTransactions :: [Transaction] -> String pshowTransactions :: [Transaction] -> String
pshowTransactions = pshow . map (\t -> unwords [show $ tdate t, T.unpack $ tdescription t]) pshowTransactions = pshow . map (\t -> unwords [show $ tdate t, T.unpack $ tdescription t])
@ -166,7 +167,7 @@ pshowTransactions = pshow . map (\t -> unwords [show $ tdate t, T.unpack $ tdesc
accountTransactionsReportItems :: Query -> Query -> MixedAmount -> (MixedAmount -> MixedAmount) -> [Transaction] -> [AccountTransactionsReportItem] accountTransactionsReportItems :: Query -> Query -> MixedAmount -> (MixedAmount -> MixedAmount) -> [Transaction] -> [AccountTransactionsReportItem]
accountTransactionsReportItems reportq thisacctq bal signfn = accountTransactionsReportItems reportq thisacctq bal signfn =
catMaybes . snd . catMaybes . snd .
mapAccumL (accountTransactionsReportItem reportq thisacctq signfn) bal mapAccumR (accountTransactionsReportItem reportq thisacctq signfn) bal
accountTransactionsReportItem :: Query -> Query -> (MixedAmount -> MixedAmount) -> MixedAmount -> Transaction -> (MixedAmount, Maybe AccountTransactionsReportItem) accountTransactionsReportItem :: Query -> Query -> (MixedAmount -> MixedAmount) -> MixedAmount -> Transaction -> (MixedAmount, Maybe AccountTransactionsReportItem)
accountTransactionsReportItem reportq thisacctq signfn bal torig = balItem accountTransactionsReportItem reportq thisacctq signfn bal torig = balItem