Jump to content

Frais de port offert + choix du transporteur offert


Jaksion
 Share

Recommended Posts

Bonjour à tous,

Je viens vers vous car je rencontre un problème avec la nouvelle mise à jour de prestashop v1.2.3

Ma société offre les frais de port à partir de 149 €d'achat. Mais lorsque je coche " offrir les frais de port à partir de "
et que le client passe une commande supérieure à 149 € tous les transporteur passent en gratuit ( chronopost, colissimo recommandé etc )

Je souhaite établir une règle qui offre uniquement les frais de port pour le transporteur colissimo et en france métropolitaine.

Sur la version 1.1 un code existait mais apparemment depuis la mise à jour celui-ci ne fonctionne plus.

Voici le code en question:

C'est très simple à modifier :

editer classes/cart.php lignes 684 , exemple ici la gratuité s'appliquera uniquement au transporteur par défaut que vous avez coché dans votre BO :
// Free fees
       if (isset($configuration['PS_SHIPPING_FREE_PRICE']) AND $orderTotal >= floatval($configuration['PS_SHIPPING_FREE_PRICE']) AND floatval($configuration['PS_SHIPPING_FREE_PRICE']) > 0     and Configuration::get('PS_CARRIER_DEFAULT')==$id_carrier)
           return $shipping_cost;
       if (isset($configuration['PS_SHIPPING_FREE_WEIGHT']) AND $this->getTotalWeight() >= floatval($configuration['PS_SHIPPING_FREE_WEIGHT']) AND floatval($configuration['PS_SHIPPING_FREE_WEIGHT']) > 0  and Configuration::get('PS_CARRIER_DEFAULT')==$id_carrier )
           return $shipping_cost;



Si quelqu'un à une solution ...

Merci bien

Share this post


Link to post
Share on other sites

les frais de port offerts ne sont pas indépendants entre chaque transporteurs.

Comme j'expliquais plus haut, les frais de port sont offerts à partir de 149 € mais tout les transporteur deviennent gratuit y compris pour les pays étrangers.

Quelle est la solution pour offrir les frais de port à partir de X € pour un seul transporteur et pour un seul pays

Share this post


Link to post
Share on other sites

  • 11 months later...

C'est affligeant
Personne n'est capable de répondre à cette question qui semble très important, même des logiciels bidons comme Shopfactory sont capables de faire la distinction entre plusieurs transporteurs et zones !!! Ils peuvent créer un seul transpoteur qui offre les frais de port à partir de... sans pour autant que les autres transporteurs soient concernés
Pourtant la question semble claire, mais rien à faire, on ne peu plus avancer...
Grand Merci à celui qui à une réelle solution de nous en faire part

Share this post


Link to post
Share on other sites

  • 1 month later...

Bonjour,

J'utilise la version 1.3.1.1

Dans le fichier prestashop/classes/Cart.php

vers la ligne 831 je remplace la ligne :

if (isset($configuration['PS_SHIPPING_FREE_PRICE']))


par

if (isset($configuration['PS_SHIPPING_FREE_PRICE']) && Configuration::get('PS_CARRIER_DEFAULT')==$id_carrier)



Et ca me permet d'avoir les frais de port offerts uniquement pour le moyen de livraison par défaut (Colissimo en ce qui me concerne)

Voilà en espérant que cela puisse être utile. N'hésitez pas à faire un retour sur le forum pour nous dire si cela marche aussi pour vous ou non.

Share this post


Link to post
Share on other sites

bonjour,
j'ai la version 1.2.5.0
j'ai essayé la modif de kidoudou mais ça ne fonctionne pas sous cette version
quelqu'un aurait il la solution

cdt


Vu le type de patch que j'ai proposé ca ne m'étonne pas trop que ca ne marche pas sur d'autres versions.
Je viens de récupérer la version 1.2.5.0 pour jeter un oeil et effectivement il y a une grosse différence sur le traitement à ce niveau là.

Voici une modif que je propose, par contre je n'ai pas pris le temps d'installer la version 1.2.5.0, je n'ai donc pas testé, je vous laisse essayer et me faire un retour.

