Jump to content

(résolu)Affichage du code promo ou non...


sebwvs

Recommended Posts

Bonjour à tous,

 

je viens de remarquer quelque chose qui me perturbe...

je créé un code promo, je le paramètre et je décide de ne pas le mettre en avant !  (code qui sera donné au coup par coup après une inscription sur instagram)  

le code ne s'affiche donc pas sous le champs "bon de réduction" dans le récapitulatif de commande ! jusque la normal c'est ce que je veux !

par contre le code s'affiche dans la section "mon compte" > "mes bons de réductions" !  perso ça je trouve pas ça normal "vue que on ne souhaite pas le "mettre en avant"

alors l'idée serait "je pense" aller modifier le fichier "discount.tpl" en y ajoutant une condition d'affichage à la ligne :

<td class="discount_code">{$discountDetail.code}</td> 

 et remplacer par 

<td class="discount_code">{if $xxxxx == 1}{$discountDetail.code}{/if}</td>

le problème, c'est que je ne trouve pas la variable utilisé lorsque l'on paramètre le bouton "mettre en avant" 

si je ne me trompe, ce bouton devrait enregistrer un 1 ou 0 dans la bdd et pourrait donc être récupéré et utilisé en condition d'affichage ? non ?

 

merci pour votre aide ou vos pistes

version presta: 1.6.0.11

Link to comment
Share on other sites

il y a 1 minute, Eolia a dit :

Sujet déjà répondu il y a plus d'un an et corrigé

merci Eolia,

ça fait plus de 2h que je cherche avant de poster!

tu n as plus le lien du post par hasard  ou une idée ou le retrouver ? francophone,  english, ..?

 

merci d'avance Eolia

Link to comment
Share on other sites

il y a 39 minutes, Eolia a dit :

Eolia,

Avant tout un grand merci pour ton aide rapide et pertinente ! 

le 3em liens proposé correspond +/- à ma recherche :

explication :

en appliquant le remplacement de code dans "DiscountController.php" comme tu le proposes,

cela va effectivement faire "disparaître"  tous les bons de réductions non nominatif de l'affichage dans mes bon de réductions

grâce à la condition d'affichage qui contrôle je suppose "si le client a ou non un bon de réduction nominatif" 

Mais je me demandai, si ce n'était pas "mieux" de laisser afficher tous les codes de réductions au quel un client a droit "pour autant que le bouton "mettre en avant" est été coché et de faire l’exception d'affichage lorsque ce n'est pas le cas !

je sais pas si je suis clair dans ma logique ?

et je reviens donc sur ma question > pour quoi n'utilise ton pas la même condition d'affichage que dans  le récapitulatif de commande

qui lui est géré  avec le bouton "mettre en avant" et sur oui ou non

j’espère que tu me comprend dans mon petit chinois....

 

Link to comment
Share on other sites

il y a 9 minutes, Eolia a dit :

c'est la propriété highlight, donc 


$discount['highlight']

devrait vous convenir

c'est totalement ça !

Bravo Eolia ! tu es super fortiche 

maintenant cela colle avec ma logique et j espère que se sera utile a d'autre !

je l'avais survolé en vérifiant le name du  input   dans le bo mais pas osé l'essayé !

 

donc en gros celui qui cherche la même solution que moi voici le code à remplacer dans le fichier "DiscountController.php"

class DiscountControllerCore extends FrontController
{
    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);
        $nb_cart_rules = count($cart_rules);

        foreach ($cart_rules as $key => &$discount ) {
        
            if ($discount['quantity_for_user'] == 0 || $discount['gift_product'] != 0 || !$discount['highlight']) {
                unset($cart_rules[$key]);
            }
            
            $discount['value'] = Tools::convertPriceFull(
                                            $discount['value'],
                                            new Currency((int)$discount['reduction_currency']),
                                            new Currency((int)$this->context->cart->id_currency)
                                        );
        }

        $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');
    }
}

 

encore un énorme merci à Eolia

Link to comment
Share on other sites

  • sebwvs changed the title to (résolu)Affichage du code promo ou non...
  • 2 months later...

Merci pour ces indications.

 

SuR Prestashop. 1.6.1, je n'ai pas de fichier discountcontroller.php mais uniquement Discount.php (dans /www/classes/Discount.php) avec le code ci-dessous. Est-ce bien le code à remplacer ?

Merci d'avance, 

<?php
/*
* 2007-2015 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-2015 PrestaShop SA
*  @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/

/**
 * @deprecated 1.5.0.1
 */
class DiscountCore extends CartRule
{
    const PERCENT = 1;
    const AMOUNT = 2;
    const FREE_SHIPPING = 3;

