pdriss Posted June 19, 2012 Share Posted June 19, 2012 (edited) 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 June 19, 2012 by pdriss (see edit history) Link to comment Share on other sites More sharing options...
pdriss Posted June 29, 2012 Author Share Posted June 29, 2012 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 More sharing options...
grenierhitech Posted June 30, 2012 Share Posted June 30, 2012 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 More sharing options...
pdriss Posted June 30, 2012 Author Share Posted June 30, 2012 (edited) 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 çà: je voudrais obtenir ça: 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. Merci de votre aide, @+ pdriss Prestashop 1.5 RC1 Edited June 30, 2012 by pdriss (see edit history) Link to comment Share on other sites More sharing options...
grenierhitech Posted July 2, 2012 Share Posted July 2, 2012 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 More sharing options...
pdriss Posted July 3, 2012 Author Share Posted July 3, 2012 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.... 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 1 Link to comment Share on other sites More sharing options...
theo33 Posted April 2, 2013 Share Posted April 2, 2013 (edited) 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 Edited April 2, 2013 by theo33 (see edit history) Link to comment Share on other sites More sharing options...
ENCRECOM Posted April 2, 2013 Share Posted April 2, 2013 Salut Dans regle des paniers tu créé une regle comme quoi tel transporteur / tel Pays / Tel montant est gratuit. Link to comment Share on other sites More sharing options...
theo33 Posted April 2, 2013 Share Posted April 2, 2013 Merci de ton aide. c'est pas mal ton truc Link to comment Share on other sites More sharing options...
theo33 Posted April 2, 2013 Share Posted April 2, 2013 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 More sharing options...
pdriss Posted April 2, 2013 Author Share Posted April 2, 2013 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 More sharing options...
theo33 Posted April 2, 2013 Share Posted April 2, 2013 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 More sharing options...
pdriss Posted April 2, 2013 Author Share Posted April 2, 2013 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 More sharing options...
theo33 Posted April 3, 2013 Share Posted April 3, 2013 y a pas un developpeur que ca interesse ? je finance ! Link to comment Share on other sites More sharing options...
dkbane Posted April 17, 2014 Share Posted April 17, 2014 (edited) 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 April 19, 2014 by dkbane (see edit history) Link to comment Share on other sites More sharing options...
Fred.J Posted May 19, 2017 Share Posted May 19, 2017 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now