Revision 349
- Date:
- 2013/05/22 13:52:41
- 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);