Jump to content

Supprimer des étapes dans la validation de commande


Recommended Posts

Bonjour à tous et toutes,

 

J'ouvre ce topic car j'ai un problème avec ma boutique d'e-commerce

Il s'agit en fait d'un site e-commerce qui sert de réservation pour des commandes pour des adhérents d'une coopérative.

Donc le paiement ne se fait pas en ligne mais directement lorsque les adhérents viennent au magasin donc je ne souhaite pas d'étape de paiement lorsque les clients valident leurs paniers.

 

Actuellement il est défini avec le moyen de paiement qui est le chèque car c'était le seul possible qui ne me bloquer pas les clients dans le processus de validation.

 

Y aurait il une solution pour lors de la confirmation de la commande enlever l'étape de paiement et avoir une commande validée ?

 

Je suis actuellement en version PrestaShop™ 1.4.7.0

 

Merci d'avance pour votre aide

Link to comment
Share on other sites

Bonjour,

 

j'avais le même genre de besoin que vous et j'ai trouvé la solution en allant surcharger juste un controller.

J'ai fait cette modif sur la version 1.5.3 mais dans mes souvenirs, mis à part le numéro de lignes, le processus de validation des commandes se fait de la même façon.

  1. surchargez la fonction
    initContent()

    du controller

    OrderController


A un moment (au début), il fait un switch sur la variable

(int)$this->step

.

Suivant l'étape que vous voulez être la dernière, il vous faut vous placer dans tel ou tel

case

(case 1 => juste après le panier, case 2 => juste après le choix des adresses, case 3 => juste après le choix du transport)

Suivant ce que vous décidez, juste après l'appel à

$this->autoStep()

, il vous faut appeler la fonction de validation de commande qui est

validateOrder

 

2. Allez voir dans

/classes/PayementModule.php

et chercher la fonction

validateOrder

 

renseignez les paramètres (au moins les obligatoires), vous pouvez créer en BO des "états de commande" pour pouvoir personnaliser vos commandes.

Juste après l'appel de votre fonction de validation, ajoutez la ligne

Tools::redirect('index.php?controller=history');

qui redirigera votre client directement vers son historique de commande, comme dans le cas d'une commande réussie "normale".

 

voilà une solution parmi tant d'autre, elle fonctionne pour moi, en espérant que cela ai pu vous aider!

 

N'hésitez pas à me MP au cas où,

 

Cordialement

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour Dovitch,

 

Tout d'abord merci d'avoir prit le temps pour m'expliquer c'est gentil de ta part .

 

Je ne comprend pas l'étape 1 ou il faut surchargez la fonction.

 

Je vois bien ou elle est mais je ne saisis pas les modifs à effectuer.

 

Cordialement

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

  • 2 weeks later...
  • 2 weeks later...

Bonjour,

 

J'ai un peu du mal a comprendre vos explications. Il faut mettre dans le case ou on aimerai terminer l'appel de fonction validate order?

 

Mais dans ce cas il passe quand même sur toute les étapes qu'il y a entre la premiere et celle choisie non? Si on veut éviter une étape qui se trouve au milieu mais garder les autres comment faire?

 

Merci de votre attention

Link to comment
Share on other sites

Bonjour Dovitch,

je suis sur 1.5.3.

en suivant cette méthode,

y a t'il un moyen de mettre un formulaire à remplir

