Jump to content

Un bon de réduction pour tous mais invisible page Mes réductions ?!


Recommended Posts

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 by Raphael57 (see edit history)
Link to comment
Share on other sites

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

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 by Raphael57 (see edit history)
Link to comment
Share on other sites

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 by Raphael57 (see edit history)
  • Like 1
Link to comment
Share on other sites

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 by Raphael57 (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 1 month later...

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 by kouik-e (see edit history)
Link to comment
Share on other sites

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

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...