osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> [Résolu]Calcul des frais de port en fonction du volume ou du poids, et en fonction du pays de livraison
mickael34
posté 22 Jul 2014, 15:19
Message #1


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 181
Inscrit : 3-January 08
Membre no 20263



Bonjour,

Voilà je bloque depuis pas mal de temps sur une problématique.

Je veux pouvoir calculer mes frais en port en fonction du poids au KG ou en fonction du poids volumétrique et cela en fonction du pays de livraison !
Mon poids volumétrique, tout comme celui au KG, doit pouvoir se rentrer par produits.

De plus mon poids volumétrique ne doit servir que de "base de calcul" pour le montant des frais de port.
Dans ma commande, je veux que soit enregistré (comme par défaut) mon poids au KG : champs products_weight

J'ai donc rajouter dans mes fiches produits un nouveau champs : products_volume

Je vais ensuite dans mon fichier includes\classes\shopping_cart.php pour trouver la ligne qui sert de calcul pour les frais de port :

Code
$this->weight += ($qty * $products_weight);


Je la modifie ainsi :

Code
if ($products_volume == 0) {
$this->weight += ($qty * $products_weight);
          
          } else {
          
$this->weight += ($qty * $products_volume);
          
          }



Avec ce code, j'ai ainsi le résultat suivant : si mon poids volume n'est pas renseigné alors on prend le weight pour calculer les frais de port, sinon on se sert du poids volume (tous mes produits n'ont pas forcément un poids volume de renseigné !).
Tout en gardant le fait que dans la commande, c'est le products_weight qui reste "enregistré" en base (ce qui est par exemple utile dans mon cas pour mon import vers expéditor...).


Mon pb, c'est que je bloque pour rajouter une condition en fonction du pays de livraison !
En effet, comment récupérer l'info dans le fichier includes\classes\shopping_cart.php ?


Peut-être y a t il une solution encore plus simple que la mienne ?


D'avance merci pour qui voudrait bien m'aider.

smile.gif

Ce message a été modifié par mickael34 - 13 Aug 2014, 15:33.


--------------------
Sur OsCommerce 2.2
Go to the top of the page
 
chti_poupon
posté 23 Jul 2014, 10:52
Message #2


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Il existe une contrib pour calculer le poids volumique ici
Quand elle est activée, c'est le poids volumique IATA qui est pris en compte au lieu du poids dans les calculs, quel que soit le module d'expédition utilisé.

Merci de la question , car la poste va maintenant appliquer le poids volumique.

Les modifications proposées ne semblent pas incompatibles avec une version osC 2.3

Peut-être une modification serait à faire pour l'activer seulement pour les modules appliquant le poids volumique

Qu'en penses-tu ?
Chti poupon
Go to the top of the page
 
mickael34
posté 23 Jul 2014, 11:15
Message #3


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 181
Inscrit : 3-January 08
Membre no 20263



Merci pour ton aide.

Effectivement, c'est le poids volumétrique qui est pris en compte par la poste pour tous les colis qui "prennent l'avion".

Tu peux donc te retrouver avec un colis de 1KG mais avec un poids volumétrique de 10KG (en tenant compte des dimensions du colis).
Tu peux donc vite perdre de l'argent pour un envoi dans les DOMTOM par exemple !!!!!

Mon idée c'est effectivement de faire un calcul volumétrique au cas par cas.
En effet, pour une livraison en Suisses ou en Belgique, c'est le poids du colis qui compte.
Pour une livraison en Martinique, c'est le poids volumétrique qui est pris en compte.

Pour un même produit, il te faut donc pouvoir rentrer "2 poids".
Et ensuite suivant la destination, on prend en compte soit le poids réel du colis soit son poids volume.

Je vais jeter un coup d'oeil à la contrib dont tu parles et je reviendrais pour apporter une solution.

smile.gif





--------------------
Sur OsCommerce 2.2
Go to the top of the page
 
chti_poupon
posté 23 Jul 2014, 16:13
Message #4


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



La contrib attribue à chaque article le plus fort des 2 "poids" automatiquement quand elle est activée
Les modules indépendants du poids ne sont pas touchés (forfait, nombre articles)
Attention, vérifies la valeur du poids voliumétrique: je crois bien avoir lu volume (cm3)/6000
A te lire !
Chti poupon
Go to the top of the page
 
mickael34
posté 13 Aug 2014, 15:32
Message #5


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 181
Inscrit : 3-January 08
Membre no 20263



Bonjour,

J'ai solutionné mon pb.

Ta contrib chti_poupon était surement très bien mais assez lourde à mettre en place (beaucoup de fichiers à retoucher...).
Comme je suis très fainéant, je voulais en faire le moins possible, sans devoir par exemple retoucher mes modules d'expé.

Je rappelle le principe pour ceux que ça intéresse :
Les colis qui prennent l'avion sont taxés en fonction de leur poids volumétrique et plus seulement en fonction de leur poids réel.
Ainsi, on peut se retrouver avec des colis très léger mais encombrant.
Le client si il paye en fonction du poids réel du produit peut alors être bien en dessous de ce que le transporteur vous facturera.

Comme les transporteurs ont tout de même besoin du poids réel du colis.
Je voulais que le poids volumétrique ne soit pris en compte qu'au moment du calcul du montant des frais de port.

Dans ma table products, j'ai donc rajouté un champs products_volume.

Lorsque je mets en ligne un produits :
- je le pèse -> products_weight
- je le mesure et en renseignant ses dimensions dans le logiciel du transporteur (expéditor ou autre) j'obtiens un poids volumétrique -> products_volume


Dans mon fichier includes\classes\shopping_cart.php, au niveau de la fonction :

Code
    function calculate() {


J'ajoute :

Code
    function calculate() {
    global $customer_id;


J'ajoute une requête qui va me permettre de connaitre le pays de livraison d'un client :

Code
$czone_query = tep_db_query("select entry_country_id from " . TABLE_ADDRESS_BOOK . " where customers_id = '" . (int)$customer_id . "'");
$czone = tep_db_fetch_array($czone_query);


Je cherche ensuite la ligne qui sert à calculer les frais de port en fonction du poids :

Code
$this->weight += ($qty * $products_weight);


E je la modifie ainsi :

Code
if ($czone['entry_country_id']  != 21) {
          $this->weight += ($qty * $products_volume);

          } else {

          $this->weight += ($qty * $products_weight);
          
          }



Cela marche dans ma façon de fonctionner :
- Pour la France Métropolitaine, j'ai des frais de port forfaitaire donc la modification plus haut n'impacte pas mes livraisons en France.
- Pour l'étranger, j'utilise le module "zones" pour un calcul de port en fonction du poids :

Donc plus haut dans mon code :
Si le pays de livraison du client n'est pas la Belgique (ID 21) alors on calcule le port en prenant ce qui est renseigné dans la case products_volume sinon on prend le products_weight.

A chacun de modifier les pays concernés.


Je ne sais pas si ce code est très conventionnel mais en tous cas ça fonctionne chez moi.








--------------------
Sur OsCommerce 2.2
Go to the top of the page
 
chti_poupon
posté 13 Aug 2014, 17:53
Message #6


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Bonjour
Tu pouvais aussi économiser une requête en calculant systématiquement $volume parallèlement à $weight, (et en rajoutant la méthode show_volume)
ET
Exploiter ou non le volume dans checkout shipping en remplaçant
Code
$total_weight = $cart->show_weight;
par
Code
if($order->delivery['country']['id'] == 73 || $order->delivery['country']['id'] == 21) {
$total_weight = $cart->show_weight;
}else{
$total_weight = $cart->show_volume;
}

Sachant quand même que de toutes façons:
  • Selon l'emballage, le volume total peut être différent du total des volumes
  • Si le colis contient un produit peu dense et un produit dense, le résultat sera biaisé

Belle journée !
Chti poupon
Go to the top of the page
 
mickael34
posté 13 Aug 2014, 18:30
Message #7


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 181
Inscrit : 3-January 08
Membre no 20263



Merci pour tes conseils.

Concernant tes 2 remarques j'en avais bien conscience.
Je me dis simplement qu'il n'y a pas de solution parfaite à partir du moins où on calcule le prix de la livraison "en direct".
Et que ma solution est toujours moins pire que de ne calculer que le prix au poids.

smile.gif


--------------------
Sur OsCommerce 2.2
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 28th March 2024 - 20:02
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)