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
|