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