Fixt #352 Beim Drucken mehrerer Rechnung aus dem Bericht heraus wird der Rabatt falsc...
authorJan Büren <jan@kivitendo-premium.de>
Mon, 3 Sep 2018 14:52:00 +0000 (16:52 +0200)
committerJan Büren <jan@kivitendo.de>
Thu, 29 Nov 2018 14:01:05 +0000 (15:01 +0100)
Hotfix für die zweifache Berechnung vom Rabatt (Marge bei Berichten falsch) erstellt.
Hintergrund: Der alte Code erwartet keine vorformatierten Werte, wird aber bei
periodischen Jobs noch zwingend aufgerufen (sellprice mit fxsellprice in MassPrintCreatePDF überlagert)
Ferner Rundungsgenauigkeiten für wiederkehrende Rechnungen erhöht.

SL/DB/Helper/FlattenToForm.pm
SL/DB/Helper/PriceTaxCalculator.pm
SL/Helper/MassPrintCreatePDF.pm

index 1f54a8a..1228acc 100644 (file)
@@ -90,7 +90,7 @@ sub flatten_to_form {
     _copy($item,          $form, '',               "_${idx}", 0,               qw(description project_id ship serialnumber pricegroup_id ordnumber donumber cusordnumber unit
                                                                                   subtotal longdescription price_factor_id marge_price_factor reqdate transdate
                                                                                   active_price_source active_discount_source));
-    _copy($item,          $form, '',              "_${idx}", $format_noround, qw(qty sellprice));
+    _copy($item,          $form, '',              "_${idx}", $format_noround, qw(qty sellprice fxsellprice));
     _copy($item,          $form, '',              "_${idx}", $format_amounts, qw(marge_total marge_percent lastcost));
     _copy($item,          $form, '',              "_${idx}", $format_percent, qw(discount));
     _copy($item->project, $form, 'project',       "_${idx}", 0,               qw(number description)) if _has($item, 'project_id');
index 9a27184..d830c1e 100644 (file)
@@ -95,6 +95,7 @@ sub _calculate_item {
   $item->fxsellprice($item->sellprice) if $data->{is_invoice};
 
   my $num_dec   = max 2, _num_decimal_places($item->sellprice);
+  $num_dec   = 5;
   my $discount  = _round($item->sellprice * ($item->discount || 0), $num_dec);
   my $sellprice = _round($item->sellprice - $discount,              $num_dec);
 
index e814199..66fbaf2 100644 (file)
@@ -37,6 +37,9 @@ sub create_massprint_pdf {
   # flatten_to_form sets payment_terms from customer/vendor - we do not want that here
   # really ??
   delete $form->{payment_terms} if !$form->{payment_id};
+  for my $i (1 .. $form->{rowcount}) {
+    $form->{"sellprice_$i"} = $form->{"fxsellprice_$i"};
+  }
 
   $form->prepare_for_printing;
   $form->{attachment_filename} = $form->generate_attachment_filename;