stripe-haskell-0.1.0.0: src/Web/Stripe/InvoiceItem.hs
{-# LANGUAGE OverloadedStrings #-}
-------------------------------------------
-- |
-- Module : Web.Stripe.InvoiceItem
-- Copyright : (c) David Johnson, 2014
-- Maintainer : djohnson.m@gmail.com
-- Stability : experimental
-- Portability : POSIX
--
-- < https:/\/\stripe.com/docs/api#invoiceitems >
--
-- @
-- import Web.Stripe
-- import Web.Stripe.Customer
-- import Web.Stripe.InvoiceItem
--
-- main :: IO ()
-- main = do
-- let config = SecretKey "secret_key"
-- result <- stripe config $ do
-- Customer { customerId = cid } <- createEmptyCustomer
-- createInvoiceItem cid 100 USD Nothing Nothing (Just "description") []
-- case result of
-- Right invoiceitem -> print invoiceitem
-- Left stripeError -> print stripeError
-- @
module Web.Stripe.InvoiceItem
( -- * API
createInvoiceItem
, getInvoiceItem
, getInvoiceItemExpandable
, getInvoiceItems
, getInvoiceItemsExpandable
, updateInvoiceItem
, deleteInvoiceItem
-- * Types
, InvoiceItemId (..)
, InvoiceItem (..)
, CustomerId (..)
, Currency (..)
, InvoiceId (..)
, Invoice (..)
, SubscriptionId (..)
, StripeDeleteResult (..)
, StripeList (..)
, Description
, Amount
) where
import Web.Stripe.Client.Internal (Method (GET, POST, DELETE), Stripe,
StripeRequest (..), callAPI, toMetaData, toExpandable,
getParams, toText, (</>), toTextLower)
import Web.Stripe.Types (Amount, Currency (..), StripeList(..),
CustomerId (..), Description,
InvoiceId (..), InvoiceItem (..), Invoice(..),
InvoiceItemId (..), Limit, StartingAfter, EndingBefore,
StripeDeleteResult (..), ExpandParams,
SubscriptionId (..), MetaData)
import Web.Stripe.Types.Util
------------------------------------------------------------------------------
-- | Create an invoice for a Customer
createInvoiceItem
:: CustomerId -- ^ `CustomerId` of `Customer` on which to create an `InvoiceItem`
-> Amount -- ^ `Amount` associated with `InvoiceItem`
-> Currency -- ^ `Currency` to use for `InvoiceItem`
-> Maybe InvoiceId -- ^ `InvoiceId` to use for `InvoiceItem`
-> Maybe SubscriptionId -- ^ `SubscriptionId` to use for `InvoiceItem`
-> Maybe Description -- ^ `Description` to use for `InvoiceItem`
-> MetaData -- ^ `MetaData` to use for `InvoiceItem`
-> Stripe InvoiceItem
createInvoiceItem
customerid
amount
currency
invoiceid
subscriptionId
description
metadata = callAPI request
where request = StripeRequest POST url params
url = "invoiceitems"
params = toMetaData metadata ++ getParams [
("customer", Just $ getCustomerId customerid)
, ("amount", toText `fmap` Just amount)
, ("currency", toTextLower `fmap` Just currency)
, ("invoice", (\(InvoiceId x) -> x) `fmap` invoiceid)
, ("subscription", (\(SubscriptionId x) -> x) `fmap` subscriptionId)
, ("description", description)
]
------------------------------------------------------------------------------
-- | Retrieve an `InvoiceItem` by `InvoiceItemId`
getInvoiceItems
:: Maybe CustomerId -- ^ When specified, only `InvoiceItems` for this `Customer` are returned
-> Limit -- ^ Defaults to 10 if `Nothing` specified
-> StartingAfter InvoiceItemId -- ^ Paginate starting after the following `InvoiceItemId`
-> EndingBefore InvoiceItemId -- ^ Paginate ending before the following `InvoiceItemId`
-> Stripe (StripeList InvoiceItem)
getInvoiceItems
customerid
limit
startingAfter
endingBefore = callAPI request
where request = StripeRequest GET url params
url = "invoiceitems"
params = getParams [
("limit", toText `fmap` limit )
, ("starting_after", (\(InvoiceItemId x) -> x) `fmap` startingAfter)
, ("ending_before", (\(InvoiceItemId x) -> x) `fmap` endingBefore)
, ("customer", (\(CustomerId x) -> x) `fmap` customerid)
]
------------------------------------------------------------------------------
-- | Retrieve an `InvoiceItem` by `InvoiceItemId` with `ExpandParams`
getInvoiceItemsExpandable
:: Maybe CustomerId -- ^ When specified, only `InvoiceItems` for this `Customer` are returned
-> Limit -- ^ Defaults to 10 if `Nothing` specified
-> StartingAfter InvoiceItemId -- ^ Paginate starting after the following `InvoiceItemId`
-> EndingBefore InvoiceItemId -- ^ Paginate ending before the following `InvoiceItemId`
-> ExpandParams -- ^ `ExpandParams` of the objects for expansion
-> Stripe (StripeList InvoiceItem)
getInvoiceItemsExpandable
customerid
limit
startingAfter
endingBefore
expandParams = callAPI request
where request = StripeRequest GET url params
url = "invoiceitems"
params = getParams [
("limit", toText `fmap` limit )
, ("starting_after", (\(InvoiceItemId x) -> x) `fmap` startingAfter)
, ("ending_before", (\(InvoiceItemId x) -> x) `fmap` endingBefore)
, ("customer", (\(CustomerId x) -> x) `fmap` customerid)
] ++ toExpandable expandParams
------------------------------------------------------------------------------
-- | Retrieve an `InvoiceItem` by `InvoiceItemId`
getInvoiceItem
:: InvoiceItemId -- ^ `InvoiceItemId` of `InvoiceItem` to retrieve
-> Stripe InvoiceItem
getInvoiceItem
invoiceitemid =
getInvoiceItemExpandable invoiceitemid []
------------------------------------------------------------------------------
-- | Retrieve an `InvoiceItem` by `InvoiceItemId`
getInvoiceItemExpandable
:: InvoiceItemId -- ^ `InvoiceItemId` of `InvoiceItem` to retrieve
-> ExpandParams -- ^ `ExpandParams` of the objects for expansion
-> Stripe InvoiceItem
getInvoiceItemExpandable
invoiceitemid
expandParams = callAPI request
where request = StripeRequest GET url params
url = "invoiceitems" </> getInvoiceItemId invoiceitemid
params = toExpandable expandParams
------------------------------------------------------------------------------
-- | Update an `InvoiceItem` by `InvoiceItemId`
updateInvoiceItem
:: InvoiceItemId -- ^ `InvoiceItemId` of to update
-> Maybe Amount -- ^ `Amount` in cents of the charge to be applied to the invoice
-> Maybe Description -- ^ `Amount` in cents of the charge to be applied to the invoice
-> MetaData -- ^ `MetaData` of `InvoiceItem` to update
-> Stripe InvoiceItem
updateInvoiceItem
invoiceitemid
amount
description
metadata = callAPI request
where request = StripeRequest POST url params
url = "invoiceitems" </> getInvoiceItemId invoiceitemid
params = toMetaData metadata ++ getParams [
("amount", toText `fmap` amount)
, ("description", description)
]
------------------------------------------------------------------------------
-- | Delete an `InvoiceItem` by `InvoiceItemId`
deleteInvoiceItem
:: InvoiceItemId -- ^ `InvoiceItemdId` of `InvoiceItem` to be deleted
-> Stripe StripeDeleteResult
deleteInvoiceItem
invoiceitemid = callAPI request
where request = StripeRequest DELETE url params
url = "invoiceitems" </> getInvoiceItemId invoiceitemid
params = []