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