package webshop::Order;
use base "Contenido::Document";
use Contenido::Globals;
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' => 'pay_by', 'type' => 'lookup', 'rusname' => 'Тип оплаты', facilshow => 1, postshow => 1,
'lookup_opts' => {
'class' => 'webshop::Payment',
},
},
{ 'attr' => 'pay_alias', 'type' => 'string', 'rusname' => 'Название метода оплаты', shortname => 'Оплата',
postshow => 1, facilshow => 1 },
{ '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' => 'Количество позиций',
manager_hidden => 1, manshow => 1, postshow => 1, facilshow => 1 },
{ 'attr' => 'sum', 'type' => 'string', 'rusname' => 'Сумма (gross)', shortname => 'Сумма',
manager_hidden => 1, column => 5, postshow => 1, facilshow => 1 },
{ 'attr' => 'sum_discount', 'type' => 'string', 'rusname' => 'Сумма скидки', shortname => 'Скидка',
manager_hidden => 1, column => 6, postshow => 1, facilshow => 1 },
{ 'attr' => 'sum_delivery', 'type' => 'string', 'rusname' => 'Стоимость доставки', shortname => 'Доставка',
manager_hidden => 1, column => 7, postshow => 1, facilshow => 1 },
{ 'attr' => 'sum_total', 'type' => 'string', 'rusname' => 'Сумма общая', shortname => 'Total',
manager_hidden => 1, column => 8, virtual => 1, 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, mandatory => 1, },
{ 'attr' => 'phone', 'type' => 'string', 'rusname' => 'Телефон для связи', shortname => 'Тел.',
column => 4, postshow => 1, facilshow => 1,
mandatory => 1, rel => 'Не указан телефон' },
{ 'attr' => 'address', 'type' => 'text', 'rusname' => 'Адрес доставки', rows => 5, postedit => 1, facilshow => 1,
mandatory => 1, rel => 'Не заполнен адрес доставки' },
{ 'attr' => 'zipcode', 'type' => 'string', 'rusname' => 'Почтовый индекс', postshow => 1,
mandatory => 1, rel => 'Не указан почтовый индекс' },
{ 'attr' => 'area', 'type' => 'lookup', 'rusname' => 'Регион',
lookup_opts => { class => 'webshop::Area', order_by => 'name' },
allow_null => 1, mandatory => 1, rel => 'Не выбран регион'
},
{ 'attr' => 'town_id', 'type' => 'lookup', 'rusname' => 'Город',
lookup_opts => { class => 'webshop::Town', order_by => 'name' },
allow_null => 1, mandatory => 1, rel => 'Не выбран город'
},
{ 'attr' => 'town', 'type' => 'string', 'rusname' => 'Город', postshow => 1, facilshow => 1,
mandatory => 1, rel => 'Не указан город' },
{ 'attr' => 'metro', 'type' => 'string', 'rusname' => 'Ближайшее метро', manager_hidden => 1, postshow => 1 },
{ 'attr' => 'timeline', 'type' => 'string', 'rusname' => 'Предпочтительное время', postshow => 1, },
{ 'attr' => 'description', 'type' => 'text', 'rusname' => 'Описание для курьера', rows => 5, postshow => 1, faciledit => 1 },
{ 'attr' => 'manager_comment', 'type' => 'text', 'rusname' => 'Комментарий менеджера', rows => 5, postshow => 1, facilshow => 1, faciledit => undef },
{ 'attr' => 'facility_comment', 'type' => 'text', 'rusname' => 'Описание проблем с комплектацией', rows => 5, manager_hidden => 1, faciledit => 1 },
{ 'attr' => 'delivery_comment', 'type' => 'text', 'rusname' => 'Описание проблем с доставкой', rows => 5, manager_hidden => 1, postedit => 1 },
)
}
sub sum_total {
my $self = shift;
return ($self->sum || 0) - ($self->sum_discount || 0) + ($self->sum_delivery || 0);
}
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_total;
return $keeper->{webshop}->price_format( $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->status(5);
$self->store;
}
sub class_name
{
return 'Заказ';
}
sub class_description
{
return 'Заказ';
}
sub class_table
{
return 'webshop::SQL::Order';
}
sub table_links
{
return [
{ name => 'Корзина', class => 'webshop::Basket', filter => 'order_id', field => 'order_id' },
];
}
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 );
}
my $sql = $self->keeper->SQL->prepare('DELETE FROM webshop_order_coupons where source_id = ?');
$sql->execute( $self->id );
1;
}
1;