summaryrefslogtreecommitdiff
path: root/Form/ShopDelivery.hs
blob: 505b9f590720b68583902d0c6b841bf2ff5de365 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
module Form.ShopDelivery where

import Import
import qualified Database.Esqueleto as E
import Model.UTCTime (renderInterval)

data FormShopDelivery = FormShopDelivery
    { fpShop :: ShopId
    , fpDelivery :: DeliveryId
    }

shopDeliveryForm :: Maybe ShopId -> Maybe DeliveryId -> Html -> MForm Handler (FormResult FormShopDelivery, Widget)
shopDeliveryForm mshopid mdeliveryid = renderBootstrap3 formLayout $ FormShopDelivery
    <$> maybe shopField pure mshopid
    <*> maybe deliveryField pure mdeliveryid
  where
    shopField = areq (selectField shops) (bfs MsgShop) Nothing
    deliveryField = areq (selectField deliveries) (bfs MsgDelivery) Nothing
    shops = do
        entities <- runDB $ selectList [ ] [ Asc ShopIdent ]
        optionsPairs $ map (\shop -> ( shopIdent $ entityVal shop
                                     , entityKey shop))
                           entities
    deliveries = do
        now <- lift getCurrentTime
        options <- runDB $
            E.select $
            E.from $ \(p, d) -> do
            E.where_ (     d E.^. DeliveryPlace E.==. p E.^. PlaceId
                     E.&&. d E.^. DeliveryFrom E.>. E.val now
                     )
            E.orderBy [ E.asc (p E.^. PlaceIdent)
                      , E.asc (d E.^. DeliveryFrom)
                      ]
            return (p, d)
        optionsPairs $ map
            (\(p, d) -> (placeIdent (entityVal p) ++ " (" ++ renderInterval (deliveryFrom $ entityVal d) (deliveryTo $ entityVal d) ++ ")", entityKey d))
            options