Line # Revision Author
1 198 ahitrov package webshop::SQL::Basket;
2
3 use base 'SQL::DocumentTable';
4
5 sub db_table
6 {
7 return 'basket';
8 }
9
10
11 sub available_filters {
12 my @available_filters = qw(
13
14 _class_filter
15 _status_filter
16 _in_id_filter
17 _id_filter
18 _name_filter
19 _class_excludes_filter
20 _sfilter_filter
21 _excludes_filter
22 _datetime_filter
23 _date_equal_filter
24 _date_filter
25 _previous_days_filter
26 _s_filter
27
28 _color_filter
29 241 ahitrov _size_filter
30 198 ahitrov _session_filter
31 _uid_filter
32 _order_id_filter
33 _item_filter
34 );
35
36 return \@available_filters;
37 }
38
39 # ----------------------------------------------------------------------------
40 # Свойства храним в массивах, потому что порядок важен!
41 # Это общие свойства - одинаковые для всех документов.
42 #
43 # attr - обязательный параметр, название атрибута;
44 # type - тип аттрибута, требуется для отображдения;
45 # rusname - русское название, опять же требуется для отображения;
46 # hidden - равен 1, когда
47 # readonly - инициализации при записи только без изменения в дальнейшем
48 # db_field - поле в таблице
49 # default - значение по умолчанию (поле всегда имеет это значение)
50 # ----------------------------------------------------------------------------
51 sub required_properties
52 {
53 my $self = shift;
54
55 my @parent_properties = $self->SUPER::required_properties;
56 return (
57 @parent_properties,
58 {
59 'attr' => 'uid',
60 'type' => 'integer',
61 'rusname' => 'Идентификатор пользователя',
62 'lookup_opts' => {
63 'class' => $self->profile_class(),
64 'search_by' => 'login',
65 },
66 'db_field' => 'uid',
67 'db_type' => 'integer',
68 'db_opts' => "default 0",
69 },
70 { # ID товара
71 'attr' => 'item_id',
72 'type' => 'integer',
73 'rusname' => 'ID товара',
74 'hidden' => 1,
75 'db_field' => 'item_id',
76 'db_type' => 'integer',
77 'db_opts' => "not null",
78 },
79 {
80 'attr' => 'item_class',
81 'type' => 'string',
82 'rusname' => 'Класс товарной позиции',
83 'hidden' => 1,
84 'db_field' => 'item_class',
85 'db_type' => 'text',
86 },
87 {
88 'attr' => 'item_table',
89 'type' => 'string',
90 'rusname' => 'Класс таблицы товарной позиции',
91 'hidden' => 1,
92 'db_field' => 'item_table',
93 'db_type' => 'text',
94 },
95 {
96 'attr' => 'number',
97 'type' => 'integer',
98 'rusname' => 'Количество позиций',
99 'db_field' => 'number',
100 'db_type' => 'integer',
101 'db_opts' => "default 0",
102 },
103 {
104 'attr' => 'price',
105 'type' => 'string',
106 'rusname' => 'Цена позиции',
107 'db_field' => 'price',
108 'db_type' => 'float',
109 'db_opts' => "default 0",
110 },
111 324 ahitrov {
112 'attr' => 'special_price',
113 'type' => 'checkbox',
114 'rusname' => 'Акция! (скидки не действуют)',
115 'db_field' => 'special_price',
116 'db_type' => 'integer',
117 'db_opts' => "default 0",
118 },
119 198 ahitrov { # ID заказа
120 'attr' => 'order_id',
121 'type' => 'integer',
122 'rusname' => 'ID заказа',
123 'hidden' => 1,
124 'db_field' => 'order_id',
125 'db_type' => 'integer',
126 'db_opts' => "default 0",
127 },
128 { # ID цвета
129 'attr' => 'color_id',
130 'type' => 'integer',
131 'rusname' => 'ID цвета',
132 'hidden' => 1,
133 'db_field' => 'color_id',
134 'db_type' => 'integer',
135 },
136 241 ahitrov { # ID размера
137 'attr' => 'size_id',
138 'type' => 'integer',
139 'rusname' => 'ID размера',
140 'hidden' => 1,
141 'db_field' => 'size_id',
142 'db_type' => 'integer',
143 },
144 198 ahitrov { # ID Сессии
145 'attr' => 'session',
146 'type' => 'string',
147 'rusname' => 'ID Сессии пользователя',
148 'db_field' => 'session',
149 'db_type' => 'text',
150 },
151 );
152 }
153
154
155 sub profile_class () {
156 my $self = shift;
157 return ref $self->{keeper} ? $self->{keeper}{webshop}{state}->profile_document_class : undef;
158 }
159
160
161 ########### FILTERS DESCRIPTION ###############################################################################
162 sub _uid_filter {
163 my ($self,%opts)=@_;
164 return undef unless ( exists $opts{uid} );
165 return &SQL::Common::_generic_int_filter('d.uid', $opts{uid});
166 }
167
168 sub _session_filter {
169 my ($self,%opts)=@_;
170 return undef unless ( exists $opts{session} );
171 return &SQL::Common::_generic_text_filter('d.session', $opts{session});
172 }
173
174 sub _item_filter {
175 my ($self,%opts)=@_;
176 return undef unless ( exists $opts{item} );
177 return &SQL::Common::_generic_int_filter('d.item_id', $opts{item});
178 }
179
180 sub _color_filter {
181 my ($self,%opts)=@_;
182 return undef unless ( exists $opts{color} );
183 return &SQL::Common::_generic_int_filter('d.color_id', $opts{color});
184 }
185
186 241 ahitrov sub _size_filter {
187 my ($self,%opts)=@_;
188 return undef unless ( exists $opts{size} );
189 return &SQL::Common::_generic_int_filter('d.size_id', $opts{size});
190 }
191
192 198 ahitrov sub _order_id_filter {
193 my ($self,%opts)=@_;
194 return undef unless ( exists $opts{order_id} );
195 return &SQL::Common::_generic_int_filter('d.order_id', $opts{order_id});
196 }
197
198
199 1;