{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE DeriveGeneric #-}
module Triggers(
Trigger(..),TriggerEffect(..),TriggerName,trgStatusLens
)
where
import qualified Data.Text as T
import qualified Stmt as S
import qualified Liability as L
import Text.Read (readMaybe)
import Lib
import Types
import Accounts (ReserveAmount)
import Waterfall (Action,CollectionRule)
import Data.Aeson ( defaultOptions )
import Language.Haskell.TH
import Data.Aeson.TH
import Data.Aeson.Types
import Data.Fixed
import Data.Maybe
import Data.Map
import GHC.Generics
import Control.Lens
type TriggerName = String
data TriggerEffect = DealStatusTo DealStatus
| DoAccrueFee FeeNames
| AddTrigger Trigger
| ChangeReserveBalance String ReserveAmount
| CloseDeal (Int, DatePattern) (Int, DatePattern)
(PricingMethod, AccountName, Maybe DealStats)
(Maybe [CollectionRule])
| BuyAsset AccountName PricingMethod
| ChangeBondRate BondName L.InterestInfo IRate
| TriggerEffects [TriggerEffect]
| RunActions [Action]
| DoNothing
deriving (Int -> TriggerEffect -> ShowS
[TriggerEffect] -> ShowS
TriggerEffect -> String
(Int -> TriggerEffect -> ShowS)
-> (TriggerEffect -> String)
-> ([TriggerEffect] -> ShowS)
-> Show TriggerEffect
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TriggerEffect -> ShowS
showsPrec :: Int -> TriggerEffect -> ShowS
$cshow :: TriggerEffect -> String
show :: TriggerEffect -> String
$cshowList :: [TriggerEffect] -> ShowS
showList :: [TriggerEffect] -> ShowS
Show, TriggerEffect -> TriggerEffect -> Bool
(TriggerEffect -> TriggerEffect -> Bool)
-> (TriggerEffect -> TriggerEffect -> Bool) -> Eq TriggerEffect
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TriggerEffect -> TriggerEffect -> Bool
== :: TriggerEffect -> TriggerEffect -> Bool
$c/= :: TriggerEffect -> TriggerEffect -> Bool
/= :: TriggerEffect -> TriggerEffect -> Bool
Eq, (forall x. TriggerEffect -> Rep TriggerEffect x)
-> (forall x. Rep TriggerEffect x -> TriggerEffect)
-> Generic TriggerEffect
forall x. Rep TriggerEffect x -> TriggerEffect
forall x. TriggerEffect -> Rep TriggerEffect x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. TriggerEffect -> Rep TriggerEffect x
from :: forall x. TriggerEffect -> Rep TriggerEffect x
$cto :: forall x. Rep TriggerEffect x -> TriggerEffect
to :: forall x. Rep TriggerEffect x -> TriggerEffect
Generic,Eq TriggerEffect
Eq TriggerEffect =>
(TriggerEffect -> TriggerEffect -> Ordering)
-> (TriggerEffect -> TriggerEffect -> Bool)
-> (TriggerEffect -> TriggerEffect -> Bool)
-> (TriggerEffect -> TriggerEffect -> Bool)
-> (TriggerEffect -> TriggerEffect -> Bool)
-> (TriggerEffect -> TriggerEffect -> TriggerEffect)
-> (TriggerEffect -> TriggerEffect -> TriggerEffect)
-> Ord TriggerEffect
TriggerEffect -> TriggerEffect -> Bool
TriggerEffect -> TriggerEffect -> Ordering
TriggerEffect -> TriggerEffect -> TriggerEffect
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: TriggerEffect -> TriggerEffect -> Ordering
compare :: TriggerEffect -> TriggerEffect -> Ordering
$c< :: TriggerEffect -> TriggerEffect -> Bool
< :: TriggerEffect -> TriggerEffect -> Bool
$c<= :: TriggerEffect -> TriggerEffect -> Bool
<= :: TriggerEffect -> TriggerEffect -> Bool
$c> :: TriggerEffect -> TriggerEffect -> Bool
> :: TriggerEffect -> TriggerEffect -> Bool
$c>= :: TriggerEffect -> TriggerEffect -> Bool
>= :: TriggerEffect -> TriggerEffect -> Bool
$cmax :: TriggerEffect -> TriggerEffect -> TriggerEffect
max :: TriggerEffect -> TriggerEffect -> TriggerEffect
$cmin :: TriggerEffect -> TriggerEffect -> TriggerEffect
min :: TriggerEffect -> TriggerEffect -> TriggerEffect
Ord)
data Trigger = Trigger {
Trigger -> Pre
trgCondition :: Pre
,Trigger -> TriggerEffect
trgEffects :: TriggerEffect
,Trigger -> Bool
trgStatus :: Bool
,Trigger -> Bool
trgCurable :: Bool
,Trigger -> Maybe Statement
trgStmt :: Maybe S.Statement
} deriving (Int -> Trigger -> ShowS
[Trigger] -> ShowS
Trigger -> String
(Int -> Trigger -> ShowS)
-> (Trigger -> String) -> ([Trigger] -> ShowS) -> Show Trigger
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Trigger -> ShowS
showsPrec :: Int -> Trigger -> ShowS
$cshow :: Trigger -> String
show :: Trigger -> String
$cshowList :: [Trigger] -> ShowS
showList :: [Trigger] -> ShowS
Show, Trigger -> Trigger -> Bool
(Trigger -> Trigger -> Bool)
-> (Trigger -> Trigger -> Bool) -> Eq Trigger
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Trigger -> Trigger -> Bool
== :: Trigger -> Trigger -> Bool
$c/= :: Trigger -> Trigger -> Bool
/= :: Trigger -> Trigger -> Bool
Eq, (forall x. Trigger -> Rep Trigger x)
-> (forall x. Rep Trigger x -> Trigger) -> Generic Trigger
forall x. Rep Trigger x -> Trigger
forall x. Trigger -> Rep Trigger x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Trigger -> Rep Trigger x
from :: forall x. Trigger -> Rep Trigger x
$cto :: forall x. Rep Trigger x -> Trigger
to :: forall x. Rep Trigger x -> Trigger
Generic,Eq Trigger
Eq Trigger =>
(Trigger -> Trigger -> Ordering)
-> (Trigger -> Trigger -> Bool)
-> (Trigger -> Trigger -> Bool)
-> (Trigger -> Trigger -> Bool)
-> (Trigger -> Trigger -> Bool)
-> (Trigger -> Trigger -> Trigger)
-> (Trigger -> Trigger -> Trigger)
-> Ord Trigger
Trigger -> Trigger -> Bool
Trigger -> Trigger -> Ordering
Trigger -> Trigger -> Trigger
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Trigger -> Trigger -> Ordering
compare :: Trigger -> Trigger -> Ordering
$c< :: Trigger -> Trigger -> Bool
< :: Trigger -> Trigger -> Bool
$c<= :: Trigger -> Trigger -> Bool
<= :: Trigger -> Trigger -> Bool
$c> :: Trigger -> Trigger -> Bool
> :: Trigger -> Trigger -> Bool
$c>= :: Trigger -> Trigger -> Bool
>= :: Trigger -> Trigger -> Bool
$cmax :: Trigger -> Trigger -> Trigger
max :: Trigger -> Trigger -> Trigger
$cmin :: Trigger -> Trigger -> Trigger
min :: Trigger -> Trigger -> Trigger
Ord)
makeLensesFor [("trgStatus","trgStatusLens")
,("trgEffects","trgEffectsLens")
,("trgCondition","trgConditionLens")
,("trgCurable","trgCurableLens")] ''Trigger
$(concat <$> traverse (deriveJSON defaultOptions) [''TriggerEffect, ''Trigger])