Jump to content

Aucun transporteur ne peut être appliqué à cette commande


Recommended Posts

Bonjour,

PS 1.7.6.1

Lorsque je créé une commande par le back office, dans l'encart livraison, si j'essaye de passer "Livraison gratuite" à "Oui", le message "Aucun transporteur ne peut être appliqué à cette commande" apparait (alors que j'avais bien le bon transporteur disponible auparavant) (cf image en PJ) et je ne peux plus enregistrer la commande...

Je n'avais pas ce soucis auparavant mais je n'arrive à voir d'où ça vient... Je ne sais pas si c'est depuis une migration récente du site ou un changement dans la configuration...

Quelqu'un aurait une idée ?

Normalement tout est bien configuré. Le client a une adresse valide pour ce transporteur. Le produit peut bien être livré par ce transporteur... et le transporteur est bien sélectionnable tant que je ne souhaite pas offrir les frais de port...

D'avance merci

screen.png

Link to comment
Share on other sites

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

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

  • 2 years 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...