Jump to content

bug sur getQuantityDiscounts sur la classe specific price


Olivier CLEMENCE

Recommended Posts

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...