Business-Cart-Generic

 view release on metacpan or  search on metacpan

lib/Business/Cart/Generic/Database/Order.pm  view on Meta::CPAN

package Business::Cart::Generic::Database::Order;

use strict;
use warnings;

use Moose;

extends 'Business::Cart::Generic::Database::Base';

use namespace::autoclean;

our $VERSION = '0.85';

# --------------------------------------------------

sub add_to_cart
{
	my($self, $order) = @_;

	$self -> db -> logger -> log(debug => 'add_to_cart()');

	# Note: save_order() sets $$order{id}, and both
	# save_order() and save_order_history() use $$order{status_id}.

	my($order_session) = $self -> db -> session -> param('order');
	my(@status2id)     = $self -> schema -> resultset('OrderStatuse') -> search({}, {columns => [qw/name id/]});
	my(%status2id)     = map{($_ -> name, $_ -> id)} @status2id;
	my($status)        = 'Processing';
	$$order{status_id} = $status2id{$status};

	# Is it a new order?

	if ($$order_session{item_count} == 0)
	{
		$self -> save_order($order);

		$$order_session{id} = $$order{id};
	}
	else
	{
		$$order{id} = $$order_session{id};
	}

	$$order_session{item_id} = $$order{item_id} = $self -> save_order_item($order);

	$self -> save_order_history($order);

	$$order_session{item_count}++;

	$self -> db -> session -> param(order => $order_session);
	$self -> db -> logger -> log(info => "Order item saved. id: $$order{id}. item id: $$order{item_id}. item count: $$order_session{item_count}");

	return $order_session;

} # End of add_to_cart.

# --------------------------------------------------

sub cancel_order
{
	my($self) = @_;

	$self -> db -> logger -> log(debug => 'cancel_order()');

	my($order_session) = $self -> db -> session -> param('order');

	$self -> schema -> resultset('OrderHistory') -> search({order_id => $$order_session{id} }) -> delete;
	$self -> schema -> resultset('OrderItem') -> search({order_id => $$order_session{id} }) -> delete;
	$self -> schema -> resultset('Order') -> search({id => $$order_session{id} }) -> delete;
	$self -> db -> logger -> log(info => "Order cancelled: id: $$order_session{id}");



( run in 0.650 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )