From b67ffb1a50138336f57fd5987df4feb29360bade Mon Sep 17 00:00:00 2001 From: Fabio Chelly Date: Mon, 15 Jul 2013 19:36:32 +0200 Subject: [PATCH] [-] MO loyalty : categories are now taken into account when creating discount vouchers #PNM-1492 #PNM-1191 #PNM-1223 --- modules/loyalty/controllers/front/default.php | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/modules/loyalty/controllers/front/default.php b/modules/loyalty/controllers/front/default.php index 9195706c4..64e152db0 100644 --- a/modules/loyalty/controllers/front/default.php +++ b/modules/loyalty/controllers/front/default.php @@ -106,10 +106,39 @@ class LoyaltyDefaultModuleFrontController extends ModuleFrontController $cart_rule->name[(int)$language['id_lang']] = $text ? strval($text) : strval($default_text); } - if (is_array($categories) && count($categories)) - $cart_rule->add(true, false, $categories); - else - $cart_rule->add(); + + $contains_categories = is_array($categories) && count($categories); + if ($contains_categories) + $cart_rule->product_restriction = 1; + $cart_rule->add(); + + //Restrict cartRules with categories + if ($contains_categories) + { + + //Creating rule group + $id_cart_rule = (int)$cart_rule->id; + $sql = "INSERT INTO "._DB_PREFIX_."cart_rule_product_rule_group (id_cart_rule, quantity) VALUES ('$id_cart_rule', 1)"; + Db::getInstance()->execute($sql); + $id_group = (int)Db::getInstance()->Insert_ID(); + + //Creating product rule + $sql = "INSERT INTO "._DB_PREFIX_."cart_rule_product_rule (id_product_rule_group, type) VALUES ('$id_group', 'categories')"; + Db::getInstance()->execute($sql); + $id_product_rule = (int)Db::getInstance()->Insert_ID(); + + //Creating restrictions + $values = array(); + foreach ($categories as $category) { + $category = (int)$category; + $values[] = "('$id_product_rule', '$category')"; + } + $values = implode(',', $values); + $sql = "INSERT INTO "._DB_PREFIX_."cart_rule_product_rule_value (id_product_rule, id_item) VALUES $values"; + Db::getInstance()->execute($sql); + } + + // Register order(s) which contributed to create this voucher if (!LoyaltyModule::registerDiscount($cart_rule))