The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Mango::Order - Module representing an order

SYNOPSIS

    my $order = $provider->create({
        user => $user
    });
    
    my $iterator = $order->items;
    while (my $item = $iterator->next) {
        print $item->sku;
        print $item->price;
        print $item->total;
    };

DESCRIPTION

Mango::Order represents an order.

METHODS

add

Arguments: \%data | $item

Adds a new item to the current order and returns an instance of the item class. You can either pass the item data as a hash reference:

    my $item = $order->add({
        sku      => 'SKU1234',
        quantity => 1,
        price    => 1.25
    });

or pass an existing item:

    $order->add(
        $cart->items->first
    );

When passing an existing cart/order item to add, all columns in the source item will be copied into the destination item if the column exists in both the destination and source, and the column isn't the primary key or the foreign key of the item relationship.

clear

Deletes all items from the current order.

    $order->clear;

count

Returns the number of items in the order object.

    my $numitems = $order->count;

delete

Arguments: \%filter

Deletes the item matching the supplied filter from the current order.

    $order->delete({
        sku => 'ABC-123'
    });

destroy

Deletes the current order and its items.

items

Arguments: \%filter [, \%options]

Loads the current orders items matching the specified filter and returns a Mango::Iterator in scalar context, or a list of items in list context.

    my $iterator = $order->items;
    while (my $item = $iterator->next) {
        print $item->sku;
    };
    
    my @items = $order->items;

The following options are available:

order_by

Order the items by the column(s) and order specified. This option uses the SQL style syntax:

    my $items = $order->items(undef, {order_by => 'sku ASC'});

save

Marks the current order type as ORDER_TYPE_SAVED.

    $order->save

reconcile

Arguments: $cart

This method copies the specified carts items into the order only if the item count or the subtotal differ.

id

Returns the id of the current order.

    print $order->id;

See "id" in Handel::Schema::Order for more information about this column.

type

Arguments: $type

Gets/sets the type of the current order. Currently the two types allowed are:

ORDER_TYPE_TEMP

The order is temporary and may be purged during any [external] cleanup process after the designated amount of inactivity.

ORDER_TYPE_SAVED

The order should be left untouched by any cleanup process and is available to the shopper at any time.

    $order->type(ORDER_TYPE_SAVED);
    print $order->type;

number

Arguments: $number

Gets/sets the order number.

    $order->number(1015275);
    print $order->number;

created

$datetime

Gets/sets the date/time when the order was created. The date is returned as a stringified DateTime object.

    $order->created('2006-04-11T12:34:65');
    print $order->created;

updated

$datetime

Gets/sets the date/time when the order was last updated. The date is returned as a stringified DateTime object.

    $order->updated('2006-04-11T12:34:65');
    print $order->updated;

comments

$comments

Gets/sets the comments for this order.

    $order->comments('Handel with care');
    print $order->comments;

shipmethod

$shipmethod

Gets/sets the shipping method for this order.

    $order->shipmethod('UPS 2nd Day');
    print $order->shipmethod;

shipping

Arguments: $price

Gets/sets the shipping cost for the order item. The price is returned as a stringified Mango::Currency object.

    $item->shipping(12.95);
    print $item->shipping;
    print $item->shipping->format;

handling

Arguments: $price

Gets/sets the handling cost for the order item. The price is returned as a stringified Mango::Currency object.

    $item->handling(12.95);
    print $item->handling;
    print $item->handling->format;

tax

Arguments: $price

Gets/sets the tax for the order item. The price is returned as a stringified Mango::Currency object.

    $item->tax(12.95);
    print $item->tax;
    print $item->tax->format;

subtotal

Arguments: $price

Gets/sets the subtotal for the order item. The price is returned as a stringified Mango::Currency object.

    $item->subtotal(12.95);
    print $item->subtotal;
    print $item->subtotal->format;

total

Arguments: $price

Gets/sets the total for the order item. The price is returned as a stringified Mango::Currency object.

    $item->total(12.95);
    print $item->total;
    print $item->total->format;

billtofirstname

Arguments: $firstname

Gets/sets the bill to first name.

    $order->billtofirstname('Chistopher');
    print $order->billtofirstname;

billtolastname

Arguments: $lastname

Gets/sets the bill to last name

    $order->billtolastname('Chistopher');
    print $order->billtolastname;

billtoaddress1

Arguments: $address1

Gets/sets the bill to address line 1

    $order->billtoaddress1('1234 Main Street');
    print $order->billtoaddress1;

billtoaddress2

Arguments: $address2

Gets/sets the bill to address line 2

    $order->billtoaddress2('Suite 34b');
    print $order->billtoaddress2;

billtoaddress3

Arguments: $address3

Gets/sets the bill to address line 3

    $order->billtoaddress3('Floor 5');
    print $order->billtoaddress3;

billtocity

Arguments: $city

Gets/sets the bill to city

    $order->billtocity('Smallville');
    print $order->billtocity;

billtostate

Arguments: $state

Gets/sets the bill to state/province

    $order->billtostate('OH');
    print $order->billtostate;

