From 3af8eb3bc64a81b3eba0e852509db0473a0ee09c Mon Sep 17 00:00:00 2001 From: Henning Thielemann Date: Sun, 11 Aug 2024 11:44:21 +0200 Subject: [PATCH] cli: Command.Balance: use Date format for dates in LayoutTidy --- hledger-lib/Hledger/Write/Html.hs | 1 + hledger-lib/Hledger/Write/Ods.hs | 34 +++++++++++++++++++----- hledger-lib/Hledger/Write/Spreadsheet.hs | 1 + hledger/Hledger/Cli/Commands/Balance.hs | 5 ++-- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/hledger-lib/Hledger/Write/Html.hs b/hledger-lib/Hledger/Write/Html.hs index 037d3dc8a..b748876cb 100644 --- a/hledger-lib/Hledger/Write/Html.hs +++ b/hledger-lib/Hledger/Write/Html.hs @@ -30,6 +30,7 @@ formatCell cell = let align = case cellType cell of TypeString -> [] + TypeDate -> [] _ -> [LucidBase.makeAttribute "align" "right"] withEmph = case emph of diff --git a/hledger-lib/Hledger/Write/Ods.hs b/hledger-lib/Hledger/Write/Ods.hs index b87b9fbe5..cdeb014f6 100644 --- a/hledger-lib/Hledger/Write/Ods.hs +++ b/hledger-lib/Hledger/Write/Ods.hs @@ -71,6 +71,19 @@ printFods encoding tables = " " : " " : " " : + " " : + " " : + " -" : + " " : + " -" : + " " : + " " : + " " : + " " : + " " : + " " : customStyles ++ "" : [] @@ -201,23 +214,30 @@ formatCell cell = let style, valueType :: String style = case (cellStyle cell, cellType cell) of - (Body emph, TypeAmount amt) -> numberStyle emph amt + (Body emph, TypeAmount amt) -> tableStyle $ numberStyle emph amt (Body Item, TypeString) -> "" - (Body Item, TypeMixedAmount) -> " table:style-name='amount'" - (Body Total, TypeString) -> " table:style-name='foot'" - (Body Total, TypeMixedAmount) -> " table:style-name='total-amount'" - (Head, _) -> " table:style-name='head'" - + (Body Item, TypeMixedAmount) -> tableStyle "amount" + (Body Item, TypeDate) -> tableStyle "date" + (Body Total, TypeString) -> tableStyle "foot" + (Body Total, TypeMixedAmount) -> tableStyle "total-amount" + (Body Total, TypeDate) -> tableStyle "foot-date" + (Head, _) -> tableStyle "head" numberStyle emph amt = - printf " table:style-name='%s-%s'" + printf "%s-%s" (emphasisName emph) (numberStyleName (acommodity amt, asprecision $ astyle amt)) + tableStyle = printf " table:style-name='%s'" + valueType = case cellType cell of TypeAmount amt -> printf "office:value-type='float' office:value='%s'" (show $ aquantity amt) + TypeDate -> + printf + "office:value-type='date' office:date-value='%s'" + (cellContent cell) _ -> "office:value-type='string'" in diff --git a/hledger-lib/Hledger/Write/Spreadsheet.hs b/hledger-lib/Hledger/Write/Spreadsheet.hs index 3724c61f0..96fb14610 100644 --- a/hledger-lib/Hledger/Write/Spreadsheet.hs +++ b/hledger-lib/Hledger/Write/Spreadsheet.hs @@ -18,6 +18,7 @@ data Type = TypeString | TypeAmount !Amount | TypeMixedAmount + | TypeDate deriving (Eq, Ord, Show) data Style = Body Emphasis | Head diff --git a/hledger/Hledger/Cli/Commands/Balance.hs b/hledger/Hledger/Cli/Commands/Balance.hs index 2f4059c5b..f55aa96f7 100644 --- a/hledger/Hledger/Cli/Commands/Balance.hs +++ b/hledger/Hledger/Cli/Commands/Balance.hs @@ -900,14 +900,15 @@ multiBalanceRowAsCellBuilders bopts ReportOpts{..} colspans (PeriodicReportRow _ -- complicates the data representation and can be easily calculated where wbCell = Ods.defaultCell . wbFromText + wbDate content = (wbCell content) {Ods.cellType = Ods.TypeDate} totalscolumn = row_total_ && balanceaccum_ `notElem` [Cumulative, Historical] cs = if all mixedAmountLooksZero allamts then [""] else S.toList $ foldMap maCommodities allamts allamts = (if not summary_only_ then as else []) ++ [rowtot | totalscolumn && not (null as)] ++ [rowavg | average_ && not (null as)] addDateColumns spn@(DateSpan s e) = (wbCell (showDateSpan spn) :) - . (wbCell (maybe "" showEFDate s) :) - . (wbCell (maybe "" (showEFDate . modifyEFDay (addDays (-1))) e) :) + . (wbDate (maybe "" showEFDate s) :) + . (wbDate (maybe "" (showEFDate . modifyEFDay (addDays (-1))) e) :) paddedTranspose :: a -> [[a]] -> [[a]] paddedTranspose _ [] = [[]]