Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision fbcd5580

Von Martin Helmling martin.helmling@octosoft.eu vor fast 8 Jahren hinzugefügt

  • ID fbcd5580d153156a01e9f8d071df5316b9da7777
  • Vorgänger 65a06b57
  • Nachfolger 2bb452ee

Banktransaction: Kontoauszug verbuchen überarbeitet(4)

Offene Rechnungen durch "amount ne paid" suchen, damit negativer amount auch berücksichtigt wird.
bei Gutschriften muss der Betrag negiert werden (noch wo?)

Unterschiede anzeigen:

SL/Controller/BankTransaction.pm
100 100
  );
101 101
  $main::lxdebug->message(LXDebug->DEBUG2(),"count bt=".scalar(@{$bank_transactions}." bank_account=".$bank_account->id." chart=".$bank_account->chart_id));
102 102

  
103
  my $all_open_ar_invoices = SL::DB::Manager::Invoice        ->get_all(where => [amount => { gt => \'paid' }], with_objects => ['customer','payment_terms']);
104
  my $all_open_ap_invoices = SL::DB::Manager::PurchaseInvoice->get_all(where => [amount => { gt => \'paid' }], with_objects => ['vendor'  ,'payment_terms']);
103
  my $all_open_ar_invoices = SL::DB::Manager::Invoice        ->get_all(where => [amount => { ne => \'paid' }], with_objects => ['customer','payment_terms']);
104
  my $all_open_ap_invoices = SL::DB::Manager::PurchaseInvoice->get_all(where => [amount => { ne => \'paid' }], with_objects => ['vendor'  ,'payment_terms']);
105 105
  my $all_open_sepa_export_items = SL::DB::Manager::SepaExportItem->get_all(where => [chart_id => $bank_account->chart_id ,
106 106
                                                                             'sepa_export.executed' => 0, 'sepa_export.closed' => 0 ], with_objects => ['sepa_export']);
107 107
  $main::lxdebug->message(LXDebug->DEBUG2(),"count sepaexport=".scalar(@{$all_open_sepa_export_items}));
......
111 111
  push @all_open_invoices, map { $_->{is_ar}=1 ; $_ } grep { abs($_->amount - $_->paid) >= 0.01 } @{ $all_open_ar_invoices };
112 112
  push @all_open_invoices, map { $_->{is_ar}=0 ; $_ } grep { abs($_->amount - $_->paid) >= 0.01 } @{ $all_open_ap_invoices };
113 113
  $main::lxdebug->message(LXDebug->DEBUG2(),"bank_account=".$::form->{filter}{bank_account}." invoices: ".scalar(@{ $all_open_ar_invoices }).
114
                              " + ".scalar(@{ $all_open_ap_invoices })." transactions=".scalar(@{ $bank_transactions }));
114
                              " + ".scalar(@{ $all_open_ap_invoices })." non fully paid=".scalar(@all_open_invoices)." transactions=".scalar(@{ $bank_transactions }));
115 115

  
116 116
  my @all_sepa_invoices;
117 117
  my @all_non_sepa_invoices;
......
182 182
          #$main::lxdebug->message(LXDebug->DEBUG2(),"exitem2=".$_->id." for invoice ".$open_invoice->id);
183 183
          my $factor = ( $_->ar_id == $open_invoice->id?1:-1);
184 184
          $_->amount($_->amount*1);
185
          #$main::lxdebug->message(LXDebug->DEBUG2(),"remote account '".$bt->{remote_account_number}."' bt_amount=". ($bt->amount * $factor));
185
          #$main::lxdebug->message(LXDebug->DEBUG2(),"remote account '".$bt->{remote_account_number}."' bt_amount=".$bt->amount." factor=".$factor);
186 186
          #$main::lxdebug->message(LXDebug->DEBUG2(),"compare with   '".$_->vc_iban."'    amount=".$_->amount);
187
          if ( $bt->{remote_account_number} eq $_->vc_iban && abs(( $_->amount *1 ) - ($bt->amount * $factor)) < 0.01 ) {
187
          if ( $bt->{remote_account_number} eq $_->vc_iban && abs(abs($_->amount) - abs($bt->amount)) < 0.01 ) {
188 188
            my $iban;
189 189
            $iban = $open_invoice->customer->iban if $open_invoice->is_sales;
190 190
            $iban = $open_invoice->vendor->iban   if ! $open_invoice->is_sales;
......
212 212
    foreach my $open_invoice (@all_non_sepa_invoices){
213 213
      ($open_invoice->{agreement}, $open_invoice->{rule_matches}) = $bt->get_agreement_with_invoice($open_invoice);
214 214
      $open_invoice->{realamount} = $::form->format_amount(\%::myconfig,$open_invoice->amount*($open_invoice->{is_ar}?1:-1),2);
215
      $main::lxdebug->message(LXDebug->DEBUG2(),"nons invoice_id=".$open_invoice->id." agreement=".$open_invoice->{agreement}." rules matches=".$open_invoice->{rule_matches}) if $open_invoice->{agreement} > 2;
215
      $main::lxdebug->message(LXDebug->DEBUG2(),"nons invoice_id=".$open_invoice->id." amount=".$open_invoice->amount." agreement=".$open_invoice->{agreement}." rules matches=".$open_invoice->{rule_matches}) if $open_invoice->{agreement} > 2;
216 216
    };
217 217

  
218 218
    my $agreement = 15;
......
573 573
    my $payment_received      = $bank_transaction->amount > 0;
574 574
    my $payment_sent          = $bank_transaction->amount < 0;
575 575

  
576

  
576 577
    foreach my $invoice_id (@{ $params{invoice_ids} }) {
577 578
      my $invoice = SL::DB::Manager::Invoice->find_by(id => $invoice_id) || SL::DB::Manager::PurchaseInvoice->find_by(id => $invoice_id);
578 579
      if (!$invoice) {
......
582 583
          message => $::locale->text("The ID #1 is not a valid database ID.", $invoice_id),
583 584
        };
584 585
      }
585

  
586 586
      push @{ $data{invoices} }, $invoice;
587 587
    }
588 588

  
......
640 640
        $payment_type = 'without_skonto';
641 641
      };
642 642

  
643

  
643 644
      # pay invoice or go to the next bank transaction if the amount is not sufficiently high
644 645
      if ($invoice->open_amount <= $amount_of_transaction && $n_invoices < $max_invoices) {
645 646
        my $open_amount = ($payment_type eq 'with_skonto_pt'?$invoice->amount_less_skonto:$invoice->open_amount);
......
658 659
                              payment_type => $payment_type,
659 660
                              transdate    => $bank_transaction->transdate->to_kivitendo);
660 661
      } else { # use the whole amount of the bank transaction for the invoice, overpay the invoice if necessary
662
        if ( $invoice->is_sales && $invoice->invoice_type eq 'credit_note' ) {
663
          $amount_of_transaction *= -1;
664
        }
661 665
        my $overpaid_amount = $amount_of_transaction - $invoice->open_amount;
662 666
        $invoice->pay_invoice(chart_id     => $bank_transaction->local_bank_account->chart_id,
663 667
                              trans_id     => $invoice->id,

Auch abrufbar als: Unified diff