billtozip

Arguments: $zip

Gets/sets the bill to zip/postal code

    $order->billtozip('12345-6500');
    print $order->billtozip;

billtocountry

Arguments: $country

Gets/sets the bill to country

    $order->billtocountry('US');
    print $order->billtocountry;

billtodayphone

Arguments: $phone

Gets/sets the bill to day phone number

    $order->billtodayphone('800-867-5309');
    print $order->billtodayphone;

billtonightphone

Arguments: $phone

Gets/sets the bill to night phone number

    $order->billtonightphone('800-867-5309');
    print $order->billtonightphone;

billtofax

Arguments: $fax

Gets/sets the bill to fax number

    $order->billtofax('888-132-4335');
    print $order->billtofax;

billtoemail

Arguments: $email

Gets/sets the bill to email address

    $order->billtoemail('claco@chrislaco.com');
    print $order->billtoemail;

shiptosameasbillto

Arguments: 0|1

When true, the ship address is the same as the bill to address.

    $order->shiptosameasbillto(1);
    print $order->shiptosameasbillto;

shiptofirstname

Arguments: $firstname

Gets/sets the ship to first name.

    $order->shiptofirstname('Chistopher');
    print $order->shiptofirstname;

shiptolastname

Arguments: $lastname

Gets/sets the ship to last name

    $order->shiptolastname('Chistopher');
    print $order->shiptolastname;

shiptoaddress1

Arguments: $address1

Gets/sets the ship to address line 1

    $order->shiptoaddress1('1234 Main Street');
    print $order->shiptoaddress1;

shiptoaddress2

Arguments: $address2

Gets/sets the ship to address line 2

    $order->shiptoaddress2('Suite 34b');
    print $order->shiptoaddress2;

shiptoaddress3

Arguments: $address3

Gets/sets the ship to address line 3

    $order->shiptoaddress3('Floor 5');
    print $order->shiptoaddress3;

shiptocity

Arguments: $city

Gets/sets the ship to city

    $order->shiptocity('Smallville');
    print $order->shiptocity;

shiptostate

Arguments: $state

Gets/sets the ship to state/province

    $order->shiptostate('OH');
    print $order->shiptostate;

shiptozip

Arguments: $zip

Gets/sets the ship to zip/postal code

    $order->shiptozip('12345-6500');
    print $order->shiptozip;

shiptocountry

Arguments: $country

Gets/sets the ship to country

    $order->shiptocountry('US');
    print $order->shiptocountry;

shiptodayphone

Arguments: $phone

Gets/sets the ship to day phone number

    $order->shiptodayphone('800-867-5309');
    print $order->shiptodayphone;

shiptonightphone

Arguments: $phone

Gets/sets the ship to night phone number

    $order->shiptonightphone('800-867-5309');
    print $order->shiptonightphone;

shiptofax

Arguments: $fax

Gets/sets the ship to fax number

    $order->shiptofax('888-132-4335');
    print $order->shiptofax;

shiptoemail

Arguments: $email

Gets/sets the ship to email address

    $order->shiptoemail('claco@chrislaco.com');
    print $order->shiptoemail;

update

Saves any changes made to the order back to the provider.

    $order->number(12345);
    $order->update;

Whenever "update" is called, "updated" is automatically set to the current time in UTC.

updated

Returns the date and time in UTC the order was last updated as a DateTime object.

    print $order->updated;

TEMPORARY COLUMNS

The following columns are really just methods to hold sensitive order data that we don't want to actually store in the database.

ccn

Arguments: $ccn

Gets/sets the credit cart number.

    $order->ccn(4444333322221111);
    print $order->ccn;

cctype

Arguments: $type

Gets/sets the credit cart type.

    $order->cctype('MasterCard');
    print $order->cctype;

ccm

Arguments: $month

Gets/sets the credit cart expiration month.

    $order->ccm(1);
    print $order->ccm;

ccy

Arguments: $year

Gets/sets the credit cart expiration year.

    $order->ccyear(2010);
    print $order->ccyear;

ccvn

Arguments: $cvvn

Gets/sets the credit cart verification number.

    $order->cvvn(102);
    print $order->cvvn;

ccname

Arguments: $name

Gets/sets the credit cart holders name as it appears on the card.

    $order->ccname('CHRISTOPHER H. LACO');
    print $order->ccname;

ccissuenumber

Arguments: $number

Gets/sets the credit cart issue number.

    $order->ccissuenumber(16544);
    print $order->ccissuenumber;

ccstartdate

Arguments: $startdate

Gets/sets the credit cart start date.

    $order->ccstartdate('1/2/2009');
    print $order->ccstartdate;

ccenddate

Arguments: $enddate

Gets/sets the credit cart end date.

    $order->ccenddate('12/31/2011');
    print $order->ccenddate;

SEE ALSO

Mango::Order::Item, Mango::Schema::Order

AUTHOR

    Christopher H. Laco
    CPAN ID: CLACO
    claco@chrislaco.com
    http://today.icantfocus.com/blog/