lors de cette étape ( en remplacement de l'étape Transport)

et de le voir apparaître dans le mail et le pdf.

Dis autrement on a une case commentaire client,

je cherche à mettre un formulaire avec 5-6 champs pour du btob,

en évitant la personnalisation de chaque produit trop fastidieuse.

 

Merci d'une réponse BJ

Link to comment
Share on other sites

  • 1 month later...

Bonjour Dovitch,

 

Tout d'abord merci d'avoir prit le temps pour m'expliquer c'est gentil de ta part .

 

Je ne comprend pas l'étape 1 ou il faut surchargez la fonction.

 

Je vois bien ou elle est mais je ne saisis pas les modifs à effectuer.

 

Cordialement

 

Bonjour,

en ce qui concerne l'étape 1, ma problématique était la suivante:

je voulais qu'après le choix des adresses (facturation/livraison), la commande se valide d'elle même, le règlement étant géré par un autre circuit.

Dans la fonction init_content() de OrderController(), vous avez un switch qui vous place dans tel ou tel case suivant l'étape/l'avancement dans le processus de commande.

 

Voilà la transformation que j'ai effectué en surchargeant cette fonction initContent():

Avant

case 2:
   if (Tools::isSubmit('processAddress'))
 $this->processAddress();
   $this->autoStep();
   $this->_assignCarrier();
   $this->setTemplate(_PS_THEME_DIR_.'order-carrier.tpl');
   break;

je ne voulais pas assigner de transporteur à cette commande, je voulais juste la valider une fois les adresses renseignées,d'où:

Après

case 2:
   if (Tools::isSubmit('processAddress'))
 $this->processAddress();
   $this->autoStep();
   $cart = new Cart((int)$this->context->cart->id);
   /* on instancie le module de virement juste pour pouvoir appeler la fonction de validation de commande */
   $payment_module = Module::getInstanceByName('bankwire');
   $payment_module->validateOrder($this->context->cart->id,13,$cart->getOrderTotal(true, Cart::BOTH),'validation commande',null,array(),null, false, $this->context->cart->secure_key);//exit();
   /* dès la validation, on redirige vers l'historique des commandes */
   Tools::redirect('index.php?controller=history');
  break;

Une fois ma fonction validateOrder() appelée et correctement exécutée, je renvoi l'utilisateur vers l'historique de ses commandes.

Link to comment
Share on other sites

Bonjour,

 

J'ai un peu du mal a comprendre vos explications. Il faut mettre dans le case ou on aimerai terminer l'appel de fonction validate order?

 

Mais dans ce cas il passe quand même sur toute les étapes qu'il y a entre la premiere et celle choisie non? Si on veut éviter une étape qui se trouve au milieu mais garder les autres comment faire?

 

Merci de votre attention

Bonjour,

 

je serais tenté de dire que c'est possible, mais je n'ai jamais vérifié ni testé une pareille solution.

Suivant l'étape que vous souhaité zapper, commenter peut-être simplement son traitement par exemple pour le traitement

case 2:
   if (Tools::isSubmit('processAddress'))
 $this->processAddress();
   $this->autoStep();
   //$this->_assignCarrier();
/* pensez à rediriger vers l'étape suivant celle que vous enlevez, mais en prenant garde à bien lui renseigner toutes les variables nécessaires */
   //$this->setTemplate(_PS_THEME_DIR_.'order-carrier.tpl');

Link to comment
Share on other sites

Bonjour Dovitch,

je suis sur 1.5.3.

en suivant cette méthode,

y a t'il un moyen de mettre un formulaire à remplir

lors de cette étape ( en remplacement de l'étape Transport)

et de le voir apparaître dans le mail et le pdf.

Dis autrement on a une case commentaire client,

je cherche à mettre un formulaire avec 5-6 champs pour du btob,

en évitant la personnalisation de chaque produit trop fastidieuse.

 

Merci d'une réponse BJ

 

Bonjour!

J'ai tendance à dire que tout est possible moyennant finance et je pense que c'est le cas ici.

Le fait de modifier une étape existante, la vider complètement de sa substance et remplacer son traitement par un autre totalement différent...est faisable mais je pense que cela nécessite un lourd développement qu'il ne m'est pas possible de vous expliquer rapidement tout simplement car je ne l'ai jamais tenté; mais à première vue, je penses qu'il vous faudrait un template pour l'affichage de votre formulaire, modifier OrderController() pour traiter votre formulaire et voir comment incorporer tout ça dans vos mails et pdfs.

C'est jouable mais ça prends du temps, à vous de voir si le jeu en vaut la chandelle, peut-être devriez vous faire appel à un prestataire pour ce développement si vous n'avez pas de connaissances techniques sur Prestashop.

 

Cordialement,

 

p.s:désolé pour le temps mis à répondre, le boulot n'attends pas!

Link to comment
Share on other sites

Bonjour!

Je trouve ce topic très intéressant et je pense que ça va bien me servir!

Mais je me pose une question...

Comment va se comporter le site au niveau de la modification lors de la mise à jour de la version de Prestashop ?

Est-ce qu'il faut refaire la modification ?

A moins que le fait de surcharger la fonction dans un nouveau fichier (php est objet maintenant il me semble) permet de faire une mise à jour sans autre intervention pour que le site fonctionne tel que voulu ?

 

Merci d'avance,

 

Cordialement

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour Dovitch,

 

merci pour les détails que tu a apporté par contre quand je modifie les deux fichiers avec les lignes que tu m'a marquer cela ne fonctionne pas chez moi

 

si je charge les deux fichiers modifiés et que je vais tester sur la boutique lorsque je vais sur commander apres avoir rajouter des produits dans le panier je tome sur une page blanche et lorsque je charge que le fichier OrderController.php la jarrive sur une page apres la commande qui me dit :

Le panier ne peut être chargé ou une commande a déjà était réalisé avec ce dernier

 

sur ce lien je t'ai mit dans un fichier zip mes deux fichiers originaux et les deux fichiers modifiés si tu vois ou est l'erreur je suis preneur :) car la je tourne en rond depuis 5j :/

 

https://www.dropbox.com/s/b54x7pmmcx5vfg8/Archive.zip

 

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