    public function __get($key)
    {
        Tools::displayAsDeprecated();

        if ($key == 'id_group') {
            return 0;
        }
        if ($key == 'id_discount_type') {
            if ($this->free_shipping) {
                return Discount::FREE_SHIPPING;
            }
            if ($this->reduction_percent > 0) {
                return Discount::PERCENT;
            }
            if ($this->reduction_amount > 0) {
                return Discount::AMOUNT;
            }
        }
        if ($key == 'name') {
            return $this->code;
        }
        if ($key == 'value') {
            if ($this->reduction_percent > 0) {
                return $this->reduction_percent;
            }
            if ($this->reduction_amount > 0) {
                return $this->reduction_amount;
            }
        }
        if ($key == 'cumulable') {
            return $this->cart_rule_restriction;
        }
        if ($key == 'cumulable_reduction') {
            return false;
        }
        if ($key == 'minimal') {
            return $this->minimum_amount;
        }
        if ($key == 'include_tax') {
            return $this->reduction_tax;
        }
        if ($key == 'behavior_not_exhausted') {
            return $this->partial_use;
        }
        if ($key == 'cart_display') {
            return true;
        }

        return $this->{$key};
    }

    public function __set($key, $value)
    {
        Tools::displayAsDeprecated();

        if ($key == 'id_discount_type') {
            if ($value == Discount::FREE_SHIPPING) {
                $this->free_shipping = true;
                $this->reduction_percent = false;
                $this->reduction_amount = false;
            }
            if ($value == Discount::PERCENT) {
                $this->free_shipping = false;
                $this->reduction_percent = true;
                $this->reduction_amount = false;
            }
            if ($value == Discount::AMOUNT) {
                $this->free_shipping = false;
                $this->reduction_percent = false;
                $this->reduction_amount = true;
            }
        }

        if ($key == 'code') {
            $this->name[Configuration::get('PS_LANG_DEFAULT')] = $value;
        }

        if ($key == 'value') {
            if ($this->reduction_percent) {
                $this->reduction_percent = $value;
            }
            if ($this->reduction_amount) {
                $this->reduction_amount = $value;
            }
        }
        if ($key == 'cumulable') {
            $this->cart_rule_restriction = 1;
        }
        if ($key == 'minimal') {
            $this->minimum_amount = $value;
        }
        if ($key == 'include_tax') {
            $this->reduction_tax = $value;
        }
        if ($key == 'behavior_not_exhausted') {
            $this->partial_use = $value;
        }

        $this->{$key} = $value;
    }

    public function __call($method, $args)
    {
        Tools::displayAsDeprecated();
        $obj = $this->parent;
        if (in_array($method, array('add', 'update', 'getIdByName', 'getCustomerDiscounts', 'getValue', 'discountExists', 'createOrderDiscount', 'getVouchersToCartDisplay', 'display'))) {
            $obj = $this;
        }
        return call_user_func_array(array($obj, $method), $args);
    }

    /**
     * @deprecated 1.5.0.1
     */
    public function add($autodate = true, $nullValues = false, $categories = null)
    {
        $r = parent::add($autodate, $nullValues);
        // Todo : manage categories
        return $r;
    }

    /**
     * @deprecated 1.5.0.1
     */
    public function update($autodate = true, $nullValues = false, $categories = null)
    {
        $r = parent::update($autodate, $nullValues);
        // Todo : manage categories
        return $r;
    }

    /**
     * @deprecated 1.5.0.1
     */
    public static function getIdByName($code)
    {
        return parent::getIdByCode($code);
    }

    /**
     * @deprecated 1.5.0.1
     */
    public static function getCustomerDiscounts($id_lang, $id_customer, $active = false, $includeGenericOnes = true, $hasStock = false, Cart $cart = null)
    {
        return parent::getCustomerCartRules($id_lang, $id_customer, $active, $includeGenericOnes, $hasStock, $cart);
    }

    /**
     * @deprecated 1.5.0.1
     */
    public static function getVouchersToCartDisplay($id_lang, $id_customer)
    {
        return CartRule::getCustomerCartRules($id_lang, $id_customer);
    }

    /**
     * @deprecated 1.5.0.1
     */
    public function getValue($nb_discounts = 0, $order_total_products = 0, $shipping_fees = 0, $id_cart = false, $useTax = true, Currency $currency = null, Shop $shop = null)
    {
        $context = Context::getContext();
        if ((int)$id_cart) {
            $context->cart = new Cart($id_cart);
        }
        if (Validate::isLoadedObject($currency)) {
            $context->currency = $currency;
        }
        if (Validate::isLoadedObject($shop)) {
            $context->shop = $shop;
        }
        return parent::getContextualValue($useTax, $context);
    }

