Line # Revision Author
1 198 ahitrov package webshop::SQL::Order;
2
3 use base 'SQL::DocumentTable';
4
5 sub db_table
6 {
7 return 'orders';
8 }
9
10 my $available_filters = [qw(
11
12 _class_filter
13 _status_filter
14 _in_id_filter
15 _id_filter
16 _name_filter
17 _class_excludes_filter
18 _sfilter_filter
19 _excludes_filter
20 _datetime_filter
21 _date_equal_filter
22 _date_filter
23 _previous_days_filter
24 _s_filter
25 438 ahitrov _link_filter
26 198 ahitrov
27 413 ahitrov _payment_filter
28 198 ahitrov _uid_filter
29 434 ahitrov _company_filter
30 303 ahitrov _manager_filter
31 _vault_filter
32 _postman_filter
33 449 ahitrov _sync_filter
34 773 ahitrov _yandex_id_filter
35 _google_id_filter
36 198 ahitrov )];
37
38 sub available_filters {
39 return $available_filters;
40 }
41
42 my @required_properties = (
43 { # Идентификатор документа, сквозной по всем типам...
44 'attr' => 'id',
45 'type' => 'integer',
46 'rusname' => 'Идентификатор документа',
47 'hidden' => 1,
48 'readonly' => 1,
49 'auto' => 1,
50 'db_field' => 'id',
51 'db_type' => 'integer',
52 'db_opts' => "not null default nextval('public.documents_id_seq'::text)",
53 },
54 { # Класс документа...
55 'attr' => 'class',
56 'type' => 'string',
57 'rusname' => 'Класс документа',
58 'hidden' => 1,
59 'readonly' => 1,
60 'db_field' => 'class',
61 'db_type' => 'varchar(48)',
62 'db_opts' => 'not null',
63 },
64 { # Название (не используется)
65 'attr' => 'name',
66 'type' => 'string',
67 'rusname' => 'Имя заказчика',
68 'column' => 2,
69 'db_field' => 'name',
70 'db_type' => 'varchar(255)',
71 },
72 { # User ID
73 'attr' => 'uid',
74 'type' => 'string',
75 'rusname' => 'ID пользователя',
76 # 'hidden' => 1,
77 'db_field' => 'uid',
78 'db_type' => 'integer',
79 'db_opts' => "not null default 0",
80 'default' => 0,
81 },
82 434 ahitrov {
83 'attr' => 'company_id',
84 'type' => 'integer',
85 'rusname' => 'ID компании',
86 'hidden' => 1,
87 'db_field' => 'company_id',
88 'db_type' => 'integer',
89 'db_opts' => "not null default 0",
90 'default' => 0,
91 },
92 769 ahitrov {
93 'attr' => 'google_id',
94 770 ahitrov 'type' => 'string',
95 769 ahitrov 'rusname' => 'GoogleID',
96 772 ahitrov 'manshow' => 1,
97 771 ahitrov 'postshow' => 1,
98 'facilshow' => 1,
99 769 ahitrov 'db_field' => 'google_id',
100 770 ahitrov 'db_type' => 'varchar(32)',
101 769 ahitrov },
102 {
103 'attr' => 'yandex_id',
104 770 ahitrov 'type' => 'string',
105 769 ahitrov 'rusname' => 'YandexID',
106 772 ahitrov 'manshow' => 1,
107 771 ahitrov 'postshow' => 1,
108 'facilshow' => 1,
109 769 ahitrov 'db_field' => 'yandex_id',
110 770 ahitrov 'db_type' => 'varchar(32)',
111 769 ahitrov },
112 198 ahitrov { # User ID
113 'attr' => 'manager_id',
114 'type' => 'string',
115 'rusname' => 'ID менеджера',
116 'hidden' => 1,
117 'db_field' => 'manager_id',
118 'db_type' => 'integer',
119 'db_opts' => "not null default 0",
120 'default' => 0,
121 },
122 { # User ID
123 'attr' => 'vault_id',
124 'type' => 'string',
125 'rusname' => 'ID специалиста комплектации',
126 'hidden' => 1,
127 'db_field' => 'vault_id',
128 'db_type' => 'integer',
129 'db_opts' => "not null default 0",
130 'default' => 0,
131 },
132 { # User ID
133 'attr' => 'postman_id',
134 'type' => 'string',
135 'rusname' => 'ID курьера',
136 'hidden' => 1,
137 'db_field' => 'postman_id',
138 'db_type' => 'integer',
139 'db_opts' => "not null default 0",
140 'default' => 0,
141 },
142 { # Время создания документа, служебное поле...
143 'attr' => 'ctime',
144 'type' => 'datetime',
145 'rusname' => 'Время создания',
146 'readonly' => 1,
147 'auto' => 1,
148 'hidden' => 1,
149 'db_field' => 'ctime',
150 'db_type' => 'timestamp',
151 'db_opts' => 'not null default now()',
152 'default' => 'CURRENT_TIMESTAMP',
153 },
154 { # Время модификации документа, служебное поле...
155 'attr' => 'mtime',
156 'type' => 'datetime',
157 'rusname' => 'Время модификации',
158 'hidden' => 1,
159 'auto' => 1,
160 'db_field' => 'mtime',
161 'db_type' => 'timestamp',
162 'db_opts' => 'not null default now()',
163 'default' => 'CURRENT_TIMESTAMP',
164 },
165 { # Дата и время документа...
166 'attr' => 'dtime',
167 'type' => 'datetime',
168 'rusname' => 'Заказ подтвержден',
169 256 ahitrov 'shortname' => 'Дата',
170 198 ahitrov 'column' => 1,
171 'postshow' => 1,
172 'facilshow' => 1,
173 'db_field' => 'dtime',
174 'db_type' => 'timestamp',
175 'db_opts' => 'not null default now()',
176 'default' => 'CURRENT_TIMESTAMP',
177 },
178 { # Массив секций, обрабатывается специальным образом...
179 'attr' => 'sections',
180 'type' => 'sections_list',
181 'rusname' => 'Секции',
182 'hidden' => 1,
183 'db_field' => 'sections',
184 'db_type' => 'integer[]',
185 },
186 { # Одно поле статуса является встроенным...
187 'attr' => 'status',
188 'type' => 'status',
189 'postshow' => 1,
190 'facilshow' => 1,
191 'column' => 7,
192 'rusname' => 'Статус',
193 'db_field' => 'status',
194 'db_type' => 'integer',
195 },
196 413 ahitrov {
197 'attr' => 'payment',
198 553 ahitrov 'type' => 'status',
199 413 ahitrov 'postshow' => 1,
200 'facilshow' => 1,
201 'column' => 8,
202 553 ahitrov 'cases' => [
203 [0, 'Не оплачен'],
204 [1, 'Оплачен'],
205 [2, 'Частично'],
206 [3, 'Средства заблокированы'],
207 [4, 'Возврат'],
208 ],
209 413 ahitrov 'rusname' => 'Оплачен',
210 'db_field' => 'payment',
211 'db_type' => 'integer',
212 },
213 441 ahitrov {
214 'attr' => 'syncro',
215 'type' => 'checkbox',
216 'postshow' => 1,
217 'facilshow' => 1,
218 'rusname' => 'Синхронизован',
219 'db_field' => 'syncro',
220 'db_type' => 'integer',
221 'default' => 0,
222 },
223 449 ahitrov {
224 'attr' => 'synctime',
225 'type' => 'datetime',
226 'rusname' => 'Время последней синхронизации',
227 'postshow' => 1,
228 'facilshow' => 1,
229 'db_field' => 'synctime',
230 'db_type' => 'timestamp',
231 },
232 198 ahitrov );
233
234 # ----------------------------------------------------------------------------
235 # Свойства храним в массивах, потому что порядок важен!
236 # Это общие свойства - одинаковые для всех документов.
237 #
238 # attr - обязательный параметр, название атрибута;
239 # type - тип аттрибута, требуется для отображдения;
240 # rusname - русское название, опять же требуется для отображения;
241 # hidden - равен 1, когда
242 # readonly - инициализации при записи только без изменения в дальнейшем
243 # db_field - поле в таблице
244 # default - значение по умолчанию (поле всегда имеет это значение)
245 # ----------------------------------------------------------------------------
246 sub required_properties
247 {
248 return @required_properties;
249 }
250
251 ########### FILTERS DESCRIPTION ###############################################################################
252 257 ahitrov sub _get_orders {
253 my ($self, %opts) = @_;
254
255 if ($opts{order_by}) {
256 return ' order by '.$opts{order_by};
257 } else {
258 return ' order by id desc';
259 }
260 return undef;
261 }
262
263 413 ahitrov sub _payment_filter {
264 my ($self,%opts)=@_;
265 return undef unless ( exists $opts{payment} );
266 return &SQL::Common::_generic_int_filter('d.payment', $opts{payment});
267 }
268
269 449 ahitrov sub _sync_filter {
270 my ($self,%opts)=@_;
271 return undef unless ( exists $opts{sync} );
272 return &SQL::Common::_generic_int_filter('d.syncro', $opts{sync});
273 }
274
275 198 ahitrov sub _uid_filter {
276 my ($self,%opts)=@_;
277 return undef unless ( exists $opts{uid} );
278 return &SQL::Common::_generic_int_filter('d.uid', $opts{uid});
279 }
280
281 773 ahitrov sub _yandex_id_filter {
282 my ($self,%opts)=@_;
283 return undef unless ( exists $opts{yandex_id} );
284 return &SQL::Common::_generic_text_filter('d.yandex_id', $opts{yandex_id});
285 }
286
287 sub _google_id_filter {
288 my ($self,%opts)=@_;
289 return undef unless ( exists $opts{google_id} );
290 return &SQL::Common::_generic_text_filter('d.google_id', $opts{google_id});
291 }
292
293 434 ahitrov sub _company_filter {
294 my ($self,%opts)=@_;
295 return undef unless ( exists $opts{company_id} );
296 return &SQL::Common::_generic_int_filter('d.company_id', $opts{company_id});
297 }
298
299 303 ahitrov sub _manager_filter {
300 my ($self,%opts)=@_;
301 return undef unless ( exists $opts{manager} );
302 return &SQL::Common::_generic_int_filter('d.manager_id', $opts{manager});
303 }
304
305 sub _vault_filter {
306 my ($self,%opts)=@_;
307 return undef unless ( exists $opts{vault} );
308 return &SQL::Common::_generic_int_filter('d.vault_id', $opts{vault});
309 }
310
311 sub _postman_filter {
312 my ($self,%opts)=@_;
313 return undef unless ( exists $opts{postman} );
314 return &SQL::Common::_generic_int_filter('d.postman_id', $opts{postman});
315 }
316
317 198 ahitrov 1;