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