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