{-# LANGUAGE DeriveDataTypeable, ScopedTypeVariables, OverloadedStrings, FlexibleContexts, FlexibleInstances, ConstraintKinds #-} -- | handle payouts module Web.MangoPay.Payouts where import Web.MangoPay.Accounts import Web.MangoPay.Monad import Web.MangoPay.Types import Web.MangoPay.Users import Web.MangoPay.Wallets import Data.Text import Data.Typeable (Typeable) import Data.Aeson import Data.Time.Clock.POSIX (POSIXTime) import Control.Applicative -- | create a payout createPayout :: (MPUsableMonad m) => Payout -> AccessToken -> MangoPayT m Payout createPayout = createGeneric "/payouts/bankwire" -- | fetch an payout from its ID fetchPayout :: (MPUsableMonad m) => PayoutID -> AccessToken -> MangoPayT m Payout fetchPayout = fetchGeneric "/payouts/" -- | make a simplep payout for creation mkPayout :: AnyUserID -> WalletID -> Amount -> Amount -> BankAccountID -> Payout mkPayout aid wid fds fees bid=Payout Nothing Nothing Nothing aid wid fds fees bid Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing -- | id of payout type PayoutID = Text -- | payout data Payout=Payout { ptId :: Maybe PayoutID ,ptCreationDate :: Maybe POSIXTime ,ptTag :: Maybe Text -- ^ custom data for client ,ptAuthorId :: AnyUserID -- ^ The user ID of the author ,ptDebitedWalletId :: WalletID ,ptDebitedFunds :: Amount ,ptFees :: Amount ,ptBankAccountId :: BankAccountID ,ptCreditedUserId :: Maybe AnyUserID ,ptCreditedFunds :: Maybe Amount ,ptStatus :: Maybe TransferStatus ,ptResultCode :: Maybe Text -- ^ The transaction result code ,ptResultMessage :: Maybe Text -- ^ The transaction result code ,ptExecutionDate :: Maybe POSIXTime ,ptType :: Maybe TransactionType ,ptNature :: Maybe TransactionNature ,ptPaymentType :: Maybe PaymentType ,ptMeanOfPaymentType :: Maybe PaymentType -- ^ « BANK_WIRE », } deriving (Show,Eq,Ord,Typeable) -- | to json as per MangoPay format instance ToJSON Payout where toJSON pt=object ["Tag" .= ptTag pt,"AuthorId" .= ptAuthorId pt ,"DebitedWalletId" .= ptDebitedWalletId pt ,"DebitedFunds" .= ptDebitedFunds pt,"Fees" .= ptFees pt,"BankAccountId" .= ptBankAccountId pt] -- | from json as per MangoPay format instance FromJSON Payout where parseJSON (Object v) =Payout <$> v .: "Id" <*> v .: "CreationDate" <*> v .:? "Tag" <*> v .: "AuthorId" <*> v .: "DebitedWalletId" <*> v .: "DebitedFunds" <*> v .: "Fees" <*> v .: "BankAccountId" <*> v .:? "CreditedUserId" <*> v .:? "CreditedFunds" <*> v .:? "Status" <*> v .:? "ResultCode" <*> v .:? "ResultMessage" <*> v .:? "ExecutionDate" <*> v .:? "Type" <*> v .:? "Nature" <*> v .:? "PaymentType" <*> v .:? "MeanOfPaymentType" parseJSON _=fail "Payout"