Projekt

Allgemein

Profil

Fehler #352

Beim Drucken mehrerer Rechnung aus dem Bericht heraus wird der Rabatt falsch berechnet

Von Jan Büren vor 4 Monaten hinzugefügt. Vor 4 Monaten aktualisiert.

Status:
Neu
Priorität:
Normal
Zugewiesen an:
-
Zielversion:
-
Beginn:
11.05.2018
Abgabedatum:
% erledigt:

0%

Geschätzter Aufwand:

Beschreibung

Wie:
Verkauf -> Berichte -> Rechnung -> Anhaken -> Drucken

Was:
Der sellprice der Position ist nicht mehr wie sonst, der Preis ohne Rabatt, sondern der Preis mit Rabatt.
Dieser kommt aus flatten_to_form einfach aus der Datenbank-Tabelle invoice.

Problematisch ist es dann, dass $form->prepare_for_printing diesen sellprice dann nochmal mit dem Rabatt berechnet.

Wenn ich das mit wiederkehrenden Rechnungen mache, stimmt hingegen alles.

Grundproblem scheint zu sein, dass sellprice einmal mit Rabatt und einmal ohne Rabatt gespeichert wird.

Rechnung normal buchen:

# select sellprice,fxsellprice,discount from invoice where trans_id=10457;
 sellprice | fxsellprice | discount 
-----------+-------------+----------
   0.57000 |    44.00000 |    0.987

Wiederkehrende Rechnung buchen:
# select sellprice,fxsellprice,discount from invoice where trans_id=10484;
 sellprice | fxsellprice | discount 
-----------+-------------+----------
  44.00000 |    44.00000 |    0.987

Wenn ich mir das Verhalten in der 3.4 anschaue, dann wird dort auch der sellprice minus rabatt gespeichert.

Beim Ausdruck im Beleg ist das nicht aufgefallen, da hier der Rabatt unabhängig vom sellprice in invoice berechnet wird.

Wenn ich aber über den Menüpunkt Massendruck gehe, passt das dann nicht mehr.

Unschön ist es jetzt, dass sellprice mal diesen oder jenen Wert hat.

Das wäre aber per Upgrade-Skript korrigierbar, die Diskussion was in sellprice gespeichert wird hatten wir auch schon mal im IRC

Historie

#1 Von Jan Büren vor 4 Monaten aktualisiert

Ah, hier hatte Geoff das schon zusammengefasst: https://redmine.kivitendo-premium.de/issues/342

#2 Von Jan Büren vor 4 Monaten aktualisiert

Ohje, dann hatte Dirk Marklewitz doch recht, dass fxsellprice der Preis ohne Rabatt ist.

Im Beleg wird alles wieder richtig gedruckt, weil in SL/IS.pm _retrieve_invoice folgendes macht:

    # retrieve individual items
    $query =
      qq|SELECT
           c1.accno AS inventory_accno, c1.new_chart_id AS inventory_new_chart, date($transdate) - c1.valid_from AS inventory_valid,
           c2.accno AS income_accno,    c2.new_chart_id AS income_new_chart,    date($transdate) - c2.valid_from as income_valid,
           c3.accno AS expense_accno,   c3.new_chart_id AS expense_new_chart,   date($transdate) - c3.valid_from AS expense_valid,

           i.id AS invoice_id,
           i.description, i.longdescription, i.qty, i.fxsellprice AS sellprice, i.discount, i.parts_id AS id, i.unit, i.deliverydate AS reqdate,
                                                       ^^^^^^^^^^^^^^^^^^^^^^^

Ok, dieser Wert wird seit Anbeginn der Weltendämmerung als sellprice verwendet.
Tja, man sollte nicht vom Variablennamen vorschnell auf die Verwendung schliessen ...

Demnach brauchen wir fxsellprice in FlattenToForm:

FlattenToForm.pm

-    _copy($item,          $form, '',              "_${idx}", $format_noround, qw(qty sellprice));
+    _copy($item,          $form, '',              "_${idx}", $format_noround, qw(qty sellprice fxsellprice));

Und entsprechend angebliche sellprices durch wirkliche sellprices bei der Funktion ersetzen:
SL/Helper/MassPrintCreatePDF.pm


sub create_massprint_pdf {

   $create_params{variable_content_types} = $form->get_variable_content_types();
   $params{document}->flatten_to_form($form, format_amounts => 1);
   # 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;

Folgende Testfälle i.O.:

1. Rechnung erfassen
2. Wiederkehrende Rechnung erfassen und automatisch per Mail verschicken
3. Rechnung mit Fremdwährung erfassen

Alle drei Fälle werden danach von diesem Druckaufruf korrekt ausgedruckt.

Auch abrufbar als: Atom PDF