Revision 349

Date:
2013/05/22 13:52:41
Author:
ahitrov
Revision Log:
Webshop operations log
Files:

Legend:

 
Added
 
Removed
 
Modified
  • utf8/plugins/monetaru/lib/monetaru/Keeper.pm

     
    60 60 }
    61 61
    62 62
    63 sub add {
    64 my $self = shift;
    65 my (%opts) = @_;
    66
    67 return undef unless $opts{type} && $opts{uid} && $opts{order};
    68 return undef unless $opts{type} =~ /^(create|suspend|cancel)$/;
    69
    70 my $op = monetaru::Operation->new( $keeper );
    71 $op->status(1);
    72 $op->name( $opts{type} );
    73 $op->uid( $opts{uid} );
    74 $op->order_id( $opts{order} );
    75 $op->store;
    76
    77 return $op;
    78 }
    79
    80
    81 sub check {
    82 my $self = shift;
    83 my $order_id = shift;
    84
    85 return undef unless $order_id;
    86 my $ops = $keeper->get_documents(
    87 class => 'monetaru::Operation',
    88 order_id => $order_id,
    89 order_by => 'ctime',
    90 return_mode => 'array_ref',
    91 );
    92 if ( ref $ops eq 'ARRAY' && @$ops && $ops->[-1]->name =~ /^(create)$/ ) {
    93 return 1;
    94 } else {
    95 return 0;
    96 }
    97 }
    98
    63 99 1;
  • utf8/plugins/monetaru/lib/monetaru/Operation.pm

     
    1 package monetaru::Operation;
    2
    3 use base "Contenido::Document";
    4 sub extra_properties
    5 {
    6 return (
    7 { 'attr' => 'name', 'type' => 'status', 'rusname' => 'Тип операции',
    8 'cases' => [
    9 ['create', 'Заказ создан'],
    10 ['suspend', 'Оплата отложена'],
    11 ['cancel', 'Заказ отменен'],
    12 ],
    13 },
    14 )
    15 }
    16
    17 sub class_name
    18 {
    19 return 'Moneta.ru: операция';
    20 }
    21
    22 sub class_description
    23 {
    24 return 'Moneta.ru: внутренняя операция в магазине';
    25 }
    26
    27 sub class_table
    28 {
    29 return 'monetaru::SQL::OperationsTable';
    30 }
    31
    32 1;
  • utf8/plugins/monetaru/lib/monetaru/SQL/OperationsTable.pm

     
    1 package monetaru::SQL::OperationsTable;
    2
    3 use base 'SQL::DocumentTable';
    4
    5 sub db_table
    6 {
    7 return 'monetaru_operations';
    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
    27 _order_id_filter
    28 _uid_filter
    29 );
    30
    31 return \@available_filters;
    32 }
    33
    34 # ----------------------------------------------------------------------------
    35 # Свойства храним в массивах, потому что порядок важен!
    36 # Это общие свойства - одинаковые для всех документов.
    37 #
    38 # attr - обязательный параметр, название атрибута;
    39 # type - тип аттрибута, требуется для отображдения;
    40 # rusname - русское название, опять же требуется для отображения;
    41 # hidden - равен 1, когда
    42 # readonly - инициализации при записи только без изменения в дальнейшем
    43 # db_field - поле в таблице
    44 # default - значение по умолчанию (поле всегда имеет это значение)
    45 # ----------------------------------------------------------------------------
    46 sub required_properties
    47 {
    48 my $self = shift;
    49
    50 my @parent_properties = grep { $_->{attr} ne 'dtime' && $_->{attr} ne 'sections' } $self->SUPER::required_properties;
    51 return (
    52 @parent_properties,
    53 {
    54 'attr' => 'uid',
    55 'type' => 'integer',
    56 'rusname' => 'ID пользователя',
    57 'db_field' => 'uid',
    58 'db_type' => 'integer',
    59 'db_opts' => "default 0",
    60 },
    61 { # ID заказа
    62 'attr' => 'order_id',
    63 'type' => 'integer',
    64 'rusname' => 'ID заказа',
    65 'db_field' => 'order_id',
    66 'db_type' => 'integer',
    67 'db_opts' => "not null",
    68 },
    69 );
    70 }
    71
    72
    73 ########### FILTERS DESCRIPTION ###############################################################################
    74 sub _uid_filter {
    75 my ($self,%opts)=@_;
    76 return undef unless ( exists $opts{uid} );
    77 return &SQL::Common::_generic_int_filter('d.uid', $opts{uid});
    78 }
    79
    80 sub _order_id_filter {
    81 my ($self,%opts)=@_;
    82 return undef unless ( exists $opts{order_id} );
    83 return &SQL::Common::_generic_int_filter('d.order_id', $opts{order_id});
    84 }
    85
    86 1;
  • utf8/plugins/monetaru/sql/TOAST/operations.sql

     
    1 create table monetaru_operations
    2 (
    3 id integer not null primary key default nextval('public.documents_id_seq'::text),
    4 class text not null,
    5 ctime timestamp not null default now(),
    6 mtime timestamp not null default now(),
    7 status smallint not null default 0,
    8 name text,
    9 order_id integer not null,
    10 uid integer not null,
    11 data text
    12 );
    13 CREATE INDEX monetaru_operations_order ON monetaru_operations USING btree (order_id);