Neu CHECKOUTPROZESS: $SMARTY-WARENKORN BEEINFLUSSEN ÄNDERN?

  • Wichtiger Hinweis Liebe Kunden, solltet Ihr den DATEV Rechnungsdatenservice 2.0 nutzen, dann müsst Ihr bis zum 30.06.2024 JTL-Wawi 1.9 installieren. Danach wird die Schnittstelle für ältere Versionen nicht mehr unterstützt.
  • JTL-Connect 2024: Ihr habt noch kein Ticket? Jetzt Early Bird Ticket zum Vorzugspreis sichern! HIER geht es zum Ticketverkauf

DaPole88

Gut bekanntes Mitglied
2. September 2015
211
24
Hi,
ich mochte im Bestellvorgng den Warenkorb ändern. (Steuersenkung temporäre Steuersekung; gesteuert über eine CheckBox)...

GrzndIDee: Steuerklasse erstellen, hinterlegen ... Da man aber eigentl nur eine verwenden kann, die anhand von verschiedenen Faktoren gesetzt wird, mööchte ich diese im Bestellvorgag über eine Checkbox ändern. (Für bestimmte produkte)

Das ist zumindest meine Grundidee...

Template dateien an gewissen Stellen anpassen, stellt kein Problem dar. MAn könnte das oben genannte auch anders (einfacher) lösen, ich weiß.... Schöner wäre es aber .. :)Ich weiß das man direkt in den *.tpl Dateien sehr viel machen kann. Aber nicht den "Inhalt" der Variablen ändern. (z.B $smarty.session.Warenkorb->PositionenArr)
(Edit: Ich möchte nicht die Ausgabe der Variablen beeinflussen, sondern den Warenkorb, um sicher zu stellen, dass alle folgedenen Berechnungen etc... korrekt sind)

Herrausgefunden, das es wohl über die plugins.php geht / gehen müsste (im template Verzeichnis)

Leider, egal was ich dort probiere, löst mein Problem nicht. Bzw,, ich hab versucht eine "einfache" Variable zu modifizieren: $wkPrice ... Bekomme ich nicht hin:

Ich bekomme es hin, dass meine eingene Funktion (aus: 'plugin.php') ausgeführt hin ... Aber das wars auch Auch mit den $params & $smarty hab ich es noch nicht ganz raus
🙂


Es ergibt sich zwei Fragen.:
  • ist mein Vorhaben überhaupt so umsetzbar??
    (Kann ich im Bestellprozess den 'Warenkorn' bearbeiten ??
  • Nach Änderung des Wertes, muss ich auch nsicherstellen, dass die Summen neu berechnet weren?!

Warum möchte ich den Warenkorn bearbeiten??
Ich könnte die Template Datei so anpassen, dass diese alles richtig anzeigt. Alle Werte / Berechnungen korrekt sind, aber der Warenkorb unangetastet wird. Und in der Wawi würde ich die "eingetliche" Berechnung durchführen und die Bestellung in die Richtung anpassen

Aber:
  • unsauber, da an zwei Stellen das selbe durchgeführt wird
  • UND: Evtl anpassung aller folgenden Designvorlagen nötug (Email:Shop,WaWi,
Ich habe ein paar screenshots angehängt (1: Auszug aus Plugin.php 2: Auszug aus step5_confirmation.tpl)

Ich probiere gerne rum; bn für jeden Tipp dankbar.

Ich werde definitiv noch weiter rum experimentieren heute, da es zeutlich echt drückt ... Und Ungerne würde ich mir die Arbeit doppelt machen ... (1. fuschlösungund als 2. die von mir gewünschte :))

Natürlich, wenn es in den Produktiven Einsatz gehen sollte, wird alles im Child Template umgesetzt .... )

Vielen Dank & Frohes Neues Jahr :)

Template: Salepix
Shop: neuste Version
 

Anhänge

  • support1.png
    support1.png
    42,2 KB · Aufrufe: 30
  • support2.png
    support2.png
    56,8 KB · Aufrufe: 29

DaPole88

Gut bekanntes Mitglied
2. September 2015
211
24
@Point13 :

Jop!

Als erstes das ganze im Template versucht umzusetzen ... Nach etlichen Versuchen und diplomatischen fusch versuchen, habe ich mich dazu entschlossen, das mit einem Plugin umzusetzen...

Funktioniert einwandfrei mittlerweile ....

