#!/opt/bin/perl
#build-a-pizza order form
use CGI;
$cgiobject=new CGI;
$cgiobject->use_named_parameters;
@allparams=$cgiobject->param();
if ($#allparams>-1)
{&get_state_variables}
else
{&init}
if ($orderComplete)
{ &complete_order }
else
{ &build_order }
sub build_order()
#build the pizza order
{ unless ($newOrderFlag)
{ $greeting="Welcome! Please begin building your pizza order." }
else
{ $greeting="
Build-a-Pizza
You may modify or finalize your order below." }
$greeting.="
Current pizza price: \$".
sprintf("%.2f",&calcTotal()).".";
print $cgiobject->header;
print $cgiobject->start_html(-title=>'Build-a-Pizza',-bgcolor=>'white');
print "$greeting
";
&output_form;
print $cgiobject->end_html;
}
sub complete_order()
#checkout order
{ print $cgiobject->header;
print $cgiobject->start_html(-title=>'Thank you from Build-a-Pizza',-bgcolor=>'white');
$invoice= "Thank you for your pizza order!
".
"
Deliveries should arrive in 30-45 minutes. ".
"Pickup orders please arrive in about 20 minutes.
".
"The following order has been sent to the kitchen:
";
if ($deliver eq "deliver")
{ $invoice.="Delivery " }
else
{ $invoice.="Pickup " }
$invoice.="Order for: $name
";
if ($deliver eq "deliver")
{ $invoice.="Delivery to: $address
" }
$invoice.="Order Description:
A $size pizza with the following toppings:
";
@allToppings=$cgiobject->param("order_toppings");
$invoice.="".join(",",@allToppings)."";
$invoice.="
TOTAL DUE: ".sprintf("%.2f",&calcTotal());
print $invoice;
##here would be code to send invoice kitchen
##such as by way of email
}
sub init()
#define initial values for pizza parameters
{ $name="Your name";
$address="Where to?";
$phone="Your phone";
$deliver="deliver";
$toppings="pepperoni";
$size="large";
}
sub get_state_variables()
#grab any parameters which were submitted
{ $name=$cgiobject->param("order_name");
$address=$cgiobject->param("order_address");
$phone=$cgiobject->param("order_phone");
$deliver=$cgiobject->param("order_deliver");
$toppings=$cgiobject->param("order_toppings");
$size=$cgiobject->param("order_size");
$newOrderFlag=$cgiobject->param("newOrderFlag");
$orderComplete=$cgiobject->param("finish")
}
sub calcTotal()
#calculate pizza cost based on current parameters
{ %sizelabels=('small'=>'small (8",$5)',
'medium'=>'medium (12",$8)',
'large'=>'large (16",$10)',
'xlarge'=>'x-large (18",$12)');
%sizeprices=('small'=>5,
'medium'=>8,
'large'=>10,
'xlarge'=>12);
%toppingsprices=('small'=>.50,
'medium'=>.75,
'large'=>1.00,
'xlarge'=>1.25);
$baseCost=$sizeprices{$size};
@allToppings=$cgiobject->param("order_toppings");
$toppingsCost=($#allToppings+1)*($toppingsprices{$size});
return $baseCost+$toppingsCost;
}
sub output_form()
#construct and output the pizza form HTML
{ $theform=$cgiobject->startform(-name=>'pizzaform',
-method=>'get',
-action=>'/Authoring/Languages/Perl/PerlfortheWeb/cgi-bin/state_pizza.cgi');
#create name text input field
$theform.="Your name: ";
$theform.=$cgiobject->textfield(-name=>'order_name',
-size=>30,
-default=>$name);
#create phone text input field
$theform.="
Your telephone number: ";
$theform.=$cgiobject->textfield(-name=>'order_phone',
-size=>10,
-default=>$phone);
#create address text input field if deliver option selected
if ($deliver eq "deliver"){
$theform.="
Deliver to address:
";
$theform.=$cgiobject->textarea(-name=>'order_address',
-rows=>3,
-default=>$address);
}
#create delivery radio buttons
$theform.="
";
$theform.=$cgiobject->radio_group(-name=>'order_deliver',
-values=>["pickup","deliver"],
-default=>$deliver);
#create toppings checkboxes
$theform.="
Please select toppings from the list below:
";
$theform.="Note: Each topping costs .50,.75,1.00,1.25 for S,M,L,XL pizza";
$theform.=$cgiobject->checkbox_group(-name=>'order_toppings',
-values=>['pepperoni','sausage','meatball',
'mushroom','peppers','pineapple',
'ham','shrimp','tomato',
'onion','anchovies','liver'],
-default=>$toppings,
-linebreak=>'false',
-columns=>3);
#create size radio buttons
$theform.="
Select a pizza size: ";
$theform.=$cgiobject->radio_group(-name=>'order_size',
-values=>["small","medium","large","xlarge"],
-labels=>\%sizelabels,
-default=>$size);
#create hidden field for newOrderFlag
$theform.=$cgiobject->hidden(-name=>'newOrderFlag',-value=>'1');
#create submit and reset buttons
$theform.="
";
$theform.=$cgiobject->submit(-name=>"calculate",
-label=>'Calculate');
$theform.=$cgiobject->submit(-name=>"finish",
-label=>'Finish Order');
$theform.=$cgiobject->endform;
print $theform
}