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
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)
refundPayin :: (MPUsableMonad m) => AnyPayinId -> RefundRequest -> AccessToken -> MangoPayT m Refund
refundPayin pid rr at= do
url<-getClientURLMultiple ["/payins/",pid,"/refunds"]
postExchange url (Just at) rr
fetchRefund :: (MPUsableMonad m) => RefundId -> AccessToken -> MangoPayT m Refund
fetchRefund = fetchGeneric "/refunds/"
data RefundRequest=RefundRequest{
rrAuthorId :: AnyUserId
,rrDebitedFunds :: Maybe Amount
,rrFees :: Maybe Amount
}deriving (Show,Eq,Ord,Typeable)
instance ToJSON RefundRequest where
toJSON rr=object ["AuthorId" .= rrAuthorId rr,"DebitedFunds" .= rrDebitedFunds rr,
"Fees" .= rrFees rr]
type RefundId = Text
data Refund=Refund{
rId :: RefundId
,rCreationDate :: POSIXTime
,rTag :: Maybe Text
,rAuthorId :: AnyUserId
,rDebitedFunds :: Amount
,rFees :: Amount
,rCreditedFunds :: Amount
,rStatus :: TransferStatus
,rResultCode :: Text
,rResultMessage :: Maybe Text
,rExecutionDate :: POSIXTime
,rType :: TransactionType
,rNature :: TransactionNature
,rCreditedUserId :: Maybe AnyUserId
,rInitialTransactionId :: TransactionId
,rInitialTransactionType :: TransactionType
,rDebitedWalletId :: WalletId
,rCreditedWalletId :: Maybe WalletId
} deriving (Show,Eq,Ord,Typeable)
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"