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