Jump to content

Filtrage clients selon commerciaux


dradisso

Recommended Posts

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

  • Like 3
Link to comment
Share on other sites

  • 9 months later...

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

  • 1 month later...
  • 1 month later...

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

  • 5 weeks later...

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

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

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 by amandloren (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 5 months later...
  • 1 year later...

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 by Turtle Wet Sports (see edit history)
Link to comment
Share on other sites

  • 9 months later...

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

  • 3 months later...

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