Pouvoir modifier une commande Prestashop déjà livrée

Le système Prestashop est toujours assez stricte concernant l’édition ou la suppression… pour des raisons comptables, légales ou pour l’intégrité du système. Prenons par exemple le cas de la modification de commande déjà livrée…

L’édition de commande

Quand une commande vient d’être passée, vous pouvez la modifier sans problème… cela fonctionne plutôt bien… Le problème c’est lorsque la commande a eu un statut livré, même si le statut courant est re-changé… impossible de pouvoir modifier la commande. Il faudrait procéder à un retour ? Générer un bon de réduction ? Ce n’est pas toujours pratique l’édition de commande permanent permet de contourner cette règle.

L’édition de commande n’est pas toujours possible, ce qui peut-être contraignant à l’utilisation…

Comment y remédier ?

En cherchant j’ai vu la solution chez OPart qui propose justement de faire un changement dans ce sens. J’ai testé la méthode et celle-ci est fonctionnelle sous Prestashop 1.6. Comme il y’avait des commentaires qui demandaient de faire des changements supplémentaires, je profite de refaire un récapitulatif ici.

Dans le fichier « dossier_admin/themes/default/template/controllers/orders/_product_line.tpl vers la ligne 120 remplacez :

{if ((!$order->hasBeenDelivered() OR Configuration::get('PS_ORDER_RETURN')) AND (int)($product['product_quantity_return']) < (int)($product['product_quantity']))}

par

{* Webbax - modification commande produit livré *}
{if ((Configuration::get('PS_ORDER_RETURN')) AND (int)($product['product_quantity_return']) < (int)($product['product_quantity']))}

ensuite vers la ligne 129 remplacez :

{elseif (!$order->hasBeenDelivered() OR Configuration::get('PS_ORDER_RETURN'))}

par

{* Webbax - modification commande produit livré *}
{elseif (Configuration::get('PS_ORDER_RETURN'))}

ensuite vers la ligne 129 remplacez :

{if ($can_edit && !$order->hasBeenDelivered())}

par

{* Webbax - modification commande produit livré *}
{if ($can_edit)}

A présent on change de fichier on s’occupe du controller sous « controllers/admin/AdminOrdersController.php » :

Vers la ligne 1739, le code suivant doit être commenté :

if ($order->hasBeenShipped())
die(Tools::jsonEncode(array(
'result'->false,
'error'->Tools::displayError('You cannot add products to delivered orders. ')
)));

Et devient donc :

// Webbax - modification commande produit livré
/*
if ($order->hasBeenShipped())
die(Tools::jsonEncode(array(
'result'->false,
'error'->Tools::displayError('You cannot add products to delivered orders. ')
)));
*/

On fait la même chose vers la ligne 2363 :

if ($order->hasBeenDelivered())
die(Tools::jsonEncode(array(
'result'->false,
'error'->Tools::displayError('You cannot edit a delivered order.')
)));

Qui devient :

/*
// Webbax - modification commande produit livré
if ($order->hasBeenDelivered())
die(Tools::jsonEncode(array(
'result'->false,
'error'->Tools::displayError('You cannot edit a delivered order.')
)));
*/

Et enfin vers la ligne 2419 :

if ($order->hasBeenDelivered())
die(Tools::jsonEncode(array(
'result'->false,
'error'->Tools::displayError('You cannot edit a delivered order.')
)));

Qui devient :

/*
// Webbax - modification commande produit livré
if ($order->hasBeenDelivered())
die(Tools::jsonEncode(array(
'result'->false,
'error'->Tools::displayError('You cannot edit a delivered order.')
)));
*/
A présent la modification est permise, le bouton modifier s’affiche correctement.

Mention importante

Vous remarquerez que je copie souvent le même commentaire partout exemple avec « modification commande produit livré »… Pourquoi je fais cela ? Cela me permet de retrouver dans un projet toutes les modifications liées à ce changement, j’opte donc toujours pour un commentaire universel répété sur chaque code modifié… cela permet avec le temps de savoir exactement ce qu’on avait changé et ou précisément (en complément du versioning GIT).

Bilan

