summaryrefslogtreecommitdiff
path: root/Handler
diff options
context:
space:
mode:
Diffstat (limited to 'Handler')
-rw-r--r--Handler/Home.hs1
-rw-r--r--Handler/Journal.hs45
2 files changed, 46 insertions, 0 deletions
diff --git a/Handler/Home.hs b/Handler/Home.hs
index 94b206e..7e8d79d 100644
--- a/Handler/Home.hs
+++ b/Handler/Home.hs
@@ -19,6 +19,7 @@ module Handler.Home where
import Import
import Data.Map (keys)
+import Hledger.JournalCSVs (JReportType(..))
getHomeR :: Handler RepHtml
getHomeR = do
diff --git a/Handler/Journal.hs b/Handler/Journal.hs
new file mode 100644
index 0000000..dc68fa5
--- /dev/null
+++ b/Handler/Journal.hs
@@ -0,0 +1,45 @@
+-- sflc-ledger-reports: web interface to hledger-based reports
+-- Copyright (C) 2013 Clint Adams
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU Affero General Public License as
+-- published by the Free Software Foundation, either version 3 of the
+-- License, or (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU Affero General Public License for more details.
+--
+-- You should have received a copy of the GNU Affero General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+{-# LANGUAGE OverloadedStrings #-}
+module Handler.Journal where
+
+import Import
+import qualified Data.Text as T
+import Hledger.JournalCSVs
+import qualified Data.Map as Map
+
+typeCsv :: ContentType
+typeCsv = "text/csv; charset=utf-8"
+
+newtype RepCsv = RepCsv Content
+instance HasReps RepCsv where
+ chooseRep (RepCsv c) _ = return (typeCsv, c)
+
+getJournalR :: JReportType -> Text -> Handler RepCsv
+getJournalR jrt ledger = do
+ ledgers <- fmap hledgerConfig getYesod
+ case Map.lookup ledger ledgers of
+ Nothing -> notFound
+ Just fn -> do
+ csv <- liftIO $ (jReport jrt) fn
+ setHeader "Content-Disposition" (T.concat ["attachment; filename=", ledger, "-", (T.pack . show) jrt, ".csv"])
+ return $ RepCsv $ toContent csv
+ where
+ jReport PandL = pAndL
+ jReport Assets = assets
+ jReport Liabilities = liabilities
+ jReport Everything = everything