Line # Revision Author
1 198 ahitrov package webshop::Order;
2
3 use base "Contenido::Document";
4 sub extra_properties
5 {
6 return (
7 { 'attr' => 'status', 'type' => 'status', 'rusname' => 'Статус заказа', facilshow => 1, postshow => 1,
8 'cases' => [
9 [0, 'открыт'],
10 [1, 'обрабатывается'],
11 [2, 'комплектуется'],
12 [3, 'в доставке'],
13 [4, 'доставлен'],
14 [5, 'отклонен'],
15 ],
16 },
17 { 'attr' => 'delivery', 'type' => 'lookup', 'rusname' => 'Тип доставки', facilshow => 1, postshow => 1,
18 'lookup_opts' => {
19 'class' => 'webshop::Delivery',
20 },
21 },
22 { 'attr' => 'btime', 'type' => 'datetime', 'rusname' => 'Заказ отдан на комплектацию',
23 postshow => 1, facilshow => 1 },
24 { 'attr' => 'ftime', 'type' => 'datetime', 'rusname' => 'Заказ передан в доставку',
25 manager_hidden => 1, postshow => 1, faciledit => 1 },
26 { 'attr' => 'etime', 'type' => 'datetime', 'rusname' => 'Заказ доставлен',
27 manager_hidden => 1, postedit => 1, facilshow => 1 },
28 { 'attr' => 'num', 'type' => 'integer', 'rusname' => 'Количество позиций',
29 manshow => 1, postshow => 1, facilshow => 1 },
30 { 'attr' => 'sum', 'type' => 'string', 'rusname' => 'Сумма (total)', shortname => 'Сумма',
31 column => 5, postshow => 1, facilshow => 1 },
32 { 'attr' => 'sum_delivery', 'type' => 'string', 'rusname' => 'Стоимость доставки', shortname => 'Доставка',
33 column => 6, postshow => 1, facilshow => 1 },
34 { 'attr' => 'contact', 'type' => 'string', 'rusname' => 'Контактное лицо', facilshow => 1 },
35 { 'attr' => 'email', 'type' => 'string', 'rusname' => 'E-mail для связи', shortname => 'E-mail',
36 column => 3, postshow => 1, facilshow => 1 },
37 { 'attr' => 'phone', 'type' => 'string', 'rusname' => 'Телефон для связи', shortname => 'Тел.',
38 column => 4, postshow => 1, facilshow => 1 },
39 { 'attr' => 'zipcode', 'type' => 'string', 'rusname' => 'Почтовый индекс', postshow => 1 },
40 { 'attr' => 'town', 'type' => 'string', 'rusname' => 'Город', postshow => 1, facilshow => 1 },
41 { 'attr' => 'metro', 'type' => 'string', 'rusname' => 'Ближайшее метро', postshow => 1 },
42 { 'attr' => 'timeline', 'type' => 'string', 'rusname' => 'Предпочтительное время', postshow => 1 },
43 { 'attr' => 'description', 'type' => 'text', 'rusname' => 'Описание для курьера', rows => 5, postshow => 1 },
44 { 'attr' => 'facility_comment', 'type' => 'text', 'rusname' => 'Описание проблем с комплектацией', rows => 5, faciledit => 1 },
45 { 'attr' => 'delivery_comment', 'type' => 'text', 'rusname' => 'Описание проблем с доставкой', rows => 5, postedit => 1 },
46 { 'attr' => 'address', 'type' => 'text', 'rusname' => 'Адрес доставки', rows => 5, postedit => 1, facilshow => 1 },
47 )
48 }
49
50 sub sum_formatted {
51 my $self = shift;
52
53 my $price = $self->sum;
54 $price = reverse $price;
55 $price =~ s/(\d{3})/$1\ /g;
56 $price = reverse $price;
57
58 return $price;
59 }
60
61 sub total_formatted {
62 my $self = shift;
63
64 my $price = $self->sum + ($self->sum_delivery || 0);
65 $price = reverse $price;
66 $price =~ s/(\d{3})/$1\ /g;
67 $price = reverse $price;
68
69 return $price;
70 }
71
72
73 sub reject {
74 my $self = shift;
75
76 my $query = $self->{keeper}->SQL->prepare("delete from basket where order_id = ? and uid = ?");
77 $query->execute( $self->id, $self->uid );
78 $self->delete;
79 }
80
81
82 sub class_name
83 {
84 return 'Заказ';
85 }
86
87 sub class_description
88 {
89 return 'Заказ';
90 }
91
92 sub class_table
93 {
94 return 'webshop::SQL::Order';
95 }
96
97
98 sub post_delete
99 {
100 my $self = shift;
101 my @items = $self->keeper->get_documents(
102 class => 'webshop::Basket',
103 order_id => $self->id,
104 );
105 foreach my $item ( @items ) {
106 $item->delete( attachments => 1 );
107 }
108 1;
109 }
110
111 1;