{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}
module Hledger.Web.Handler.MiscR
( getVersionR
, getAccountnamesR
, getTransactionsR
, getPricesR
, getCommoditiesR
, getAccountsR
, getAccounttransactionsR
, getDownloadR
, getFaviconR
, getManageR
, getRobotsR
, getRootR
) where
import qualified Data.Map as M
import qualified Data.Text as T
import Yesod.Default.Handlers (getFaviconR, getRobotsR)
import Hledger
import Hledger.Web.Import
import Hledger.Web.WebOptions (packageversion)
import Hledger.Web.Widget.Common (journalFile404)
getRootR :: Handler Html
getRootR :: Handler Html
getRootR = do
Handler ()
checkServerSideUiEnabled
Route App -> Handler Html
forall (m :: * -> *) url a.
(MonadHandler m, RedirectUrl (HandlerSite m) url) =>
url -> m a
redirect Route App
JournalR
getManageR :: Handler Html
getManageR :: Handler Html
getManageR = do
Handler ()
checkServerSideUiEnabled
VD{Journal
j :: Journal
j :: ViewData -> Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
EditPermission
WidgetFor App () -> Handler Html
forall site.
Yesod site =>
WidgetFor site () -> HandlerFor site Html
defaultLayout (WidgetFor App () -> Handler Html)
-> WidgetFor App () -> Handler Html
forall a b. (a -> b) -> a -> b
$ do
Html -> WidgetFor App ()
forall (m :: * -> *). MonadWidget m => Html -> m ()
setTitle Html
"Edit journal"
$(widgetFile "manage")
getDownloadR :: FilePath -> Handler TypedContent
getDownloadR :: PackageVersion -> Handler TypedContent
getDownloadR PackageVersion
f = do
Handler ()
checkServerSideUiEnabled
VD{Journal
j :: ViewData -> Journal
j :: Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
EditPermission
(PackageVersion
f', CommoditySymbol
txt) <- PackageVersion
-> Journal -> HandlerFor App (PackageVersion, CommoditySymbol)
forall m.
PackageVersion
-> Journal -> HandlerFor m (PackageVersion, CommoditySymbol)
journalFile404 PackageVersion
f Journal
j
CommoditySymbol -> CommoditySymbol -> Handler ()
forall (m :: * -> *).
MonadHandler m =>
CommoditySymbol -> CommoditySymbol -> m ()
addHeader CommoditySymbol
"Content-Disposition" (CommoditySymbol
"attachment; filename=\"" CommoditySymbol -> CommoditySymbol -> CommoditySymbol
forall a. Semigroup a => a -> a -> a
<> PackageVersion -> CommoditySymbol
T.pack PackageVersion
f' CommoditySymbol -> CommoditySymbol -> CommoditySymbol
forall a. Semigroup a => a -> a -> a
<> CommoditySymbol
"\"")
(ByteString, Content) -> Handler TypedContent
forall (m :: * -> *) c a.
(MonadHandler m, ToTypedContent c) =>
c -> m a
sendResponse (ByteString
"text/plain" :: ByteString, CommoditySymbol -> Content
forall a. ToContent a => a -> Content
toContent CommoditySymbol
txt)
getVersionR :: Handler TypedContent
getVersionR :: Handler TypedContent
getVersionR = do
Permission -> Handler ()
require Permission
ViewPermission
Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep (Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent)
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall a b. (a -> b) -> a -> b
$ PackageVersion -> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson (PackageVersion -> Writer (Endo [ProvidedRep (HandlerFor App)]) ())
-> PackageVersion
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall a b. (a -> b) -> a -> b
$ PackageVersion
packageversion
getAccountnamesR :: Handler TypedContent
getAccountnamesR :: Handler TypedContent
getAccountnamesR = do
VD{Journal
j :: ViewData -> Journal
j :: Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
ViewPermission
Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep (Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent)
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall a b. (a -> b) -> a -> b
$ [CommoditySymbol]
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson ([CommoditySymbol]
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ())
-> [CommoditySymbol]
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall a b. (a -> b) -> a -> b
$ Journal -> [CommoditySymbol]
journalAccountNames Journal
j
getTransactionsR :: Handler TypedContent
getTransactionsR :: Handler TypedContent
getTransactionsR = do
VD{Journal
j :: ViewData -> Journal
j :: Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
ViewPermission
Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep (Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent)
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall a b. (a -> b) -> a -> b
$ [Transaction] -> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson ([Transaction] -> Writer (Endo [ProvidedRep (HandlerFor App)]) ())
-> [Transaction] -> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall a b. (a -> b) -> a -> b
$ Journal -> [Transaction]
jtxns Journal
j
getPricesR :: Handler TypedContent
getPricesR :: Handler TypedContent
getPricesR = do
VD{Journal
j :: ViewData -> Journal
j :: Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
ViewPermission
Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep (Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent)
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall a b. (a -> b) -> a -> b
$
[MarketPrice] -> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson ([MarketPrice] -> Writer (Endo [ProvidedRep (HandlerFor App)]) ())
-> [MarketPrice] -> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall a b. (a -> b) -> a -> b
$ (PriceDirective -> MarketPrice)
-> [PriceDirective] -> [MarketPrice]
forall a b. (a -> b) -> [a] -> [b]
map PriceDirective -> MarketPrice
priceDirectiveToMarketPrice ([PriceDirective] -> [MarketPrice])
-> [PriceDirective] -> [MarketPrice]
forall a b. (a -> b) -> a -> b
$ Journal -> [PriceDirective]
jpricedirectives Journal
j
getCommoditiesR :: Handler TypedContent
getCommoditiesR :: Handler TypedContent
getCommoditiesR = do
VD{Journal
j :: ViewData -> Journal
j :: Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
ViewPermission
Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep (Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent)
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall a b. (a -> b) -> a -> b
$ do
[CommoditySymbol]
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson ([CommoditySymbol]
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ())
-> [CommoditySymbol]
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall a b. (a -> b) -> a -> b
$ (Map CommoditySymbol AmountStyle -> [CommoditySymbol]
forall k a. Map k a -> [k]
M.keys (Map CommoditySymbol AmountStyle -> [CommoditySymbol])
-> (Journal -> Map CommoditySymbol AmountStyle)
-> Journal
-> [CommoditySymbol]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Journal -> Map CommoditySymbol AmountStyle
jinferredcommodities) Journal
j
getAccountsR :: Handler TypedContent
getAccountsR :: Handler TypedContent
getAccountsR = do
VD{Journal
j :: ViewData -> Journal
j :: Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
ViewPermission
Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep (Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent)
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall a b. (a -> b) -> a -> b
$ do
[Account] -> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson ([Account] -> Writer (Endo [ProvidedRep (HandlerFor App)]) ())
-> [Account] -> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall a b. (a -> b) -> a -> b
$
Map CommoditySymbol AmountStyle -> [Account] -> [Account]
forall a. HasAmounts a => Map CommoditySymbol AmountStyle -> a -> a
styleAmounts (Rounding -> Journal -> Map CommoditySymbol AmountStyle
journalCommodityStylesWith Rounding
HardRounding Journal
j) ([Account] -> [Account]) -> [Account] -> [Account]
forall a b. (a -> b) -> a -> b
$
Account -> [Account]
flattenAccounts (Account -> [Account]) -> Account -> [Account]
forall a b. (a -> b) -> a -> b
$ (Account -> Account) -> Account -> Account
mapAccounts (Journal -> Account -> Account
accountSetDeclarationInfo Journal
j) (Account -> Account) -> Account -> Account
forall a b. (a -> b) -> a -> b
$ Ledger -> Account
ledgerRootAccount (Ledger -> Account) -> Ledger -> Account
forall a b. (a -> b) -> a -> b
$ Query -> Journal -> Ledger
ledgerFromJournal Query
Any Journal
j
getAccounttransactionsR :: Text -> Handler TypedContent
getAccounttransactionsR :: CommoditySymbol -> Handler TypedContent
getAccounttransactionsR CommoditySymbol
a = do
VD{Journal
j :: ViewData -> Journal
j :: Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
ViewPermission
let
rspec :: ReportSpec
rspec = ReportSpec
defreportspec
thisacctq :: Query
thisacctq = Regexp -> Query
Acct (Regexp -> Query) -> Regexp -> Query
forall a b. (a -> b) -> a -> b
$ CommoditySymbol -> Regexp
accountNameToAccountRegex CommoditySymbol
a
Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep (Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent)
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
-> Handler TypedContent
forall a b. (a -> b) -> a -> b
$ do
AccountTransactionsReport
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson (AccountTransactionsReport
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ())
-> AccountTransactionsReport
-> Writer (Endo [ProvidedRep (HandlerFor App)]) ()
forall a b. (a -> b) -> a -> b
$
Map CommoditySymbol AmountStyle
-> AccountTransactionsReport -> AccountTransactionsReport
forall a. HasAmounts a => Map CommoditySymbol AmountStyle -> a -> a
styleAmounts (Rounding -> Journal -> Map CommoditySymbol AmountStyle
journalCommodityStylesWith Rounding
HardRounding Journal
j) (AccountTransactionsReport -> AccountTransactionsReport)
-> AccountTransactionsReport -> AccountTransactionsReport
forall a b. (a -> b) -> a -> b
$
ReportSpec -> Journal -> Query -> AccountTransactionsReport
accountTransactionsReport ReportSpec
rspec{_rsQuery=Any} Journal
j Query
thisacctq