X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/0631432e58e8c70312adae94db3e41dd36bc6e30..201c9038c6c64d91b9be59991b6b6449c33a0d4f:/SL/Controller/BankTransaction.pm?ds=sidebyside diff --git a/SL/Controller/BankTransaction.pm b/SL/Controller/BankTransaction.pm index 1ad4d74f9..68047f314 100644 --- a/SL/Controller/BankTransaction.pm +++ b/SL/Controller/BankTransaction.pm @@ -481,6 +481,7 @@ sub save_single_bank_transaction { foreach my $invoice (@{ $data{invoices} }) { $n_invoices++ ; + # Check if bank_transaction already has a link to the invoice, may only be linked once per invoice # This might be caused by the user reloading a page and resending the form if (_existing_record_link($bank_transaction, $invoice)) { @@ -491,14 +492,12 @@ sub save_single_bank_transaction { }; } - if ($amount_of_transaction == 0) { - push @warnings, { + if (!$amount_of_transaction && $invoice->open_amount) { + return { %data, - result => 'warning', - message => $::locale->text('There are invoices which could not be paid by bank transaction #1 (Account number: #2, bank code: #3)!', - $bank_transaction->purpose, $bank_transaction->remote_account_number, $bank_transaction->remote_bank_code), + result => 'error', + message => $::locale->text("A payment can only be posted for multiple invoices if the amount to post is equal to or bigger than the sum of the open amounts of the affected invoices."), }; - last; } my $payment_type; @@ -525,6 +524,7 @@ sub save_single_bank_transaction { payment_type => $payment_type, transdate => $bank_transaction->transdate->to_kivitendo); } else { # use the whole amount of the bank transaction for the invoice, overpay the invoice if necessary + my $overpaid_amount = $amount_of_transaction - $invoice->open_amount; $invoice->pay_invoice(chart_id => $bank_transaction->local_bank_account->chart_id, trans_id => $invoice->id, amount => $amount_of_transaction, @@ -532,6 +532,14 @@ sub save_single_bank_transaction { transdate => $bank_transaction->transdate->to_kivitendo); $bank_transaction->invoice_amount($bank_transaction->amount); $amount_of_transaction = 0; + + if ($overpaid_amount >= 0.01) { + push @warnings, { + %data, + result => 'warning', + message => $::locale->text('Invoice #1 was overpaid by #2.', $invoice->invnumber, $::form->format_amount(\%::myconfig, $overpaid_amount, 2)), + }; + } } # Record a record link from the bank transaction to the invoice