CrmGUARD / CrmGUARD
Suivi commercial de la suite GUARD : clients, opportunités, abonnements et factures. Application de bureau, hors ligne, mono-poste.
Version 1.38.0 · Guide utilisateur, installation & techniquePrésentation
CrmGUARD est une application de bureau qui centralise le suivi commercial de la suite GUARD : clients, opportunités, abonnements et factures. Elle fonctionne hors ligne, sans serveur, avec une base de données locale.
En bref
- Application de bureau Windows (WPF, .NET 10) — installée sur le poste, pas de navigateur.
- Base locale SQLite (
salesguard.db) créée automatiquement au premier lancement. Aucune configuration serveur. - Mono-poste : un utilisateur, ses données sur sa machine. Sauvegardes automatiques horodatées.
- Bilingue français / anglais, bascule instantanée sans redémarrage.
- Facturation intégrée avec numérotation automatique, TVA, modèles imprimables et export PDF.
À qui s'adresse cette application
CrmGUARD est l'outil de pilotage des ventes de la suite GUARD. Il convient à un éditeur qui distribue ses logiciels, à un partenaire qui les revend sous sa marque, ou à une équipe commerciale qui pilote son activité à son rôle.
Comment lire ce guide
Le menu de gauche suit l'ordre des chapitres : prise en main et installation, puis chaque fonctionnalité pas à pas, puis la partie technique (architecture et base de données) et enfin le déploiement. Utilisez le champ de recherche pour filtrer les chapitres, et le sélecteur FR / EN en haut pour changer de langue.
Premier lancement
Au tout premier démarrage, l'application se prépare toute seule : création de la base, choix de la langue.
L'écran de démarrage apparaît
Un écran « CRM GUARD » s'affiche pendant que la base locale est créée et mise à jour. C'est instantané sur un poste récent.
La base est créée automatiquement
Le fichier salesguard.db est créé dans les données de l'application. Rien à installer ni à configurer.
Choisissez la langue
L'application démarre en anglais par défaut. Basculez en français avec le sélecteur FR / EN en haut de la barre latérale — le changement est immédiat.
Installation
Deux façons d'installer CrmGUARD sur un poste : l'installateur Windows (recommandé) ou le lancement direct de l'exécutable publié.
Prérequis du poste
- Windows 64 bits (Windows 10 ou 11).
- .NET Desktop Runtime 10 (x64) — nécessaire à l'édition légère. L'installateur le vérifie et propose de le télécharger s'il manque : dotnet.microsoft.com/download/dotnet/10.0/runtime (rubrique « Run desktop apps »).
Méthode 1 — l'installateur (recommandé)
Lancez CrmGUARD-Setup-<version>.exe
Il demande les droits administrateur (installation dans C:\Program Files\CrmGUARD).
Acceptez le contrat de licence
Le contrat est affiché avant l'installation.
Choisissez les raccourcis
Un raccourci Menu Démarrer est créé ; le raccourci Bureau est optionnel (case à cocher).
Vérification du runtime
Si le .NET Desktop Runtime 10 manque, le setup ouvre la page de téléchargement Microsoft et s'interrompt — installez le runtime puis relancez le setup.
Terminé
L'application se lance depuis le menu Démarrer. La base salesguard.db est créée au premier lancement.
Méthode 2 — édition autonome (sans runtime)
Une édition « autonome » embarque .NET : plus volumineuse, mais elle tourne sans installer le runtime. Elle se construit avec l'option dédiée du script de build (voir le chapitre Construire & déployer).
Tableau de bord
Le tableau de bord est la page d'accueil : il résume l'activité commerciale en un coup d'œil.
Ce que vous y voyez
- Chiffres clés : pipeline en cours, chiffre d'affaires, renouvellements proches, tâches en retard.
- CA par produit : répartition du chiffre d'affaires en anneau.
- Évolution du CA gagné : graphique en barres des 12 derniers mois (les mois sans vente apparaissent à zéro).
- Opportunités : raccourci vers le pipeline.
Clients
Le module Clients gère votre répertoire et, pour chaque client, une fiche détaillée à onglets.
La liste des clients
- Recherche en haut, filtres (statut, priorité) et pagination (25 / 50 / 100 / 200 par page) pour les gros volumes.
- Tri en cliquant sur l'en-tête d'une colonne (une flèche indique le sens).
- Import CSV et Export CSV : l'export produit tout le répertoire ; l'import lit ce même format (séparateur « ; »).
Statuts & priorités
Statut d'un client : Prospect, Actif, Inactif. Priorité : Basse, Normale, Haute. Ces valeurs colorées se traduisent à l'affichage selon la langue.
Créer un client
Cliquez sur « Nouveau »
Ou Ctrl+N depuis la liste.
Renseignez la fiche
Raison sociale (obligatoire), coordonnées, statut, priorité. La raison sociale est le seul champ requis.
Enregistrez
Le client apparaît dans la liste et devient disponible partout (opportunités, factures, abonnements).
La fiche client (8 onglets)
| Onglet | Contenu |
|---|---|
| Informations | Coordonnées et caractéristiques de la société. |
| Contacts | Personnes à contacter (ajout manuel). |
| Opportunités | Affaires en cours et gagnées/perdues pour ce client. |
| Abonnements | Contrats récurrents du client. |
| Factures | Factures émises pour ce client. |
| Notes | Notes libres. |
| Historique | Journal des actions liées au client. |
Pipeline & opportunités
Le pipeline présente vos opportunités commerciales en colonnes, par étape d'avancement.
Les étapes
Lead → Prospect → Qualification → Proposition → Négociation → Gagné / Perdu. Chaque colonne regroupe les opportunités à cette étape.
Créer et suivre une opportunité
Nouvelle opportunité
Rattachez-la à un client, donnez un intitulé, un montant et une étape de départ.
Faites-la avancer
Modifiez son étape au fil des échanges. La vue reflète immédiatement l'avancement.
Clôturez en « Gagné »
Une opportunité gagnée alimente le chiffre d'affaires du tableau de bord et peut déclencher une facture automatique (voir Facturation).
Abonnements
Les abonnements représentent les contrats récurrents : date de début, échéance, montant, renouvellement.
Champs d'un abonnement
- Client et produit concernés.
- Début et échéance ; les jours restants sont calculés automatiquement (un abonnement résilié affiche « — »).
- Montant et renouvellement automatique.
- Statut : Actif / Résilié.
Recherche, filtre, pagination
La liste se recherche (client, produit), se filtre par statut et se pagine comme les autres listes.
Factures
Le module Factures couvre l'émission, le suivi des paiements, l'impression et l'export PDF. Les paramètres (numérotation, TVA, modèle) se règlent dans Paramètres › Facturation.
Cycle de vie d'une facture
Statuts : Brouillon → Émise → Payée, ou Annulée. Une facture émise dont l'échéance est dépassée est signalée En retard.
Créer une facture
Nouvelle facture
Sélectionnez le client ; ses coordonnées sont figées sur la facture au moment de la création.
Ajoutez les lignes
Désignation, quantité, prix unitaire. Le sous-total, la TVA et le total TTC se calculent automatiquement.
Émettez
La facture reçoit son numéro (préfixe + année + compteur) et passe en « Émise ».
Suivez le paiement
Marquez « Payée » à réception. Les impayés échus ressortent « En retard ».
Relancer, imprimer, exporter
- ✉ Relancer : prépare un courriel de relance pré-rempli (numéro, montant, échéance, jours de retard) vers l'adresse du client.
- Aperçu : ouvre la facture dans le navigateur, prête à imprimer.
- ⤓ Exporter PDF : ouvre la facture avec la boîte d'impression, choisissez « Enregistrer au format PDF ».
Factures archivées
L'entrée Factures › Archivées conserve les factures sorties du flux courant, consultables à tout moment.
Devis & bons de commande
Le module Devis produit un devis qui vaut bon de commande une fois signé : le document imprimable porte une zone « Bon pour accord ». Il partage la numérotation, la TVA et les quatre modèles de mise en page des factures, réglés dans Paramètres › Facturation.
Profil commercial
Chaque devis est rattaché à un profil qui adapte le catalogue proposé et l'intitulé du document : Client final, Partenaire ou Autonome. Le profil se choisit en tête du devis ; il détermine les prestations affichées dans le catalogue (voir ci-dessous).
Cycle de vie d'un devis
Statuts : Brouillon → Envoyé → Accepté, ou Refusé. Un devis envoyé dont la date de validité est dépassée est signalé Expiré. Un devis accepté peut être converti en facture.
Créer un devis
Nouveau devis
Sélectionnez le client ; ses coordonnées sont figées sur le devis au moment de la création. Choisissez le profil (client final, partenaire, autonome) et la date de validité.
Cochez les prestations
Le panneau Catalogue n'affiche que les prestations du profil retenu, avec leur prix. Cochez les lignes voulues puis cliquez Ajouter les lignes cochées : elles remplissent la grille, où quantités et prix restent modifiables.
Ajustez
Ajoutez au besoin des lignes libres. Le sous-total, la TVA et le total TTC se calculent automatiquement.
Émettez
Le devis reçoit son numéro (préfixe + année + compteur, distinct de celui des factures) et passe en « Envoyé ».
Le catalogue par profil
Les prestations proposées proviennent du module Produits, filtrées selon le canal du profil :
| Profil | Prestations proposées |
|---|---|
| Client final | Les abonnements annuels par application (EntraGUARD, AdGUARD, AzureGUARD) et la suite des trois. |
| Partenaire | Le droit d'entrée et la licence partenaire annuelle, plus l'option site web à la marque (offert) ajoutée à 0 €. |
| Autonome | La licence de code source. |
Bon pour accord
Le devis fait office de bon de commande : le document imprimable comporte une zone de signature Bon pour accord (date, nom et fonction, signature) avec la mention manuscrite à recopier. Le client commande en retournant le document daté et signé.
Aperçu, PDF, conversion
- Aperçu : ouvre le devis dans le navigateur, prêt à imprimer.
- ⤓ Exporter PDF : ouvre le devis avec la boîte d'impression, choisissez « Enregistrer au format PDF ».
- Convertir en facture : depuis un devis accepté, crée une facture brouillon reprenant le client, les lignes et la TVA. Les deux pièces restent reliées ; la facture est relue avant émission.
Devis archivés
L'entrée Devis › Archivés conserve les devis sortis du flux courant, consultables à tout moment. Un export CSV de la liste est disponible.
Tâches, produits, historique
Tâches
Un to-do commercial simple, avec priorité et échéance.
- Recherche (titre, client), filtre par priorité (Basse / Normale / Haute), case « Afficher les terminées ».
- Tri par échéance ou état ; pagination pour les longues listes.
- Cochez une tâche pour la marquer faite.
Produits
Le catalogue des offres que vous vendez.
- Chaque produit a un code, un nom, une description et un type : Audit ponctuel, Licence, Abonnement.
- Recherche (code, nom) et filtre par type.
- Les produits alimentent les opportunités, abonnements et lignes de facture.
Historique
Le journal de toutes les actions enregistrées dans l'application.
- Recherche plein texte (détail, action, objet), filtre par type d'objet.
- Utile pour retrouver quand un client, une facture ou une opportunité a été modifié.
Paramètres : société & facturation
Mes infos (société)
Vos coordonnées d'entreprise, reprises sur les factures.
- Raison sociale, forme juridique, capital, adresse, identifiants (TVA, RCS…), coordonnées, coordonnées bancaires, logo, mentions légales.
- La raison sociale est requise pour enregistrer.
Facturation
Le paramétrage de vos factures, sur une page dédiée qui occupe tout l'espace.
- Facturation automatique et son déclencheur : à la clôture d'une opportunité gagnée, à l'échéance d'un abonnement, ou les deux.
- Modèle de facture : bandeau, classique, compact ou épuré (liste avec aperçu).
- Numérotation : préfixe, prochain numéro, aperçu du prochain numéro complet.
- TVA, devise, délai de paiement, pénalités de retard, escompte.
- Aperçu : génère une facture d'exemple avec vos réglages.
Paramètres : base de données
Cette page gère la santé, la sauvegarde et l'emplacement de votre base locale.
État de la base
Une bannière colorée indique l'état : toute la carte est verte quand la base est connectée au lancement, rouge en cas d'erreur.
Sauvegarde automatique
- Activée par défaut : une copie horodatée de la base est faite à chaque démarrage, avant toute écriture.
- Rotation configurable : nombre de copies à conserver (3 / 5 / 10 / 20 / 30 / 50).
- Liste des sauvegardes existantes (date + taille), boutons Ouvrir le dossier et Restaurer la sélection.
Emplacement
Le bouton Changer l'emplacement déplace la base vers un autre dossier (par exemple un dossier synchronisé).
Personnalisation (nom & slogan)
Vous pouvez remplacer le nom et le slogan affichés par l'application, depuis À propos.
Ouvrez « À propos »
Entrée de menu indépendante. La carte « Personnalisation » est en bas (bannières repliables).
Saisissez le nom et le slogan
Laissez vide pour conserver les valeurs par défaut (« CrmGUARD » / « CRM GUARD »).
Validez
Le haut de la barre latérale se met à jour immédiatement ; l'écran de démarrage reprend ce nom au prochain lancement.
Architecture technique
CrmGUARD est une application WPF (.NET 10) mono-poste, adossée à SQLite. Pas de couche réseau, pas de serveur.
Vue d'ensemble
Interface (WPF / XAML) Views/*.xaml (+ .xaml.cs)
│ MainWindow (navigation, overlays)
▼
Services / logique métier Services/*.cs
│ Repo (partiel), Loc, InvoiceRenderer…
▼
Données (SQLite local) salesguard.db · Services/Db.cs
Pile technique
- .NET 10,
net10.0-windows, WPF (UseWPF). - SQLite via
Microsoft.Data.Sqlite(10.0.0). - Exécutable
WinExe, nom d'assemblage CrmGUARD, espace de noms racine CrmGUARD. - Métadonnées : Company=M365Expertise, Product=CrmGUARD, icône
salesguard.ico.
Organisation du code
| Dossier | Contenu |
|---|---|
Models/ | Entités et référentiels : Company, Invoice, Entities (clients/opportunités/…), Licensing, Countries, Sectors. |
Services/ | Accès aux données et logique : Repo (classe partielle par domaine), Db (schéma + migrations), InvoiceRenderer, AutoInvoice, Loc (i18n), RefConverter. |
Views/ | 23 vues XAML + code-behind (une par écran) + helpers Pager, IQuickActions. |
Tests/ | Projet console autonome de tests (exclu du build de l'app). |
installer/ | Script Inno Setup, build, icône. |
Le patron MainWindow
- Navigation centralisée :
Navigate(page)instancie la vue et met l'entrée de menu active. Les vues sont recréées à chaque navigation. - Dialogues maison (aucune popup système) : overlays Confirm/Ask et Notify/Toast (Info / Succès / Erreur).
- Auto-facturation : un minuteur horaire balaie les abonnements échus (idempotent).
Base de données
Toutes les données tiennent dans un fichier SQLite unique, salesguard.db, géré par Services/Db.cs.
Principes
- Schéma auto-créé au premier lancement (
CREATE TABLE IF NOT EXISTS). - Migrations tolérantes :
AddColumnIfMissingajoute les colonnes manquantes sur une base déjà déployée, sans perte de données (aucunDROP COLUMN). - Intégrité : clés étrangères activées, journalisation WAL.
- Emplacement mémorisé dans un fichier de préférences ; déplaçable depuis l'interface.
Principales tables
| Table | Rôle |
|---|---|
clients | Répertoire clients (statut, priorité, coordonnées). |
contacts | Contacts rattachés à un client. |
opportunities | Opportunités (étape, montant). |
subscriptions | Abonnements (échéance, montant, statut, dernière facturation). |
products | Catalogue produits (type). |
invoices | Factures et lignes (coordonnées figées à la création). |
tasks, notes, history | Tâches, notes, journal d'actions. |
company | Fiche société unique (id=1) + paramètres de facturation + nom/slogan personnalisés. |
Couche d'accès
Le dépôt Repo est une classe partielle répartie par domaine (RepoClients, RepoInvoices, RepoCompany…), avec des helpers partagés dans Repo.cs. L'API publique reste Repo.Xxx.
Bilingue (i18n)
L'application est intégralement bilingue FR/EN avec bascule à chaud, sans redémarrage ni fichiers satellites.
Mécanique : un dictionnaire maison
Services/Loc.cs: classeLoc(singletonLoc.I,INotifyPropertyChanged).- Un indexeur bindable
this[cle]rend la chaîne FR ou EN selon la langue courante (ou la clé elle-même si absente, pour repérer les trous). SetLanglèvePropertyChanged("Item[]")→ tous les libellés liés se réévaluent instantanément.- Le réglage est mémorisé dans un fichier de préférences (anglais par défaut).
Usage dans le code
<!-- XAML -->
<TextBlock Text="{Binding [Nav.Dashboard], Source={x:Static svc:Loc.I}}"/>
// Code-behind
string titre = Loc.T("CB.Saved");
Avec l'espace de noms xmlns:svc="clr-namespace:CrmGUARD.Services" dans l'en-tête de la vue.
Référentiels traduits sans casse
Les valeurs de référentiel (statuts, priorités, étapes…) restent stockées et comparées en français ; seul l'affichage est traduit, via Loc.Ref(valeur) et un convertisseur RefConverter appliqué aux colonnes et listes. Les comparaisons du code (== "Payée") restent donc inchangées.
Loc.T à la source.Construire & déployer
La production de l'installateur se fait depuis la racine du projet, avec le SDK .NET 10 et Inno Setup.
Prérequis de build
- SDK .NET 10 —
dotnet --versiondoit renvoyer10.x. - Inno Setup 6+ —
ISCC.exeest trouvé automatiquement à son emplacement habituel.
Construire l'installateur
powershell -ExecutionPolicy Bypass -File installer\build.ps1
Le script enchaîne : dotnet publish en win-x64 (dépendant du framework) → installer\publish\, puis compilation de CrmGUARD.iss → installer\dist\CrmGUARD-Setup-<version>.exe.
Édition autonome (embarque .NET)
powershell -ExecutionPolicy Bypass -File installer\build.ps1 -SelfContained
Ce que fait l'installateur
- Installe dans
C:\Program Files\CrmGUARD(droits admin), raccourcis Menu Démarrer + bureau optionnel. - Entrée de désinstallation propre dans « Applications et fonctionnalités ».
- Vérifie le .NET Desktop Runtime 10 au registre ; s'il manque, ouvre la page Microsoft et s'interrompt.
- Affiche le contrat de licence avant l'installation.
Numéro de version
La version provient de <Version> dans CrmGUARD.csproj ; l'installateur la lit sur la DLL publiée (source unique). L'AppId (GUID) de l'installateur ne doit jamais changer : c'est la clé des mises à jour et désinstallations.
Tests
cd Tests
dotnet run
Projet console autonome (sans dépendance externe) couvrant la logique pure (calculs de facture, abonnements, société, référentiels). Il s'exécute partout et renvoie un code d'erreur si un test échoue ; il est exclu du build de l'application.
obj/ et bin/ avant de compiler. Un build.ps1 à la racine le fait et vérifie l'appariement des fichiers .xaml/.xaml.cs.Dépannage & FAQ
Questions fréquentes
Où sont mes données ?
Dans le fichier salesguard.db (données de l'application), avec des sauvegardes horodatées dans un sous-dossier. L'emplacement est modifiable depuis Paramètres › Base de données.
La bannière « État de la base » est rouge
La base n'a pas pu s'ouvrir au démarrage. Vérifiez l'emplacement (dossier accessible, pas en lecture seule) et l'espace disque. Restaurez une sauvegarde si nécessaire.
« Enregistrer » refuse ma fiche client / société
La raison sociale est obligatoire. Renseignez-la puis réessayez.
Puis-je changer de langue à tout moment ?
Oui, le sélecteur FR/EN bascule toute l'interface instantanément, sans redémarrage.
Comment sauvegarder avant une manipulation ?
Une sauvegarde est faite à chaque démarrage. Vous pouvez aussi ouvrir le dossier des sauvegardes depuis Paramètres › Base de données et copier le fichier voulu.
Au premier build du code source
Si la compilation échoue avec une erreur du type « type introuvable » sur un seul type, l'archive a probablement été extraite partiellement : purgez obj/ et bin/ et recompilez. Le script build.ps1 à la racine automatise ce nettoyage.