ACME Bird Seed order entry - Eleven source code
options
{
app_name = "ACME Bird Seed order entry";
package_name = "birdseed";
display_header = "no";
}
/*------------------------------------------------------------
Define global variables (main menu launcher and livetable
variables for accessing external database tables)
------------------------------------------------------------*/
statesafe launcher menu;
statesafe livetable
{
db_table = "demo_catalog";
var catalog_num "Catalog number" [id];
var seed_type "Seed type";
var price "Price";
} catalog;
statesafe livetable
{
db_table = "demo_customer";
var customer_id "Customer id" [auto];
var name "Name";
var address "Address";
} customers;
statesafe livetable
{
db_table = "demo_order";
var order_date "Order date";
var customer_id "Customer id";
var catalog_num "Seed catalog number";
var quantity "Quantity";
} orders;
statesafe livetable
{
db_table =
"demo_order",
"demo_customer" ("demo_customer.customer_id = demo_order.customer_id"),
"demo_catalog" ("demo_catalog.catalog_num = demo_order.catalog_num");
var order_date "Order date";
var name ("demo_customer.name") "Customer";
var seed_type "Seed type";
var quantity "Quantity";
} report;
/*------------------------------------------------------------
Define subroutines
------------------------------------------------------------*/
sub welcome ()
{
display no_continue
{
object [position="header" class="birdseedHeader" element="img" src="http://eleven.sourceforge.net/image/birdseed-header.gif" alt="ACME Bird Seed order entry" width="250" height="64"] ("");
print [position="left"] ("Menu", menu);
print ("Welcome to the ACME Bird Seed order entry application.");
print ("Choose one of the options on the left side of the display.");
}
}
sub updateCatalog ()
{
display no_continue
{
object [position="header" class="birdseedHeader" element="img" src="http://eleven.sourceforge.net/image/birdseed-header.gif" alt="ACME Bird Seed order entry" width="250" height="64"] ("");
print [position="left"] ("Menu", menu);
edit ("Update seed catalog:", catalog);
}
}
sub updateCustomers ()
{
display no_continue
{
object [position="header" class="birdseedHeader" element="img" src="http://eleven.sourceforge.net/image/birdseed-header.gif" alt="ACME Bird Seed order entry" width="250" height="64"] ("");
print [position="left"] ("Menu", menu);
edit ("Update customer list:", customers);
}
}
sub enterOrders ()
{
statesafe enum customer; /* dynamic enum */
statesafe enum product; /* dynamic enum */
statesafe var quantity;
/* load dynamic enums with current table values */
customer.setvalues (customers, "customer_id", "name");
product.setvalues (catalog, "catalog_num", "seed_type");
while (1)
{
customer = "";
product = "";
quantity = "";
display
{
object [position="header" class="birdseedHeader" element="img" src="http://eleven.sourceforge.net/image/birdseed-header.gif" alt="ACME Bird Seed order entry" width="250" height="64"] ("");
print [position="left"] ("Menu", menu);
print ("Enter order:");
edit ("Customer: ", customer);
edit ("Seed type: ", product);
edit ("Quantity: ", quantity);
}
transient array order;
order {'order_date'} = now ();
order {'customer_id'} = customer;
order {'catalog_num'} = product;
order {'quantity'} = quantity;
statesafe var status = orders.insert (order);
display
{
object [position="header" class="birdseedHeader" element="img" src="http://eleven.sourceforge.net/image/birdseed-header.gif" alt="ACME Bird Seed order entry" width="250" height="64"] ("");
print [position="left"] ("Menu", menu);
if (status eq "ok")
{
print ("Order saved.");
}
else
{
print ("Error: ", status);
}
}
}
}
sub viewOrders ()
{
statesafe launcher pager;
statesafe var currentPage = 0;
while (1)
{
prepare pager
{
"Prev page" { currentPage = currentPage - 1; }
"Next page" { currentPage = currentPage + 1; }
}
mission
{
statesafe var numPages = report.pagecount ();
if (currentPage < 0) { currentPage = 0; }
if (currentPage >= numPages) { currentPage = numPages-1; }
report.page (currentPage);
display no_continue
{
object [position="header" class="birdseedHeader" element="img" src="http://eleven.sourceforge.net/image/birdseed-header.gif" alt="ACME Bird Seed order entry" width="250" height="64"] ("");
print [position="left"] ("Menu", menu);
print ("Orders on file (5 per page):", report);
if (numPages == 1)
{
print ("Page 1 of 1.");
}
else if (numPages >= 2)
{
print ("Page ", currentPage+1, " of ", numPages, ".", pager);
}
}
}
}
}
/*------------------------------------------------------------
Start program
------------------------------------------------------------*/
catalog.sort ("catalog_num");
customers.sort ("customer_id");
report.sort ("order_date", "name");
report.pagesize (5);
report.page (0);
while (1)
{
prepare menu
{
"Welcome" { welcome (); }
"Catalog" { updateCatalog (); }
"Customers" { updateCustomers (); }
"Enter orders" { enterOrders (); }
"View orders" { viewOrders (); }
}
mission
{
welcome ();
}
}