(Umsetzung: powerdude.com / solarkontor.de) Produkte die mit "mwst-Free" gekennzeichnet sind, können im Warenkorb (Bestellabschluss) Über eine checkbox manipuliert werden.... In dem Fall wird einfach die Steuerklasse im Warenkorb (direkt in der Warenkorbposition) geändert .....EDIT: Checkbox wird aber auch nur angezeigt, wenn Lieferland sowie Rechnungsland DEUTSCHLAND sind-> So will es das gesetz :)

Bzw: Der Kunde kann den hacken setzen.

Der Shop weiß anhand der (Funktions-)Attribute welche Artikel mwst-free verkauft werden dürfen ... Mit dem setzen des Hackens, setze ich die Steuerklasse, die im Warenkorb hinterlegt ist, um...

War wirklich nicht so einfach ... :) Aber

- Ich habe definitibv sehr viel Wissen mit genommen bei dem Projekt
- Ist schon geil (Das man sowas mit recht wenig handgriffe zaubern kann)

Das Plugin ist im Moment noch ohne Backend :) Es gibt zwar einstellungen, aber die sind noch nciht belegt :) Das was passieren muss., das steht noch direkt umm quellcode ... Aber ist ja auch mein erstes Plugin :)

Gruß
 
  • Gefällt mir
Reaktionen: Point13 und 301Moved

Kamil Czaja

Aktives Mitglied
20. November 2020
13
1
@Point13 :

Jop!

Als erstes das ganze im Template versucht umzusetzen ... Nach etlichen Versuchen und diplomatischen fusch versuchen, habe ich mich dazu entschlossen, das mit einem Plugin umzusetzen...

Funktioniert einwandfrei mittlerweile ....

(Umsetzung: powerdude.com / solarkontor.de) Produkte die mit "mwst-Free" gekennzeichnet sind, können im Warenkorb (Bestellabschluss) Über eine checkbox manipuliert werden.... In dem Fall wird einfach die Steuerklasse im Warenkorb (direkt in der Warenkorbposition) geändert .....EDIT: Checkbox wird aber auch nur angezeigt, wenn Lieferland sowie Rechnungsland DEUTSCHLAND sind-> So will es das gesetz :)

Bzw: Der Kunde kann den hacken setzen.

Der Shop weiß anhand der (Funktions-)Attribute welche Artikel mwst-free verkauft werden dürfen ... Mit dem setzen des Hackens, setze ich die Steuerklasse, die im Warenkorb hinterlegt ist, um...

War wirklich nicht so einfach ... :) Aber

- Ich habe definitibv sehr viel Wissen mit genommen bei dem Projekt
- Ist schon geil (Das man sowas mit recht wenig handgriffe zaubern kann)

Das Plugin ist im Moment noch ohne Backend :) Es gibt zwar einstellungen, aber die sind noch nciht belegt :) Das was passieren muss., das steht noch direkt umm quellcode ... Aber ist ja auch mein erstes Plugin :)

Gruß
Grüße,

hattest du die Steuerklasse in PHP oder Smarty geändert?

Gruß Kamil
 

DaPole88

Gut bekanntes Mitglied
2. September 2015
211
24
Ahoi,

mit Smarty hab ich es zu erst versucht... (im Template)+

Meine Lösung sieht letztendlich ungefähr so aus:


