OE: single-dbh
[kivitendo-erp.git] / SL / Controller / BankTransaction.pm
index 1ad4d74..68047f3 100644 (file)
@@ -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