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)) {
};
}
- 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;
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,
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