Olivier CLEMENCE Posted August 23, 2016 Share Posted August 23, 2016 Bonjour à tous. Voici la fonction getQuantityDiscounts de la classe specificPrice (en 1.6.1.6) public static function getQuantityDiscounts($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_product_attribute = null, $all_combinations = false, $id_customer = 0) { if (!SpecificPrice::isFeatureActive()) { return array(); } $query_extra = self::computeExtraConditions($id_product, ((!$all_combinations)?$id_product_attribute:null), $id_customer, null); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT *, '.SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer).' FROM `'._DB_PREFIX_.'specific_price` WHERE `id_shop` '.self::formatIntInQuery(0, $id_shop).' AND `id_currency` '.self::formatIntInQuery(0, $id_currency).' AND `id_country` '.self::formatIntInQuery(0, $id_country).' AND `id_group` '.self::formatIntInQuery(0, $id_group).' '.$query_extra.' ORDER BY `from_quantity` ASC, `id_specific_price_rule` ASC, `score` DESC, `to` DESC, `from` DESC ', false, false); $targeted_prices = array(); $last_quantity = array(); while ($specific_price = Db::getInstance()->nextRow($result)) { if (!isset($last_quantity[(int)$specific_price['id_product_attribute']])) { $last_quantity[(int)$specific_price['id_product_attribute']] = $specific_price['from_quantity']; } elseif ($last_quantity[(int)$specific_price['id_product_attribute']] == $specific_price['from_quantity']) { continue; } $last_quantity[(int)$specific_price['id_product_attribute']] = $specific_price['from_quantity']; if ($specific_price['from_quantity'] > 1) { $targeted_prices[] = $specific_price; } } return $targeted_prices; } Ce qui me pose problème c'est le fait que la fonction ne rajoute pas dans la condition "where" l'id du panier (id_cart). Du coup si je créé un prix spécific associé à un panier précis (ce que fait mon module de devis). L'utilisateur qui ira sur sa fiche produit verra le message comme quoi il peut bénéficier d'une réduction alors qu'en fait lorsqu'il va cliquer sur "ajouter au panier" il n'aura pas la réduction vu qu'un nouveau panier sera créé. Pour moi cette fonction ne devrait aller chercher que les prix spécific associé à aucun panier (0). Donc en rajoutant la condition where id_cart = 0. Ce qui donnerait pour la requête SQL: $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT *, '.SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer).' FROM `'._DB_PREFIX_.'specific_price` WHERE `id_cart` = 0 AND `id_shop` '.self::formatIntInQuery(0, $id_shop).' AND `id_currency` '.self::formatIntInQuery(0, $id_currency).' AND `id_country` '.self::formatIntInQuery(0, $id_country).' AND `id_group` '.self::formatIntInQuery(0, $id_group).' '.$query_extra.' ORDER BY `from_quantity` ASC, `id_specific_price_rule` ASC, `score` DESC, `to` DESC, `from` DESC ', false, false); Vous en pensez quoi ? Link to comment Share on other sites More sharing options...
Olivier CLEMENCE Posted August 23, 2016 Author Share Posted August 23, 2016 Oui éventuellement mais là on est d'accord que dans l'état la fonction va chercher un prix spécifique quelque soit le panier auquel il est lié ce qui n'est pas logique, sinon pourquoi on aurait la possibilité de lier un prix spécifique à un panier si c'est pour ne pas l'utiliser dans la clause where ensuite ? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now