mirror of
https://github.com/simonmichael/hledger.git
synced 2024-12-27 20:36:07 +03:00
balance: show compact headings for common intervals
In periodic multicolumn balance reports, column headings now show a more compact description of common periods (years, half-years, quarters, months, weeks) for better readability and screen space efficiency.
This commit is contained in:
parent
0b8b246fcd
commit
a7f7c3181f
@ -66,6 +66,7 @@ import Data.Maybe
|
||||
import Data.Time.Format
|
||||
import Data.Time.Calendar
|
||||
import Data.Time.Calendar.OrdinalDate
|
||||
import Data.Time.Calendar.WeekDate
|
||||
import Data.Time.Clock
|
||||
import Data.Time.LocalTime
|
||||
import Safe (headMay, lastMay, readMay)
|
||||
@ -85,7 +86,37 @@ instance Show DateSpan where
|
||||
showDate :: Day -> String
|
||||
showDate = formatTime defaultTimeLocale "%0C%y/%m/%d"
|
||||
|
||||
showDateSpan (DateSpan from to) =
|
||||
-- | Render a datespan as a display string, abbreviating into a
|
||||
-- compact form if possible.
|
||||
showDateSpan ds@(DateSpan (Just from) (Just to)) =
|
||||
case (toGregorian from, toGregorian to) of
|
||||
-- special cases we can abbreviate:
|
||||
-- a year, YYYY
|
||||
((fy,1,1), (ty,1,1)) | fy+1==ty -> formatTime defaultTimeLocale "%0C%y" from
|
||||
-- a month, YYYY/MM
|
||||
((fy,fm,1), (ty,tm,1)) | fy==ty && fm+1==tm -> formatTime defaultTimeLocale "%0C%y/%m" from
|
||||
((fy,12,1), (ty,1,1)) | fy+1==ty -> formatTime defaultTimeLocale "%0C%y/%m" from
|
||||
-- a quarter, YYYYqN
|
||||
((fy,1,1), (ty,4,1)) | fy==ty -> formatTime defaultTimeLocale "%0C%yq1" from
|
||||
((fy,4,1), (ty,7,1)) | fy==ty -> formatTime defaultTimeLocale "%0C%yq2" from
|
||||
((fy,7,1), (ty,10,1)) | fy==ty -> formatTime defaultTimeLocale "%0C%yq3" from
|
||||
((fy,10,1), (ty,1,1)) | fy+1==ty -> formatTime defaultTimeLocale "%0C%yq4" from
|
||||
-- a half, YYYYhN
|
||||
((fy,1,1), (ty,7,1)) | fy==ty -> formatTime defaultTimeLocale "%0C%yh1" from
|
||||
((fy,7,1), (ty,1,1)) | fy+1==ty -> formatTime defaultTimeLocale "%0C%yh2" from
|
||||
-- a week (two successive mondays),
|
||||
-- YYYYwN ("week N of year YYYY")
|
||||
-- _ | let ((fy,fw,fd), (ty,tw,td)) = (toWeekDate from, toWeekDate to) in fy==ty && fw+1==tw && fd==1 && td==1
|
||||
-- -> formatTime defaultTimeLocale "%0f%gw%V" from
|
||||
-- YYYY/MM/DDwN ("week N, starting on YYYY/MM/DD")
|
||||
_ | let ((fy,fw,fd), (ty,tw,td)) = (toWeekDate from, toWeekDate to) in fy==ty && fw+1==tw && fd==1 && td==1
|
||||
-> formatTime defaultTimeLocale "%0C%y/%m/%dw%V" from
|
||||
-- otherwise, YYYY/MM/DD-YYYY/MM/DD
|
||||
_ -> showDateSpan' ds
|
||||
showDateSpan ds = showDateSpan' ds
|
||||
|
||||
-- | Render a datespan as a display string.
|
||||
showDateSpan' (DateSpan from to) =
|
||||
concat
|
||||
[maybe "" showDate from
|
||||
,"-"
|
||||
|
@ -16,13 +16,13 @@ hledgerdev -f balance-multicol.journal balance -p 'monthly in 2013' --no-total
|
||||
>>>
|
||||
Change of balance (flow):
|
||||
|
||||
|| 2013/01/01-2013/01/31 2013/02/01-2013/02/28 2013/03/01-2013/03/31
|
||||
=================++======================================================================
|
||||
assets || 0 1 0
|
||||
assets:cash || 0 1 0
|
||||
assets:checking || 0 0 1
|
||||
-----------------++----------------------------------------------------------------------
|
||||
||
|
||||
|| 2013/01 2013/02 2013/03
|
||||
=================++============================
|
||||
assets || 0 1 0
|
||||
assets:cash || 0 1 0
|
||||
assets:checking || 0 0 1
|
||||
-----------------++----------------------------
|
||||
||
|
||||
|
||||
>>>=0
|
||||
|
||||
@ -39,11 +39,11 @@ hledgerdev -f - balance -p 'quarterly in 2013' --empty
|
||||
>>>
|
||||
Change of balance (flow):
|
||||
|
||||
|| 2013/01/01-2013/03/31 2013/04/01-2013/06/30 2013/07/01-2013/09/30 2013/10/01-2013/12/31
|
||||
===++=============================================================================================
|
||||
a || 2 0 0 0
|
||||
---++---------------------------------------------------------------------------------------------
|
||||
|| 2 0 0 0
|
||||
|| 2013q1 2013q2 2013q3 2013q4
|
||||
===++=================================
|
||||
a || 2 0 0 0
|
||||
---++---------------------------------
|
||||
|| 2 0 0 0
|
||||
|
||||
>>>=0
|
||||
|
||||
@ -100,12 +100,12 @@ hledgerdev -f balance-multicol.journal balance -p 'monthly in 2013' not:assets$
|
||||
>>>
|
||||
Change of balance (flow):
|
||||
|
||||
|| 2013/01/01-2013/01/31 2013/02/01-2013/02/28 2013/03/01-2013/03/31
|
||||
=================++======================================================================
|
||||
assets:cash || 0 1 0
|
||||
assets:checking || 0 0 1
|
||||
-----------------++----------------------------------------------------------------------
|
||||
|| 0 1 1
|
||||
|| 2013/01 2013/02 2013/03
|
||||
=================++============================
|
||||
assets:cash || 0 1 0
|
||||
assets:checking || 0 0 1
|
||||
-----------------++----------------------------
|
||||
|| 0 1 1
|
||||
|
||||
>>>=0
|
||||
|
||||
@ -145,11 +145,11 @@ hledgerdev -f balance-multicol.journal balance -p 'monthly in 2013' --depth 1
|
||||
>>>
|
||||
Change of balance (flow):
|
||||
|
||||
|| 2013/01/01-2013/01/31 2013/02/01-2013/02/28 2013/03/01-2013/03/31
|
||||
========++======================================================================
|
||||
assets || 0 2 1
|
||||
--------++----------------------------------------------------------------------
|
||||
|| 0 2 1
|
||||
|| 2013/01 2013/02 2013/03
|
||||
========++============================
|
||||
assets || 0 2 1
|
||||
--------++----------------------------
|
||||
|| 0 2 1
|
||||
|
||||
>>>=0
|
||||
|
||||
@ -158,11 +158,11 @@ hledgerdev -f balance-multicol.journal balance -p 'monthly in 2013' --depth 1 as
|
||||
>>>
|
||||
Change of balance (flow):
|
||||
|
||||
|| 2013/01/01-2013/01/31 2013/02/01-2013/02/28 2013/03/01-2013/03/31
|
||||
========++======================================================================
|
||||
assets || 0 1 1
|
||||
--------++----------------------------------------------------------------------
|
||||
|| 0 1 1
|
||||
|| 2013/01 2013/02 2013/03
|
||||
========++============================
|
||||
assets || 0 1 1
|
||||
--------++----------------------------
|
||||
|| 0 1 1
|
||||
|
||||
>>>=0
|
||||
|
||||
@ -197,13 +197,13 @@ hledgerdev -f balance-multicol.journal balance -p 'monthly in 2013' --tree
|
||||
>>>
|
||||
Change of balance (flow):
|
||||
|
||||
|| 2013/01/01-2013/01/31 2013/02/01-2013/02/28 2013/03/01-2013/03/31
|
||||
============++======================================================================
|
||||
assets || 0 2 1
|
||||
cash || 0 1 0
|
||||
checking || 0 0 1
|
||||
------------++----------------------------------------------------------------------
|
||||
|| 0 2 1
|
||||
|| 2013/01 2013/02 2013/03
|
||||
============++============================
|
||||
assets || 0 2 1
|
||||
cash || 0 1 0
|
||||
checking || 0 0 1
|
||||
------------++----------------------------
|
||||
|| 0 2 1
|
||||
|
||||
>>>=0
|
||||
|
||||
@ -249,12 +249,12 @@ hledgerdev -f- balance --monthly --date2
|
||||
>>>
|
||||
Change of balance (flow):
|
||||
|
||||
|| 2014/01/01-2014/01/31
|
||||
===++========================
|
||||
a || 1
|
||||
b || 1
|
||||
---++------------------------
|
||||
|| 2
|
||||
|| 2014/01
|
||||
===++==========
|
||||
a || 1
|
||||
b || 1
|
||||
---++----------
|
||||
|| 2
|
||||
|
||||
>>>=0
|
||||
|
||||
@ -273,12 +273,12 @@ hledgerdev -f- balance -p 'monthly 2014/1/10-2014/2/20'
|
||||
>>>
|
||||
Change of balance (flow):
|
||||
|
||||
|| 2014/01/01-2014/01/31 2014/02/01-2014/02/28
|
||||
========++===============================================
|
||||
after || 0 1
|
||||
before || 1 0
|
||||
within || 0 1
|
||||
--------++-----------------------------------------------
|
||||
|| 1 2
|
||||
|| 2014/01 2014/02
|
||||
========++===================
|
||||
after || 0 1
|
||||
before || 1 0
|
||||
within || 0 1
|
||||
--------++-------------------
|
||||
|| 1 2
|
||||
|
||||
>>>=0
|
||||
|
Loading…
Reference in New Issue
Block a user