packages feed

yesod-mangopay-1.10: app/Handler/Account.hs

-- | account handling
module Handler.Account where

import Import
import Web.MangoPay
import Yesod.MangoPay


-- | get account list
getAccountsR :: AnyUserId -> Handler Html
getAccountsR uid=do
  -- no paging, should be reasonable
  accounts<-runYesodMPTToken $ getAll $ listAccounts uid (ByCreationDate ASC)
  defaultLayout $ do
        setTitleI MsgTitleAccounts
        $(widgetFile "accounts")

-- | get account registration form
getAccountR :: AnyUserId -> Handler Html
getAccountR uid=do
    (widget, enctype) <- generateFormPost accountForm
    defaultLayout $ do
        setTitleI MsgTitleAccount
        $(widgetFile "account")

-- | register account
postAccountR :: AnyUserId -> Handler Html
postAccountR uid=do
  ((result, widget), enctype) <- runFormPost accountForm
  case result of
    FormSuccess bap->
            catchMP (do
              _<-runYesodMPTToken $ createAccount (toBankAccount uid bap)
              setMessageI MsgAccountDone
              redirect $ AccountsR uid
              )
               (\e->do
                setMessage $ toHtml $ show e
                defaultLayout $ do
                  setTitleI MsgTitleAccount
                  $(widgetFile "account")
                  )
    _ -> do
            setMessageI MsgErrorData
            defaultLayout $ do
                  setTitleI MsgTitleAccount
                  $(widgetFile "account")

-- | partial data for account
data BankAccountPartial=BankAccountPartial {
   bapTag          :: Maybe Text
  ,bapIBAN         :: Text
  ,bapBIC          :: Maybe Text
  ,bapOwnerName    :: Text
  ,bapOwnerAddress :: Maybe Text
  }

-- | get the proper BankAccount structure
toBankAccount :: AnyUserId -> BankAccountPartial -> BankAccount
toBankAccount uid bap=BankAccount Nothing Nothing (Just uid) (bapTag bap) (IBAN (bapIBAN bap) (bapBIC bap))
  (bapOwnerName bap) (bapOwnerAddress bap)

-- | form for bank account
accountForm :: Html -> MForm Handler (FormResult BankAccountPartial, Widget)
accountForm = renderDivs $ BankAccountPartial
  <$> aopt textField (localizedFS MsgAccountCustomData) Nothing
  <*> areq textField (localizedFS MsgAccountIBAN) Nothing
  <*> aopt textField (localizedFS MsgAccountBIC) Nothing
  <*> areq textField (localizedFS MsgAccountOwnerName) Nothing
  <*> aopt textField (localizedFS MsgAccountOwnerAddress) Nothing