Revision 712
- Date:
- 2018/08/17 20:16:53
- Files:
Legend:
- Added
- Removed
- Modified
-
utf8/plugins/payments/lib/payments/Keeper.pm
12 12 my (%opts) = @_; 13 13 14 14 return undef unless $opts{type} && ( $opts{order} && ref $opts{order} || $opts{uid} && $opts{order} && $opts{sum}); 15 return undef unless $opts{type} =~ /^(create|suspend|cancel|append|reform)$/; 15 return undef unless $opts{type} =~ /^(create|suspend|cancel|append|refund|close)$/; 16 16 17 my $op = payments::Operation->new( $keeper ); 18 $op->status(1); 19 $op->name( $opts{type} ); 20 if ( ref $opts{order} ) { 21 $op->uid( $opts{order}->uid ); 22 $op->order_id( $opts{order}->id ); 23 $op->sum( $opts{order}->sum_total ); 17 my $status = exists $opts{status} ? $opts{status} : $state->development; 18 my $ops = $keeper->get_documents( 19 class => 'payments::Operation', 20 status => $status, 21 order_id => ref $opts{order} ? $opts{order}->id : $opts{order}, 22 order_by => 'ctime', 23 return_mode => 'array_ref', 24 ); 25 my $new = 0; 26 my $op; 27 if ( ref $ops eq 'ARRAY' && @$ops ) { 28 my $last = $ops->[-1]; 29 if ( $opts{type} eq 'create' && ($last->name eq 'suspend' || $last->name eq 'cancel' || $last->name eq 'close') ) { 30 warn "PAYMENTS[add-op]: Заказ закрыт, отменен или заморожен. Оплата по нему невозможна\n"; 31 return undef; 32 } elsif ( $opts{type} eq 'refund' && ($last->name eq 'suspend' || $last->name eq 'close') ) { 33 warn "PAYMENTS[add-op]: Заказ закрыт или заморожен. Возврат средств по нему невозможен\n"; 34 return undef; 35 } elsif ( $last->name eq $opts{type} ) { 36 $op = $last; 37 } 38 } elsif ( $opts{type} eq 'create' ) { 39 $new = 1; 24 40 } else { 25 $op->uid( $opts{uid} ); 26 $op->order_id( $opts{order} ); 27 $op->sum( $opts{sum} ); 41 warn "PAYMENTS[add-op]: Попытка создать операцию ['.$opts{type}.'] без регистрации типа [create]\n"; 42 return undef; 28 43 } 29 $op->store; 30 44 if ( $new ) { 45 $op = payments::Operation->new( $keeper ); 46 $op->status( $status ); 47 $op->name( $opts{type} ); 48 if ( ref $opts{order} ) { 49 $op->uid( $opts{order}->uid ); 50 $op->order_id( $opts{order}->id ); 51 $op->sum( $opts{order}->sum_total ); 52 } else { 53 $op->uid( $opts{uid} ); 54 $op->order_id( $opts{order} ); 55 $op->sum( $opts{sum} ); 56 } 57 $op->store; 58 } 31 59 return $op; 32 60 } 33 61