Jump to content

un seul Transporteur gratuit


Recommended Posts

bonjour,

 

J'aimerais pouvoir offrir les FDP gratuit à partir d'un certain montant, mais seulement sur le moins cher de la liste des transporteurs.

par exemple:

 

FDP offert à partir de 50€ d'achat, 3 transporteurs dans cette tranche de poids.

 

Choix 1= La Poste Mini Max 100g = 1,50 € TTC

choix 2 = La Poste Colissimo France = 5,70 € TTC

choix 3 = La Poste Colissimo recommandé R1 = 9,80 TTC

 

quelqu'un à une idée ou ça se passe ?

 

Merci de votre aide,

Pdriss

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

  • 2 weeks later...

Bon, j'ai réussi à isolé le truc, mais j'ai quand même besoin de votre aide....

pour commencé dans override/classes/Cart.php j'ai créer un fonction qui isole le tableau des transporteurs sélectionnés (le tri par prix ce fait dans le BO) depuis la variable tableau $delivery_option_list:

 

public function simulateBestPriceCarrier(Country $default_country = null, $flush = false)
{
 static $cache = false;
 if ($cache !== false && !$flush)
  return $cache;
 $delivery_option_list = $this->getDeliveryOptionList($default_country, $flush);
 // This method cannot work if there is multiple address delivery
 if (count($delivery_option_list) > 1 || empty($delivery_option_list))
  return array();
 $carriers = array();
 foreach (reset($delivery_option_list) as $key => $option)
 {
  $price = $option['total_price_with_tax'];
  $price_tax_exc = $option['total_price_without_tax'];
  $carriers[] = array(
   'carrier_id' => Cart::delimiter($key),
  );
 }
 return $carriers;
}

 

Une autre fonction qui supprime la virgule

 

public static function delimiter($string, $delimiter = ',')
{
 $elm = explode($delimiter, $string);
 $max = max($elm);
 return $max;
}

 

le problème c'est que quand je modifie le calcul des frais de port dans la fonction public function getPackageShippingCost comme ceci:

 

// Free fees
 $free_fees_price = 0;
 // Free fees
 if (isset($configuration['PS_SHIPPING_FREE_PRICE'])){
 $best_price_carrier = $this->simulateBestPriceCarrier();
 $best_carrier = $best_price_carrier[0][carrier_id];
 if  (intval($id_carrier) == $best_carrier){
 $free_fees_price = Tools::convertPrice((float)$configuration['PS_SHIPPING_FREE_PRICE'], Currency::getCurrencyInstance((int)$this->id_currency));
 $orderTotalwithDiscounts = $this->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING);
 if ($orderTotalwithDiscounts >= (float)($free_fees_price) && (float)($free_fees_price) > 0 AND intval($id_zone) == 1)
  return $shipping_cost;
  }
}

j'ai une erreure de chargement de la page "La connexion a été réinitialisée".

Quelqu'un à une idée ?

c'est handicapant, car dans le cas de plusieurs transporteurs, dont le colissimo recommandé je ne tiens pas à ce que celui-ci soit gratuit.

merci de votre aide.

@+

pdriss

Link to comment
Share on other sites

Bonjour Pdriss,

 

J'avais un problème similaire : vente de certains articles et livraison gratuite (sous certaines conditions.)

 

J'ai créé une tranche de transport supplémentaire avec un poids impossible à obtenir pour tous les autres articles.

 

Exemple : je vend des PC, appareils photos... et accessoires GSM (gratuits de port)

Pour les accessoires GSM, j'ai paramètré ma tranche de poids dans le module transport entre 1 et 15 grammes et montant 0€ sur un seul transporteur..

 

Tu pourras peut-être t'inspirer de ça pour résoudre ton problème.

Link to comment
Share on other sites

Bonjour Pdriss,

 

J'avais un problème similaire : vente de certains articles et livraison gratuite (sous certaines conditions.)

 

J'ai créé une tranche de transport supplémentaire avec un poids impossible à obtenir pour tous les autres articles.

 

Exemple : je vend des PC, appareils photos... et accessoires GSM (gratuits de port)

Pour les accessoires GSM, j'ai paramètré ma tranche de poids dans le module transport entre 1 et 15 grammes et montant 0€ sur un seul transporteur..

 

Tu pourras peut-être t'inspirer de ça pour résoudre ton problème.

Salut,

Merci de te pencher sur mon problème,

Je me suis peut être mal expliquer.

En fait j'offre le port gratuit à partir de 50€ en France et au particuliers uniquement (jusque là tout vas bien), le problème c'est que pour une tranche de poids j'ai plusieurs possibilité, je voudrais que seul la moins cher soit gratuite, à l'heure actuelle j’obtiens çà:

post-12822-0-58693700-1341043644_thumb.jpg

je voudrais obtenir ça:

post-12822-0-98499300-1341043727_thumb.jpg

Sachant que le transporteur le moins cher change en fonction du poids, les frais de port offert sont plus cher mais la commande est plus élevé.

Comme je l'ai dis sur le post plus haut, j'ai créer une fonction qui isole l'id du premier transporteur le moins cher, par contre ça bug. :wacko:

Merci de votre aide,

@+

pdriss

Prestashop 1.5 RC1

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

Re bonsoir,

 

Ou il est trrop tard, ou je n'ai rien compris, mais si ton transport le moins cher est limité à 100gr je ne vois pas ce qui coince...

 

Sinon tu crée un nouveau transporteur (virtuel) qui ne prend en charge que les commandes au dessus de 50€ et tu mets les frais de port à zéro.

 

Cela fonctionne très bien.

 

A+

Link to comment
Share on other sites

Re bonsoir,

 

Ou il est trrop tard, ou je n'ai rien compris, mais si ton transport le moins cher est limité à 100gr je ne vois pas ce qui coince...

 

