Jump to content

Comment insérer un seul code promo dans le panier ?


Recommended Posts

Bonjour

 

Après plusieurs tentatives pour modifier mes fichiers, je n'arrive toujours pas à faire ce que je souhaite.

 

Avec les bons cumulables et non cumulables, je m'y perd...Je trouve que c'est trop compliqué..

 

Je souhaiterai que le client ne puisse mettre qu'un seul bon dans le panier (aucun rapport avec  les bons cumulables ou pas car dans mon panier il y  a des cadeaux offerts automatiquement) donc une modif afin que le client ne puisse mettre qu'un seul code, une seule quantité.

 

Est ce que quelqu'un pourrait m'aider svp ? 

Je vous remercie :-))

Bonne journée!!

Link to comment
Share on other sites

Dans /controllers/front/ParentOrderController.php, à la fin de la méthode _assignSummaryInformations(), vous devriez avoir ceci (à partir de la ligne 350 si PS 1.6.1.4):

        $this->context->smarty->assign($summary);
        $this->context->smarty->assign(array(
            'token_cart' => Tools::getToken(false),
            'isLogged' => $this->isLogged,
            'isVirtualCart' => $this->context->cart->isVirtualCart(),
            'productNumber' => $this->context->cart->nbProducts(),
            'voucherAllowed' => CartRule::isFeatureActive(),
            'shippingCost' => $this->context->cart->getOrderTotal(true, Cart::ONLY_SHIPPING),
            'shippingCostTaxExc' => $this->context->cart->getOrderTotal(false, Cart::ONLY_SHIPPING),
            'customizedDatas' => $customizedDatas,
            'CUSTOMIZE_FILE' => Product::CUSTOMIZE_FILE,
            'CUSTOMIZE_TEXTFIELD' => Product::CUSTOMIZE_TEXTFIELD,
            'lastProductAdded' => $this->context->cart->getLastProduct(),
            'displayVouchers' => $available_cart_rules,
            'show_option_allow_separate_package' => $show_option_allow_separate_package,
            'smallSize' => Image::getSize(ImageType::getFormatedName('small')),
            'advanced_payment_api' => $advanced_payment_api


        ));
Remplacez par cela (attention, modifiez bien également l'assignation de voucherAllowed):
        $voucherAllowed = true;
        // Check if a rule has already be manually added
        foreach ($cart_cart_rules as $cart_cart_rule) {
            if ($cart_cart_rule['code']) {
                $voucherAllowed = false;
                break;
            }
        }

        $this->context->smarty->assign($summary);
        $this->context->smarty->assign(array(
            'token_cart' => Tools::getToken(false),
            'isLogged' => $this->isLogged,
            'isVirtualCart' => $this->context->cart->isVirtualCart(),
            'productNumber' => $this->context->cart->nbProducts(),
        // NEXT LINE CHANGED
            'voucherAllowed' => CartRule::isFeatureActive() && $voucherAllowed,
            'shippingCost' => $this->context->cart->getOrderTotal(true, Cart::ONLY_SHIPPING),
            'shippingCostTaxExc' => $this->context->cart->getOrderTotal(false, Cart::ONLY_SHIPPING),
            'customizedDatas' => $customizedDatas,
            'CUSTOMIZE_FILE' => Product::CUSTOMIZE_FILE,
            'CUSTOMIZE_TEXTFIELD' => Product::CUSTOMIZE_TEXTFIELD,
            'lastProductAdded' => $this->context->cart->getLastProduct(),
            'displayVouchers' => $available_cart_rules,
            'show_option_allow_separate_package' => $show_option_allow_separate_package,
            'smallSize' => Image::getSize(ImageType::getFormatedName('small')),
            'advanced_payment_api' => $advanced_payment_api,
        ));

Explication: si il y a déjà une règle promo avec code dans le panier, on n'affiche pas le bloc de saisie dans le résumé de la commande. J'espère que votre thème suivra.

 

 

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

 

Désolé pour ma réponse tardive et merci d'avoir prit de votre temps pour me répondre :-)

 

C'est déjà un bon début, merci beaucoup! Mais j'aimerai que le bloc de saisie dans le résumé de commande reste dans tous les cas, sauf qu'au lieu de disparaître un message d'erreur apparaisse lors de l'ajout d'un nouveau code

 

Si vous savez quel code insérer, ça serait super! Merci beaucoup et bonne soirée à vous!!

Edited by GAELLE (see edit history)
Link to comment
Share on other sites

1. Annulez les modifs précédentes.

 

2. Même fichier (/controllers/front/ParentOrderController.php) à partir de le ligne 99:

if (Tools::isSubmit('submitAddDiscount'))
{
    if (!($code = trim(Tools::getValue('discount_name'))))
        $this->errors[] = Tools::displayError('You must enter a voucher code.');
    elseif (!Validate::isCleanHtml($code))
        $this->errors[] = Tools::displayError('The voucher code is invalid.');
    else
    {
        if (($cartRule = new CartRule(CartRule::getIdByCode($code))) && Validate::isLoadedObject($cartRule))
        {

Remplacez par:

if (Tools::isSubmit('submitAddDiscount'))
{
    if (!($code = trim(Tools::getValue('discount_name'))))
        $this->errors[] = Tools::displayError('You must enter a voucher code.');
    elseif (!Validate::isCleanHtml($code))
        $this->errors[] = Tools::displayError('The voucher code is invalid.');
    else
    {
        // Check if manual voucher already used
        $ok = true;
        $cart_cart_rules = $this->context->cart->getCartRules();
        foreach ($cart_cart_rules as $cart_cart_rule) {
            if ($cart_cart_rule['code']) {
                $ok = false;
                break;
            }
        }
        if (!$ok) {
            $this->errors[] = Tools::displayError('Only one voucher per cart.');
        }
        elseif (($cartRule = new CartRule(CartRule::getIdByCode($code))) && Validate::isLoadedObject($cartRule))
        {

Puis, un petit coup de traduction des messages d'erreur

 

Link to comment
Share on other sites

  • 8 months later...

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