Revision fbcd5580
Von Martin Helmling martin.helmling@octosoft.eu vor fast 8 Jahren hinzugefügt
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
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?)