PHP:
$wk = &$_SESSION['Warenkorb'];
foreach ($wk->PositionenArr as $position) {
    
if (isset($position->Artikel->FunktionsAttribute['ustbefreiung'])) // Abfrage, ob Funktionsattribut überhaupt existiert
{
    if ($position->Artikel->FunktionsAttribute['ustbefreiung']==1 && $wk->MwStFlag==1){
    $position->kSteuerklasse = $this->kSteuerklasseNeu;
    $position->cHinweis = "MwSt=".$wk->MwStFlag;    // Feld, mitdem ich intern arbeite
    }
    else
    {                   
    $position->kSteuerklasse = 1;
    $position->cHinweis = "MwSt=".$wk->MwStFlag;
    }

    
    .......
 
  • Gefällt mir
Reaktionen: Kamil Czaja

Kamil Czaja

Aktives Mitglied
20. November 2020
13
1
Ahoi,

mit Smarty hab ich es zu erst versucht... (im Template)+

Meine Lösung sieht letztendlich ungefähr so aus:


PHP:
$wk = &$_SESSION['Warenkorb'];
foreach ($wk->PositionenArr as $position) {
   
if (isset($position->Artikel->FunktionsAttribute['ustbefreiung'])) // Abfrage, ob Funktionsattribut überhaupt existiert
{
    if ($position->Artikel->FunktionsAttribute['ustbefreiung']==1 && $wk->MwStFlag==1){
    $position->kSteuerklasse = $this->kSteuerklasseNeu;
    $position->cHinweis = "MwSt=".$wk->MwStFlag;    // Feld, mitdem ich intern arbeite
    }
    else
    {                  
    $position->kSteuerklasse = 1;
    $position->cHinweis = "MwSt=".$wk->MwStFlag;
    }

   
    .......
Danke, soweit habe ich das auch nun, mit Smarty klappt das aufjedenfall nicht, welchen HOOK hast du dafür genutzt? Mein Hook "HOOK_BESTELLVORGANG_PAGE" scheint wohl zu spät zu sein, der setzt die Steuerklasse nur nach dem 2. Reload.

Grüße
 

DaPole88

Gut bekanntes Mitglied
2. September 2015
211
24
... Das war das härteste, dort den richtigen zu finden ....

Da hab ich auch länger gesucht ... IKmmer wieder kamen sehr komische Phänomene an Tageslicht.... Produktiv nutze ich 2 .... auch, wenn vllt einer davon reichen würde

\HOOK_TOOLSGLOBAL_INC_BERECHNEVERSANDPREIS



\HOOK_WARENKORB_ERSTELLE_SPEZIAL_POS



Hinweis: Tesdtet mal ordentlich durch, was passiert beim eingeben eines cpupon codes ...

Oder noch härter: Falls ihr eine Zahlungsart habt, bei der sich die Gesamtsumme reduziert (z.B um 1%) ... Das war auch recht tricky, das in den Griiff zu bekommen ......
 
  • Gefällt mir
Reaktionen: Kamil Czaja

DaPole88

Gut bekanntes Mitglied
2. September 2015
211
24
Ich würde eher über den Session Hook gehen
Hm... Warum?

Für diesen Zweck is das schon eigentlich ziemlich gut. Es wird wirklich, nur dann ausgeführt, wenn gewünscht.

Hatte mir da anfangs sehr viele 'ausgaben' reingedonnert, und getestet, getestet, getestet .... :)

Wir hatten Anfangs, evtl noch mit den Gedanken gespielt, dass außerhalb des Bestellabschlusses schon 'aktivieren' .. denn dem Kunden auch gleich 'NETTO'-Preise anbieten ...

Mal schauen, vielleicht kommt das noch :)

Kurz geschaut: Mit der Session .... !VORSICHT!:Dieser Hook ist nicht über den Dispatcher nutzbar! .. Somit: Alles richtig gemacht :)
 

Kamil Czaja

Aktives Mitglied
20. November 2020
13
1
... Das war das härteste, dort den richtigen zu finden ....

Da hab ich auch länger gesucht ... IKmmer wieder kamen sehr komische Phänomene an Tageslicht.... Produktiv nutze ich 2 .... auch, wenn vllt einer davon reichen würde

\HOOK_TOOLSGLOBAL_INC_BERECHNEVERSANDPREIS



\HOOK_WARENKORB_ERSTELLE_SPEZIAL_POS



Hinweis: Tesdtet mal ordentlich durch, was passiert beim eingeben eines cpupon codes ...

Oder noch härter: Falls ihr eine Zahlungsart habt, bei der sich die Gesamtsumme reduziert (z.B um 1%) ... Das war auch recht tricky, das in den Griiff zu bekommen ......
Grüße,

aufjedenfall danke soweit. Funktioniert alles soweit, die Preise werden nach Änderung der Steuerklasse korrekt ausgeben, bis auf die Versandkosten, wie hast du das gelöst? Bei mir stehen die Versandkosten im Checkout immer noch mit 19% da. Die Funktion "Frontend::getCart()->gibVersandkostenSteuerklasse()" gibt mir aber korrekt die geänderte Steuerklasse zurück, muss hier in der Wawi noch irgendwas umgestellt werden?

Danke vorab und Gruß
Kamil
 

DaPole88

Gut bekanntes Mitglied
2. September 2015
211
24
Die Versand ... Der war echt hart und tricky ....
Mach es dir garnicht so schwierig .. Versand fasse ich garnicht an ....

Weil Der Shop macht das selber ... ->

HAst du mehr als 50% des Warenkorbs mit Steuer, som,it: Versand versteuert ....

Sind m1ehr als 50% Steuerfrei ... Somit-> Steuerfrei .....
(Shop 5.2)


Grüße
 
  • Gefällt mir
Reaktionen: Kamil Czaja

Point13

Gut bekanntes Mitglied
1. Dezember 2015
116
2
Auch wenn mittlerweile einige Monate ins Land gezogen sind, programmiere ich aktuell auch daran rum... 🙃

@DaPole88
Bei mir ist gerade das Problem, dass die Wawi nach dem Auftragsimport die Steuer bei den Artikelpositionen auf Standard lässt (Steuerklasse bzw. MwSt. wird aus den jeweiligen Wawi Produkten entnommen).

In der Shop $_SESSION['Warenkorb']->PositionenArr[]->kSteuerklasse sind alle Position in der korrekten Steuerklasse (bei mir Steuerklasse ID4). Der Warenkorb zeigt auch alles korrekt an.
Nach dem Wawi Sync zeigt die Debug /dbeS/tmp/data.xml in allen Positionen <fMwSt>0.00</fMwSt>. Soweit, so gut.
Aber im Auftrag der Wawi hat jede Position den Steuersatz drin, den sie als Produkt auch als Steuerklasse zugewiesen bekommen hat.

Wie hast du das Problem gelöst bekommen?

EDIT: Problem gelöst. Ist ein Bug in einer älteren Wawi Version!
 
Zuletzt bearbeitet:

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
6.891
1.684
Berlin
Du solltest nicht schauen was die Steuern in der Session machen, schau in die Datenbank vom Shop, was da, nach der Bestellung und vor dem Abgleich in der Tabelle der WK Positionen steht.
Ich könnte wetten da steht der Steuersatz drinnen, den du jetzt in der WAWI siehst.

Die WAWI nimmt die Artikel in der Regel so wie Sie aus der Datenbank vom Shop kommen und geht nicht danach wie Sie in der WAWI stehen.
 

Point13

Gut bekanntes Mitglied
1. Dezember 2015
116
2
Nein, an der Stelle ist alles korrekt. Zwischen der Bestellung und vor dem Abgleich waren 0.00 drin und nach dem Abgleich 19.00
Hab mir ja auch extra die /dbeS/tmp/data.xml ausgeben lassen, um zu sehen, was der Shop an die Wawi übergibt.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
6.891
1.684
Berlin
hmm Ich hab das mal schnell getestet.

Bei mir steht in der twarenkorbposTabelle vom Shop in der spalte fMwSt = 0.00
ich mache einen Abgleich und in der Wawi kommt es genau so auch an, auch wird die Tabelle twarenkorbpos nicht verändert.

Es ist bei mir also genau wie erwartet.
 
  • Gefällt mir
Reaktionen: Point13

Point13

Gut bekanntes Mitglied
1. Dezember 2015
116
2
Ok. Es liegt an einem Bug in der Wawi zwischen der Version, die wir jetzt produktiv einsetzen und der aktuellen Version.
Nach dem Update der Wawi läuft es nämlich 1a
 

Point13

Gut bekanntes Mitglied
1. Dezember 2015
116
2
Bin fast fertig aber es hakelt noch an den Warenkorbpositionen im Warenkorb in der Bestellabschlussseite und im Warenkorb selbst (bei Warenkorbänderung). Die Preise bei Bestellabschluss sind korrekt und funktionieren soweit.

Also hier:

Code:
if (isset($position->Artikel->FunktionsAttribute['ustbefreiung'])) // Abfrage, ob Funktionsattribut überhaupt existiert
{
    if ($position->Artikel->FunktionsAttribute['ustbefreiung']==1 && $wk->MwStFlag==1){
    $position->kSteuerklasse = $this->kSteuerklasseNeu;
    $position->cHinweis = "MwSt=".$wk->MwStFlag;    // Feld, mitdem ich intern arbeite
    }
    else
    {                   
    $position->kSteuerklasse = 1;
    $position->cHinweis = "MwSt=".$wk->MwStFlag;
    }

Wenn beim HOOK_TOOLSGLOBAL_INC_BERECHNEVERSANDPREIS die kSteuerklasse angepasst wird, werden die Werte in den Session Variablen $wk->cEinzelpreisLocalized[] nicht geändert und das Template gibt die falschen Werte aus. Also hier z.B.

$wk->cEinzelpreisLocalized[0]
EUR : 514,90 &#8364;
$wk->cEinzelpreisLocalized[1]
EUR : 432,69 &#8364;

Erst wenn ich den Warenkorb ändere und die Menge erhöhe, werden an der Stelle die korrekten Werte errechnet aus Nettopreis und Steuerklasse.

Gibt es dafür evtl. eine Funktion wie CartHelper::aktualisiereWarenkorbPreise(); oder so, die man am Ende des Hooks noch einfügen kann?
Ansonsten müsste ich mir selbst sowas stricken...