Ligne 714 essayez de remplacer :
// Free fees
if (isset($configuration['PS_SHIPPING_FREE_PRICE']) AND $orderTotal >= floatval($configuration['PS_SHIPPING_FREE_PRICE']) AND floatval($configuration['PS_SHIPPING_FREE_PRICE']) > 0)



par

// Free fees
if (Configuration::get('PS_CARRIER_DEFAULT')==$id_carrier AND isset($configuration['PS_SHIPPING_FREE_PRICE']) AND $orderTotal >= floatval($configuration['PS_SHIPPING_FREE_PRICE']) AND floatval($configuration['PS_SHIPPING_FREE_PRICE']) > 0)



Cette proposition est uniquement pour le cas de la livraison gratuite sur un montant. Pour la livraison gratuite sur un poids, il faudrait faire une modification équivalente sur la ligne d'après.

Share this post


Link to post
Share on other sites

Oui la solution existe et est vendu par un programmateur. Ça vaut le coût et en plus cela fonctionne avec les 3 versions en cours
Laissez moi votre mail et je vous orienterai vers lui !
Cldt


Programmateur ou programmeur ;)

Moi je ne suis que programmeur ;)

Share this post


Link to post
Share on other sites

bonsoir kidoudou,

j'ai fais la modif que vous proposez et j'ai toujours mes 4 choix de transporteur qui sont visible quand le port est gratuit
pour ma part le port est gratuit pour un montant minimum de 100€. et le transporteur par default : colissimo suivi

merci de prendre du temps pour nous aider à résoudre ce problème. :-)

crdt

Share this post


Link to post
Share on other sites

Bonsoir,

Avant d'aller plus loin, dites moi si ce que vous voulez faire correspond à ce que j'ai fait.

par défaut j'ai les choix de transporteurs suivant :

colissimo : 5€
chronopost : 20€

Lorsque le montant d'achat est atteint j'offre les frais de port mais uniquement sur le colissimo le client à donc le choix :

colissimo : gratuit
chronopost : 20€

Est ce que c'est bien la même chose que cela que vous souhaitez faire ?

J'attends votre réponse et je jetterai un oeil plus précisément dans le code de la version 1.2.5.

Share this post


Link to post
Share on other sites

oui c'est bien ça
si je peut me permettre, l'idéal serait d'avoir uniquement "colissimo suivi" donc mon transporteur par défault comme choix lorsque le montant est atteind.
ou si cela n'est pas possible prendre votre solution qui est déjà très bien.

merci

Share this post


Link to post
Share on other sites

oui c'est bien ça
si je peut me permettre, l'idéal serait d'avoir uniquement "colissimo suivi" donc mon transporteur par défault comme choix lorsque le montant est atteind.
ou si cela n'est pas possible prendre votre solution qui est déjà très bien.

merci


Bonsoir,

J'ai installé la version 1.2.5.0 de prestashop et j'ai testé la modification que je proposais précédemment. J'ai uniquement remplacé la ligne 731 comme je l'indiquais.
De mon coté j'ai l'impression que ca fonctionne. J'attache deux copie d'écrans à ce post. La première montre le résultat quand je n'ai pas atteint le minimum de commande pour la livraison gratuite (80 euros dans ma configuration) et la deuxième copie d'écran montre ce qu'il se passe si je dépasse le montant de livraison gratuite.

Pouvez vous vérifier que la version de prestashop que vous avez est bien la 1.2.5.0 . Vérifier également que vous avez bien modifié le bon fichier prestashop/classes/Cart.php.

32818_CpHDlsHcV5h602ZRudme_t

32819_HWw8KVdgHOHNpioqnVkI_t

Share this post


Link to post
Share on other sites

Voiture, par rapport à votre autre demande qui concerne le fait de ne proposer que le transporteur par défaut en cas frais de port offert j'ai effectué une modification qui répond au besoin. Voir la copie d'écran jointe (on remarquera que mon transporteur 'chronopost' n'est plus visible car j'ai atteint le montant de frais de ports gratuits (80€) donc je ne propose que le transporteur par défaut et il est mis en gratuit).

La modification se fait dans prestashop/order.php

