Hallo Zusammen und ein frohes Neues
ich möchte gerne eine Regel im Riskmanagement festlegen, die Rechnungskauf bei personalisierten Artikeln ausschliesst.
Einen personalisierten Artikel kann man durch folgendes Artikelattribut identifizieren:
scha1_requiredfieldlite1 = 1
Dieses Attribut wird von einem Plugin mit dem CRUD Service angelegt, so dass der Attributsname nicht der Form „attr#“ entspricht.
Nach dem Manual, sollte man eigentlich eine Regel in der form „scha1_requiredfieldlite1|1“ anlegen können, damit die Zahlungsart Rechnung
nicht eingeblendet wird wenn scha1_requiredfieldlite1 = 1 ist
https://docs.shopware.com/de/shopware-5-de/versand-und-zahlungsarten/riskmanagement
Aber das klappt nicht. Der Warenkorb wird bei dieser Variante nicht mehr eingeblendet.
Weiss jemand, wie ich Produkte nach Attributen von einer Zahlungsart ausschliessen kann, auch wenn das Attribut NICHT den Namen attr# hat?
Danke und viele Grüsse
Jens
P.S.: Ein Workaround könnte sein, einen Cronjob zu schreiben, der regelmässig für alle Produkte das Attribut „scha1_requiredfieldlite1“ in das Attribut „attr10“ kopiert. Dann könnte man nach attr10 filtern. Aber schön ist das nicht und in 1 Jahr weiss ich nicht mehr, warum ich diesen schrägen cronjob geschrieben habe.
Problem gelöst!
Und so geht es:
Einfach dieses Plugin installieren:
Custom Risk Rules
Dann in der Datei “\custom\plugins\SwagCustomRiskRule\Subscriber\CustomRule.php” die folgende Funktion ersetzen:
public function onMyCustomRule(Enlight_Event_EventArgs $args)
{
$rule = $args->get('rule');
$user = $args->get('user');
$basket = $args->get('basket');
$value = $args->get('value');
//copied and adapted from \engine\Shopware\Core\sAdmin.php function sRiskATTRIS
if ($basket['AmountNumeric'] > 0) {
$sql = "
SELECT s_articles_attributes.id
FROM s_order_basket, s_articles_attributes, s_articles_details
WHERE s_order_basket.sessionID = ?
AND s_order_basket.modus = 0
AND (
s_order_basket.ordernumber = s_articles_details.ordernumber
OR (s_order_basket.articleID = s_articles_details.articleID AND s_articles_details.kind = 1)
)
AND s_articles_details.id = s_articles_attributes.articledetailsID
AND s_articles_attributes.scha1_requiredfieldlite1 = 1
LIMIT 1
";
$checkArticle = Shopware()->Db()->fetchOne(
$sql,
array(Shopware()->Session()->offsetGet('sessionId'))
);
return (bool) $checkArticle;
} else {
return false;
}
}
Ich habe den Attributcheck jetzt hart in das Mysql Kommando eincodiert. Ich habe den Code aus der Funktion “sRiskATTRIS” aus der Datei
“\engine\Shopware\Core\sAdmin.php” verwendet. Man kann die Attributeingabe auch flexibel gestalten, wenn man die Value Verarbeitung aus dieser
Funktion verwendet (split).
Viel Spass,
Jens