{-# 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
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 :: ViewData -> Journal
j :: Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
EditPermission
forall site.
Yesod site =>
WidgetFor site () -> HandlerFor site Html
defaultLayout forall a b. (a -> b) -> a -> b
$ do
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 :: Journal
j :: ViewData -> Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
EditPermission
(PackageVersion
f', CommoditySymbol
txt) <- forall m.
PackageVersion
-> Journal -> HandlerFor m (PackageVersion, CommoditySymbol)
journalFile404 PackageVersion
f Journal
j
forall (m :: * -> *).
MonadHandler m =>
CommoditySymbol -> CommoditySymbol -> m ()
addHeader CommoditySymbol
"Content-Disposition" (CommoditySymbol
"attachment; filename=\"" forall a. Semigroup a => a -> a -> a
<> PackageVersion -> CommoditySymbol
T.pack PackageVersion
f' forall a. Semigroup a => a -> a -> a
<> CommoditySymbol
"\"")
forall (m :: * -> *) c a.
(MonadHandler m, ToTypedContent c) =>
c -> m a
sendResponse (ByteString
"text/plain" :: ByteString, forall a. ToContent a => a -> Content
toContent CommoditySymbol
txt)
getVersionR :: Handler TypedContent
getVersionR :: Handler TypedContent
getVersionR = do
Permission -> Handler ()
require Permission
ViewPermission
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson forall a b. (a -> b) -> a -> b
$ PackageVersion
packageversion
getAccountnamesR :: Handler TypedContent
getAccountnamesR :: Handler TypedContent
getAccountnamesR = do
VD{Journal
j :: Journal
j :: ViewData -> Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
ViewPermission
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson forall a b. (a -> b) -> a -> b
$ Journal -> [CommoditySymbol]
journalAccountNames Journal
j
getTransactionsR :: Handler TypedContent
getTransactionsR :: Handler TypedContent
getTransactionsR = do
VD{Journal
j :: Journal
j :: ViewData -> Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
ViewPermission
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson forall a b. (a -> b) -> a -> b
$ Journal -> [Transaction]
jtxns Journal
j
getPricesR :: Handler TypedContent
getPricesR :: Handler TypedContent
getPricesR = do
VD{Journal
j :: Journal
j :: ViewData -> Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
ViewPermission
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep forall a b. (a -> b) -> a -> b
$
forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map PriceDirective -> MarketPrice
priceDirectiveToMarketPrice forall a b. (a -> b) -> a -> b
$ Journal -> [PriceDirective]
jpricedirectives Journal
j
getCommoditiesR :: Handler TypedContent
getCommoditiesR :: Handler TypedContent
getCommoditiesR = do
VD{Journal
j :: Journal
j :: ViewData -> Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
ViewPermission
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep forall a b. (a -> b) -> a -> b
$ do
forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson forall a b. (a -> b) -> a -> b
$ (forall k a. Map k a -> [k]
M.keys 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 :: Journal
j :: ViewData -> Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
ViewPermission
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep forall a b. (a -> b) -> a -> b
$ do
forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson forall a b. (a -> b) -> a -> b
$
forall a. HasAmounts a => Map CommoditySymbol AmountStyle -> a -> a
styleAmounts (Rounding -> Journal -> Map CommoditySymbol AmountStyle
journalCommodityStylesWith Rounding
HardRounding Journal
j) forall a b. (a -> b) -> a -> b
$
Account -> [Account]
flattenAccounts forall a b. (a -> b) -> a -> b
$ (Account -> Account) -> Account -> Account
mapAccounts (Journal -> Account -> Account
accountSetDeclarationInfo Journal
j) forall a b. (a -> b) -> a -> b
$ Ledger -> Account
ledgerRootAccount 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 :: Journal
j :: ViewData -> Journal
j} <- Handler ViewData
getViewData
Permission -> Handler ()
require Permission
ViewPermission
let
rspec :: ReportSpec
rspec = ReportSpec
defreportspec
thisacctq :: Query
thisacctq = Regexp -> Query
Acct forall a b. (a -> b) -> a -> b
$ CommoditySymbol -> Regexp
accountNameToAccountRegex CommoditySymbol
a
forall (m :: * -> *).
MonadHandler m =>
Writer (Endo [ProvidedRep m]) () -> m TypedContent
selectRep forall a b. (a -> b) -> a -> b
$ do
forall (m :: * -> *) a.
(Monad m, ToJSON a) =>
a -> Writer (Endo [ProvidedRep m]) ()
provideJson forall a b. (a -> b) -> a -> b
$
forall a. HasAmounts a => Map CommoditySymbol AmountStyle -> a -> a
styleAmounts (Rounding -> Journal -> Map CommoditySymbol AmountStyle
journalCommodityStylesWith Rounding
HardRounding Journal
j) forall a b. (a -> b) -> a -> b
$
ReportSpec -> Journal -> Query -> AccountTransactionsReport
accountTransactionsReport ReportSpec
rspec{_rsQuery :: Query
_rsQuery=Query
Any} Journal
j Query
thisacctq