package webshop::SQL::Basket;
use base 'SQL::DocumentTable';
sub db_table
{
return 'basket';
}
sub available_filters {
my @available_filters = qw(
_class_filter
_status_filter
_in_id_filter
_id_filter
_name_filter
_class_excludes_filter
_sfilter_filter
_excludes_filter
_datetime_filter
_date_equal_filter
_date_filter
_previous_days_filter
_s_filter
_color_filter
_session_filter
_uid_filter
_order_id_filter
_item_filter
);
return \@available_filters;
}
# ----------------------------------------------------------------------------
# Свойства храним в массивах, потому что порядок важен!
# Это общие свойства - одинаковые для всех документов.
#
# attr - обязательный параметр, название атрибута;
# type - тип аттрибута, требуется для отображдения;
# rusname - русское название, опять же требуется для отображения;
# hidden - равен 1, когда
# readonly - инициализации при записи только без изменения в дальнейшем
# db_field - поле в таблице
# default - значение по умолчанию (поле всегда имеет это значение)
# ----------------------------------------------------------------------------
sub required_properties
{
my $self = shift;
my @parent_properties = $self->SUPER::required_properties;
return (
@parent_properties,
{
'attr' => 'uid',
'type' => 'integer',
'rusname' => 'Идентификатор пользователя',
'lookup_opts' => {
'class' => $self->profile_class(),
'search_by' => 'login',
},
'db_field' => 'uid',
'db_type' => 'integer',
'db_opts' => "default 0",
},
{ # ID товара
'attr' => 'item_id',
'type' => 'integer',
'rusname' => 'ID товара',
'hidden' => 1,
'db_field' => 'item_id',
'db_type' => 'integer',
'db_opts' => "not null",
},
{
'attr' => 'item_class',
'type' => 'string',
'rusname' => 'Класс товарной позиции',
'hidden' => 1,
'db_field' => 'item_class',
'db_type' => 'text',
},
{
'attr' => 'item_table',
'type' => 'string',
'rusname' => 'Класс таблицы товарной позиции',
'hidden' => 1,
'db_field' => 'item_table',
'db_type' => 'text',
},
{
'attr' => 'number',
'type' => 'integer',
'rusname' => 'Количество позиций',
'db_field' => 'number',
'db_type' => 'integer',
'db_opts' => "default 0",
},
{
'attr' => 'price',
'type' => 'string',
'rusname' => 'Цена позиции',
'db_field' => 'price',
'db_type' => 'float',
'db_opts' => "default 0",
},
{ # ID заказа
'attr' => 'order_id',
'type' => 'integer',
'rusname' => 'ID заказа',
'hidden' => 1,
'db_field' => 'order_id',
'db_type' => 'integer',
'db_opts' => "default 0",
},
{ # ID цвета
'attr' => 'color_id',
'type' => 'integer',
'rusname' => 'ID цвета',
'hidden' => 1,
'db_field' => 'color_id',
'db_type' => 'integer',
},
{ # ID Сессии
'attr' => 'session',
'type' => 'string',
'rusname' => 'ID Сессии пользователя',
'db_field' => 'session',
'db_type' => 'text',
},
);
}
sub profile_class () {
my $self = shift;
return ref $self->{keeper} ? $self->{keeper}{webshop}{state}->profile_document_class : undef;
}
########### FILTERS DESCRIPTION ###############################################################################
sub _uid_filter {
my ($self,%opts)=@_;
return undef unless ( exists $opts{uid} );
return &SQL::Common::_generic_int_filter('d.uid', $opts{uid});
}
sub _session_filter {
my ($self,%opts)=@_;
return undef unless ( exists $opts{session} );
return &SQL::Common::_generic_text_filter('d.session', $opts{session});
}
sub _item_filter {
my ($self,%opts)=@_;
return undef unless ( exists $opts{item} );
return &SQL::Common::_generic_int_filter('d.item_id', $opts{item});
}
sub _color_filter {
my ($self,%opts)=@_;
return undef unless ( exists $opts{color} );
return &SQL::Common::_generic_int_filter('d.color_id', $opts{color});
}
sub _order_id_filter {
my ($self,%opts)=@_;
return undef unless ( exists $opts{order_id} );
return &SQL::Common::_generic_int_filter('d.order_id', $opts{order_id});
}
1;