Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision a695cc30

Von Martin Helmling martin.helmling@octosoft.eu vor mehr als 6 Jahren hinzugefügt

  • ID a695cc30eec6422260f0e9a9b00bbc209649d212
  • Vorgänger 3fe6ec98
  • Nachfolger 11f548d3

Bankimport: Rundungsproblem beim Vergleich Rechnungsbetrag - Kontobetrag

Durch explizites Runden konnte die perl Floatingpoint Arithmetik nicht überzeugt werden,
deshalb werden nun die Formatierten Strings der Beträge noch zusätzlich verglichen.

Hiermit wird der "exact_match" beim Vergleich von z.B. 3456,28 und 3456,29 nicht mehr gefunden

behebt teilweise Issue #201

Unterschiede anzeigen:

SL/DB/BankTransaction.pm
111 111
  $invoice->{datediff} = $datediff;
112 112

  
113 113
  # compare amount
114
  if (abs(abs($invoice->amount) - abs($self->amount)) < 0.01) {
114
  if (abs(abs($invoice->amount) - abs($self->amount)) < 0.01 &&
115
        $::form->format_amount(\%::myconfig,abs($invoice->amount),2) eq
116
        $::form->format_amount(\%::myconfig,abs($self->amount),2)
117
      ) {
115 118
    $agreement += $points{exact_amount};
116 119
    $rule_matches .= 'exact_amount(' . $points{'exact_amount'} . ') ';
117 120
  }
118 121

  
119 122
  # compare open amount, preventing double points when open amount = invoice amount
120
  if ( $invoice->amount != $invoice->open_amount && abs(abs($invoice->open_amount) - abs($self->amount)) < 0.01) {
123
  if ( $invoice->amount != $invoice->open_amount && abs(abs($invoice->open_amount) - abs($self->amount)) < 0.01 &&
124
         $::form->format_amount(\%::myconfig,abs($invoice->amount_less_skonto),2) eq
125
         $::form->format_amount(\%::myconfig,abs($self->amount),2)
126
       ) {
121 127
    $agreement += $points{exact_open_amount};
122 128
    $rule_matches .= 'exact_open_amount(' . $points{'exact_open_amount'} . ') ';
123 129
  }
124 130

  
125
  if ( $invoice->skonto_date && abs(abs($invoice->amount_less_skonto) - abs($self->amount)) < 0.01) {
131
  if ( $invoice->skonto_date && abs(abs($invoice->amount_less_skonto) - abs($self->amount)) < 0.01 &&
132
         $::form->format_amount(\%::myconfig,abs($invoice->amount_less_skonto),2) eq
133
         $::form->format_amount(\%::myconfig,abs($self->amount),2)
134
       ) {
126 135
    $agreement += $points{skonto_exact_amount};
127 136
    $rule_matches .= 'skonto_exact_amount(' . $points{'skonto_exact_amount'} . ') ';
128 137
    $invoice->{skonto_type} = 'with_skonto_pt';

Auch abrufbar als: Unified diff