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
26 _uid_filter
27 )];
28
29 sub available_filters {
30 return $available_filters;
31 }
32
33 my @required_properties = (
34 { # Идентификатор документа, сквозной по всем типам...
35 'attr' => 'id',
36 'type' => 'integer',
37 'rusname' => 'Идентификатор документа',
38 'hidden' => 1,
39 'readonly' => 1,
40 'auto' => 1,
41 'db_field' => 'id',
42 'db_type' => 'integer',
43 'db_opts' => "not null default nextval('public.documents_id_seq'::text)",
44 },
45 { # Класс документа...
46 'attr' => 'class',
47 'type' => 'string',
48 'rusname' => 'Класс документа',
49 'hidden' => 1,
50 'readonly' => 1,
51 'db_field' => 'class',
52 'db_type' => 'varchar(48)',
53 'db_opts' => 'not null',
54 },
55 { # Название (не используется)
56 'attr' => 'name',
57 'type' => 'string',
58 'rusname' => 'Имя заказчика',
59 'column' => 2,
60 'db_field' => 'name',
61 'db_type' => 'varchar(255)',
62 },
63 { # User ID
64 'attr' => 'uid',
65 'type' => 'string',
66 'rusname' => 'ID пользователя',
67 # 'hidden' => 1,
68 'db_field' => 'uid',
69 'db_type' => 'integer',
70 'db_opts' => "not null default 0",
71 'default' => 0,
72 },
73 { # User ID
74 'attr' => 'manager_id',
75 'type' => 'string',
76 'rusname' => 'ID менеджера',
77 'hidden' => 1,
78 'db_field' => 'manager_id',
79 'db_type' => 'integer',
80 'db_opts' => "not null default 0",
81 'default' => 0,
82 },
83 { # User ID
84 'attr' => 'vault_id',
85 'type' => 'string',
86 'rusname' => 'ID специалиста комплектации',
87 'hidden' => 1,
88 'db_field' => 'vault_id',
89 'db_type' => 'integer',
90 'db_opts' => "not null default 0",
91 'default' => 0,
92 },
93 { # User ID
94 'attr' => 'postman_id',
95 'type' => 'string',
96 'rusname' => 'ID курьера',
97 'hidden' => 1,
98 'db_field' => 'postman_id',
99 'db_type' => 'integer',
100 'db_opts' => "not null default 0",
101 'default' => 0,
102 },
103 { # Время создания документа, служебное поле...
104 'attr' => 'ctime',
105 'type' => 'datetime',
106 'rusname' => 'Время создания',
107 'readonly' => 1,
108 'auto' => 1,
109 'hidden' => 1,
110 'db_field' => 'ctime',
111 'db_type' => 'timestamp',
112 'db_opts' => 'not null default now()',
113 'default' => 'CURRENT_TIMESTAMP',
114 },
115 { # Время модификации документа, служебное поле...
116 'attr' => 'mtime',
117 'type' => 'datetime',
118 'rusname' => 'Время модификации',
119 'hidden' => 1,
120 'auto' => 1,
121 'db_field' => 'mtime',
122 'db_type' => 'timestamp',
123 'db_opts' => 'not null default now()',
124 'default' => 'CURRENT_TIMESTAMP',
125 },
126 { # Дата и время документа...
127 'attr' => 'dtime',
128 'type' => 'datetime',
129 'rusname' => 'Заказ подтвержден',
130 256 ahitrov 'shortname' => 'Дата',
131 198 ahitrov 'column' => 1,
132 'postshow' => 1,
133 'facilshow' => 1,
134 'db_field' => 'dtime',
135 'db_type' => 'timestamp',
136 'db_opts' => 'not null default now()',
137 'default' => 'CURRENT_TIMESTAMP',
138 },
139 { # Массив секций, обрабатывается специальным образом...
140 'attr' => 'sections',
141 'type' => 'sections_list',
142 'rusname' => 'Секции',
143 'hidden' => 1,
144 'db_field' => 'sections',
145 'db_type' => 'integer[]',
146 },
147 { # Одно поле статуса является встроенным...
148 'attr' => 'status',
149 'type' => 'status',
150 'postshow' => 1,
151 'facilshow' => 1,
152 'column' => 7,
153 'rusname' => 'Статус',
154 'db_field' => 'status',
155 'db_type' => 'integer',
156 },
157 );
158
159 # ----------------------------------------------------------------------------
160 # Свойства храним в массивах, потому что порядок важен!
161 # Это общие свойства - одинаковые для всех документов.
162 #
163 # attr - обязательный параметр, название атрибута;
164 # type - тип аттрибута, требуется для отображдения;
165 # rusname - русское название, опять же требуется для отображения;
166 # hidden - равен 1, когда
167 # readonly - инициализации при записи только без изменения в дальнейшем
168 # db_field - поле в таблице
169 # default - значение по умолчанию (поле всегда имеет это значение)
170 # ----------------------------------------------------------------------------
171 sub required_properties
172 {
173 return @required_properties;
174 }
175
176 ########### FILTERS DESCRIPTION ###############################################################################
177 257 ahitrov sub _get_orders {
178 my ($self, %opts) = @_;
179
180 if ($opts{order_by}) {
181 return ' order by '.$opts{order_by};
182 } else {
183 return ' order by id desc';
184 }
185 return undef;
186 }
187
188 198 ahitrov sub _uid_filter {
189 my ($self,%opts)=@_;
190 return undef unless ( exists $opts{uid} );
191 return &SQL::Common::_generic_int_filter('d.uid', $opts{uid});
192 }
193
194 1;