Aller au contenu

Calcul prix de livraison en fonction du poids


enligne

Sujets conseillés

Bonjour,

J'ai besoin d'aide pour finir l'ajout d'une nouvelle fonction à mon panier.

Dans mon panier, j'ai ajouté le calcul du poids des articles, maintenant je voudrais pouvoir récupéré le coût de la livraison en fonction d'un tableau de prix.

Ex panier :

Article_1 : 1300 grammes

Article_2 : 6700 grammes

Article_3 : 450 grammes

Total poids panier : 8,450 kg

Maintenant que je connais le poids du panier, j'aimerais récupérer le tarif le plus adapté parmi les forfaits du tableau suivant :

forfait 1 de 0 à 3 kg = 8.30

forfait 2 de 3 à 5 kg = 10.10

forfait 3 de 5 à 7 kg = 11.90

forfait 4 de 7 à 10 kg = 14.60

forfait 5 de 10 à 15 kg = 16.60

forfait 6 de 15 à 30 kg = 22.60

A partir de là, je ne sais pas comment faire pour créer ma fonction de calcul.

Si quelqu'un peu m'aider ?

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

A première vu, tu garderais pas ton poids dans une variable que tu compares ensuite avec une suite de elseif?

Genre tu testes si le poids est entre ceci && ceci? (0 et 3 inclus) puis tester si c'est entre 3 exclus et 5 inclus etc.

Tout ca en passant au elseif suivant et ainsi de suite...

Des que tu tombes dans le elseif correspondant au bon poids, tu appliques le tarif adéquat...

Je ne sais plus si en PHP on a l'instruction case mais c'est parfois plus propre je trouve d'utiliser un case...

Enfin pour la logique, moi je procèderais ainsi :)

Pour le code PHP, je n'en fait pas assez régulièrement pour taper un truc sans erreurs de syntaxes :-/

Lien vers le commentaire
Partager sur d’autres sites

Je suis sur la même problématique en ce moment.

Attention, ce n'est pas si évident que ça :

- déjà, je ne pense pas que tu n'aura qu'une seule grille de tarif : pour la france, tu peux avoir standard (colissimo ou autre transporteur), express (chronopost ou autre transporteur express), lettre MAX pour les petits colis, UPS, etc...

- Ensuite, évidemment, il n'y a pas que la France. J'imagine que tu livre aussi dans plusieurs pays européen ou vers les DOM/TOMS et chaque zone aura ses propres grilles de tarifs (au moins standard ou express).

Bref, ça fait peut-être beaucoup de grilles pour tout charger en mémoire et pour comparer chaque valeur.

Donc je pense que le plus simple est de sélectionner les tarifs via une requête SQL toute simple: SELECT tarifID FROM tarif WHERE poidsInf> $lepoidsdelacommande AND poidsSup<= $lepoidsdelacommande

Les problèmes qui peuvent se poser :

- si le poids total de la commande dépasse le poids total des grilles de tarifs : soit c'est dû à la somme de tous les articles donc il faut redispatcher les articles dans plusieurs grilles et faire la somme des tarifs. Soit c'est 1 article qui est plus lourd que le poids maximum de la grille, dans ce cas là tu ne peux pas livrer

- pour les lettres MAX par exemple ou pour certains services d'UPS, la possibilité de l'expédition dépend aussi de la volumétrie. Il peut pourtant être très intéressant de proposer ces services là (MAX propose un prix intéressant sur les petits articles qui peuvent entrer dans une enveloppe; UPS est un gage de confiance mais n'accepte pas tous les volumes non plus car les articles passent sur des chaines automatisées).

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Je calcul les frais via un tableau de tarif en fonction du poids volumétrique si le poids réel du colis n'est pas supérieur et un tableau qui regroupe les zones géographiques.

Pour ce faire, toutes mes fiches produits ont un champs volumétrie et un champs poids, ensuite en fonction du lieu de livraison je calcul les frais via une requête SQL ( +1 BLMAN ) qui va me trouver le bon tarif et en cas d'une commande avec plusieurs produits je boucle ce calcul.

Il faut donc :

- un tableau qui liste les zones géographiques

- des tableaux qui listent les coûts de livraison en fonction du poids ou poids volume, un tableau pour chaque offre de transport

- une requête SQL :

 "SELECT * FROM les tableaus where la zone = 'zone de livraison' and poids.prix >= 'poids volume ou poids' order by poids asc LIMIT 1"

Un peu de java et un peu de code pour faire joli et le tour et joué.

Modifié par ckarone
Lien vers le commentaire
Partager sur d’autres sites

Merci pour vos réponses.

Au départ je me demander juste quel méthode adopté pour récupéré le bon prix de livraison. Javais également pensé à la suite delseif mais pas à la requête SQL qui je pense à résultat égale permet déconomiser plus de ressource système.

Certaines de vos réponses mon donner à réfléchir, je vais essayer dajouter des options supplémentaires comme le choix de la zone géographique et les options de transport.

Je vais donc commencer par créer mes tableaux (trans_zone, trans_type, trans_tarif), mais aussi créer les pages nécessaires à l'administration de tout ceci et modifier mon panier pour proposer au client les différentes options de livraison en fonction du poids de son panier.

Lien vers le commentaire
Partager sur d’autres sites

et voir aussi si d'autres variables ne peuvent interférer, du genre produit fragile ou de grande dimension, etc...

Effectivement, il peut y avoir des cas où le produit est "hors norme" et a besoin d'un transporteur spécial pour la livraison. De ce fait, le seul moyen est de rajouter des grilles de tarifs supplémentaires correspondant à ces offres de transport et d'associer l'article à chaque grille manuellement.

De même, on a pas parler des calculs de coûts de l'assurance de transport. Sont-ils inclus dans le tarif de chaque grille, sont-ils automatiquement rajouté aux coûts de transport, laisse-t-on le choix à l'internaute de les choisir ou pas ? ...

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...