Jump to content

Transporteur - Module Complémentaire


Recommended Posts

Bonjour,

PRESTASHOP : Version 1.3

J'ai une question concernant le Calcul des Frais de transport lors d'un développement d'un Module Transporteur.

J'ai remarqué lorsqu'un transporteur était lié à un module, la méthode getOrderShippingCost() de la classe Cart n'est pas appelé.

Quelles sont les méthodes à implémenter dans le Module pour renvoyer le montant des frais de ports au panier?
Je souhaite dans cette méthode avoir accès au contenu du panier.

Si vous avez des pistes, merci d'avance.

-- UPDATE

Il y a une comportement très étrange dans la gestion des Transporteur de type est "un module".
Comment changer le comportement de calcul des frais de port.
En creusant, il appel la méthode getDeliveryPriceByPrice() de la classe Carrier.
Mais pour cela, il se base sur les données insérée sur le transporteur avant de le considérer comme un module !!

Donc comment dire au moteur de prestashop, Le transporteur est un module, vient chercher le montant total sans et avec taxe dans cette méthode (méthode mise dans le module du transporteur)?

j'ai vue que sur le module dejala, ils ont créer une classe CarrierHacked.php ??

Merci de votre aide ;)

Link to comment
Share on other sites

En effet, j'aurai du préciser la version ;)

Là c'est une question dans le cadre de la version 1.3 ;)

Bonne idée la signature, faut-il encore travailler uniquement sur une version ;)


Héhé j'ai fais la même remarque à captain ;) , du coup si tu es développeur tu mets une plage , (regarde la mienne) , mais en revanche quand tu poses tes questions , pense à préciser ;)

Pour répondre à ta question , 1.3 est la mauvaise pioche si ton module de transport doit calculer lui même le tarif livraison.
Car il manque la classe faite pour ça de la 1.4
abstract class CarrierModuleCore extends Module
{
   abstract function getOrderShippingCost($params,$shipping_cost);    
   abstract function getOrderShippingCostExternal($params);    
}



Ce que tu peux faire dans la 1.3 , c'est avoir un transporteur configuré normalement pour les tranches de tarif etc , mais avec l'option module cochée.

Dans ce cas le transporteur ne sera pas affiché par presta mais par le module lui même via le hook extraCarrier.
Seulement même si tu modifie le prix d'affichage , il sera recalculé avant l'étape suivante.
Dans ce cas tu devra intervenir entre les deux et modifier le total à payer avant qu'il ne soit affiché


Précise un peu ce que tu veux faire, je peux peut être t'aider plus que ça

Link to comment
Share on other sites

j’ai vue que sur le module dejala, ils ont créer une classe CarrierHacked.php ??


mauvaise piste:
Dans la 1.3, l'aspect 'module transport' n'est qu'abordé, préparé...
Il faut savoir que la methode Carrier::getCarriers retourne seulement les transporteurs 'non module' , et c'est également pour cette raison que le transporteur coché comme tel n'est pas affiché sur la page des transporteurs.
Il est pourtant indispensable dans un module associé à un transporteur d'avoir également celui que tu as créé dans le BO et indiqué comme étant un module.
Personnellement, dans ce genre de dev , je crée ma propre fonction getCarriers dans mon module.
Pour le module déjalà ,ils utilisent une classe Carrier complete modifiée notamment en ce sens.
Link to comment
Share on other sites

Merci Broceliande pour ta réactivité et tes premiers éléments de réponses ;)

Pour t'en dire plus comme tu le demande.

Je cherche à faire les choses suivantes :

- Limiter un transporteur à un pays (c'est la première raison qui m'a poussé à faire mon module transporteur pour afficher le Carrier en fonction du code iso de l'adresse de livraison). Car la gestion de base Zone <- Pays n'est pas suffisant. Mon trasporteur A c'est uniquement pour la france alors que mon transporteur B c'est pour la belgique et le luxembourg et pour finir le transporteur C qui livre tous les pays. Mais les trous pays sont de la même zone.

- Calculer le montant HT / TTC des frais de port en fonction du contenu dans le panier (si produit en réduction alors frais de port à 10€ sinon 0€ par exemple) et du pays d'expédition. Au delà de la calculer et de l'afficher dans le choix des transporteurs, il faut que ce même montant soit bien repris dans le panier, total commande, pdf facture, paiement....

Pour cela j'ai inspecté tout le code ;) et en effet je me suis rendu compte qu'aucune méthode d'override pour recalculer le prix comme en 1.4 :(
Si j'ai bien compris, dans tous les cas, la méthode qui calcul les frais de livraison passent par getOrderShippingCost(). Ensuite en fonction du mode sélectionné par tranche de prix ou par tranche de poids, cela appel getDeliveryPriceByWeight() et getDeliveryPriceByPrice().

Ce qui n'est pas terrible, c'est que lorsque l'on déclare un transporteur en tant que Module, il se base sur ce système et dans l'interface on ne peut même plus affecter des prix au tranche :(. Cela implique de devoir refaire la gestion des tranches dans mon module de transporteur pour modifier les tables de prix selon tranche :(

La seule solution que j'y voir pour l'instant mais qui est en mon sens très "moche", c'est de faire un Hack dans la méthode getDeliveryPriceByPrice() du cor de prestashop :(. Peux être auras tu une autre idée ;)

J'espère que je suis assez clair sur mon développement,

Merci en tout cas.

Link to comment
Share on other sites

Autre information pour la communauté, je trouve la performance de cette partie très médiocre.

Pour récupérer le cout du transport, je ne sais pas pourquoi la méthode getOrderShippingCost() est appelé autant de fois et sur tous les transporteurs. Alors qui ne doit charger qu'un prix pour un transporteur dans la partie Résumé du panier.

Link to comment
Share on other sites

Ce que tu veux faire , tu peux alors le faire sans toucher au core.
Car en aucun cas dans ce que tu me décris , tu n'as besoin de calculer le prix : c'est 0 ou un tarif classique.

J'utilise pour ce genre de chose un module maison nommé hidecarrier , qui me permet de masquer ou afficher un transporteur à loisir, sous conditions, selon la demande du client.

Ainsi j'ai un seul transporteur 'Transport Offert', tout à fait normal, avec une seule tranche à 0€, qui ne s'affiche que quand je le décide. je laisse la gratuité des frais de port à 0 dans le BO , bien sûr.
Je ne passe pas la propriété module à true , car la plupart du temps , j'ai d'autres conditions à gérer sur d'autres transporteurs.

Mon module intervient dans le hookTop et renseigne le tableau smary $visiblecarriers.
La seule modif que j'ai à faire est donc de remplacer $carriers par $visiblecarriers dans le foreach de order-carrier.tpl et le tour est joué , je masque à loisir et sous mes conditions les transporteurs que je souhaite.

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...