Jump to content

Probléme transport / poids


Recommended Posts

Bonsoir,

J'ai un soucis pour mettre en place l'expédition de ma boutique sur la version 1.2.5

J'ai crée un transporteur par tranche de poids

- La poste colissimo 0 à 0.499 kg
- La poste colissimo 0.5 à 0.999 kg
- La poste colissimo 1 à 1.999 kg

J'ai ensuite crée une zone qui ne contient que la France

J'ai ensuite crée une tranche de poids pour chacun des transporteurs indiqués ci-desus.

Pour finir, j'ai indiqué dans l'onglet transport le tarif pour chaque transporteur/zone/tranche.

Bien sûr, j'ai indiqué le poids de l'article dans le premier onglet de la fiche client et le kg est choisi comme unité.

Normalement les tarifs sont :

0 à 0.499 kg : 6.5 €
0.5 à 0.999 kg : 7.70 €
1 à 1.999 kg : 8.65 €
Jusque là, pas de soucis mais lorsque je simule un achat, cela se gatte.

Je selectionne 10 produits qui devraient représenter 1.5 kg, le panier m'indique 6.50 € au lieu de 7.70 € et lors de la validation du panier, tous les transporteurs sont proposés.

En fait, je crois que le poids reste toujours le même et ne varie pas selon le nombre d'article. Pourtant j'ai selectionné la facturation en fonction du poids ...

Est ce un bug de cette version ou c'est moi qui fait mal quelque chose.

Si une bonne ame charitable pouvait m'aider, cela sera sympa ... J'ai passé ma nuit à trouver une solution sur les forums mais je n'ai pas trouvé ...

Merci.

Link to comment
Share on other sites

Bonjour , moi aussi j'ai aussi a peut pres le meme probleme . j'ai créé une forchette de poids . Rien ne se produit je reste toujours a 7 €18 . meme pour 0,500
lorsque j'enregistre ,c'est réussi et ensuite lorsque jefais un essai ( plus rien , ça sait pas enregistré
merci de m'aider cordialement

Link to comment
Share on other sites

  • 2 weeks later...

Salut,
Dans un 1er temps tu vas créer tes transporteurs.

Tu clique sur nouveaux et tu y vas, t’inquiète pas sa mord pas. images 1
Ensuite tu vas a tranche de poids ou de prix et tu remplis les champs. image 2
Puis tu re-clique sur l’onglet Transport, et tu y mets tes tarifs. images 3

Voilà

16466_RbsS3ziFNEXADrQIXB5P_t

16467_WQGUUlb8tDACfDDFgrVD_t

16468_UMv1nvFm1SeeFwaOBcfR_t

Link to comment
Share on other sites

  • 2 weeks later...

J'ai remarqué un petit problème quant au listing des transporteurs lors d'un passage de commande. Dans l'administration, j'ai choisi de désactiver mon transporteur si aucune fourchette n'est existante pour ce dernier. Mais l'explication est trop simple, en réalité, le transporteur n'est désactivé que si le poids de la commande est supérieur au maximum prévu par les fourchettes.

Donc, si on a un poids de 5 kg alors que la fourchette la plus basse de notre transporteur est de 30 à 50 kg, ce dernier sera affiché avec le tarif de cette fourchette la plus basse.

Après avoir vérifié les sources, j'ai trouvé que mon problème venait de la fonction Carrier::checkDeliveryPriceByWeight($id_carrier, $totalWeight, $id_zone) (dossier /classes)

Voilà l'originale suivit de la version que j'ai mise à jour:

    static public function checkDeliveryPriceByWeight($id_carrier, $totalWeight, $id_zone)
   {
       $result = Db::getInstance()->getRow('
       SELECT d.`price`
       FROM `'._DB_PREFIX_.'delivery` d
       LEFT JOIN `'._DB_PREFIX_.'range_weight` w ON d.`id_range_weight` = w.`id_range_weight`
       WHERE d.`id_zone` = '.intval($id_zone).'
       AND '.floatval($totalWeight).' <= w.`delimiter2`
       AND d.`id_carrier` = '.intval($id_carrier).'
       ORDER BY w.`delimiter1` ASC');
       if (!isset($result['price']))
           return false;
       return true;
   }


    static public function checkDeliveryPriceByWeight($id_carrier, $totalWeight, $id_zone)
   {
       $result = Db::getInstance()->getRow('
       SELECT d.`price`
       FROM `'._DB_PREFIX_.'delivery` d
       LEFT JOIN `'._DB_PREFIX_.'range_weight` w ON d.`id_range_weight` = w.`id_range_weight`
       WHERE d.`id_zone` = '.intval($id_zone).'
       AND '.floatval($totalWeight).' < w.`delimiter2`
       AND '.floatval($totalWeight).' >= w.`delimiter1`
       AND d.`id_carrier` = '.intval($id_carrier).'
       ORDER BY w.`delimiter1` ASC');
       if (!isset($result['price']))
           return false;
       return true;
   }



Maintenant un transporteur n'est affiché que si les conditions

Link to comment
Share on other sites

Bonjour,

Dans mon cas, j'ai un premier transporteur qui s'occupe des tranches allant de 0 à 30kg puis un autre s'occupant des tranches de 30 à 90kg.
Sauf erreur de ma part, une commande de 0kg est donc traitée par mon premier transporteur (0 >= w.'delimiter1' et 0 < w.'delimiter2' sont bien vérifiés)

Pour les poids différents, l'erreur affichée est la même que si l'on n'a aucun transporteur actif. Cela permet notamment d'imposer un poids minimum d'achat.

Dans mon cas, je redirige vers une demande de devis si aucun transporteur ne correspond à la tranche souhaitée. On peut facilement imaginer d'autres solutions adaptées aux besoins de chacun.

Link to comment
Share on other sites

Tout à fait, c'est bien pour cela que j'ai modifié la condition pour la borne supérieure (< au lieu de <=) et ajouté la borne inférieure (>= et non >).

La version originale utilisait la borne inférieure uniquement dans le but d'ordonner les transporteurs. Elle était inclue de force car tout poids inférieur à la borne supérieure de la tranche présente et supérieur à la borne supérieure de la tranche précédente lui étaient assignés. Cette borne inférieure n'en était pas une à proprement dit, donc.

Vous faites néanmoins bien de préciser ce détail qui peut ne pas paraître évident.

EDIT:
Pour illustrer le long paragraphe et simplifier sa compréhension, voici un exemple.

Admettons les tranches suivantes:
0 - 10
15 - 25
30 - 40

Avec le code original, une commande de 13kg aurait eu des frais de transports au tarif de la tranche [15 - 25]

Avec la modification, cette commande n'a pas de transporteur assigné.

Link to comment
Share on other sites

Mille merci !! c'est le problème sur lequel j'étais.

d'où est tiré cette fonction ? de quel fichier ? que je puisse m'empresser de tester tout ça !

vraiment bravo pour le partage de ton code.

j'ai hâte d'y comprendre quelque chose pour m'y mettre à mon tour

Link to comment
Share on other sites

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