#buildapizza.cgi #build-a-pizza order form
#!/usr/local/bin/perl
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="<H3>Build-a-Pizza</H3>You may modify or finalize your order below." }
$greeting.="<br>Current pizza price: <font color='red'>\$".
sprintf("%.2f",&calcTotal())."</font>.";
print $cgiobject->header;
print $cgiobject->start_html(-title=>'Build-a-Pizza',-bgcolor=>'white');
print "<H2>$greeting</H2>";
&output_form;
print $cgiobject->end_html;
}
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 complete_order()
#checkout order
{ print $cgiobject->header;
print $cgiobject->start_html(-title=>'Thank you from Build-a-Pizza',-bgcolor=>'white');
$invoice= "<H2>Thank you for your pizza order!</H2>".
"<HR>Deliveries should arrive in 30-45 minutes. ".
"Pickup orders please arrive in about 20 minutes.<BR>".
"The following order has been sent to the kitchen:<BR>";
if ($deliver eq "deliver")
{ $invoice.="<B>Delivery</B> " }
else
{ $invoice.="<B>Pickup</B> " }
$invoice.="Order for: $name<br>";
if ($deliver eq "deliver")
{ $invoice.="Delivery to: $address<br>" }
$invoice.="Order Description:<br>A <B>$size</B> pizza with the following toppings:<br>";
@allToppings=$cgiobject->param("order_toppings");
$invoice.="<B>".join(",",@allToppings)."</B>";
$invoice.="<BR>TOTAL DUE: ".sprintf("%.2f",&calcTotal());
print $invoice;
##here would be code to send invoice kitchen
##such as by way of email
}
sub output_form()
#construct and output the pizza form HTML
{ $theform=$cgiobject->startform(-name=>'pizzaform',
-method=>'get',
-action=>'/cgi-bin/buildapizza.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.="<BR>Your telephone number: ";
$theform.=$cgiobject->textfield(-name=>'order_phone',
-size=>10,
-default=>$phone);
#create address text input field if deliver option selected
$theform.="<BR>Deliver to address:<BR>";
$theform.=$cgiobject->textarea(-name=>'order_address',
-rows=>3,
-default=>$address);
#create delivery radio buttons
$theform.="<BR>";
$theform.=$cgiobject->radio_group(-name=>'order_deliver',
-values=>["pickup","deliver"],
-default=>$deliver);
#create toppings checkboxes
$theform.="<HR>Please select toppings from the list below:<BR>";
$theform.="<SMALL>Note: Each topping costs .50,.75,1.00,1.25 for S,M,L,XL pizza</SMALL>";
$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.="<BR>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.="<BR><BR>";
$theform.=$cgiobject->submit(-name=>"calculate",
-label=>'Calculate');
$theform.=$cgiobject->submit(-name=>"finish",
-label=>'Finish Order');
$theform.=$cgiobject->endform;
print $theform
} |