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