    /**
     * @deprecated 1.5.0.1
     */
    public static function discountExists($discountName, $id_discount = 0)
    {
        return parent::cartRuleExists($discountName);
    }

    /**
     * @deprecated 1.5.0.1
     * @param Order $order
     * @return Discount
     */
    public static function createOrderDiscount($order, $productList, $qtyList, $name, $shipping_cost = false, $id_category = 0, $subcategory = 0)
    {
        $products = $order->getProducts(false, $productList, $qtyList);

        // Totals are stored in the order currency (or at least should be)
        $total = $order->getTotalProductsWithTaxes($products);
        $discounts = $order->getDiscounts(true);
        $total_tmp = $total;
        foreach ($discounts as $discount) {
            if ($discount['id_discount_type'] == Discount::PERCENT) {
                $total -= $total_tmp * ($discount['value'] / 100);
            } elseif ($discount['id_discount_type'] == Discount::AMOUNT) {
                $total -= ($discount['value'] * ($total_tmp / $order->total_products_wt));
            }
        }
        if ($shipping_cost) {
            $total += $order->total_shipping;
        }

        // create discount
        $voucher = new Discount();
        $voucher->id_discount_type = Discount::AMOUNT;
        foreach (Language::getIDs((bool)$order) as $id_lang) {
            $voucher->description[$id_lang] = strval($name).(int)($order->id);
        }
        $voucher->value = (float)($total);
        $voucher->name = 'V0C'.(int)($order->id_customer).'O'.(int)($order->id);
        $voucher->id_customer = (int)($order->id_customer);
        $voucher->id_currency = (int)($order->id_currency);
        $voucher->quantity = 1;
        $voucher->quantity_per_user = 1;
        $voucher->cumulable = 1;
        $voucher->cumulable_reduction = 1;
        $voucher->minimal = (float)($voucher->value);
        $voucher->active = 1;
        $voucher->cart_display = 1;

        $now = time();
        $voucher->date_from = date('Y-m-d H:i:s', $now);
        $voucher->date_to = date('Y-m-d H:i:s', $now + (3600 * 24 * 365.25)); /* 1 year */
        if (!$voucher->validateFieldsLang(false) || !$voucher->add()) {
            return false;
        }
        // set correct name
        $voucher->name = 'V'.(int)($voucher->id).'C'.(int)($order->id_customer).'O'.$order->id;
        if (!$voucher->update()) {
            return false;
        }

        return $voucher;
    }

    /**
     * @deprecated 1.5.0.1
     */
    public static function display($value, $type, $currency = null)
    {
        if ((float)$value && (int)$type) {
            if ($type == 1) {
                return $value.chr(37);
            } // ASCII #37 --> % (percent)
            elseif ($type == 2) {
                return Tools::displayPrice($value, $currency);
            }
        }
        return ''; // return a string because it's a display method
    }
}

 

Link to comment
Share on other sites

  • 3 years later...

Bonjour,
Ayant la version 1.7.5.2 de Prestashop, j'ai le même besoin de masquer les codes promos avec le paramètre ''mettre en avant'' = NON.

Le code contenu dans le fichier .../controllers /front/DiscountController.php est très différent du fichier en v1.6.

Auriez vous svp la solution ?

 

 

 

Link to comment
Share on other sites

Bonjour,

J'ai finalement trouvé une solution à mon problème d'affichage des codes promos sur le compte client. -> Je partage.

Je ne sais pas si cela est la meilleure solution (ex : risque de pb lors des montées de versions), mais cette solution est très simple à faire.
La solution consiste à modifier le fichier suivant ... /themes /classic /templates /customer / discount.tpl

Dans les 2 boucles (foreach) permettant le construire la liste des codes promos, il faut encadrer le bloc d'instruction avec une condition (if). Cette condition est que l'option ''Mettre en avant'' (highlight) de la réduction soit activée (valeur 1).

2 fois 2 lignes (cf ci-dessous en gras) de code suffisent pour ne plus voir apparaitre la réduction qui ne doit pas être mise en avant dans la rubrique ''Bons de réduction'' du compte client.
Il est important de faire l'ajout dans les 2 boucles (foreach) car l'une est utilisée pour l'affichage desktop, et l'autre pour l'affichage smartphone.

Quote

{foreach from=$cart_rules item=cart_rule}
  {if $cart_rule.highlight == 1}
    ....
  {/if}
{/foreach}

 

 

18 hours ago, Nordine B said:

Bonjour,
Ayant la version 1.7.5.2 de Prestashop, j'ai le même besoin de masquer les codes promos avec le paramètre ''mettre en avant'' = NON.

Le code contenu dans le fichier .../controllers /front/DiscountController.php est très différent du fichier en v1.6.

Auriez vous svp la solution ?

 

 

 

 

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