blob: bd82dea4906078c8591c5f02568e8d1d1216496d (
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
|
module Form.ShopDelivery where
import Import
import qualified Database.Esqueleto as E
import Model.UTCTime (renderInterval)
data FormShopDelivery = FormShopDelivery
{ fpShop :: ShopId
, fpDelivery :: DeliveryId
}
shopDeliveryForm :: ShopId -> Maybe DeliveryId -> Html -> MForm Handler (FormResult FormShopDelivery, Widget)
shopDeliveryForm shopid mdeliveryid = renderBootstrap3 formLayout $ FormShopDelivery
<$> pure shopid
<*> maybe deliveryField pure mdeliveryid
where
deliveryField = areq (selectField deliveries) (bfs MsgDelivery) Nothing
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.&&. (E.notExists $ E.from $ \sd ->
E.where_ ( sd E.^. ShopDeliveryDelivery E.==. d E.^. DeliveryId
E.&&. sd E.^. ShopDeliveryShop E.==. E.val shopid
)
)
)
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
|