spezifische Fehlermeldungen zu Gutscheincodes

7

Ist es möglich, den Grund dafür zu ermitteln, dass ein Gutscheincode ungültig ist? Wenn ich beispielsweise eine Warenkorbregel habe, die angibt, dass die Zwischensumme der Bestellung 100 US-Dollar oder mehr betragen muss und der Benutzer versucht, den Gutschein für eine Zwischensumme von nur 75 US-Dollar zu verwenden, kann ich eine Nachricht in Anlehnung an "Ihren Warenkorb" anzeigen muss 100 $ oder mehr sein "?

Laura
quelle
2
Nicht ohne Anpassung. Sie müssten Nachrichten schreiben, die mit all den verschiedenen Szenarien verknüpft sind, die die Promotion-Regeln ausführen könnten (keineswegs eine einfache Aufgabe). Das ist höchstwahrscheinlich der Grund, warum die Fehlermeldung ziemlich einfach ist.
Axel
@ Axel, bitte füge dies als Antwort hinzu.
Fabian Blechschmidt

Antworten:

2

Hier ist ein Ansatz, den ich gewählt habe, um eine bessere Fehlermeldung für zwei bestimmte Filter einzufügen: das von Datum und bis Datum.

Diese Filter sind ziemlich einfach im Vergleich zu den tatsächlichen Regelbedingungen wie Zwischensummen, wie Sie in Ihrer Frage erwähnt haben, aber ich denke, sie bieten immer noch eine signifikante Verbesserung der Benutzerfreundlichkeit mit einer ziemlich einfachen Implementierung.

Es gibt zwei ziemlich saubere Umschreibungen, die durchgeführt werden können, um dies zu erreichen.


Mage_SalesRule_Model_Resource_Rule_Collection :: addWebsiteGroupDateFilter

Überladen Sie die Methode addWebsiteGroupDateFilter, um zu verhindern, dass Regeln, die nicht mit dem Datumsfilter übereinstimmen, vollständig von den verarbeiteten Regeln ausgeschlossen werden.

public function addWebsiteGroupDateFilter($websiteId, $customerGroupId, $now = null)
{
    parent::addWebsiteGroupDateFilter($websiteId, $customerGroupId, $now);

    $where = $this->_removeDateFilters();
    $this->getSelect()->setPart('where', $where);

    return $this;
}

protected function _removeDateFilters()
{
    $where = $this->getSelect()->getPart('where');

    foreach ($where as $index => $whereLine) {
        if (strpos($whereLine, "from_date is null or from_date <") !== false) {
            unset($where[$index]);
        } elseif (strpos($whereLine, "to_date is null or to_date >") !== false) {
            unset($where[$index]);
        }
    }

    $where = array_values($where);

    return $where;
}

Clean_Checkout_Model_SalesRule_Validator :: _ canProcessRule

Überladen Sie die Methode _canProcessRule, um die Daten zu überprüfen und der Sitzung eine bestimmte Fehlermeldung hinzuzufügen.

protected function _canProcessRule($rule, $address)
{
    if ($this->_isRuleExpired($rule, $address)) {
        return false;
    }

    return parent::_canProcessRule($rule, $address);
}

protected function _isRuleExpired($rule, $address)
{
    if ($rule->getFromDate() && date('Y-m-d', time()) < $rule->getFromDate()) {
        $message = "This coupon won't be active until {$rule->getFromDate()}";
        Mage::getSingleton('checkout/session')->addUniqueMessages(new Mage_Core_Model_Message_Error($message));

        return true;
    }

    if ($rule->getToDate() && date('Y-m-d', time()) > $rule->getToDate()) {
        $message = "This coupon expired on {$rule->getToDate()}";
        Mage::getSingleton('checkout/session')->addUniqueMessages(new Mage_Core_Model_Message_Error($message));

        return true;
    }
}
kalenjordan
quelle
das wird funktionieren! Das war das Hauptszenario, nach dem wir gesucht haben.
Laura
@Laura nice :) Ja, ich finde abgelaufene Gutscheincodes ein ziemlich wichtiger Anwendungsfall, der eine eigene Fehlermeldung benötigt. ps wie hast du meine antwort in die akzeptierte antwort geändert? Ich dachte, das wäre nicht möglich, nachdem eine Antwort bereits akzeptiert wurde.
Kalenjordan
Ich habe nur auf den Check-Button geklickt und er hat ihn umgeschaltet.
Laura
3

Nicht ohne Anpassung. Sie müssten Nachrichten schreiben, die mit all den verschiedenen Szenarien verknüpft sind, die die Promotion-Regeln ausführen könnten (keineswegs eine einfache Aufgabe). Das ist höchstwahrscheinlich der Grund, warum die Fehlermeldung ziemlich einfach ist.

Eine Vorschlagslösung für Magento-Entwickler. Sie können ein Textfeldbeschreibungsfeld in die Promotion-Einstellungen aufnehmen. Dies würde es dem Administrator ermöglichen, eine angepasste Nachricht einzuschließen, wenn die Werberegel fehlschlägt, anstatt eine grundlegende Nachricht "Gutscheincode ist ungültig" anzuzeigen. Dies wäre eine schnelle Lösung, anstatt programmgesteuert zu versuchen, eine bestimmte Fehlermeldung basierend auf einer Reihe von Regeln zuzuweisen.

Axel
quelle
Können Sie diese Antwort erklären, bei der wir "Textbereichsbeschreibung" in die Werbeeinstellungen aufnehmen müssen? Können Sie ein Beispiel posten?
Baby in Magento
1
Die Idee ist, eine Magento-Erweiterung zu schreiben, die der Seite mit den Einstellungen für Werberegeln ein Textfeld hinzufügt. In diesem Textbereich kann der Benutzer eine Nachricht einfügen, die dem Benutzer angezeigt wird, wenn die Werberegel fehlschlägt.
Axel
dann müssen wir das kaufen: magentocommerce.com/magento-connect/…
Baby in Magento