Jump to content

Ordre des états des commandes


Recommended Posts

Bonjour à tous.

Comme quelques uns d'entre nous, nous avons une liste très riche d'états dans lesquels les commandes peuvent être positionnés.

Trop d'ailleurs par rapport au besoin.

Je ne souhaite pas en supprimer quand même, car on ne sait jamais de quoi l'avenir sera fait. Je souhaite par contre regrouper en tête de liste les états qui sont utiles au fonctionnement de la gestion des commandes.

Dans "Boutique / Commandes / états des commandes" j'ai bien trouvé comment créer de nouveaux états, éventuellement supprimer, ceux qui ont été créés par des modules anciens, mais je n'ai pas trouvé comment revoir l'ordre d'affichage des états.

Je n'ai pas trouvé d'astuce dans le forum, quelqu'un a-t-il déjà satisfait le même besoin?

Je vous remercie

 

Link to comment
Share on other sites

Perso je nettoierai les statuts inutiles, mais sinon tu peux faire un "faux" ménage en les renommant, tu ajoutes par exemple "z_" devant, et comme les états sont triés par ordre alphabétique, tous les états inutiles se mettront en bas de liste.

Moi je cherche pour pouvoir n'afficher que les commandes non finalisées pour nettoyer visuellement le travail à faire.

Link to comment
Share on other sites

Merci pour ce retour

La plupart des status non pertinents fait partie des non retirables. Donc on va les laisser.

Par contre, effectivement en les renommant z_ en entête ça les plaque en fond de panier, ce qui était l'effet recherché.

J'ai appliqué cette modif sur la préprod, j'attends le retour des utilisateurs du BO avant déploiement...

Merci pour l'astuce, des fois les trucs les plus simples sont les plus efficaces...

  • Like 1
Link to comment
Share on other sites

  • 1 year later...

Salut,
Comme j'ai eu la problématique sur un Prestashop 1.6.1.17, je me suis trouvé la solution suivante qui fonctionne au poil :

D'abord je me suis noté les ID de chaque statut, depuis le Back Office - Commandes - statuts

Ensuite il convient d'éditer le fichier classes/order/OrderState.php et modifier la fonction : public static function getOrderStates($id_lang)
Dans cette fonction il y a la requête qui affiche tous les statuts.
Nous allons donc dans le WHERE lui indiquer les id des statuts que l'on souhaite afficher 

WHERE deleted = 0 and osl.id_order_state in (22,2,6,7,8,9,21,22,23,24,25,28,31,32,36,37,3,35,18)

les chiffres entre parenthèses correspondent aux statuts qui doivent apparaitre, les autres statuts n'apparaitront pas, ils ne sont pas supprimé pour autant.

Puis pour les mettre dans l'ordre précis il convient de faire à la suite du WHERE un ORDER BY comme ceci :

 

	WHERE deleted = 0 and osl.id_order_state in (22,2,6,7,8,9,21,22,23,24,25,28,31,32,36,37,3,35,18)
			ORDER BY 
			CASE 
			WHEN osl.id_order_state = 22 THEN 1
			WHEN osl.id_order_state = 23 THEN 2
			WHEN osl.id_order_state = 3 THEN 3
			WHEN osl.id_order_state = 24 THEN 4
			WHEN osl.id_order_state = 9 THEN 5
			WHEN osl.id_order_state = 25 THEN 6
			WHEN osl.id_order_state = 31 THEN 7
			WHEN osl.id_order_state = 32 THEN 8
			WHEN osl.id_order_state = 7 THEN 9
			WHEN osl.id_order_state = 6 THEN 10
			WHEN osl.id_order_state = 36 THEN 11
			WHEN osl.id_order_state = 37 THEN 12
			WHEN osl.id_order_state = 8 THEN 13
			WHEN osl.id_order_state = 2 THEN 14
			WHEN osl.id_order_state = 18 THEN 15
			ELSE 15
			END


Le chiffre après le THEN correpond à l'ordre choisi.
Concrètement dans mon cas de figure le statut ID 22 sera en 1ère position, le 23 en 2ème position ...


 

Link to comment
Share on other sites

  • 1 year later...

Bonjour, nous aimerions adapter cette technique pour la version 8.1.6 concernant des états de commandes à cacher.

Nous avons bien ouvert le fichier et retrouvons la fonction liée :

Nous appliquons ce changement mais pas d'affichage spécifique de certains états de commande, pourriez-vous nous éclairer ?

merci d'avance à vous.

--------------------------

public static function getOrderStates($id_lang, $filterDeleted = true)
    {
       $deletedStates = $filterDeleted ? ' WHERE deleted = 0' : '';
   
        $cache_id = 'OrderState::getOrderStates_' . (int) $id_lang;
        $cache_id .= $filterDeleted ? '_filterDeleted' : '';

        if (!Cache::isStored($cache_id)) {
            $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
            SELECT *
            FROM `' . _DB_PREFIX_ . 'order_state` os
            LEFT JOIN `' . _DB_PREFIX_ . 'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = ' . (int) $id_lang . ')'
            . $deletedStates . ' ORDER BY `name` ASC');
            Cache::store($cache_id, $result);

            return $result;
        }

        return Cache::retrieve($cache_id);
    }

Link to comment
Share on other sites

Just now, Knowband Plugins said:

À partir de quel endroit souhaitez-vous masquer le statut de la commande ? La modification de la fonction ci-dessus masquera le statut de la commande partout dans le magasin. 

Dans ce cas, vous pouvez simplement le supprimer de l'administrateur Pretashop.

Merci pour votre retour rapide.

Nous aimerions le cacher uniquement pour la partie BO dans liste des commandes et le détail d'une commande afin de simplifier pour les administrateurs la gestion des commandes.

 

merci d'avance.

Capture d’écran 2025-02-27 à 09.58.31.png

Link to comment
Share on other sites

Bonjour,
Je vous aurais bien aidé mais j'en ai fait un module car c'est une demande récurrente chez mes clients.
Ne toucher que sur le listing des commandes afin d'avoir quand même la totalité des états de commande en étant dans la commande elle même. 😇
Je dois encore y apporter quelques modifs (propreté du code et enlever les commentaires) mais si vous désirez le tester => mp ;)
 

PROGERANCE_27022025_ivYiU236li.thumb.png.7ffc26995e736e188f9385599c66a6c9.png

 

PROGERANCE_27022025_H9PW2P6wKl.thumb.png.d0901c1528a2fdfa407ab9b327b13391.png

Link to comment
Share on other sites

Bonjour,

As-tu essayé ce que j'ai proposé ?
A savoir de rajouter un :
 

WHERE osl.id_order_state in (1,2,3,4,5,6,7)


avant ton ORDER BY ?

Les chiffres entre parenthèses étant les ID des statuts que tu souhaites afficher.

Link to comment
Share on other sites

Merci pour le retour, en effet, j'ai essayé cette méthode

 

public static function getOrderStates($id_lang, $filterDeleted = true)
    {
       $deletedStates = $filterDeleted ? ' WHERE deleted = 0' : '';
   
        $cache_id = 'OrderState::getOrderStates_' . (int) $id_lang;
        $cache_id .= $filterDeleted ? '_filterDeleted' : '';

        if (!Cache::isStored($cache_id)) {
            $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
            SELECT *
            FROM `' . _DB_PREFIX_ . 'order_state` os
            LEFT JOIN `' . _DB_PREFIX_ . 'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = ' . (int) $id_lang . ')'
            . $deletedStates . ' ORDER BY `name` ASC');
            Cache::store($cache_id, $result);

            return $result;
        }

        return Cache::retrieve($cache_id);
    }

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