Revision 198 (by ahitrov, 2012/03/15 18:29:29) Simple webshop support plugin
package webshop::Order;

use base "Contenido::Document";
sub extra_properties
{
	return (
		{ 'attr' => 'status',   'type' => 'status',     'rusname' => 'Статус заказа', facilshow => 1, postshow => 1,
			'cases' => [
					[0, 'открыт'],
					[1, 'обрабатывается'],
					[2, 'комплектуется'],
					[3, 'в доставке'],
					[4, 'доставлен'],
					[5, 'отклонен'],
				],
		},
		{ 'attr' => 'delivery',		'type' => 'lookup',	'rusname' => 'Тип доставки', facilshow => 1, postshow => 1,
			'lookup_opts'   => {
				'class'         => 'webshop::Delivery',
			},
		},
		{ 'attr' => 'btime',		'type' => 'datetime',	'rusname' => 'Заказ отдан на комплектацию',
				postshow => 1, facilshow => 1 },
		{ 'attr' => 'ftime',		'type' => 'datetime',	'rusname' => 'Заказ передан в доставку',
				manager_hidden => 1, postshow => 1, faciledit => 1 },
		{ 'attr' => 'etime',		'type' => 'datetime',	'rusname' => 'Заказ доставлен',
				manager_hidden => 1, postedit => 1, facilshow => 1 },
		{ 'attr' => 'num',		'type' => 'integer',	'rusname' => 'Количество позиций',
				manshow => 1, postshow => 1, facilshow => 1 },
		{ 'attr' => 'sum',		'type' => 'string',	'rusname' => 'Сумма (total)', shortname => 'Сумма',
				column => 5, postshow => 1, facilshow => 1 },
		{ 'attr' => 'sum_delivery',	'type' => 'string',	'rusname' => 'Стоимость доставки', shortname => 'Доставка',
				column => 6, postshow => 1, facilshow => 1 },
		{ 'attr' => 'contact',		'type' => 'string',	'rusname' => 'Контактное лицо', facilshow => 1 },
		{ 'attr' => 'email',		'type' => 'string',	'rusname' => 'E-mail для связи', shortname => 'E-mail',
				column => 3, postshow => 1, facilshow => 1 },
		{ 'attr' => 'phone',		'type' => 'string',	'rusname' => 'Телефон для связи', shortname => 'Тел.',
				column => 4, postshow => 1, facilshow => 1 },
		{ 'attr' => 'zipcode',		'type' => 'string',	'rusname' => 'Почтовый индекс', postshow => 1 },
		{ 'attr' => 'town',		'type' => 'string',	'rusname' => 'Город', postshow => 1, facilshow => 1 },
		{ 'attr' => 'metro',		'type' => 'string',	'rusname' => 'Ближайшее метро', postshow => 1 },
		{ 'attr' => 'timeline',		'type' => 'string',	'rusname' => 'Предпочтительное время', postshow => 1 },
		{ 'attr' => 'description',	'type' => 'text',       'rusname' => 'Описание для курьера', rows => 5, postshow => 1 },
		{ 'attr' => 'facility_comment',	'type' => 'text',       'rusname' => 'Описание проблем с комплектацией', rows => 5, faciledit => 1 },
		{ 'attr' => 'delivery_comment',	'type' => 'text',       'rusname' => 'Описание проблем с доставкой', rows => 5, postedit => 1 },
		{ 'attr' => 'address',		'type' => 'text',       'rusname' => 'Адрес доставки', rows => 5, postedit => 1, facilshow => 1 },
	)
}

sub sum_formatted {
	my $self = shift;

	my $price = $self->sum;
	$price = reverse $price;
	$price =~ s/(\d{3})/$1\ /g;
	$price = reverse $price;

	return $price;
}

sub total_formatted {
	my $self = shift;

	my $price = $self->sum + ($self->sum_delivery || 0);
	$price = reverse $price;
	$price =~ s/(\d{3})/$1\ /g;
	$price = reverse $price;

	return $price;
}


sub reject {
	my $self = shift;

	my $query = $self->{keeper}->SQL->prepare("delete from basket where order_id = ? and uid = ?");
	$query->execute( $self->id, $self->uid );
	$self->delete;
}


sub class_name
{
	return 'Заказ';
}

sub class_description
{
	return 'Заказ';
}

sub class_table
{
	return 'webshop::SQL::Order';
}


sub post_delete
{
    my $self = shift;
    my @items = $self->keeper->get_documents(
			class	=> 'webshop::Basket',
			order_id	=> $self->id,
		);
    foreach my $item ( @items ) {
	$item->delete( attachments => 1 );
    }
    1;
}

1;