push @where, (transdate => { lt => $todate }) if ($todate);
my $bank_account = SL::DB::Manager::BankAccount->find_by( id => $::form->{filter}{bank_account} );
# bank_transactions no younger than starting date,
+ # including starting date (same search behaviour as fromdate)
# but OPEN invoices to be matched may be from before
if ( $bank_account->reconciliation_starting_date ) {
- push @where, (transdate => { gt => $bank_account->reconciliation_starting_date });
+ push @where, (transdate => { ge => $bank_account->reconciliation_starting_date });
};
my $bank_transactions = SL::DB::Manager::BankTransaction->get_all(where => [ amount => {ne => \'invoice_amount'},
last;
}
# pay invoice or go to the next bank transaction if the amount is not sufficiently high
- if ($invoice->amount <= $amount_of_transaction) {
+ if ($invoice->open_amount <= $amount_of_transaction) {
+ # first calculate new bank transaction amount ...
+ if ($invoice->is_sales) {
+ $amount_of_transaction -= $sign * $invoice->open_amount;
+ $bank_transaction->invoice_amount($bank_transaction->invoice_amount + $invoice->open_amount);
+ } else {
+ $amount_of_transaction += $sign * $invoice->open_amount if (!$invoice->is_sales);
+ $bank_transaction->invoice_amount($bank_transaction->invoice_amount - $invoice->open_amount);
+ }
+ # ... and then pay the invoice
$invoice->pay_invoice(chart_id => $bank_transaction->local_bank_account->chart_id,
trans_id => $invoice->id,
- amount => $invoice->amount,
+ amount => $invoice->open_amount,
payment_type => $payment_type,
transdate => $bank_transaction->transdate->to_kivitendo);
- if ($invoice->is_sales) {
- $amount_of_transaction -= $sign * $invoice->amount;
- $bank_transaction->invoice_amount($bank_transaction->invoice_amount + $invoice->amount);
- } else {
- $amount_of_transaction += $sign * $invoice->amount if (!$invoice->is_sales);
- $bank_transaction->invoice_amount($bank_transaction->invoice_amount - $invoice->amount);
- }
} else {
$invoice->pay_invoice(chart_id => $bank_transaction->local_bank_account->chart_id,
trans_id => $invoice->id,