Revision 712

Date:
2018/08/17 20:16:53
Author:
ahitrov
Revision Log:
$keeper->{payments}->add operation not dumb now

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