diff --git a/hledger-web/.hledger/web/static/style.css b/hledger-web/.hledger/web/static/style.css
index 878fc042f..eac4a7fa7 100644
--- a/hledger-web/.hledger/web/static/style.css
+++ b/hledger-web/.hledger/web/static/style.css
@@ -101,10 +101,13 @@ table.journalreport { border-spacing: 0; }
.totalrule td { border-top:thin solid black; }
table.registerreport { border-spacing:0; }
-.registerreport tr { vertical-align:top; }
-.registerreport td { padding-bottom:0.2em; }
-.registerreport .date { white-space:nowrap; }
-.firstposting td { }
+table.registerreport tr { vertical-align:top; }
+table.registerreport td { padding-bottom:0.2em; }
+table.registerreport .date { white-space:nowrap; }
+tr.firstposting td { }
+tr.newday td { border-top: 1px solid black; }
+tr.newmonth td { border-top: 2px solid black; }
+/* tr.newyear td { border-top: 3px solid black; } */
#accountsheading { white-space:nowrap; margin-bottom:1em; }
diff --git a/hledger-web/.hledger/web/templates/balancereportitem.hamlet b/hledger-web/.hledger/web/templates/balancereportitem.hamlet
index faac88cd0..e707dfde9 100644
--- a/hledger-web/.hledger/web/templates/balancereportitem.hamlet
+++ b/hledger-web/.hledger/web/templates/balancereportitem.hamlet
@@ -1,4 +1,4 @@
-
#{adisplay}
diff --git a/hledger-web/.hledger/web/templates/registerreportitem.hamlet b/hledger-web/.hledger/web/templates/registerreportitem.hamlet
index 886ec2d9f..e4051484c 100644
--- a/hledger-web/.hledger/web/templates/registerreportitem.hamlet
+++ b/hledger-web/.hledger/web/templates/registerreportitem.hamlet
@@ -1,4 +1,4 @@
-#{date}
#{desc}
#{acct}
diff --git a/hledger-web/Handlers.hs b/hledger-web/Handlers.hs
index b319236b2..884a648c5 100644
--- a/hledger-web/Handlers.hs
+++ b/hledger-web/Handlers.hs
@@ -134,8 +134,9 @@ balanceReportAsHtml _ vd@VD{here=here,q=q,m=m,qopts=qopts,j=j} (items,total) = $
itemAsHtml VD{here=here,q=q} (acct, adisplay, aindent, abal) = $(Settings.hamletFile "balancereportitem")
where
depthclass = "depth"++show aindent
- inclass = case inacctmatcher of Just m -> if m `matchesAccount` acct then "inacct" else "notinacct"
- Nothing -> "" :: String
+ inacctclass = case inacctmatcher of
+ Just m -> if m `matchesAccount` acct then "inacct" else "notinacct"
+ Nothing -> "" :: String
indent = preEscapedString $ concat $ replicate (2 * aindent) " "
accturl = (here, [("q", pack $ accountUrl acct)])
@@ -153,10 +154,14 @@ journalReportAsHtml _ vd items = $(Settings.hamletFile "journalreport")
registerReportAsHtml :: [Opt] -> ViewData -> RegisterReport -> Hamlet AppRoute
registerReportAsHtml _ vd (balancelabel,items) = $(Settings.hamletFile "registerreport")
where
- itemAsHtml :: ViewData -> (Int, RegisterReportItem) -> Hamlet AppRoute
- itemAsHtml VD{here=here} (n, (ds, posting, b)) = $(Settings.hamletFile "registerreportitem")
+ itemAsHtml :: ViewData -> (Int, Bool, Bool, Bool, RegisterReportItem) -> Hamlet AppRoute
+ itemAsHtml VD{here=here} (n, newd, newm, newy, (ds, posting, b)) = $(Settings.hamletFile "registerreportitem")
where
evenodd = if even n then "even" else "odd" :: String
+ datetransition -- | newy && n > 1 = "newyear"
+ | newm = "newmonth"
+ | newd = "newday"
+ | otherwise = "" :: String
(firstposting, date, desc) = case ds of Just (da, de) -> ("firstposting", show da, de)
Nothing -> ("", "", "") :: (String,String,String)
acct = paccount posting
@@ -446,12 +451,20 @@ getMessageOr mnewmsg = do
numbered = zip [1..]
--- Add incrementing transaction numbers to a list of register report items starting at 1.
-numberTransactions :: [RegisterReportItem] -> [(Int,RegisterReportItem)]
+-- Add incrementing transaction numbers to a list of register report items
+-- starting at 1. Also add three flags that are true if the date, month,
+-- and year is different from the previous item's.
+numberTransactions :: [RegisterReportItem] -> [(Int,Bool,Bool,Bool,RegisterReportItem)]
numberTransactions [] = []
-numberTransactions is = number 0 is
+numberTransactions is = number 0 nulldate is
where
- number _ [] = []
- number n (i@(Just _, _, _):is) = (n+1,i):(number (n+1) is)
- number n (i@(Nothing, _, _):is) = (n,i):(number n is)
-
+ number :: Int -> Day -> [RegisterReportItem] -> [(Int,Bool,Bool,Bool,RegisterReportItem)]
+ number _ _ [] = []
+ number n prevd (i@(Nothing, _, _) :is) = (n,False,False,False,i) :(number n prevd is)
+ number n prevd (i@(Just (d,_), _, _):is) = (n+1,newday,newmonth,newyear,i):(number (n+1) d is)
+ where
+ newday = d/=prevd
+ newmonth = dm/=prevdm || dy/=prevdy
+ newyear = dy/=prevdy
+ (dy,dm,_) = toGregorian d
+ (prevdy,prevdm,_) = toGregorian prevd