module
travel
import
StdEnv, iTasks, iDataTrivial
// (c)
2007 MJP
// Test
for multiple choice
// One
can choose to book a flight, hotel and / or a car
// One by
one the chosen bookings will be handled
// The bill is made up in the end
derive
gForm []
derive
gUpd []
Start
world = doHtmlServer (singleUserTask
0 True (foreverTask travel)) world
travel ::
(Task Void)
travel
= [Txt "Book your journey:",Br,Br]
?>> seqTasks [ ( "Choose
Booking options:"
, mchoiceTasks [ ("Book_Flight",BookFlight)
,
("Book_Hotel", BookHotel)
,
("Book_Car", BookCar)
]
)
, ( "Confirm
Booking:"
, buttonTask
"Confirm" (return_V [])
)
]
-||-
buttonTask "Cancel" (return_V
[])
=>> \booking -> [Txt "Handling bookings:",Br,Br]
?>> handleBookings booking
where
handleBookings
booking
| isNil booking =
editTask
"Cancelled" Void
| otherwise = editTask "Pay" (Dsp (calcCosts booking))
#>> editTask "Paid" Void
where
calcCosts booked = sum [cost \\ (_,_,_,cost) <- hd booked]
isNil [] = True
isNil _ =
False
BookFlight = editTask "BookFlight" (Dsp
"Flight Number","",Dsp
"Costs",0) <<@ Submit
BookHotel
= editTask
"BookHotel" (Dsp "Hotel Name","",Dsp "Costs",0) <<@ Submit
BookCar
= editTask
"BookCar" (Dsp "Car Brand","",Dsp
"Costs",0) <<@ Submit
Dsp =
DisplayMode