yammat/Handler/Barcode.hs

68 lines
1.8 KiB
Haskell
Raw Normal View History

2015-07-20 23:14:21 +00:00
module Handler.Barcode where
import Import
2015-07-20 23:42:52 +00:00
getHomeBarcodeR :: Handler Html
2015-07-21 07:14:38 +00:00
getHomeBarcodeR = do
eub <- handleSelectParam
case eub of
Just (Left uId) -> do
redirect $ SelectR uId
Just (Right _) -> do
setMessageI MsgBarcodeNotUser
redirect $ HomeR
2015-07-21 07:14:38 +00:00
Nothing -> do
redirect $ HomeR
2015-07-20 23:28:05 +00:00
2015-07-20 23:42:52 +00:00
getSelectBarcodeR :: UserId -> Handler Html
2015-07-21 07:14:38 +00:00
getSelectBarcodeR uId = do
eub <- handleSelectParam
case eub of
Just (Right bId) -> do
redirect $ BuyR uId bId
Just (Left _) -> do
setMessageI MsgBarcodeNotBev
redirect $ SelectR uId
Nothing ->
redirect $ SelectR uId
getSelectCashBarcodeR :: Handler Html
getSelectCashBarcodeR = do
eub <- handleSelectParam
case eub of
Just (Right bId) -> do
redirect $ BuyCashR bId
Just (Left _) -> do
setMessageI MsgBarcodeNotBev
redirect $ SelectCashR
Nothing -> do
redirect $ SelectCashR
handleSelectParam :: Handler (Maybe (Either UserId BeverageId))
handleSelectParam = do
2015-07-21 07:14:38 +00:00
c <- lookupGetParam "barcode"
case c of
Just code -> do
be <- runDB $ getBy $ UniqueBarcode code
case be of
Just (Entity _ bar) -> do
case barcodeIsUser bar of
True -> do
case (barcodeUser bar, barcodeBev bar) of
(Just uId, Nothing) ->
return $ Just $ Left uId
_ ->
error "Malformed barcode"
2015-07-21 07:14:38 +00:00
False -> do
case (barcodeBev bar, barcodeUser bar) of
(Just bId, Nothing) ->
return $ Just $ Right bId
_ ->
2015-07-21 07:14:38 +00:00
error "Malformed barcode"
Nothing -> do
setMessageI MsgBarcodeUnknown
return Nothing
2015-07-21 07:14:38 +00:00
Nothing -> do
setMessageI MsgProvideBarcode
return Nothing