Il faut rechercher les lignes suivantes (normalement à la ligne 322 dans le order.php par défaut de la version 1.2.5.0) :

 $resultsArray = array();
 foreach ($result AS $k => $row)
 {
   $carrier = new Carrier(intval($row['id_carrier']));
   if ((Configuration::get('PS_SHIPPING_METHOD') AND $carrier->getMaxDeliveryPriceByWeight($id_zone) === false)
   OR (!Configuration::get('PS_SHIPPING_METHOD') AND $carrier->getMaxDeliveryPriceByPrice($id_zone) === false))
   {
     unset($result[$k]);
     continue ;
   }



Puis les remplacer par celles ci :

 $resultsArray = array();
 $configuration = Configuration::getMultiple(array('PS_SHIPPING_FREE_PRICE'));        
 $orderTotal = $cart->getOrderTotal(true, 7);
 foreach ($result AS $k => $row)
 {
   $carrier = new Carrier(intval($row['id_carrier']));
   if ((Configuration::get('PS_SHIPPING_METHOD') AND $carrier->getMaxDeliveryPriceByWeight($id_zone) === false)
   OR (Configuration::get('PS_CARRIER_DEFAULT')!=$row['id_carrier'] AND isset($configuration['PS_SHIPPING_FREE_PRICE']) AND $orderTotal >= floatval($configuration['PS_SHIPPING_FREE_PRICE']) AND floatval($configuration['PS_SHIPPING_FREE_PRICE']) > 0)        
   OR (!Configuration::get('PS_SHIPPING_METHOD') AND $carrier->getMaxDeliveryPriceByPrice($id_zone) === false))
 {
   unset($result[$k]);
   continue ;
 }



Je vous laisse tester. Si ca ne fonctionne pas essayer de me dire si vous constatez au moins des modifications de comportement ou non.

32820_rPMnMoqX4peCq8HZwb3o_t

Share this post


Link to post
Share on other sites

bonsoir kidoudou
j'ai installé la seconde solution celle qui laisse uniquement le transporteur par défaut
et cela fonctionne très bien pour l'instant. pas de bug constaté tout est nickel.

vous êtes un Chef avec un grand C !....

encore bravo et merci pour votre temps.

jean paul

Share this post


Link to post
Share on other sites

D'ailleurs j'en profite pour remercier aussi l'initiateur du sujet ( Jor1s ) qui m'a donné les premières infos qui m'ont permis de mettre en place cette petite fonctionnalité.

Je ne sais pas si Jor1s a testé les modifs que j'ai proposée. Le thread étant ancien ce n'est peut être plus d'actualité pour lui. Dans tous les cas Jor1s vous pourriez peut être rajouter [RESOLU] dans le titre de ce thread. Ce n'est qu'une suggestion, je vous laisse juge.

A bientôt,

Ludovic.

Share this post


Link to post
Share on other sites

merci pour la proposition
je ne manquerais de faire appelle à vous ci j'avais le moindre problème avec la modif.

j'ai fais un tour sur votre boutique c'est trés sympa pour les bouts de choux.

mes 2 bouts de choux on 20 et 12 ans alors!... ;-)
peut être pour un cadeaux ?

A+
jean_paul

Share this post


Link to post
Share on other sites

  • 1 year later...

Bonjour,

 

J'utilise la version 1.3.1.1

 

Dans le fichier prestashop/classes/Cart.php

 

vers la ligne 831 je remplace la ligne :

 

if (isset($configuration['PS_SHIPPING_FREE_PRICE']))

par

 

if (isset($configuration['PS_SHIPPING_FREE_PRICE']) && Configuration::get('PS_CARRIER_DEFAULT')==$id_carrier)

 

Et ca me permet d'avoir les frais de port offerts uniquement pour le moyen de livraison par défaut (Colissimo en ce qui me concerne)

 

Voilà en espérant que cela puisse être utile. N'hésitez pas à faire un retour sur le forum pour nous dire si cela marche aussi pour vous ou non.

 

Testé et approuvé sur une version 1.4.8.2.

La ligne de code dans Cart.php se trouve ligne 1146 !

 

Merci beaucoup !

Share this post


Link to post
Share on other sites

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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More