Rundungsfehler bei periodischen Rechnungen mit glatten Einzelpreisen und Rabatt behoben
authorJan Büren <jan@kivitendo-premium.de>
Fri, 7 Feb 2014 14:00:30 +0000 (15:00 +0100)
committerJan Büren <jan@kivitendo-premium.de>
Fri, 7 Feb 2014 14:00:30 +0000 (15:00 +0100)
SL/DB/Helper/PriceTaxCalculator.pm
doc/changelog

index 2478292..d95d143 100644 (file)
@@ -74,7 +74,14 @@ sub _calculate_item {
   $item->base_qty($item_unit->convert_to($item->qty, $part_unit));
   $item->fxsellprice($item->sellprice) if $data->{is_invoice};
 
-  my $num_dec   = _num_decimal_places($item->sellprice);
+  my $num_dec   = _num_decimal_places($item->sellprice) || 2;
+  #  ^ we need at least 2 decimal places                   ^
+  # my test case 43.00 € with 0 decimal places and 0.5 discount ->
+  # : sellprice before:43.00000
+  # : num dec   before:0
+  # : discount / sellprice ratio:  22  /  21
+  # : discount = 43 * 0.5 _round(21.5, 0) = 22
+  # TODO write a test case
   my $discount  = _round($item->sellprice * ($item->discount || 0), $num_dec);
   my $sellprice = _round($item->sellprice - $discount,              $num_dec);
 
index c4e5df7..6647912 100644 (file)
@@ -117,6 +117,8 @@ Wichtige Änderungen:
 - Perl v5.10.1 oder neuer und PostgreSQL v8.4 oder neuer werden
   zwingend vorausgesetzt.
 
+- Rundungsfehler bei periodischen Rechnungen mit Rabatt und glatten Einzelpreisen behoben
+
 Bugfixes:
 
 - Bugfix #182: Bug in bin/mozilla/gl.pl - Keine Steuerautomatik möglich!