Rabatte & Aktionen: Datum wird nicht korrekt erkannt

Hallo.

Ich habe im Backend eine Promotion Aktion mit Startdatum 2020-11-23 12:00 angelegt. Leider wird diese, aufgrund der Uhrzeit, nicht aktiviert obwohl der Starttermin eigentlich seit einer halben Stunden erreicht sein sollte. Stelle ich das Datum auf 2020-11-23 00:00 geht es.

Hat jemand eine Lösung für dieses Problem?

Ich habe das gleiche Problem mit den Zeiten:

Ich denke das Problem ist, dass die Datenbank immer UTC speichert, der Admin das dann aber für die Anzeige umrechnet.

Vielleicht wurde das beim Promotion-Modul nicht bedacht? Ihr könntet ja testen, ob das immer mit der UTC Zeit passt.

@Moritz Naczenski schrieb:

Ich denke das Problem ist, dass die Datenbank immer UTC speichert, der Admin das dann aber für die Anzeige umrechnet.

Vielleicht wurde das beim Promotion-Modul nicht bedacht? Ihr könntet ja testen, ob das immer mit der UTC Zeit passt.
 

Bei einem Projekt ist mir das auch aufgefallen. Der Gutscheincode wird für den z.B. 23.11.2020 nur dann aktiv, wenn angeben ist 2020-11-23 00:00 . Trägt man z.B. 2020-11-23 00:05 ein, so kann er den ganzen Tag nicht eingelöst werden. Ein einlösen ist dann erst am 24.11.2020 möglich. Bzgl. der Zeitdiffrenz von UTC habe ich diese auch einmal mit einberechnet. Was aber auch nach mehren Stunden zu keinem Erfolg führt.

Da ich die Vermutung hatte, das es evtl. durch Scheduled Task aktiviert werden muss, habe ich einmal eine Testinstanz eingerichtet und die Scheduled Task per Cronjob dauerhaft laufen lassen. Dort ist die Symtomatik aber auch identisch.

Auch die Verschiebung (um eine Stunde) der Darstellung in der Übersicht, tritt bei mir ein. Interessant dabei ist, das von der Shop API, das richtige Datum (z.B. 00:00) übermittelt wird und erst im Browser dann um eine Stunde erhöht wird (also 01:00).

Gruß

laurentius

Ja, wie gesagt die Datenbank kennt nur UTC, alles andere macht die UI. Also die Konvertierung übernimmt der Admin, von der Datenbank/API sollte die Zeit immer in UTC zurück kommen.

Am besten mal nachschauen was in der Datenbank als Zeit bei der Rule gespeichert wird,

@Moritz Naczenski schrieb:

Ja, wie gesagt die Datenbank kennt nur UTC, alles andere macht die UI. Also die Konvertierung übernimmt der Admin, von der Datenbank/API sollte die Zeit immer in UTC zurück kommen.

Am besten mal nachschauen was in der Datenbank als Zeit bei der Rule gespeichert wird,

Moritz, so ganz verstehe ich glaube ich nich was du sagen willst. Kann es sein, das du dich mit diesem Kommentar nur auf die Darstellung - des Datums - auf der Übersichtsseite von “Rabatte & Aktionen” bezeihst?

Wegen dem Problem, das der Gutscheincode nicht als gültig erkannt wird, wenn zwar der Tag im Gültigkeitszeitraum liegt, aber zu sätzlich noch eine Uhrzeit angeben ist, die nicht 0 Uhr ist. Habe ich in einem Testshop (SW 6.3.3.1, nur SW Demo Plugin) mal ein Gutschein angelegt. In deisem Testshop werden die Scheduled Task dauerhaft per Corenjob (neuer Aufruf alle 5 Minuten, mit Timeout 4.5 Minuten) ausgeführt.

Dieser hat folgende Einstellungen:

Aktiv: ja
Verkaufskanäle: Demo Shop
Gültig von: 2020-11-23 12:00
Gültig bis: 2020-11-25 12:00
Anzahl insgesamt: 0
Anzahl pro Kunde: 0
Nicht kombinieren mit: leer
Aktionscodes verwenden: ja
Allgemeiner Aktionscode: datumtext

 

Und folgende Bedingungen:

Zielgruppe: All customers
Warenkorbregeln: Always vaild (Default)
Bestellregeln: All customers

 

Mit folgenden Rabatt:

Anwenden auf: Warenkorb
Nur auf ausgewählte Produkte anwenden: nein
Art: Prozentual
Wert: 10
Maximaler Rabattwert: leer

 

