FlattenToForm - Verkäufer-Daten und gelöschte Benutzer berücksichtigen.
[kivitendo-erp.git] / SL / DB / BankTransaction.pm
index b416606..06302bb 100644 (file)
@@ -42,6 +42,7 @@ sub linked_invoices {
   foreach my $record_link (@{ $record_links }) {
     push @linked_invoices, SL::DB::Manager::Invoice->find_by(id => $record_link->to_id)->invnumber         if $record_link->to_table eq 'ar';
     push @linked_invoices, SL::DB::Manager::PurchaseInvoice->find_by(id => $record_link->to_id)->invnumber if $record_link->to_table eq 'ap';
+    push @linked_invoices, SL::DB::Manager::GLTransaction->find_by(id => $record_link->to_id)->reference   if $record_link->to_table eq 'gl';
   }
 
   return [ @linked_invoices ];
@@ -111,18 +112,27 @@ sub get_agreement_with_invoice {
   $invoice->{datediff} = $datediff;
 
   # compare amount
-  if (abs(abs($invoice->amount) - abs($self->amount)) < 0.01) {
+  if (abs(abs($invoice->amount) - abs($self->amount)) < 0.01 &&
+        $::form->format_amount(\%::myconfig,abs($invoice->amount),2) eq
+        $::form->format_amount(\%::myconfig,abs($self->amount),2)
+      ) {
     $agreement += $points{exact_amount};
     $rule_matches .= 'exact_amount(' . $points{'exact_amount'} . ') ';
   }
 
   # compare open amount, preventing double points when open amount = invoice amount
-  if ( $invoice->amount != $invoice->open_amount && abs(abs($invoice->open_amount) - abs($self->amount)) < 0.01) {
+  if ( $invoice->amount != $invoice->open_amount && abs(abs($invoice->open_amount) - abs($self->amount)) < 0.01 &&
+         $::form->format_amount(\%::myconfig,abs($invoice->amount_less_skonto),2) eq
+         $::form->format_amount(\%::myconfig,abs($self->amount),2)
+       ) {
     $agreement += $points{exact_open_amount};
     $rule_matches .= 'exact_open_amount(' . $points{'exact_open_amount'} . ') ';
   }
 
-  if ( $invoice->skonto_date && abs(abs($invoice->amount_less_skonto) - abs($self->amount)) < 0.01) {
+  if ( $invoice->skonto_date && abs(abs($invoice->amount_less_skonto) - abs($self->amount)) < 0.01 &&
+         $::form->format_amount(\%::myconfig,abs($invoice->amount_less_skonto),2) eq
+         $::form->format_amount(\%::myconfig,abs($self->amount),2)
+       ) {
     $agreement += $points{skonto_exact_amount};
     $rule_matches .= 'skonto_exact_amount(' . $points{'skonto_exact_amount'} . ') ';
     $invoice->{skonto_type} = 'with_skonto_pt';
@@ -319,6 +329,16 @@ Example:
   my $invoice = SL::DB::Manager::Invoice->find_by(invnumber => '198');
   my ($agreement,rule_matches) = $bt->get_agreement_with_invoice($invoice);
 
+=item C<linked_invoices>
+
+Returns an array of record names (invoice number or gl reference)
+which are linked for this bank transaction.
+
+Returns an empty array ref if no links are found.
+Usage:
+ croak("No linked records at all") unless @{ $bt->linked_invoices() };
+
+
 =back
 
 =head1 AUTHOR