X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FHelper%2FPayment.pm;h=9ff921617cdaea35531a6296a761115b3b435dfa;hb=2fd17923352490ab2c797c641a9c1fd19f8320f4;hp=3d97be0f6ca870216ea80dc99f7b3f1d907995bd;hpb=c6af9711e167b2bba757e337bca50861e60d34f5;p=kivitendo-erp.git diff --git a/SL/DB/Helper/Payment.pm b/SL/DB/Helper/Payment.pm index 3d97be0f6..9ff921617 100644 --- a/SL/DB/Helper/Payment.pm +++ b/SL/DB/Helper/Payment.pm @@ -94,7 +94,7 @@ sub pay_invoice { if ( $params{'payment_type'} eq 'difference_as_skonto' ) { croak "amount $params{amount} doesn't match open amount " . $self->open_amount . ", diff = " . ($params{amount}-$self->open_amount) if $params{amount} && abs($self->open_amount - $params{amount} ) > 0.0000001; } elsif ( $params{'payment_type'} eq 'with_skonto_pt' ) { - croak "amount $params{amount} doesn't match amount less skonto: " . $self->open_amount . "\n" if $params{amount} && abs($self->amount_less_skonto - $params{amount} ) > 0.0000001; + croak "amount $params{amount} doesn't match amount less skonto: " . $self->amount_less_skonto . "\n" if $params{amount} && abs($self->amount_less_skonto - $params{amount} ) > 0.0000001; croak "payment type with_skonto_pt can't be used if payments have already been made" if $self->paid != 0; }; @@ -119,7 +119,7 @@ sub pay_invoice { my $fx_gain_loss_amount = 0; # for fx_gain and fx_loss my $db = $self->db; - $db->do_transaction(sub { + $db->with_transaction(sub { my $new_acc_trans; # all three payment type create 1 AR/AP booking (the paid part) @@ -304,11 +304,13 @@ sub pay_invoice { $datev->export; if ($datev->errors) { - # this exception should be caught by do_transaction, which handles the rollback + # this exception should be caught by with_transaction, which handles the rollback die join "\n", $::locale->text('DATEV check returned errors:'), $datev->errors; } } + 1; + }) || die t8('error while paying invoice #1 : ', $self->invnumber) . $db->error . "\n"; return 1; @@ -385,7 +387,7 @@ sub open_amount { # if the difference is 0.01 Cent this may end up as 0.009999999999998 # numerically, so round this value when checking for cent threshold >= 0.01 - return $self->amount - $self->paid; + return ($self->amount // 0) - ($self->paid // 0); }; sub open_percent { @@ -633,11 +635,12 @@ sub get_payment_select_options_for_bank_transaction { die unless $bt; my $open_amount = $self->open_amount; - + #$main::lxdebug->message(LXDebug->DEBUG2(),"skonto_date=".$self->skonto_date." open amount=".$open_amount); my @options; if ( $open_amount && # invoice amount not 0 $self->skonto_date && # check whether skonto applies - abs(abs($self->amount_less_skonto) - abs($bt->amount)) < 0.01 && + ( abs(abs($self->amount_less_skonto) - abs($bt->amount)) < 0.01 || + ( $bt->transactioncode eq "191" && abs($self->amount_less_skonto) < abs($bt->amount) )) && $self->check_skonto_configuration) { if ( $self->within_skonto_period($bt->transdate) ) { push(@options, { payment_type => 'without_skonto', display => t8('without skonto') }); @@ -704,6 +707,13 @@ sub get_payment_suggestions { return 1; }; +# locales for payment type +# +# $main::locale->text('without_skonto') +# $main::locale->text('with_skonto_pt') +# $main::locale->text('difference_as_skonto') +# + sub validate_payment_type { my $payment_type = shift;