Line # Revision Author
1 198 ahitrov package webshop::Order;
2
3 use base "Contenido::Document";
4 270 ahitrov use Contenido::Globals;
5
6 198 ahitrov sub extra_properties
7 {
8 return (
9 { 'attr' => 'status', 'type' => 'status', 'rusname' => 'Статус заказа', facilshow => 1, postshow => 1,
10 'cases' => [
11 [0, 'открыт'],
12 [1, 'обрабатывается'],
13 [2, 'комплектуется'],
14 [3, 'в доставке'],
15 [4, 'доставлен'],
16 [5, 'отклонен'],
17 ],
18 },
19 { 'attr' => 'delivery', 'type' => 'lookup', 'rusname' => 'Тип доставки', facilshow => 1, postshow => 1,
20 'lookup_opts' => {
21 'class' => 'webshop::Delivery',
22 },
23 },
24 { 'attr' => 'btime', 'type' => 'datetime', 'rusname' => 'Заказ отдан на комплектацию',
25 postshow => 1, facilshow => 1 },
26 { 'attr' => 'ftime', 'type' => 'datetime', 'rusname' => 'Заказ передан в доставку',
27 manager_hidden => 1, postshow => 1, faciledit => 1 },
28 { 'attr' => 'etime', 'type' => 'datetime', 'rusname' => 'Заказ доставлен',
29 manager_hidden => 1, postedit => 1, facilshow => 1 },
30 { 'attr' => 'num', 'type' => 'integer', 'rusname' => 'Количество позиций',
31 297 ahitrov manager_hidden => 1, manshow => 1, postshow => 1, facilshow => 1 },
32 198 ahitrov { 'attr' => 'sum', 'type' => 'string', 'rusname' => 'Сумма (total)', shortname => 'Сумма',
33 297 ahitrov manager_hidden => 1, column => 5, postshow => 1, facilshow => 1 },
34 270 ahitrov { 'attr' => 'sum_discount', 'type' => 'string', 'rusname' => 'Сумма скидки', shortname => 'Скидка',
35 297 ahitrov manager_hidden => 1, column => 6, postshow => 1, facilshow => 1 },
36 198 ahitrov { 'attr' => 'sum_delivery', 'type' => 'string', 'rusname' => 'Стоимость доставки', shortname => 'Доставка',
37 297 ahitrov manager_hidden => 1, column => 7, postshow => 1, facilshow => 1 },
38 270 ahitrov { 'attr' => 'sum_total', 'type' => 'string', 'rusname' => 'Сумма общая', shortname => 'Total',
39 297 ahitrov manager_hidden => 1, column => 8, virtual => 1, postshow => 1, facilshow => 1 },
40 198 ahitrov { 'attr' => 'contact', 'type' => 'string', 'rusname' => 'Контактное лицо', facilshow => 1 },
41 { 'attr' => 'email', 'type' => 'string', 'rusname' => 'E-mail для связи', shortname => 'E-mail',
42 259 ahitrov column => 3, postshow => 1, facilshow => 1, mandatory => 1, },
43 198 ahitrov { 'attr' => 'phone', 'type' => 'string', 'rusname' => 'Телефон для связи', shortname => 'Тел.',
44 259 ahitrov column => 4, postshow => 1, facilshow => 1,
45 mandatory => 1, rel => 'Не указан телефон' },
46 297 ahitrov { 'attr' => 'address', 'type' => 'text', 'rusname' => 'Адрес доставки', rows => 5, postedit => 1, facilshow => 1,
47 298 ahitrov mandatory => 1, rel => 'Не заполнен адрес доставки' },
48 259 ahitrov { 'attr' => 'zipcode', 'type' => 'string', 'rusname' => 'Почтовый индекс', postshow => 1,
49 mandatory => 1, rel => 'Не указан почтовый индекс' },
50 { 'attr' => 'area', 'type' => 'lookup', 'rusname' => 'Регион',
51 lookup_opts => { class => 'webshop::Area', order_by => 'name' },
52 allow_null => 1, mandatory => 1, rel => 'Не выбран регион'
53 },
54 { 'attr' => 'town_id', 'type' => 'lookup', 'rusname' => 'Город',
55 lookup_opts => { class => 'webshop::Town', order_by => 'name' },
56 allow_null => 1, mandatory => 1, rel => 'Не выбран город'
57 },
58 { 'attr' => 'town', 'type' => 'string', 'rusname' => 'Город', postshow => 1, facilshow => 1,
59 mandatory => 1, rel => 'Не указан город' },
60 297 ahitrov { 'attr' => 'metro', 'type' => 'string', 'rusname' => 'Ближайшее метро', manager_hidden => 1, postshow => 1 },
61 259 ahitrov { 'attr' => 'timeline', 'type' => 'string', 'rusname' => 'Предпочтительное время', postshow => 1, },
62 304 ahitrov { 'attr' => 'description', 'type' => 'text', 'rusname' => 'Описание для курьера', rows => 5, postshow => 1, faciledit => 1 },
63 297 ahitrov { 'attr' => 'facility_comment', 'type' => 'text', 'rusname' => 'Описание проблем с комплектацией', rows => 5, manager_hidden => 1, faciledit => 1 },
64 { 'attr' => 'delivery_comment', 'type' => 'text', 'rusname' => 'Описание проблем с доставкой', rows => 5, manager_hidden => 1, postedit => 1 },
65 198 ahitrov )
66 }
67
68 270 ahitrov
69 sub sum_total {
70 my $self = shift;
71
72 return ($self->sum || 0) - ($self->sum_discount || 0) + ($self->sum_delivery || 0);
73 }
74
75
76 198 ahitrov sub sum_formatted {
77 my $self = shift;
78
79 my $price = $self->sum;
80 $price = reverse $price;
81 $price =~ s/(\d{3})/$1\ /g;
82 $price = reverse $price;
83
84 return $price;
85 }
86
87 sub total_formatted {
88 my $self = shift;
89
90 270 ahitrov my $price = $self->sum_total;
91 return $keeper->{webshop}->price_format( $price );
92 198 ahitrov }
93
94
95 sub reject {
96 my $self = shift;
97
98 297 ahitrov # my $query = $self->{keeper}->SQL->prepare("delete from basket where order_id = ? and uid = ?");
99 # $query->execute( $self->id, $self->uid );
100 $self->status(5);
101 $self->store;
102 198 ahitrov }
103
104
105 sub class_name
106 {
107 return 'Заказ';
108 }
109
110 sub class_description
111 {
112 return 'Заказ';
113 }
114
115 sub class_table
116 {
117 return 'webshop::SQL::Order';
118 }
119
120 356 ahitrov sub table_links
121 {
122 return [
123 { name => 'Корзина', class => 'webshop::Basket', filter => 'order_id', field => 'order_id' },
124 ];
125 }
126 198 ahitrov
127 356 ahitrov
128 198 ahitrov sub post_delete
129 {
130 my $self = shift;
131 my @items = $self->keeper->get_documents(
132 class => 'webshop::Basket',
133 order_id => $self->id,
134 );
135 foreach my $item ( @items ) {
136 $item->delete( attachments => 1 );
137 }
138 270 ahitrov my $sql = $self->keeper->SQL->prepare('DELETE FROM webshop_order_coupons where source_id = ?');
139 $sql->execute( $self->id );
140
141 198 ahitrov 1;
142 }
143
144 1;