]> wagnertech.de Git - mfinanz.git/blobdiff - SL/Controller/BankTransaction.pm
Bankauszug verbuchen invoice_amount vor pay-invoice
[mfinanz.git] / SL / Controller / BankTransaction.pm
index 5e09aacc48c68b3492ad016823d31cad1002a530..7a944e687136a21dabbadd9e604367fa0e5d720b 100644 (file)
@@ -79,9 +79,10 @@ sub action_list {
   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'},
@@ -396,19 +397,21 @@ sub action_save_invoices {
         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,