NAME

Apache::iNcom::OrderManager - Module responsible for order management.

SYNOPSIS

my $order = $Order->checkout( "order", $Cart, %fdat );
my $report $Order->order_report( $order );

DESCRIPTION

This is the part of the Apache::iNcom framework that is responsible for managing the order process. Once the user is ready to check out, the OrderManager rides in. This module enters the user's order in the database according to an order profile. It can also generate order reports and such.

It is in that module that future development will place links with CyberCash (tm) and other online payment systems.

DATABASE

The order should be entered in two tables. One table table contains the global order informations : order no, client's information, status, total, taxes, etc., and another table contains the ordered items.

To make order customizable, the OrderManager uses DBIx::SearchProfiles to insert the information. That design is similar to DBIx::UserDB in that only a few fields are required by the framework and the schema can easily be adapted for application specific needs.

The mandatory fields in the main table are the order_no field, which should be a primary key on the table, and the status field. The status field is used to track the order process.

You may also want to add monetary fields for total, subtotal and for the taxes, shipping and discount informations since that will always be available in the order.

The mandatory fields in the items table is order_no which links the items to the order table. What will be inserted in that table are the cart items, so you may want to use the following fields : price, subtotal, quantity and fields for the discount information.

ORDER PROFILES

The order profiles is a file which is C{eval}-ed at runtime. (It is also reloaded whenever it changes on disk. It should return an hash reference which contains the name of a profile associated with an hash reference which may contains the following items :

order_template

The record template that will be used to insert the order informations.

order_item_template

The record template that will be used to insert order items.

order_no

The template query that will be used to generate order number.

taxes_fields

The field names that should be given to the order's taxes. This is an array reference which defaults to [taxes0, taxes1, taxes2...] if there is more than one taxes or [ taxes ] if there is only one taxes.

shipping_fields

The field names that should be given to the order's shipping charges. This is an array reference which defaults to [ shipping0, shipping1, shipping2...] if there more than one shipping charges or [ shipping ] if only one is present.

discount_fields

The field names that should be given to the order's discounts. This is an array reference which defaults to [discount0, discount1, discount2...] if there more than one discount or [ discount ] if only one is present.

item_discount_fields

The field names that should be given to the items' discounts. This is an array reference which defaults to [discount0, discount1, discount2...] if there more than one discount or [ discount ] if only one is present.

    Example of an order profile : 

    {
	order =>
	{
	    order_template	    => "order",
	    order_item_template	    => "order_items",
	    order_no		    => "order_no",
	    taxes_fields	    => [qw( gst gsp ) ],
	},
    }

INITIALIZATION

An object is automatically initialized on each request by the Apache::iNcom framework. It is accessible through the $Order global variable in Apache::iNcom pages.

METHODS

checkout ( $name, $cart, $order_data )

This method enter the user order in the database. It takes the following parameters :

$name

The name of the order profile to use.

$cart

The cart that contains the user's order.

$order_data

An hash reference which contains other informations that should be stored with the order. (Like customer's name and address for example.)

The cart is emptied if the checkout is successful. NOTE: This is the only method in the framework that will do an explicit commit to make sure that the order is correctly entered in the database.

The method returns an hash references which contains the order informations.

order_report ( $order, $template )

This method will generate an order report for a particular order. The first parameter is the order as returned by checkout, the second is the template file that should be used. This is a standard Apache::iNcom pages. The report will be generated in the namespace of the calling page, so standard Apache::iNcom globals will be accessible. DONT ABUSE IT. Also the order for which the report is generated will be accessible through the %order global hash.

AUTHOR

Copyright (c) 1999 Francis J. Lacoste and iNsu Innovations Inc. All rights reserved.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

SEE ALSO

Apache::iNcom(3) Apache::iNcom::Request(3) Apache::iNcom::CartManager(3)