Neu Hook in ShippingMethod::calculateShippingFees() für Fremdmodule

  • Temporäre Senkung der Mehrwertsteuer Hier findet ihr gesammelt alle Informationen, Videos und Fragen inkl. Antworten: https://forum.jtl-software.de/threads/mehrwertsteuer-senkung-vom-01-07-31-12-2020-offizieller-diskussionthread-video.129542/

fibergirl

Sehr aktives Mitglied
14. April 2016
467
86
Hamburg
Hallo JTL,

in /includes/src/Helpers/ShippingMethod.php gibt es folgende Stelle (auf gitlab derzeit Zeilen 1112-1114):
Code:
            default:
                // bearbeite fremdmodule
                break;
Im umliegenden switch-Statement wird für $price die Versandkostenberechnung je nach JTL-Versandkostenmodell gemacht.
Diese Stelle ist quasi der "else-Zweig".

Und genau hier wünsche ich mir einen Hook!
Denn ich möchte mittels Plugin für ausgewählte Versandarten eine eigene Versandkostenberechnung durchführen (ohne die nachfolgende Deckelung, Zuschlag o.ä. anzutasten).
Mir scheint, diese Stelle ist genau für diesen Fall vorbereitet. Nur der Hook fehlt noch!

Die Parameter wären idealerweise identisch wie HOOK_TOOLSGLOBAL_INC_BERECHNEVERSANDPREIS.

Wäre das möglich? Vielen Dank!

fibergirl


P.S.: wie kommt man für einen solchen Wunsch eigentlich zu einem Issue im Issue_Tracker?
 
Zuletzt bearbeitet:

FPrüfer

Moderator
Mitarbeiter
19. Februar 2016
1.251
287
Halle
Hallo fibergirl,
aktuell ist es nicht vorgesehen die Tabelle tversandberechnung programmatisch zu erweitern. Der default-Zweig wird an der Stelle also normalerweise niemals durchlaufen. Den Hook-Call dort einzubauen wäre aus allgemeiner Sicht also "toter" Code.
 

fibergirl

Sehr aktives Mitglied
14. April 2016
467
86
Hamburg
Hallo @FPrüfer ,

danke für die Antwort.
Ja, es ist toter Code, solange es nicht die im Kommentar erwähnten "Fremdmodule" gibt.

Und ebendies wäre mein geplantes Plugin. Es würde die Tabelle tversandberechnung um eigene Einträge erweitern, die dann per Hook an dieser Stelle eine eigene Berechnung auslösen.
 

fibergirl

Sehr aktives Mitglied
14. April 2016
467
86
Hamburg
Eine Alternative wäre ein Hook direkt hinter die switch-Anweisung, also vor Zeile 1116.
Dann kann an dieser Stelle zusätzlich auch der $price der bestehenden, von JTL definierten Versandarten nochmal modifiziert werden. (und dort ist kein toter Code ;) ).

Stattdessen HOOK_TOOLSGLOBAL_INC_BERECHNEVERSANDPREIS zu verwenden wäre sehr unschön, wenn nur $price bearbeitet werden soll und alle folgenden Berechnungen der Versandart unangetastet weiterverwendet werden sollen. Da müsste man die Zeilen 1116 bis 1163 quasi nochmal abschreiben (und damit auch noch zweimal durchlaufen). Und wenn sich beim Update im Core dort etwas ändert, bekommt man es nicht mit, d.h. es ist nicht updatefähig.

Ich halte es jedenfalls für wichtig, zusätzlich zu den von JTL vordefinierten Versandarten weitere, oder zumindest weitere Berechnungen, definieren zu können.
Unsere Problematik ist, dass UPS, FedEx und weitere Kurierdienste gewichtbasierte Formeln oder sehr fein granulierte Gewichtstaffeln für den Versand haben, die wir als UPS-Versender irgendwie abbbilden müssen. Die angebotenen Staffeln sind dafür unbrauchbar, da sie in der erforderlichen Auflösung weder effizient angelegt noch gepflegt werden können.
 

fibergirl

Sehr aktives Mitglied
14. April 2016
467
86
Hamburg
Ich meine gerade festgestellt zu haben, dass ShippingMethod::calculateShippingFees() nicht an jeder relevanten Stelle aufgerufen wird.

Der favourableShippingString, der durch Cart::getFavourableShippingString() erzeugt wird, wertet die Versandart-Tabellen direkt aus.
Das ist der "Zzgl. Versandkosten ab x.xx € incl. USt. bei Lieferung nach Deutschland"- String u.a. in der Bestellübersicht und beim Dropdown-Cart.

Dieser String wird also nicht durch HOOK_TOOLSGLOBAL_INC_BERECHNEVERSANDPREIS oder (ggf.) den neuen Hook korrigiert.
Muss man nur wissen. Also ggf. durch eigenes Template ausblenden oder ersetzen, wenn man mittels Hook am Versandpreis schraubt.