Jump to content

Edit History

jerem_

jerem_

Bonjour,

Suite de mon problème remonté...
J'ai testé sur un autre site (en 1.7.5.2) et je n'ai pas rencontré le soucis...

En cherchant au niveau du code, j'ai fini par trouver l'appel ajax concerné dans le controleur AdminCartsController.php :

public function ajaxProcessupdateFreeShipping()
    {
        if ($this->access('edit')) {
            if (!$id_cart_rule = CartRule::getIdByCode(CartRule::BO_ORDER_CODE_PREFIX . (int) $this->context->cart->id)) {
                $cart_rule = new CartRule();
                $cart_rule->code = CartRule::BO_ORDER_CODE_PREFIX . (int) $this->context->cart->id;
                $cart_rule->name = array(Configuration::get('PS_LANG_DEFAULT') => $this->trans('Free Shipping', array(), 'Admin.Orderscustomers.Feature'));
                $cart_rule->id_customer = (int) $this->context->cart->id_customer;
                $cart_rule->free_shipping = true;
                $cart_rule->quantity = 1;
                $cart_rule->quantity_per_user = 1;
                $cart_rule->minimum_amount_currency = (int) $this->context->cart->id_currency;
                $cart_rule->reduction_currency = (int) $this->context->cart->id_currency;
                $cart_rule->date_from = date('Y-m-d H:i:s', time());
                $cart_rule->date_to = date('Y-m-d H:i:s', time() + 24 * 36000);
                $cart_rule->active = 1;
                $cart_rule->add();
            } else {
                $cart_rule = new CartRule((int) $id_cart_rule);
            }

            $this->context->cart->removeCartRule((int) $cart_rule->id);
            if (Tools::getValue('free_shipping')) {
                $this->context->cart->addCartRule((int) $cart_rule->id);
            }

            echo json_encode($this->ajaxReturnVars());
        }
    }

Je ne sais pas pourquoi... mais dans le json renvoyé par cet appel ajax, "delivery_option_list" (sensé renvoyer la liste des transporteurs disponibles) se retrouve vide...

J'ai tenté plusieurs choses et ai fini par testé d'afficher le contenu de $this->ajaxReturnVars() en début de fonction pour comparer avec ce qui était renvoyé en fin de fonction... Et là, surprise, les DEUX affichaient un "delivery_option_list" correctement rempli....

J'ai fini par laisser un simple appel à $this->ajaxReturnVars() en début de fonction... Il est possible que cela initialise certaines données utilisées ensuite par $cart_rule... qui, autrement, vidait mon fameux "delivery_option_list"...

Mon soucis semble résolu mais je n'ai malheureusement pas le temps d'investiguer d'avantage pour comprendre la source exacte du soucis...

Je laisse ici mon retour à bon entendeur...

jerem_

jerem_

Bonjour,

Suite de mon problème remonté...
J'ai testé sur un autre site (en 1.7.5.2) et je n'ai pas rencontré le soucis...

En cherchant au niveau du code, j'ai fini par trouver l'appel ajax concerné dans le controleur AdminCartsController.php :

public function ajaxProcessupdateFreeShipping()
    {
        if ($this->access('edit')) {
            if (!$id_cart_rule = CartRule::getIdByCode(CartRule::BO_ORDER_CODE_PREFIX . (int) $this->context->cart->id)) {
                $cart_rule = new CartRule();
                $cart_rule->code = CartRule::BO_ORDER_CODE_PREFIX . (int) $this->context->cart->id;
                $cart_rule->name = array(Configuration::get('PS_LANG_DEFAULT') => $this->trans('Free Shipping', array(), 'Admin.Orderscustomers.Feature'));
                $cart_rule->id_customer = (int) $this->context->cart->id_customer;
                $cart_rule->free_shipping = true;
                $cart_rule->quantity = 1;
                $cart_rule->quantity_per_user = 1;
                $cart_rule->minimum_amount_currency = (int) $this->context->cart->id_currency;
                $cart_rule->reduction_currency = (int) $this->context->cart->id_currency;
                $cart_rule->date_from = date('Y-m-d H:i:s', time());
                $cart_rule->date_to = date('Y-m-d H:i:s', time() + 24 * 36000);
                $cart_rule->active = 1;
                $cart_rule->add();
            } else {
                $cart_rule = new CartRule((int) $id_cart_rule);
            }

            $this->context->cart->removeCartRule((int) $cart_rule->id);
            if (Tools::getValue('free_shipping')) {
                $this->context->cart->addCartRule((int) $cart_rule->id);
            }

            echo json_encode($this->ajaxReturnVars());
        }
    }

Je ne sais pas pourquoi... mais dans le json renvoyé par cet appel ajax, "delivery_option_list" (sensé renvoyer la liste des transporteurs disponibles) se retrouve vide...

J'ai tenté plusieurs choses et ai fini par testé d'afficher le contenu de $this->ajaxReturnVars() en début de fonction pour comparer avec ce qui était renvoyé en fin de fonction... Et là, surprise, les DEUX affichaient un "delivery_option_list" correctement rempli....

J'ai fini par laissé un simple appel à $this->ajaxReturnVars() en début de fonction... Il est possible que cela initialise certaines données utilisées ensuite par $cart_rule... qui, autrement, vidait mon fameux "delivery_option_list"...

Mon soucis semble résolu mais je n'ai malheureusement pas le temps d'investiguer d'avantage pour comprendre la source exacte du soucis...

Je laisse ici mon retour à bon entendeur...

×
×
  • Create New...