Guide complet

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 & technique

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

Écran : Barre latérale sombre à gauche (nom de l'app en haut, sélecteur FR/EN juste en dessous, menu au centre, bouton rouge « Fermer » pleine largeur tout en bas). Zone de contenu claire à droite.

Se repérer dans l'interface

L'écran se divise en deux : la barre latérale (navigation) et la zone de contenu.

La barre latérale

  • En haut : le nom et le slogan de l'application (personnalisables), puis le sélecteur FR / EN.
  • Au centre : le menu. Certaines entrées sont des groupes repliables (Clients, Factures, Paramètres) — cliquez sur l'intitulé pour déplier.
  • Tout en bas : le bouton rouge Fermer (pleine largeur) qui quitte l'application.
  • Le bouton en haut replie la barre latérale pour agrandir la zone de travail ; un bouton la fait réapparaître.

Le menu, dans l'ordre

EntréeRôle
Tableau de bordVue d'ensemble : chiffres clés, graphiques, échéances.
ClientsRépertoire des clients et fiches détaillées.
PipelineOpportunités commerciales en vue kanban.
AbonnementsContrats récurrents et échéances.
Factures / ArchivéesFacturation, émission, suivi des paiements.
TâchesTo-do commercial avec priorités et échéances.
ProduitsCatalogue des offres.
HistoriqueJournal de toutes les actions.
Paramètres › Base de donnéesÉtat, sauvegardes, emplacement de la base.
Paramètres › Mes infosCoordonnées de votre société.
Paramètres › FacturationNumérotation, TVA, modèle de facture.
À proposVersion, environnement, personnalisation du nom/slogan.

Raccourcis clavier

Selon l'écran ouvert :

  • Ctrl + F — placer le curseur dans la recherche.
  • Ctrl + N — créer un nouvel élément (client, facture…).
  • Échap — revenir en arrière (fermer une fiche).

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.

Désinstallation propre : une entrée est ajoutée dans « Applications et fonctionnalités ». La base et les sauvegardes, situées dans les données utilisateur, ne sont pas supprimées par la désinstallation.

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

La base de données est créée automatiquement au premier lancement, à côté de l'exécutable ou dans les données de l'application. Aucune configuration serveur n'est nécessaire.

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.
Bannières repliables : chaque carte a un en-tête cliquable (▼ / ▶) pour la replier. Le graphique se redessine automatiquement quand vous le dépliez.
Écran : Cartes blanches empilées sur fond clair. En haut les chiffres clés, puis l'anneau « CA par produit », les barres d'évolution mensuelle et le bloc opportunités avec un bouton « Ouvrir 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)

OngletContenu
InformationsCoordonnées et caractéristiques de la société.
ContactsPersonnes à contacter (ajout manuel).
OpportunitésAffaires en cours et gagnées/perdues pour ce client.
AbonnementsContrats récurrents du client.
FacturesFactures émises pour ce client.
NotesNotes libres.
HistoriqueJournal des actions liées au client.
Échap ferme la fiche et revient à la liste.

Pipeline & opportunités

Le pipeline présente vos opportunités commerciales en colonnes, par étape d'avancement.

Les étapes

LeadProspectQualificationPropositionNégociationGagné / 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).

Le montant des opportunités gagnées nourrit le graphique « Évolution du CA gagné » du tableau de bord.

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.

Facturation automatique : à l'échéance, l'application peut créer un brouillon de facture pour l'abonnement (selon le réglage de facturation). Ce contrôle tourne au démarrage puis toutes les heures — voir le chapitre Facturation.

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ÉmisePayé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.

Quatre modèles de mise en page sont disponibles (bandeau, classique, compact, épuré) — choix dans Paramètres › Facturation.

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 : BrouillonEnvoyé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 :

ProfilPrestations proposées
Client finalLes abonnements annuels par application (EntraGUARD, AdGUARD, AzureGUARD) et la suite des trois.
PartenaireLe droit d'entrée et la licence partenaire annuelle, plus l'option site web à la marque (offert) ajoutée à 0 €.
AutonomeLa licence de code source.
Le catalogue et les prix se gèrent dans le module Produits. Les prestations d'un profil sont reconnues par le préfixe de leur code (CF- / PART- / AUTO-).

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.

Le document est produit dans la langue de l'application (français ou anglais) : basculez la langue avant l'aperçu ou l'export pour obtenir un devis dans la langue du client.

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.
Important : « Mes infos » et « Facturation » écrivent dans le même enregistrement société, mais chaque page n'enregistre que ses propres champs — modifier l'une n'écrase jamais les données de l'autre.
Quand la facturation automatique est active, l'application crée un brouillon à l'échéance ; rien n'est émis d'office. Vous complétez et émettez le brouillon depuis Factures.

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

Les réglages de sauvegarde sont stockés dans un petit fichier de préférences séparé, pas dans la base elle-même — logique, puisque c'est la base que l'on copie.

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.

Le nom et le slogan sont enregistrés dans la fiche société (base locale), avec migration automatique de votre base existante.
Utile pour un partenaire qui distribue l'application sous sa propre marque.

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

DossierContenu
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 : AddColumnIfMissing ajoute les colonnes manquantes sur une base déjà déployée, sans perte de données (aucun DROP 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

TableRôle
clientsRépertoire clients (statut, priorité, coordonnées).
contactsContacts rattachés à un client.
opportunitiesOpportunités (étape, montant).
subscriptionsAbonnements (échéance, montant, statut, dernière facturation).
productsCatalogue produits (type).
invoicesFactures et lignes (coordonnées figées à la création).
tasks, notes, historyTâches, notes, journal d'actions.
companyFiche 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.

Règle interne : l'enregistrement société réécrit toute la ligne. Toute vue qui n'édite qu'une partie de la fiche société (Mes infos, Facturation, Personnalisation) part d'une lecture fraîche et ne réécrit que ses champs — pour ne jamais écraser le reste.

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 : classe Loc (singleton Loc.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).
  • SetLang lève PropertyChanged("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.

À retenir pour étendre : les contrôles dont le texte est écrit par le code (titres dynamiques, messages) ne sont pas liés en XAML — ils sont traduits via 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 10dotnet --version doit renvoyer 10.x.
  • Inno Setup 6+ISCC.exe est 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.issinstaller\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.

Poste client : pour l'édition dépendante du framework, installer le .NET Desktop Runtime 10 (x64) (rubrique « Run desktop apps »). La base est créée au premier lancement, aucune configuration serveur.
Note de build : après extraction d'une archive du projet, purgez 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.