Patch für Bug 40, base_unit Umrechnung in VK-Bericht
authorG. Richardson <information@kivitendo-premium.de>
Fri, 20 Feb 2015 15:14:55 +0000 (16:14 +0100)
committerG. Richardson <information@kivitendo-premium.de>
Thu, 26 Feb 2015 15:34:12 +0000 (16:34 +0100)
Patch getestet in Datenbank mit unterschiedlichen Einheiten und
Preisfaktoren.

Möglichkeit zum Testen:

Summe VK-Betrag des Verkaufsberichts sollte gleich sein der Summe Betrag
von Verkauf->Berichte->Rechnungen, wenn man die Debitorenbuchungen
rausfiltert.

z.B. in SL/AR.pm ar_transactions:
  my $where = "1 = 1 and a.invoice is true ";

oder dem Benutzer das Recht entziehen, Debitorenbuchungen im
Rechnungsbericht anzuzeigen.

bin/mozilla/vk.pl

index 51521a3..a6476d9 100644 (file)
@@ -315,11 +315,16 @@ sub invoice_transactions {
     # sellprice_total_including_tax = qty * fxsellprice * (1-discount) /  price_factor * exchangerate
     # $ar->{sellprice_total_including_tax} =  $form->round_amount( $ar->{qty} * ( $ar->{fxsellprice} * ( 1 - $ar->{discount} ) ) / $ar->{price_factor}, $form->{"decimalplaces"});
 
+    my $sellprice_orig     = $ar->{sellprice};
+    my $qty_orig           = $ar->{qty};
+    # adjust sellprice so it reflects the unit sellprice according to price_factor and basefactor
     $ar->{sellprice}       = $ar->{sellprice}  / $ar->{price_factor} / $basefactor;
-    $ar->{sellprice_total} = $form->round_amount( $ar->{qty} * $ar->{sellprice} / $ar->{price_factor} , $form->{"decimalplaces"});
+    # for sellprice_total use the original amounts
+    $ar->{sellprice_total} = $form->round_amount( $qty_orig * $sellprice_orig / $ar->{price_factor}, $form->{"decimalplaces"});
 
+    my $lastcost_orig      = $ar->{lastcost};
     $ar->{lastcost}        = $ar->{lastcost}   / $ar->{price_factor} / $basefactor;
-    $ar->{lastcost_total}  = $form->round_amount( $ar->{qty} * $ar->{lastcost} / $ar->{price_factor}, $form->{"decimalplaces"});
+    $ar->{lastcost_total}  = $form->round_amount( $qty_orig * $lastcost_orig / $ar->{price_factor}, $form->{"decimalplaces"});
 
     # marge_percent is recalculated, because the value in invoice used to be empty
     $ar->{marge_percent} = $ar->{sellprice_total} ? (($ar->{sellprice_total}-$ar->{lastcost_total}) / $ar->{sellprice_total} * 100) : 0;
@@ -327,9 +332,11 @@ sub invoice_transactions {
     $ar->{marge_total} = $ar->{sellprice_total} ? $ar->{sellprice_total}-$ar->{lastcost_total}  : 0;
     $ar->{discount} *= 100;  # format discount value for output, 10% is stored as 0.1 in db
 
-    # adapt qty to the chosen unit
+    # adjust qty to reflect the qty of the base unit
     $ar->{qty} *= $basefactor;
 
+    # now $ar->{sellprice} * $ar->{qty} should be the same as $qty_orig * $ar->{qty}
+
     # weight is the still the weight per part, but here we want the total weight
     $ar->{weight} *= $ar->{qty};