Est-ce que c’est aberrant de ne pas pouvoir modifier une commande livrée ? A mon sens oui, car le protocole officiel de retour n’est pas assez pratique… dans ce genre de cas, bien souvent il y’a un arrangement à l’amiable + échange de mails avec le client. Ensuite, cela permet d’avoir une commande qui correspond à la réalité… conserver le processus comptable des allées / venues de toutes ces opérations, n’est pas forcément des plus pratiques.

Notez mon billet, Google va adorer :
1 étoiles - J'aime pas !2 étoiles - Bof !3 étoiles - Bien !4 étoiles - Très bien !5 étoiles - Génial ! (3 votes, moyenne : 5,00 sur 5)
Loading...

21 commentaires sur “Pouvoir modifier une commande Prestashop déjà livrée”

  1. bonjour
    ce serait super si on pouvait changer la declinaison : couleur ou la taille
    j’ai fais la modification sur une version 1.5.6.1 on peut modifer la quantité le numéro de facture mais pas la declinaison qui pour moi est le plus important en cas d’échange de taille
    est il possible d’avoir cette option ?
    cdlt

    1. Bonjour,

      A ma connaissance en appliquant ce changement, il ne doit pas être possible de modifier la déclinaison, cela doit-être aussi lié à cause de l’impact sur la gestion du stock, mais je n’ai pas creusé la question dans ce sens.

      Merci pour votre visite !

  2. Bonjour,

    C’est faisable en mode « artisanal » (cf après pour une version 1.4) :

    * relever le stock du nouvel attribut
    * afficher la commande à l’écran
    * ps_product_attribute : relever le code article, l’ancien attribut et le nouveau
    * ps_order_detail : modifier la ligne :
    * vérifier qu’elle comporte bien le code article et l’ancien attribut (être certain que nous sommes dans la bonne ligne de commande !)
    * remplacer l’ancien attribut par le nouveau
    * remplacer les 2 références par les nouvelles
    * modifier le texte de déclinaison dans le descriptif
    * changer l’EAN et l’UPC
    * afficher de nouveau la commande dans un nouvel onglet
    * vérifier que tout est en place et que le stock du nouvel attribut est bien affiché

    Un retour ré-injectera la qté dans le nouvel attribut.

    Je n’utilise pas assez souvent pour décider de coder cela.

    Bonne journée.

  3. merci
    pour la réponse, j’éspère qu’une bonne ame aura le temps de se pencher la dessus un jour 🙂
    On l’utilise régulièrement dans la vente de vêtement lorsque le client se rends compte d’une erreure de taille ou lorsqu’on a un mêm stock pour une boutique en ligne et une boutique physique, il arrive régulièrement qu’un produit soit épuisée après une vente en boutique.

    cdlt

  4. Bonjour,
    J’ai un souci avec la 2ème partie du tuto, en effet l’orsque j’essaie d’isoler
    les ligne 1739, 2363, 2419 je rencontre une erreur (page blanche sur la commande)
    Merci pour votre aide …

    {*
    // We can’t edit a delivered order
    if ($order->hasBeenDelivered()) {
    die(Tools::jsonEncode(array(
    ‘result’ => false,
    ‘error’ => Tools::displayError(‘You cannot edit a delivered order.’)
    )));
    *}

    1. Bonjour,

      Sur un cas comme celui-là, il faut creuser la recherche sur les erreurs générées.
      Je vous invite à activer la gestion des erreurs via votre fichier /config/defines.inc.php

      Merci pour votre visite !

  5. Bonjour webbax,

    J’ai utilisé ta technique pour débloquer l’edition de commande apres la livraison.
    Cela fonctionne, j’ai bien le bouton modifier qui apparais.
    En revanche c’est l’action de mettre à jours qui ne fonctionne pas. Ai je raté une étape?
    As tu une idée à me soumettre.

    Alexis
    ps: Je suis prestashop 1.6.1.4

    1. Bonjour,

      Désolé je ne pourrai répondre précisément sur ce cas.

      Il peut y avoir énormément de facteurs externes qui peuvent influencer le comportement.

      C’est le type de hack que j’ai utilisé seulement peut-être 1 à 2 fois et de mon côté par « chance » cela avait fonctionné du premier coup.

      Merci pour votre visite !

  6. J’ai avancé un petit peu:

    Il s’avère que j’arrive à effectuer des modifications sur les commandes qui on déjà une facture.
    Tant que la facture n’est pas édité, j’ai le même problème : Le bouton d’edition s’affiche, mais l’action de mettre à jours n’a aucun effet.

  7. bonjour

    j ai effectué ces changements sur une 1.5.6.2 et ca marche parfaitement
    par contre je voudrais qu il y ait aussi le bouton « ajouter un produit » quand le statut de commande est sur « livré »
    est ce que c’est possible ?

    merci

    1. Bonjour,

      Cela doit être envisageable, mais cela fait un bon moment que je ne me suis pas replongé sur ce tutoriel… il date de 3 ans. Il est peut-être plus simple d’acheter un module qui fait l’édition de commandes avancées.

      A bientôt !

  8. Bonjour,
    J’ai le même souci qu’Alexis,
    suite aux changements je peux modifier les quantités, mais lorsque je clique sur mise à jour ca ne fonctionne pas.
    J’ai le message « impossible de modifier une commande livrée », et j’ai pourtant apporté les modifications sur les lignes 1739, 2363, 2419 et j’ai également fait une recherche sur la mention « You cannot edit a delivered order » pour voir s’il ne restait pas un autre controle.

    Une idée ?

    1. Bonjour,

      Le tutoriel est un peu daté 4 ans en arrière… actuellement je ne pourrai pas en dire plus (cela fait longtemps que je n’ai plus mis en place ce code).

      A bientôt !

  9. Bonjour, ce tuto un peu daté mais toujours d’actualité avec cette fonction importante et manquante à Prestashop 1.7… SI quelqu’un voulait bien le mettre a jour ? Peut être une petite demande sur le forum de presta? … En tout cas toujours un grand merci à WEBBAX ! Très bonne journée.

    1. Bonjour,

      Pour le moment je n’ai pas eu l’occasion de refaire ce tutoriel sous Prestashop 1.7… j’essaie en principe d’expérimenter de nouvelles idées.

      Merci pour votre fidélité !

      1. Encore merci pour toutes tes idées… Je rebondis sur le fait de vouloir expérimenter de nouvelles idées, c’est très bien. Mais penses que ce genre de modification est une lacune pour la gestion de nos commandes. Je ne parle pas de légalité ou autres mais juste du fait qu’en cas d’erreur du client ou d’erreur dans la config du transporteur nous puissions modifier… J’ai ce problème actuellement et je dois juste modifier le tarif du transporteur sur une commande spécifique(uniquement pour une question esthétique dans mon back) et me rend compte de la difficulté. Alors « oui » re proposer cette modification dans un tuto mis a jour ce serais juste combler une énorme lacune a Prestashop. Ce n’est pas a presta de respecter les lois mais a nous commerçants. En tout cas merci merci a toi et ton travail ! Tu deviens « juste » un exemple… Et accessoirement j’ai découvert un vieux tuto ou tu avais des cheveux !!!!! :-)))))

        1. Hello,

          Oui ça date déjà ce tutoriel Prestashop, j’avais dû faire une fois cette adaptation pour un e-commerçant qui était bloqué avec ça. Bon il est aussi possible de passer par PHPmyAdmin et faire un ajustement manuel sur la table (si c’est uniquement pour 1 seule commande)… moins pratique si on n’est pas trop technique.

          Ahaha l’histoire des cheveux m’a « killed » et oui tout change, maintenant c’est plus aérodynamique 😉

          Merci pour ce retour positif !

  10. Bonjour,

    Merci pour cette aide mais votre code est illisible car votre éditeur a remplacé les signes supérieurs et inférieurs par des  » < « …

    Pouvez-vous corriger ?

  11. Pour ceux qui cherchent à pouvoir ajouter des produits c’est dans le fichier :

    helpers/view/view.tpl qu’il faut commenter

     988                                         {if $can_edit}
     989                                         
     990                                         {if !$order-&gt;hasBeenDelivered()}
     991                                                 
     992                                                         <i></i>
     993                                                         {l s='Add a product'}
     994                                                 
     995                                         {/if}
     996                                                 
     997                                                         <i></i>
     998                                                         {l s='Add a new discount'}
     999                                                 
    1000                                         
    1001                                         {/if}
    

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *