
Vendre et facturer, c’est l’opérationnel. Comprendre ce qui marche, suivre les performances par commercial, anticiper la charge atelier, gérer les congés de l’équipe — c’est le pilotage. Les ERP grand public traitent ces sujets en silos : une feuille Excel pour les objectifs, Google Calendar pour les plannings, une extraction Sage mensuelle pour les KPIs. CRM Cycles regroupe le tout dans un tableau de bord unique et deux rapports (ventes, stock) qui s’exportent en PDF pour la compta.
Tableau de bord : 4 KPIs personnels à la connexion
À chaque connexion, l’utilisateur voit en premier ses indicateurs personnels du moment :
- Mon CA du mois — total des ventes facturées payées ou partiellement payées (moins les avoirs validés) sur le mois en cours
- Mes SAV en cours — nombre de dossiers garantie actifs (nouveau, reconnu, en révision, approuvé, en attente de pièces, en réparation)
- Mes ventes du jour — nombre de factures payées ou partielles générées aujourd’hui
- Mes relances — documents qui demandent une action : devis en brouillon > X jours, fiches produits envoyées sans document associé, reprises occasion à relancer
Côté contexte temps : heures travaillées de la semaine (selon l’emploi du temps), congés restants, horaires du jour, alerte si actuellement en absence, prochaines absences approuvées, et un bouton « Demander une absence ». Pour les responsables, un panneau additionnel affiche l’effectif actif et les absences en attente d’approbation.
Rapport de ventes : KPIs + comparaisons + fréquentation horaire
Le rapport Ventes filtre par :
- Période : aujourd’hui / cette semaine / semaine dernière / ce mois / mois dernier / cette année / année dernière / période personnalisée (date début + date fin libres)
- Comparaison : aucune / période précédente / mois précédent / année précédente
- Vendeur : tous, ou un commercial spécifique
Les 5 indicateurs clés affichés :
- Nb de ventes — Calcul : Factures validées / partielles / payées sur la période
- CA HT — Calcul : Total HT des factures
- CA TTC — Calcul : Total TTC des factures
- Panier moyen — Calcul : CA TTC ÷ nombre de ventes
- Marge — Calcul : Somme de (total HT − coût d’achat) sur toutes les lignes
Quand une comparaison est activée, chaque indicateur affiche en parallèle la valeur de la période de référence et un delta en pourcentage avec flèche verte ▲ (amélioration) ou rouge ▼ (dégradation). C’est ça qui transforme un dashboard en pilotage : voir « CA mai +12 % vs mai N-1 » plutôt que juste « CA mai = 42 750 € ».
Indicateurs secondaires affichés en complément : nouveaux clients de la période, TVA collectée (sur les ventes), TVA déductible (sur les réceptions fournisseur).
Les tableaux de répartition ventilent ensuite :
- Ventes par famille / catégorie / sous-catégorie : quantité vendue, CA HT, marge — pour voir d’un coup d’œil que les VAE tirent la marge, que les accessoires font le volume.
- Ventes par groupe client : nombre de factures par groupe tarifaire (cf article fiches clients). Permet de voir si les comptes pros tiennent leurs engagements de chiffre.
- Achats fournisseurs par catégorie : réceptions validées avec quantité, montant HT, TVA déductible.
Le graphique de fréquentation adapte sa granularité à la période : vue horaire (0-23h) sur une journée, vue journalière sur une période multi-jours, vue hebdomadaire au-delà de 60 jours. Sur la journée, ça permet de voir clairement les pics 12h-14h et 17h-19h, et d’ajuster l’effectif boutique en conséquence.
Rapport de stock : valorisation + ancienneté + remise recommandée
Le rapport Stock filtre par marque, famille, ou recherche libre (nom, numéro de série). Pour chaque niveau de l’arborescence catalogue, il affiche :
- Qté en stock — Description : Unités actuellement en stock
- Valeur PA HT — Description : Quantité × prix d’achat HT (ce que ça vous a coûté)
- Valeur PV HT — Description : Quantité × prix de vente HT (potentiel de vente)
- Valeur PV TTC — Description : Quantité × prix de vente TTC
- Marge — Description : (PV HT − PA HT) avec pourcentage
Spécificité vélocistes utile : l’analyse d’ancienneté des vélos classe automatiquement les exemplaires en stock par tranche d’âge (depuis leur date de réception) et propose des taux de remise recommandés pour favoriser la rotation. Un VAE Bosch qui dort en réserve depuis 14 mois ne se vendra pas au prix catalogue de l’année — le rapport le signale avec une recommandation type « remise 15 % suggérée » pour le faire bouger avant que sa génération soit obsolète.
Objectifs de vente par commercial
Le module Objectifs ventes permet au manager de fixer des cibles individuelles par commercial, par mois ou par trimestre, sur trois axes :
- CA HT total — l’objectif financier classique
- Nombre de ventes — pour favoriser le volume de transactions, pas juste les grosses ventes ponctuelles
- Marge cumulée — pour pénaliser les ventes « au rabais » qui flattent le CA mais détruisent la rentabilité
Chaque commercial voit son taux de réalisation en temps réel sur le tableau de bord (jauge colorée verte/orange/rouge selon le ratio réalisé/objectif). Le manager dispose d’une vue consolidée équipe : classement, retards, surperformances. Idéal pour les revues mensuelles ou pour piloter une prime variable annuelle.
Emplois du temps : planning RH intégré
Le module Emplois du temps (/schedule) gère les horaires de chaque utilisateur. Deux vues : globale (tous les utilisateurs) ou filtrée par utilisateur (?userId=X). Les actions standards : création d’un créneau, création en lot (bulk-create), modification, suppression — avec validation côté serveur pour éviter les chevauchements ou les créneaux hors plage légale.
Le module est internationalisé (i18n) : testé en français, anglais, allemand et espagnol. Utile pour les magasins en zone frontalière (Allemagne, Suisse, Belgique) ou avec personnel non-francophone.
Ce planning alimente automatiquement deux autres modules :
- Le planning global atelier (cf article atelier) — les heures disponibles d’un technicien sortent de son emploi du temps. Si on lui colle 35h de travaux atelier alors qu’il fait 28h cette semaine, le planning affiche rouge.
- Le calcul des congés restants : les jours travaillés / disponibles servent de base au compteur RTT et congés payés.
Absences : workflow de demande + approbation
Côté employé, le bouton « Demander une absence » du tableau de bord ouvre un formulaire avec type (congé payé, RTT, maladie, sans solde, formation), dates de début et fin, motif optionnel. Soumission → statut En attente → notification au manager.
Côté manager, la liste des demandes filtrable par statut, par utilisateur, par période. Actions : approuver, refuser (avec motif), reporter. Une absence approuvée :
- Bloque les créneaux dans l’emploi du temps de l’employé
- Met à jour son compteur de congés restants (consommation automatique)
- Apparaît sur le tableau de bord équipe (« Absences en cours »)
- Apparaît dans le planning atelier comme « plage bloquée » non-affectable
Les politiques de congés (jours acquis par mois, plafond, type de jours décomptés — ouvrables, ouvrés, calendaires) sont configurables au niveau magasin pour s’adapter aux conventions collectives applicables.
Sous le capot
- Rapports : deux contrôleurs Yii2
ReportSalesControlleretReportStockController, chacun renvoyant les KPIs + tableaux + données graphiques en JSON. Le rendu utilise Chart.js côté front pour la fréquentation. Export PDF via TCPDF, layout paysage pour les tableaux denses. - Comparaison de période : chaque KPI est calculé deux fois (période courante + période de référence) en parallèle, puis le delta est calculé côté serveur. Permet de mettre en cache les valeurs précomputées si besoin.
- Analyse d’ancienneté vélos : requête SQL avec
DATEDIFF(NOW(), reception_date)sur lesProductSerial« En stock ». Bucket par tranche (0-3 mois, 3-6, 6-12, 12+). Les taux de remise recommandés viennent d’une table de paramétrage modifiable par le manager. - Objectifs : modèle
SalesGoallié àUser, période + 3 cibles (montant, count, marge). Le taux de réalisation se calcule en SQL par jointure avec lesCustomerDocumentvalidés de la période. - Emplois du temps : modèle
Scheduleavec contraintes d’intégrité (CHECK SQL pour empêcher start > end), validation côté serveur des chevauchements. Endpoints REST/schedule/index,/schedule/create,/schedule/bulk-create,/schedule/update,/schedule/delete. i18n via les fichiers Yii2messages/<locale>/app.php(fr-FR + en-US + de-DE + es-ES). - Absences : modèle
Absenceavec workflow Pending → Approved/Rejected. HookafterSavesurApprovedqui décrémente le compteur de congés et ajoute des plages bloquées dansSchedule. - Permissions :
reports.view,reports.export,goals.manage,schedule.manage,absence.approve. Les rapports sont accessibles aux managers et au-dessus ; un commercial ne voit que ses propres données via les KPIs personnels du tableau de bord.
Ce qu’on gagne au quotidien
- Pilotage continu, pas mensuel : le commercial voit son CA et ses ventes du jour à chaque connexion, l’objectif mensuel est en permanence visible.
- Pas d’Excel d’objectifs : les cibles sont centralisées en base, mises à jour en temps réel, comparées automatiquement à la réalisation.
- Anti-déstockage tardif : l’analyse d’ancienneté vélos signale les invendus avant qu’ils deviennent invendables, avec une recommandation de remise.
- Plus de doublons planning + congés : l’emploi du temps alimente le planning atelier et le calcul de congés. Une seule source de vérité pour les RH.
- Tableau de bord motivant : les 4 KPIs personnels remettent chaque utilisateur dans son rôle dès la connexion.
Le dernier article de la série couvrira la sécurité : système d’étiquettes (impression, formats, imprimantes), 2FA Authenticator, authentification NFC (badge) et biométrie (empreinte/visage) pour les actions sensibles. La couche qui empêche que quelqu’un signe une facture NF525 à votre place.