Wenn ich nun in die Tabelle promotion gucke, habe ich folgenden Eintrag:
id: 0xDEFD89DEF8694F77B53E0BF3B84F8065
active: 1
valid_from: 2020-11-23 12:00:00
valid_until: 2020-11-25 12:00:00
max_redemptions_global: 0
max_redempitons_per_customer: 0
order_count: 0
order_per_customer_count: NULL
exclusive: 0
code: datumtest
use_codes: 1
created_at: 2020-11-23 20:26:09.582
updated_at: 2020-11-23 20:27:12-986
customer_restriction: 0
exclusion_ids: NULL
use_individual_codes: 0
individual_code_pattern: NULL
use_setgroups: 0

Wenn ich jetzt (22:25 UTC+2) den Code “datumtest” auf einen gefüllten Warenkorb im Verkaufskanal Demo Shop ausführe. Erhalte ich die folgende Meldung: Der Gutschein-Code “datumtest” existiert nicht. , woraus ich schließe das der Gutscheincode noch nicht aktiv ist. Aber eigentlich müsste der Gutscheincode doch ab 23.11.2020 um 12 UTC (also 14 Uhr unsere Zeit) aktiv sein? Somit müssten wir ja ein Fehler bei der Validierung haben, da 22 Uhr > 14 Uhr ? Oder über sehe ich etwas?

Gruß

laurentius

Mit den scheduled Tasks hat das nichts zu tun, die kannst du ignorieren und die müssen dafür auch nicht laufen.

Die Daten werden so gespeichert, wie sie im Admin angegeben werden. Das habe ich mal gerade nachvollzogen. Also mit einer Rule im Datumsformat geht es schon mal auf jeden Fall, die kann man ja auch als Bedingung für einen Rabatt nutzen. Dort muss man die Zeit die man angibt nur minus einer Stunde rechnen, da halt UTC Zeit hinterlegt wird. 

Also hier wird die Rule bspw. um 6:00 gültig (UTC 5:00). Das ist ein Bug bei den Rules, eigentlich müsste der Admin das passend umkonvertieren, damit der User davon nichts mitbekommt. Dazu haben wir schon ein Ticket.

Die Validation direkt bei den Promotions scheint in der Tat nicht zu funktionieren. Also würde ich empfehlen vorerst die Rules zu nutzen, damit funktioniert das. Gerne auch einen Issuetracker-Eintrag zu dem Promotions-Modul aufmachen: issues.shopware.com

 

 

 

Hi Moritz.

Ich hatte das über den Rulebuilder so eingestellt und die Regel dann der Promotion Aktion zugewiesen. Datum und Uhrzeit wurden dann auch korrekt im Frontend erkannt und die Promotion Aktion angezeigt. Jetzt haben wir festgestellt, dass Bestellungen mit PayPal mit dem Fehler abbrechen: Es ist etwas schief gelaufen.

Ein Blick ist Lofile zeigt mir diese Fehlermeldung hier an:

[2020-11-26 05:58:12] request.ERROR: Uncaught PHP Exception Shopware\Core\Framework\DataAbstractionLayer\Write\WriteException: "There are 1 error(s) while writing data. 1. [/0/lineItems/1/0/lineItems/1/filter/orContainer/andContainer/orContainer/andContainer/fromDate] Dieser Wert entspricht keiner gültigen Datums- und Zeitangabe. 2. [/0/lineItems/1/0/lineItems/1/filter/orContainer/andContainer/orContainer/andContainer/toDate] Dieser Wert entspricht keiner gültigen Datums- und Zeitangabe." at /home/brainstation/sw/lianoa/vendor/shopware/core/Framework/DataAbstractionLayer/Write/WriteContext.php line 41 {"exception":"[object] (Shopware\\Core\\Framework\\DataAbstractionLayer\\Write\\WriteException(code: 0): There are 1 error(s) while writing data.\n\n1. [/0/lineItems/1/0/lineItems/1/filter/orContainer/andContainer/orContainer/andContainer/fromDate] Dieser Wert entspricht keiner gültigen Datums- und Zeitangabe.\n2. [/0/lineItems/1/0/lineItems/1/filter/orContainer/andContainer/orContainer/andContainer/toDate] Dieser Wert entspricht keiner gültigen Datums- und Zeitangabe. at /home/brainstation/sw/lianoa/vendor/shopware/core/Framework/DataAbstractionLayer/Write/WriteContext.php:41)"} []

Habe es mit Datetime und nur Date im Rulebuilder getestet. Die Rule ist zusätzlich zum Datum noch so eingestellt, dass bestimmte Kategorien ausgeschlossen werden.
Ne Idee woran das Problem liegen kann?