dradisso Posted May 10, 2012 Share Posted May 10, 2012 Un bref rappel de ma problématique : un de mes clients souhaitait donner à ses agents commerciaux l'accés à la liste des clients de son site. Bien évidemment, chaque commercial ne devait avoir accés et gérer que ses propres clients. Pas question d'investir dans une machine de guerre de plugin de gestion commerciale type Sage ou autre. De même, je ne voulais pas modifier la base clients de prestashop pour ne pas compliquer les mises à jour (vu leur fréquence hem hem ...). J'ai donc contourné l'utilisation des groupes de clients, qui ne sont à priori prévus que pour gérer des remises. Et un grand merci à DrGren qui m'a mis sur la voie avec ce post Donc, comment procéder: 1) créer un profil d'employé retreint intitulé 'Commercial', ou autre mais cet intitulé sera à changer à la ligne 49 du code. Appliquer ou non des restrictions à ce profil. Pour mon client, les commerciaux ne peuvent avoir accàs qu'à la liste des clients, produits et commandes. 2) créer un groupe de clients pour chaque commercial, selon la règle suivante : le groupe possède comme intitulé le nom du commercial. Ex : groupe Machin destiné à recevoir les clients du commercial Jean Machin. Si deux commerciaux ont le même nom, il est facile d'adapter le script pour prendre en compte Nom+prénom. 3) dans les informations d'un client, lui attribuer par défaut le groupe de son commercial Et c'est tout ! Lorsqu'un commercial se loggue, le script va filtrer la liste de clients pour n'afficher que ceux qui lui sont rattachés, j'insiste encore, c'est à dire ceux qui appartiendront au groupe ayant son nom. Le code nécessaire est ci-dessous. Il suffit de l'ajouter au début de la fonction __construct() du fichier AdminCustomers situé dans manager/tabs/. Aucune intervention sur la base n'est nécessaire, ni d'override. Il y a surement une solution plus élégante mais celle-ci fonctionne parfaitement, j'ai même étendu le filtrage aux bons de réduction et aux commandes. Bonne utilisation à toutes et à tous, si vous avez une question, je suis là. Dominique public function __construct() { // FILTRAGE LISTE CLIENTS PAR GROUPE DU MÊME NOM QUE L'EMPLOYE CONNECTE // par D. Radisson (www.domradisson.net) // Date : 30 avril 2012 // Sur version PrestaShop 1.4.7.2 // Par défaut, on ne filtre pas $filtrage_clients=FALSE; // on récupère le nom de l'employé connecté $employe = ($GLOBALS['employee']); $employe_nom = $employe->lastname; // on récupère l'id du profil de l'employé connecté $employe_idprofil = $employe->id_profile; // on récupère l'id du profil d'employé intitulé 'Commercial' $sql = 'SELECT id_profile FROM '._DB_PREFIX_.'profile_lang WHERE name = "Commercial"'; if ($result = Db::getInstance()->getRow($sql)) $commercial_idprofil=$result['id_profile']; // ETAPE 1 // Let's do the job ! // si l'employé connecté est un administrateur ($employe_idprofil==1) // on déclare le filtrage sur les clients à FALSE : on ne filtre pas // dans le cas contraire et si l'id du profil de l'employé connecté // est identique à l'id du profil employé 'Commercial' // on déclare le filtrage sur les clients à TRUE : on filtre $filtrage_clients = ($employe_idprofil==1)? FALSE : (($employe_idprofil==$commercial_idprofil) ? TRUE : FALSE); // ETAPE 2 // si on filtre, on récupère l'id du groupe de clients // ayant le même nom que l'employé connecté if ($filtrage_clients ==TRUE) { $sql = 'SELECT id_group FROM '._DB_PREFIX_.'group_lang WHERE name = "'.$employe_nom.'"'; if ($result = Db::getInstance()->getRow($sql)) $id_groupe_filtre=$result['id_group']; } // ETAPE 3 // si on filtre, on ajoute un filtre à la requête d'affichage des clients $this->_filter = ($filtrage_clients==TRUE && isset($id_groupe_filtre)) ? 'AND a.id_customer IN (SELECT cg.id_customer FROM '._DB_PREFIX_.'customer_group cg WHERE cg.id_group = '.$id_groupe_filtre.')':''; // FIN FILTRAGE CLIENTS $this->table = 'customer'; etc etc 3 Link to comment Share on other sites More sharing options...
manouille Posted May 12, 2012 Share Posted May 12, 2012 Merci pour le partage. Link to comment Share on other sites More sharing options...
domdas Posted February 27, 2013 Share Posted February 27, 2013 Merci Dradisso pour cette excellente contribution qui résout en partie mon probléme sauf que dans mon cas j'ai besoin de créer un filtrage des clients par département sans être obligé d'attribuer un groupe après chaque inscription. L'idée serait de récupérer le début du code postal dans la requête du filtrage mais je ne vois pas comment faire. D'avance merci pour votre aide. Link to comment Share on other sites More sharing options...
kouik-e Posted April 16, 2013 Share Posted April 16, 2013 Exactement ce que je cherchais, merci bien pour ton code magique. j'ai filtré les clients et les commandes Link to comment Share on other sites More sharing options...
Jojopatate Posted May 26, 2013 Share Posted May 26, 2013 Bonjour à tous. Je me permet de rebondir sur votre sujet. J'essaye actuellement de résoudre un problème sans trop de frais, et j'aimerais votre avis sur le sujet : Une équipe commerciale a ses clients. Chacun pouvant avoir accès à ses clients, comme vous l'expliquez plus haut. Chaque fois que le client X achète sur le site, le commercial Y touche une commission de 20% (il entre le code promo correspondant à son commercial pour le suivi). Au bout d'un an et un jour, la commission passe à 10% lorsque le client X achète sur le site. Question : comment puis-je faire en sorte de gérer automatiquement cette commission décroissante sur PS ? Le but étant que le commercial trouve toujours de nouveaux clients pour continuer à avoir des commissions hautes de 20% sur l'achat de ses clients. Avec le système actuel de code promo (et le module meilleur coupon de réduction), je peux voir le CA par code promo, mais je ne gère pas la date de création du compte client. En résumé il faut que le commercial puisse voir son portefeuille client, et qu'une sorte de timer indique à PS qu'au bout d'un an d'inscription, la commission du commercial m'ayant apporté ce client est dégressive. Avez-vous une idée sur la question, même une piste ? S'il faut coupler PS à un logiciel de gestion commerciale, lequel pourrait faire l'affaire ? Merci par avance. Link to comment Share on other sites More sharing options...
amandloren Posted June 24, 2013 Share Posted June 24, 2013 Bonjour et merci pour cette fonction bien pratique, afin de la mettre en place, pourrais-tu m'indiquer dans quel dossier exactement on doit faire cette modif ? car je suis sur la version 1.5.4.1, mais je ne trouve pas le dossier manager/tabs Merci d'avance amandine Link to comment Share on other sites More sharing options...
nagneau Posted July 4, 2013 Share Posted July 4, 2013 Est ce que quelqu'un a trouvé où mettre cette fonction pour prestashop 1.5.4, Merci de votre aide, Agnès BH Link to comment Share on other sites More sharing options...
nagneau Posted July 4, 2013 Share Posted July 4, 2013 pour info j'ai trouvé ce module qui correspond bien : http://addons.prestashop.com/fr/modules-facturation-compta/7365-portefeuille-clients.html bonne journée, Agnès BH Link to comment Share on other sites More sharing options...
amandloren Posted August 2, 2013 Share Posted August 2, 2013 (edited) Bonjour, oui ce module a l'air très bien pour notre version, mais en plus je recherche la possibilité que chaque commercial ayant accès à ses clients puissent passer commande pour ces derniers ou créer de nouvelles commandes pour de nouveaux prospects en allant jusqu'au paiement et validation de la commande (mais que le suivi de l'envoi, modification éventuelle ne se fasse qu'au bureau, le commercial ne pouvant intervenir après la commande passée, qu'il est juste à la visualiser). Est-ce que vous pensez qu'avec cette modif (ou le module) + une bonne gestion des permissions dans le BO pourrait faire l'affaire ? Merci d'avance Bonne journée Edited August 2, 2013 by amandloren (see edit history) 1 Link to comment Share on other sites More sharing options...
pouc Posted January 21, 2014 Share Posted January 21, 2014 Merci pour ce tuto il m' a été très utile. PS: il est marche très bien sur presta 1.5.6.1 Baptiste Link to comment Share on other sites More sharing options...
Turtle Wet Sports Posted December 1, 2015 Share Posted December 1, 2015 (edited) Excellent ! Exactement ce que je cherchais...avant d'essayer, quelqu'un peut me dire si ça fonctionne sur la structure 1.6.1.3 ? Merci d'avance ! EDIT : Testé et approuvé sur la version 1.6.1.3, et étendu aux commandes et aux adresses en copiant simplement le même code dans les fichiers AdminAdressesController.php et AdminOrdersController.php...tous ces fichiers se trouvent dans le dossier controllers/admin Tu viens de me faire économiser un module à 99€, j'te paye une bière quand tu veux !! ;-) Edited January 28, 2016 by Turtle Wet Sports (see edit history) Link to comment Share on other sites More sharing options...
Arpels Posted September 30, 2016 Share Posted September 30, 2016 Bonjour, J'aimerais adapter ton script pour les manufacturer. Au lieu de filtrer les clients, je veux filtrer les produits. public function __construct() { // FILTRAGE LISTE CLIENTS PAR GROUPE DU MÊME NOM QUE L'EMPLOYE CONNECTE // par D. Radisson (www.domradisson.net) // Date : 30 avril 2012 // Sur version PrestaShop 1.4.7.2 // Par défaut, on ne filtre pas $filtrage_produits=FALSE; // on récupère le nom de l'employé connecté $employe = ($GLOBALS['employee']); $employe_nom = $employe->firstname; // on récupère l'id du commerçant correspondant au prénom du profil connecté $sql ='SELECT psm.`id_manufacturer` FROM `ps_employee` pse, `ps_manufacturer`psm WHERE pse.`firstname`="'.$employe_nom.'" AND pse.`firstname`=psm.`name`' if ($result = Db::getInstance()->getRow($sql)) $commercants_idprofil=$result['id_manufacturer']; // ETAPE 1 // Let's do the job ! // si l'employé connecté est un administrateur ($employe_idprofil==1) // on déclare le filtrage sur les clients à FALSE : on ne filtre pas // dans le cas contraire on déclare le filtrage sur les produits à TRUE : on filtre $filtrage_produits = ($employe_idprofil==1)? FALSE : ELSE ? TRUE : FALSE); // ETAPE 2 // si on filtre, on ajoute un filtre à la requête d'affichage des produits $this->_filter = ($filtrage_produits==TRUE) ? 'AND a.id_manufacturer IN (SELECT * FROM '._DB_PREFIX_.'product p WHERE p.id_manufacturer = '.$id_manufacturer.')':''; // FIN FILTRAGE PRODUIT $this->table = 'product'; Merci d'avance pour votre aide ! Cdt, Link to comment Share on other sites More sharing options...
Centaure Posted January 12, 2017 Share Posted January 12, 2017 Bonjour, de mon coté je cherche une solution pour filtrer les produits et les commandes contenant certains produits pour chaque employés ... quelqu'un à t-il une idée ? un module ? merci par avance 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