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 _session_filter
30 _uid_filter
31 _order_id_filter
32 _item_filter
33 );
34
35 return \@available_filters;
36 }
37
38 # ----------------------------------------------------------------------------
39 # Свойства храним в массивах, потому что порядок важен!
40 # Это общие свойства - одинаковые для всех документов.
41 #
42 # attr - обязательный параметр, название атрибута;
43 # type - тип аттрибута, требуется для отображдения;
44 # rusname - русское название, опять же требуется для отображения;
45 # hidden - равен 1, когда
46 # readonly - инициализации при записи только без изменения в дальнейшем
47 # db_field - поле в таблице
48 # default - значение по умолчанию (поле всегда имеет это значение)
49 # ----------------------------------------------------------------------------
50 sub required_properties
51 {
52 my $self = shift;
53
54 my @parent_properties = $self->SUPER::required_properties;
55 return (
56 @parent_properties,
57 {
58 'attr' => 'uid',
59 'type' => 'integer',
60 'rusname' => 'Идентификатор пользователя',
61 'lookup_opts' => {
62 'class' => $self->profile_class(),
63 'search_by' => 'login',
64 },
65 'db_field' => 'uid',
66 'db_type' => 'integer',
67 'db_opts' => "default 0",
68 },
69 { # ID товара
70 'attr' => 'item_id',
71 'type' => 'integer',
72 'rusname' => 'ID товара',
73 'hidden' => 1,
74 'db_field' => 'item_id',
75 'db_type' => 'integer',
76 'db_opts' => "not null",
77 },
78 {
79 'attr' => 'item_class',
80 'type' => 'string',
81 'rusname' => 'Класс товарной позиции',
82 'hidden' => 1,
83 'db_field' => 'item_class',
84 'db_type' => 'text',
85 },
86 {
87 'attr' => 'item_table',
88 'type' => 'string',
89 'rusname' => 'Класс таблицы товарной позиции',
90 'hidden' => 1,
91 'db_field' => 'item_table',
92 'db_type' => 'text',
93 },
94 {
95 'attr' => 'number',
96 'type' => 'integer',
97 'rusname' => 'Количество позиций',
98 'db_field' => 'number',
99 'db_type' => 'integer',
100 'db_opts' => "default 0",
101 },
102 {
103 'attr' => 'price',
104 'type' => 'string',
105 'rusname' => 'Цена позиции',
106 'db_field' => 'price',
107 'db_type' => 'float',
108 'db_opts' => "default 0",
109 },
110 { # ID заказа
111 'attr' => 'order_id',
112 'type' => 'integer',
113 'rusname' => 'ID заказа',
114 'hidden' => 1,
115 'db_field' => 'order_id',
116 'db_type' => 'integer',
117 'db_opts' => "default 0",
118 },
119 { # ID цвета
120 'attr' => 'color_id',
121 'type' => 'integer',
122 'rusname' => 'ID цвета',
123 'hidden' => 1,
124 'db_field' => 'color_id',
125 'db_type' => 'integer',
126 },
127 { # ID Сессии
128 'attr' => 'session',
129 'type' => 'string',
130 'rusname' => 'ID Сессии пользователя',
131 'db_field' => 'session',
132 'db_type' => 'text',
133 },
134 );
135 }
136
137
138 sub profile_class () {
139 my $self = shift;
140 return ref $self->{keeper} ? $self->{keeper}{webshop}{state}->profile_document_class : undef;
141 }
142
143
144 ########### FILTERS DESCRIPTION ###############################################################################
145 sub _uid_filter {
146 my ($self,%opts)=@_;
147 return undef unless ( exists $opts{uid} );
148 return &SQL::Common::_generic_int_filter('d.uid', $opts{uid});
149 }
150
151 sub _session_filter {
152 my ($self,%opts)=@_;
153 return undef unless ( exists $opts{session} );
154 return &SQL::Common::_generic_text_filter('d.session', $opts{session});
155 }
156
157 sub _item_filter {
158 my ($self,%opts)=@_;
159 return undef unless ( exists $opts{item} );
160 return &SQL::Common::_generic_int_filter('d.item_id', $opts{item});
161 }
162
163 sub _color_filter {
164 my ($self,%opts)=@_;
165 return undef unless ( exists $opts{color} );
166 return &SQL::Common::_generic_int_filter('d.color_id', $opts{color});
167 }
168
169 sub _order_id_filter {
170 my ($self,%opts)=@_;
171 return undef unless ( exists $opts{order_id} );
172 return &SQL::Common::_generic_int_filter('d.order_id', $opts{order_id});
173 }
174
175
176 1;