mangopay-1.8.0: src/Web/MangoPay/Refunds.hs
{-# LANGUAGE DeriveDataTypeable, OverloadedStrings, FlexibleContexts, ConstraintKinds #-}
-- | refunds on payins and transfers
module Web.MangoPay.Refunds where
import Web.MangoPay.Monad
import Web.MangoPay.Payins
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
-- | refund a transfer
refundTransfer :: (MPUsableMonad m) => TransferID -> AnyUserID -> AccessToken -> MangoPayT m Refund
refundTransfer tid authID at= do
url<-getClientURLMultiple ["/transfers/",tid,"/refunds"]
postExchange url (Just at) (RefundRequest authID Nothing Nothing)
-- | refund a pay-in
refundPayin :: (MPUsableMonad m) => AnyPayinID -> RefundRequest -> AccessToken -> MangoPayT m Refund
refundPayin pid rr at= do
url<-getClientURLMultiple ["/payins/",pid,"/refunds"]
postExchange url (Just at) rr
-- | fetch a refund from its ID
fetchRefund :: (MPUsableMonad m) => RefundID -> AccessToken -> MangoPayT m Refund
fetchRefund = fetchGeneric "/refunds/"
-- | refund request
data RefundRequest=RefundRequest{
rrAuthorId :: AnyUserID -- ^ The user ID of the author
,rrDebitedFunds :: Maybe Amount -- ^ Strictly positive amount. In cents.
,rrFees :: Maybe Amount -- ^ In cents
}deriving (Show,Eq,Ord,Typeable)
-- | to json as per MangoPay format
instance ToJSON RefundRequest where
toJSON rr=object ["AuthorId" .= rrAuthorId rr,"DebitedFunds" .= rrDebitedFunds rr,
"Fees" .= rrFees rr]
-- | id of a refund
type RefundID = Text
-- | refund of a transfer
data Refund=Refund{
rId :: RefundID -- ^ Id of the refund
,rCreationDate :: POSIXTime
,rTag :: Maybe Text -- ^ Custom data
,rAuthorId :: AnyUserID -- ^ The user ID of the author
,rDebitedFunds :: Amount -- ^ Strictly positive amount. In cents.
,rFees :: Amount -- ^ In cents
,rCreditedFunds :: Amount -- ^ In cents
,rStatus :: TransferStatus
,rResultCode :: Text -- ^ The transaction result code
,rResultMessage :: Maybe Text -- ^ The transaction result Message
,rExecutionDate :: POSIXTime
,rType :: TransactionType
,rNature :: TransactionNature
,rCreditedUserId :: Maybe AnyUserID -- ^ Id of the user owner of the credited wallet
,rInitialTransactionId :: TransactionID -- ^ Id of the transaction being refunded
,rInitialTransactionType :: TransactionType -- ^ The type of the transaction before being refunded (PayIn, Refund)
,rDebitedWalletId :: WalletID -- ^ The Id of the debited Wallet
,rCreditedWalletID :: Maybe WalletID -- ^ The Id of the credited Wallet
} deriving (Show,Eq,Ord,Typeable)
-- | from json as per MangoPay format
instance FromJSON Refund where
parseJSON (Object v) =Refund <$>
v .: "Id" <*>
v .: "CreationDate" <*>
v .:? "Tag" <*>
v .: "AuthorId" <*>
v .: "DebitedFunds" <*>
v .: "Fees" <*>
v .: "CreditedFunds" <*>
v .: "Status" <*>
v .: "ResultCode" <*>
v .:? "ResultMessage" <*>
v .: "ExecutionDate" <*>
v .: "Type" <*>
v .: "Nature" <*>
v .:? "CreditedUserId" <*>
v .: "InitialTransactionId" <*>
v .: "InitialTransactionType" <*>
v .: "DebitedWalletId" <*>
v .:? "CreditedWalletID"
parseJSON _=fail "Refund"