Sinon tu crée un nouveau transporteur (virtuel) qui ne prend en charge que les commandes au dessus de 50€ et tu mets les frais de port à zéro.

 

Cela fonctionne très bien.

 

A+

 

Salut, non, non il n'est pas tard.... :D

Le problème n'est pas le déclenchement des FDP, cela fonctionne, (même si dans La 1.5 RC1 il faut encore tripatouiller le code pour qu'il se déclenche selon le pays et/ou le groupe incompréhensible quand on sait que c'est un problème récurrent depuis le début de prestashop).

Mes transporteurs change selon le poids, MAIS mes FDP gratuit ne se déclenche pas par rapport au poids, mais par rapport au prix (à partir de 50€), jusque là c'est ok.

pour mes produits (voir image jointes au dessus) le client à le choix:

1) Mini max (sans suivi)

2) lettre Max (avec suivi)

3)Collisimo (avec suivi)

4) éventuellement (Collisimo Recommandé)

Tout ses transporteurs fonctionne avec la même tranche de poids, je voudrais que seul le transporteur le moins cher soit gratuit.

Sachant qu'ils change selon le poids mais que le premier afficher est toujours le moins cher.

En gros je souhaite laisser au client le choix de sélectionner un autre transporteur que le moins cher, mais que celui ci ne soit pas gratuit.

Sous Presta tout les transporteurs deviennent gratuit dés lors que le montant de la commande (50€) est atteint.

J'ajoute que ton astuce fonctionne mais que commercialement parlant c'est pas top, je préfère afficher "Port gratuit !" que port 0.00€, qui lui passe inaperçus pour le client.

Voila, j'espère avoir été plus clair.

@+

pdriss

  • Like 1
Link to comment
Share on other sites

  • 8 months later...

En fait cela correspond pas bien a ce que je souhaite :

Je voudrais proposer la gratuité du transport que sur le premier transporteur de la liste :

exemple : le mini max est proposé gratuit mais le colissimo est proposé payant.

si on depasse le poid pour le mini max, c'est le colissimo de base qui est offert mais le colissimo avec assurance R1 est proposé payant, etc...

tu vois ce que je veux dire ?

Link to comment
Share on other sites

Salut je déterre ce topic mais as tu trouvé une solution ?

Je souhaite moi aussi offrir les frais de port sur le transport le moins cher

exemple : port offert sur le mini max mais payant pour le colissimo

merci de ta réponse

 

Salut,

 

Non toujours pas, j'ai mis ça de coté pour l'instant...

j'ai mis à jours vers la 1.5.4 et j'essaye de comprendre les modifs pour rendre mes modules compatible.

Si je trouve une soluce je posterais ici.

 

Dans regle des paniers tu créé une regle comme quoi tel transporteur / tel Pays / Tel montant est gratuit.

Oui, ca ont avait compris...

Mais que ce passe t'il chez toi quand quand plusieurs transporteurs correspondent à la tranche de poids et que le montant minimum est atteint ?

Seul le premier est gratuit ?

Ce que je cherche à faire c'est que le transporteur le moins cher disponible (et seulement lui) soit le seul gratuit, tout en laissant le choix au client d'en selectionner un autre payant.

Link to comment
Share on other sites

Ce que je cherche à faire c'est que le transporteur le moins cher disponible (et seulement lui) soit le seul gratuit, tout en laissant le choix au client d'en selectionner un autre payant.

 

c'est exactement ca qu'il me faut aussi !

Link to comment
Share on other sites

Dans l'absolu (dans l'absolu seulement) il suffit de faire un truc du genre

IF le transporteur est le premier de la liste alors transporteur is free ELSE transporteur no free.

La ou ca se complique, c'est de savoir ou placer tout ca et que cela fonctionne avec le panier ajax.

Link to comment
Share on other sites

  • 1 year later...

Bonjour,

 

J'ai un problème similaire avec la 1.5.4 : je fais une règle panier avec 1 transporteur gratuit (la poste, enveloppe à bulles).

 

La règle fonctionne, si je choisis colissimo j'ai bien les 6 € à payer.

 

Cependant, dans le choix des transporteurs, il est écrit "gratuit" pour colissimo alors que ce n'est pas le cas !

 

+1 pour un développeur financé par theo33 xD

 

Edit :  j'ai résolu mon problème de la manière suivante : créer une tranche de prix correspondant au montant de base avec franco de port (40 à 1000 euros) et mettre 0 € en prix, tout simplement !

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

  • 3 years later...

Bonjour,

 

Je re-redéterre ce topic car je n'ai pas trouvé la solution au problème, ni aucun module répondant au sujet soulevé :

 

"Ce que je cherche à faire c'est que le transporteur le moins cher disponible (et seulement lui) soit le seul gratuit, tout en laissant le choix au client d'en selectionner un autre payant."

 

Mes frais de port sont configurés par tranches de poids, les transporteurs sont proposés en fonction du panier.

 

L'idée serait d'ajouter une condition à cette ligne dans le fichier cart.php (PS 1.6) :

if ($orderTotalwithDiscounts >= (float)($free_fees_price) && (float)($free_fees_price) > 0  ){
Cache::store($cache_id, $shipping_cost);
return $shipping_cost;

Tel que :

if ($orderTotalwithDiscounts >= (float)($free_fees_price) && (float)($free_fees_price) > 0 
AND (tarif transporteur = tarif le moins cher) ){
Cache::store($cache_id, $shipping_cost);
return $shipping_cost;

Mais je ne sais pas quelle variable utiliser ni comment formuler ça.

 

Quelqu'un aurait-il une idée ?

 

Merci par avance.

 

Cordialement.

Link to comment
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
×
×
  • Create New...