Bienvenue, Invité
Merci de vous identifier ou de vous inscrire.    Mot de passe perdu?

Utilisation des coupons et règles
(1 lecteur(s)) (1) Invité(s)
Aller en basPage: 1
SUJET:

Utilisation des coupons et règles

#71215
Yoann-D
Fresh Boarder
Messages: 12
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur

Utilisation des coupons et règles

Il y a 3 Années, 8 Mois
Karma: 0  
Bonjour,

C'est pas vraiment un bug mais quand vous avez une règle avec soit un coupon, soit une règle client et que la commande est annulée par le client, le nombre d'utilisation du coupon ou de la règle client n'est pas décrémentée. (Problème pour les coupons ou règles a usage unique)

Pour corriger cela :

On place un observer sur chaque annulation de commande :
Code :


<events>
            <sales_order_payment_cancel>
                <observers>
                  <nom_observer>
                    <type>singleton</type>
                    <class>Module_Model_Observer</class>
                    <method>cancelcoupon</method>
                  </nom_observer>
                </observers>
            </sales_order_payment_cancel>
</events>



-- Observer
Code :


public function cancelcoupon($observer){
        $event = $observer->getEvent();
        $order = $event->getPayment()->getOrder();
        if ($order->canCancel()) {
            if ($code = $order->getCouponCode()) {
                $coupon = Mage::getModel('salesrule/rule')->load($code, 'coupon_code');
                if ($coupon->getTimesUsed()>0){
                    $coupon->setTimesUsed($coupon->getTimesUsed()-1);
                    $coupon->save();
                }

                if($customerId = $order->getCustomerId()) {
                    if ($customerCoupon = Mage::getModel('salesrule/rule_customer')->loadByCustomerRule($customerId, $coupon->getId())) {
                        if ($customerCoupon->getTimesUsed()>0){
                            $customerCoupon->setTimesUsed($customerCoupon->getTimesUsed()-1);
                            $customerCoupon->save();
                        }
                    }
                }
            }
            if ($order->getAppliedRuleIds()) {
                // lookup rule ids
                $ruleIds = explode(',', $order->getAppliedRuleIds());
                $ruleIds = array_unique($ruleIds);

                $ruleCustomer = null;
                $customerId = $order->getCustomerId();

                // use each rule (and apply to customer, if applicable)
                foreach ($ruleIds as $ruleId) {
                    if (!$ruleId) {
                        continue;
                    }
                    $rule = Mage::getModel('salesrule/rule');
                    $rule->load($ruleId);
                    if ($rule->getId()) {
                        if ($rule->getTimesUsed()>0){
                            $rule->setTimesUsed($rule->getTimesUsed() - 1);
                            $rule->save();
                        }

                        if ($customerId) {
                            $ruleCustomer = Mage::getModel('salesrule/rule_customer');
                            $ruleCustomer->loadByCustomerRule($customerId, $ruleId);

                            if ($ruleCustomer->getId()) {
                                if ($ruleCustomer->getTimesUsed()>0){
                                    $ruleCustomer->setTimesUsed($ruleCustomer->getTimesUsed()-1);
                                }
                            }
                            $ruleCustomer->save();
                        }
                    }
                }
            }
        }
    }

 
L'administrateur a désactivé l'accès public en écriture.
Revenir en hautPage: 1
Modérateur: Gabriiiel, ILOA, zuiko