Raphael57 Posted July 12, 2016 Share Posted July 12, 2016 (edited) Bonjour à tous, J'ai peu d'expérience en Prestashop mais beaucoup dans le web. Depuis que j'ai débuté Prestashop il y a quelque mois, je m'arrache régulièrement les cheveux face aux bugs, conflits entre modules, et limites techniques. Je m'attendais à beaucoup plus fiable au vue de tous les évènements et articles autour de ce CMS e-commerce. Si moi j'ai du mal, j'imagine la galère que peuvent vivre les personnes débutantes dans le web... Je n'ouvre pas ce sujet pour me plaindre, mais pour vous poser une question simple : comment créer des bons de réduction ou bons d'achat aussi appelés "règles paniers" qui peuvent être utilisables par tous (déjà client ou non) sans pour autant que la liste complète soit visible dans l'ensemble des pages "Mes réductions" des clients ? Pour la petite histoire, j'avais offert des bons d'achat pour des jeux-concours. En toute logique, j'envoie les codes par e-mail aux gagnants et ils s'inscrivent ensuite pour commander en profitant de leur avantage. Quand j'ai vu que TOUS les codes d'achat étaient visibles par TOUS nos clients sans exception, je suis tombé des nues (même si j'en ai désormais l'habitude...) ! Rassurez moi, vous aussi, vous trouvez ça dingue ? J'ai cherché pendant des heures...Il n'y a vraiment aucune option pour stopper l'affichage de cette liste sauf quand les codes sont spécifiquement attribués à un client ? Dois-je en arriver à bloquer la page "Mes réductions" ? Merci par avance. Raphael Edited July 12, 2016 by Raphael57 (see edit history) Link to comment Share on other sites More sharing options...
doekia Posted July 12, 2016 Share Posted July 12, 2016 si tu envois tes codes gagnants aux mails des gagnants alors attribues cette email à l'utilisateur réservé de cette réduction ... tout autre méthode (même hors bug prestashop) c'est la porte ouverte a toute sorte d'abus ou usage non conforme des bons. Link to comment Share on other sites More sharing options...
Raphael57 Posted July 13, 2016 Author Share Posted July 13, 2016 (edited) Bonjour, Merci pour ta réponse. L'objectif est de leur offrir un bon de réduction pour leur donner envie de devenir clients...ils n'ont pas encore de compte utilisateur. De plus, les codes sont impossibles à deviner, et à usage unique. Donc les abus potentiels sont rares. Pour moi, c'est une incohérence par rapport à une utilité normal que l'on peut faire de ces codes. D'autant plus que j'ai acheté un module pour générer des codes d'achat en masse. A quoi sert de générer 200 codes pour ensuite les attribuer un par un... ? Ce n'est même pas possible avec le module en question acheté sur l'espace Add-ons. Je vais me débrouiller pour bloquer/modifier moi-même cette page pour qu'elle arrête d'afficher tous les codes générés. Edited July 13, 2016 by Raphael57 (see edit history) Link to comment Share on other sites More sharing options...
Raphael57 Posted July 13, 2016 Author Share Posted July 13, 2016 (edited) Bonjour, Pour ceux qui cherchent la solution, nous l'avons : C'est la variable $includeGeneric à "true" qui provoque cette affichage des codes à tous. La variable est en paramètre de la fonction getCustomerCartRules ligne 263 sur la page classes\CartRule.php Vous pouvez la forcer à "false", mais le plus prudent doit être de faire cela sur l'attribut de la fonction dans la page \controllers\front\Discount\DiscountController.php ligne 42 : $cart_rules = CartRule::getCustomerCartRules($this->context->language->id, $this->context->customer->id, true, false, true); au lieu de $cart_rules = CartRule::getCustomerCartRules($this->context->language->id, $this->context->customer->id, true, true, true); Attention, c'est dû à un changement récent de Prestashop et beaucoup d'entre vous doivent être concernés ! : https://github.com/PrestaShop/PrestaShop/commit/2c0cb67cd62ea86f27e8e02dec271afffa955adc?diff=split Bon courage à tous ! Edited July 13, 2016 by Raphael57 (see edit history) 1 Link to comment Share on other sites More sharing options...
Raphael57 Posted July 13, 2016 Author Share Posted July 13, 2016 (edited) Une solution plus fiable pour éviter de se faire écraser sa "solution", l'override : Dans override/controllers/front/DiscountController.php Coller : <?php /* * 2007-2016 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/osl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2016 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ class DiscountController extends DiscountControllerCore { public $auth = true; public $php_self = 'discount'; public $authRedirection = 'discount'; public $ssl = true; /** * Assign template vars related to page content * @see FrontController::initContent() */ public function initContent() { parent::initContent(); $cart_rules = CartRule::getCustomerCartRules($this->context->language->id, $this->context->customer->id, true, false, true); $nb_cart_rules = count($cart_rules); foreach ($cart_rules as $key => &$discount ) { if ($discount['quantity_for_user'] === 0) { unset($cart_rules[$key]); } $discount['value'] = Tools::convertPriceFull( $discount['value'], new Currency((int)$discount['reduction_currency']), new Currency((int)$this->context->cart->id_currency) ); if ($discount['gift_product'] !== 0) { $product = new Product((int) $discount['gift_product']); if (isset($product->name)) { $discount['gift_product_name'] = current($product->name); } } } $this->context->smarty->assign(array( 'nb_cart_rules' => (int)$nb_cart_rules, 'cart_rules' => $cart_rules, 'discount' => $cart_rules, 'nbDiscounts' => (int)$nb_cart_rules) ); $this->setTemplate(_PS_THEME_DIR_.'discount.tpl'); } } Puis supprimer la page php class_index.php dans le dossier cache/ pour que les changements soient pris en compte. En espérant être utile, je vous souhaite une bonne continuation ! Edited July 13, 2016 by Raphael57 (see edit history) 1 Link to comment Share on other sites More sharing options...
kouik-e Posted August 24, 2016 Share Posted August 24, 2016 (edited) Bonjour, Je pense aussi qu'on doit pouvoir créer des bons de réductions pour tout le monde mais qu'ils ne doivent pas nécessairement s'afficher dans le compte de chaque client. Par exemple j'ai le problème pour les codes de réduction que je fournis à des sites affiliés, je me suis aussi aperçu qu'ils étaient visibles par tous le clients, anciens ou nouveaux. je viens d’appliquer ta modif en override sur un prestashop 1.6.1.6, ça fonctionne parfaitement, merci à toi. Edited August 24, 2016 by kouik-e (see edit history) Link to comment Share on other sites More sharing options...
prestaChica Posted August 25, 2016 Share Posted August 25, 2016 Merci beaucoup pour votre aide, ça marche très bien. Nous somme tombé des nues ce matin aussi à cause de ce même bug. Je trouve que ce n'est pas logique le fait que tout le monde vois les bon de réductions faudrait signalé cela au développeurs. merci encore 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