NAME
Handel::Order - Module for maintaining order contents
SYNOPSIS
my $order = Handel::Order->new({
id => '12345678-9098-7654-322-345678909876'
});
my $iterator = $order->items;
while (my $item = $iterator->next) {
print $item->sku;
print $item->price;
print $item->total;
};
DESCRIPTION
Handel::Order
is a component for maintaining simple order records.
While Handel::Order
subclasses Class::DBI, it is strongly recommended that you not use its methods unless it's absolutely necessary. Stick to the documented methods here and you'll be safe should I decide to implement some other data access mechanism. :-)
CONSTRUCTOR
There are three ways to create a new order object. You can either pass a hashref into new
containing all the required values needed to create a new order record or pass a hashref into load
containing the search criteria to use to load an existing order or set of orders.
NOTE: The only required hash key is cart
. new
will copy the specified carts items inthe the order items. cart
can be an already existing Handel::Cart object, of a hash reference of search critera, or a cart id (uuid).
Handel::Order->new(\%data)
-
my $order = Handel::Order->new({ shopper => '10020400-E260-11CF-AE68-00AA004A34D5', id => '111111111-2222-3333-4444-555566667777', cart => $cartobject }); my $order = Handel::Order->new({ shopper => '10020400-E260-11CF-AE68-00AA004A34D5', id => '111111111-2222-3333-4444-555566667777', cart => '11112222-3333-4444-5555-666677778888' }); my $order = Handel::Order->new({ shopper => '10020400-E260-11CF-AE68-00AA004A34D5', id => '111111111-2222-3333-4444-555566667777', cart => { id => '11112222-3333-4444-5555-666677778888', type => CART_TYPE_TEMP } });
Handel::Order->load([\%filter, $wantiterator])
-
my $order = Handel::Order->load({ id => 'D597DEED-5B9F-11D1-8DD2-00AA004ABD5E' });
You can also omit \%filter to load all available orders.
my @orders = Handel::Order->load();
In scalar context
load
returns aHandel::Order
object if there is a single result, or a Handel::Iterator object if there are multiple results. You can forceload
to always return an iterator even if only one cart exists by setting the$wantiterator
parameter toRETURNAS_ITERATOR
.my $iterator = Handel::Order->load(undef, RETURNAS_ITERATOR); while (my $item = $iterator->next) { print $item->sku; };
See Handel::Contstants for the available
RETURNAS
options.A
Handel::Exception::Argument
exception is thrown if the first parameter is not a hashref.
METHODS
items([\%filter, [$wantiterator])
You can retrieve all or some of the items contained in the order via the items
method. In a scalar context, items returns an iterator object which can be used to cycle through items one at a time. In list context, it will return an array containing all items.
my $iterator = $order->items;
while (my $item = $iterator->next) {
print $item->sku;
};
my @items = $order->items;
...
dosomething(\@items);
When filtering the items in the order in scalar context, a Handel::Order::Item
object will be returned if there is only one result. If there are multiple results, a Handel::Iterator object will be returned instead. You can force items
to always return a Handel::Iterator
object even if only one item exists by setting the $wantiterator parameter to RETURNAS_ITERATOR
.
my $item = $order->items({sku => 'SKU1234'}, RETURNAS_ITERATOR);
if ($item->isa('Handel::Order::Item)) {
print $item->sku;
} else {
while ($item->next) {
print $_->sku;
};
};
See the RETURNAS
constants in Handel::Constants for other options.
In list context, filtered items return an array of items just as when items is called without a filter specified.
my @items - $order->items((sku -> 'SKU1%'});
A Handel::Exception::Argument
exception is thrown if parameter one isn't a hashref or undef.
count
Returns the number of items in the order object.
my $numitems = $order->count;
AUTHOR
Christopher H. Laco
CPAN ID: CLACO
claco@chrislaco.com
http://today.icantfocus.com/blog/