0% ont trouvé ce document utile (0 vote)
2 vues10 pages

Projet Python2

Le projet vise à développer une application de gestion commerciale utilisant PyQt6 pour l'interface et MySQL pour la base de données, permettant de gérer les ventes, les stocks et les clients. Il inclut des modules pour l'authentification, la gestion des utilisateurs, des clients, des produits, des ventes, ainsi que des statistiques et rapports. Le développement se fera en trois semaines avec des livrables comprenant des documents techniques, le code source, un exécutable et une documentation utilisateur.

Transféré par

itglpromotion2023
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues10 pages

Projet Python2

Le projet vise à développer une application de gestion commerciale utilisant PyQt6 pour l'interface et MySQL pour la base de données, permettant de gérer les ventes, les stocks et les clients. Il inclut des modules pour l'authentification, la gestion des utilisateurs, des clients, des produits, des ventes, ainsi que des statistiques et rapports. Le développement se fera en trois semaines avec des livrables comprenant des documents techniques, le code source, un exécutable et une documentation utilisateur.

Transféré par

itglpromotion2023
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Projet Gestion Commerciale PyQt6 + MySQL

1 Présentation du Projet
1.1 Contexte
Ce projet vise à développer une application de gestion commerciale complète permettant
de gérer efficacement les ventes, les stocks, et les clients d’une petite ou moyenne entreprise.
L’application sera déployée en architecture client-serveur avec PyQt6 pour l’interface graphique
et MySQL comme système de gestion de base de données.

1.2 Objectifs pédagogiques


— Maîtriser le développement d’applications desktop avec PyQt6
— Concevoir et implémenter une base de données relationnelle MySQL
— Gérer la communication client-serveur distante
— Implémenter un système d’authentification et de gestion des rôles
— Générer des rapports et statistiques métier
— Créer une interface utilisateur professionnelle et ergonomique

1.3 Périmètre fonctionnel


L’application couvrira les modules suivants :
1. Gestion des utilisateurs : Authentification, rôles, permissions
2. Gestion des clients : CRUD complet, historique des achats
3. Gestion des produits : Catalogue, catégories, suivi des stocks
4. Gestion des ventes : Création de factures, paiements, reliquats
5. Statistiques et rapports : Tableaux de bord, exports PDF/Excel
6. Paramètres système : Configuration générale de l’application

2 Architecture Technique
2.1 Architecture globale
Soit l’exemple d’architecture à réutiliser si vous le souhaitez pour votre application ou à
adapter mais dans tous les cas vous devez utiliser une architecture client-serveur à 3 couches :

Architecture 3-tiers
1. Couche Présentation (Client) : Interface PyQt6 sur postes utilisateurs
2. Couche Métier (Application) : Logique métier Python
3. Couche Données (Serveur) : Base de données MySQL sur serveur distant

2
Projet Gestion Commerciale PyQt6 + MySQL

Composant Technologie
Langage Python 3.10+
Framework GUI PyQt6 (Qt Designer pour les interfaces)
Base de données MySQL 8.0+
Connecteur DB PyMySQL ou mysql-connector-python
Génération PDF ReportLab
Export Excel openpyxl
Graphiques Matplotlib / PyQtGraph
Hachage mots de passe bcrypt
Configuration python-dotenv
TABLE 1 – Technologies du projet

2.2 Stack technologique


2.3 Structure du projet
1 gestion_commerciale/
2

3 [Link] # Point d’entree


4 [Link] # Configuration (connexion DB)
5 [Link] # Dependances
6 .env # Variables d’environnement
7

8 database/
9 __init__.py
10 [Link] # Gestion connexion MySQL
11 [Link] # Script creation tables
12 seed_data.sql # D o n n e s de test
13

14 models/
15 __init__.py
16 [Link] # Modele Utilisateur
17 [Link] # Modele Client
18 [Link] # Modele Produit
19 [Link] # Modele Vente
20 [Link] # Modele Cat gorie
21

22 controllers/
23 __init__.py
24 user_controller.py
25 client_controller.py
26 product_controller.py
27 sale_controller.py
28

29 views/
30 __init__.py
31 ui/ # Fichiers .ui (Qt Designer)
32 [Link]
33 main_window.ui

3
Projet Gestion Commerciale PyQt6 + MySQL

34 [Link]
35 [Link]
36 [Link]
37

38 login_view.py
39 main_window.py
40 clients_view.py
41 products_view.py
42 sales_view.py
43

44 utils/
45 __init__.py
46 [Link] # Validation donnees
47 pdf_generator.py # Generation factures PDF
48 excel_exporter.py # Export Excel
49 [Link] # Fonctions utilitaires
50

51 resources/
52 icons/ # Icones interface
53 images/ # Images/logos
54 styles/ # Feuilles de style QSS
55

56 tests/
57 __init__.py
58 test_models.py
59 test_controllers.py
Listing 1 – Arborescence du projet

3 Exemple de Script SQL de création de BD


1 -- Base de donnees
2 CREATE DATABASE IF NOT EXISTS gestion_commerciale
3 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
4

5 USE gestion_commerciale;
6

7 -- Table users
8 CREATE TABLE users (
9 id INT AUTO_INCREMENT PRIMARY KEY,
10 username VARCHAR(50) UNIQUE NOT NULL,
11 password_hash VARCHAR(255) NOT NULL,
12 role ENUM(’admin’, ’manager’, ’vendeur’) NOT NULL DEFAULT ’
vendeur’,
13 email VARCHAR(100) UNIQUE NOT NULL,
14 is_active BOOLEAN DEFAULT TRUE,
15 created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
16 updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
17 INDEX idx_username (username),

4
Projet Gestion Commerciale PyQt6 + MySQL

18 INDEX idx_role (role)


19 ) ENGINE=InnoDB;
20

21 -- Table clients
22 CREATE TABLE clients (
23 id INT AUTO_INCREMENT PRIMARY KEY,
24 nom VARCHAR(100) NOT NULL,
25 prenom VARCHAR(100) NOT NULL,
26 telephone VARCHAR(20),
27 email VARCHAR(100),
28 adresse TEXT,
29 ville VARCHAR(100),
30 code_postal VARCHAR(10),
31 created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
32 updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
33 INDEX idx_nom (nom),
34 INDEX idx_telephone (telephone),
35 FULLTEXT idx_search (nom, prenom, email)
36 ) ENGINE=InnoDB;
37

38 -- Table categories
39 CREATE TABLE categories (
40 id INT AUTO_INCREMENT PRIMARY KEY,
41 nom VARCHAR(100) UNIQUE NOT NULL,
42 description TEXT,
43 created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
44 updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP
45 ) ENGINE=InnoDB;
46

47 -- Table produits
48 CREATE TABLE produits (
49 id INT AUTO_INCREMENT PRIMARY KEY,
50 category_id INT NOT NULL,
51 nom VARCHAR(200) NOT NULL,
52 description TEXT,
53 prix_achat DECIMAL(10,2) NOT NULL,
54 prix_vente DECIMAL(10,2) NOT NULL,
55 stock_min INT DEFAULT 5,
56 stock_actuel INT DEFAULT 0,
57 created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
58 updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
59 FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE
RESTRICT,
60 INDEX idx_category (category_id),
61 INDEX idx_stock (stock_actuel),
62 FULLTEXT idx_search (nom, description)
63 ) ENGINE=InnoDB;
64

5
Projet Gestion Commerciale PyQt6 + MySQL

65 -- Table ventes
66 CREATE TABLE ventes (
67 id INT AUTO_INCREMENT PRIMARY KEY,
68 numero_facture VARCHAR(50) UNIQUE NOT NULL,
69 client_id INT NOT NULL,
70 user_id INT NOT NULL,
71 date_vente DATETIME DEFAULT CURRENT_TIMESTAMP,
72 montant_total DECIMAL(10,2) NOT NULL,
73 montant_paye DECIMAL(10,2) DEFAULT 0,
74 montant_reste DECIMAL(10,2) GENERATED ALWAYS AS
75 (montant_total - montant_paye) STORED,
76 statut ENUM(’en_cours’, ’payee’, ’partielle’, ’annulee’)
77 DEFAULT ’en_cours’,
78 notes TEXT,
79 created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
80 updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
81 FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE RESTRICT
,
82 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE RESTRICT,
83 INDEX idx_client (client_id),
84 INDEX idx_user (user_id),
85 INDEX idx_date (date_vente),
86 INDEX idx_statut (statut),
87 INDEX idx_numero (numero_facture)
88 ) ENGINE=InnoDB;
89

90 -- Table ventes_details
91 CREATE TABLE ventes_details (
92 id INT AUTO_INCREMENT PRIMARY KEY,
93 vente_id INT NOT NULL,
94 produit_id INT NOT NULL,
95 quantite INT NOT NULL,
96 prix_unitaire DECIMAL(10,2) NOT NULL,
97 sous_total DECIMAL(10,2) GENERATED ALWAYS AS
98 (quantite * prix_unitaire) STORED,
99 FOREIGN KEY (vente_id) REFERENCES ventes(id) ON DELETE CASCADE,
100 FOREIGN KEY (produit_id) REFERENCES produits(id) ON DELETE
RESTRICT,
101 INDEX idx_vente (vente_id),
102 INDEX idx_produit (produit_id)
103 ) ENGINE=InnoDB;
104

105 -- Table mouvements_stock


106 CREATE TABLE mouvements_stock (
107 id INT AUTO_INCREMENT PRIMARY KEY,
108 produit_id INT NOT NULL,
109 user_id INT NOT NULL,
110 type ENUM(’entree’, ’sortie’, ’ajustement’, ’vente’) NOT NULL,
111 quantite INT NOT NULL,
112 date_mouvement DATETIME DEFAULT CURRENT_TIMESTAMP,

6
Projet Gestion Commerciale PyQt6 + MySQL

113 description TEXT,


114 FOREIGN KEY (produit_id) REFERENCES produits(id) ON DELETE
CASCADE,
115 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE RESTRICT,
116 INDEX idx_produit (produit_id),
117 INDEX idx_date (date_mouvement),
118 INDEX idx_type (type)
119 ) ENGINE=InnoDB;
120

121 -- Table parametres


122 CREATE TABLE parametres (
123 id INT AUTO_INCREMENT PRIMARY KEY,
124 cle VARCHAR(100) UNIQUE NOT NULL,
125 valeur TEXT NOT NULL,
126 description TEXT,
127 updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP
128 ) ENGINE=InnoDB;
129

130 -- Trigger pour mise jour stock apres vente


131 DELIMITER //
132 CREATE TRIGGER after_vente_insert
133 AFTER INSERT ON ventes_details
134 FOR EACH ROW
135 BEGIN
136 UPDATE produits
137 SET stock_actuel = stock_actuel - [Link]
138 WHERE id = NEW.produit_id;
139

140 INSERT INTO mouvements_stock


141 (produit_id, user_id, type, quantite, description)
142 SELECT
143 NEW.produit_id,
144 v.user_id,
145 ’vente’,
146 [Link],
147 CONCAT(’Vente facture: ’, v.numero_facture)
148 FROM ventes v
149 WHERE [Link] = NEW.vente_id;
150 END//
151 DELIMITER ;
152

153 -- Vues utiles


154 CREATE VIEW vue_produits_alertes AS
155 SELECT
156 [Link],
157 [Link],
158 [Link] AS categorie,
159 p.stock_actuel,
160 p.stock_min
161 FROM produits p

7
Projet Gestion Commerciale PyQt6 + MySQL

162 JOIN categories c ON p.category_id = [Link]


163 WHERE p.stock_actuel <= p.stock_min;
164

165 CREATE VIEW vue_ventes_resume AS


166 SELECT
167 [Link],
168 v.numero_facture,
169 CONCAT([Link], ’ ’, [Link]) AS client,
170 [Link] AS vendeur,
171 v.date_vente,
172 v.montant_total,
173 v.montant_paye,
174 v.montant_reste,
175 [Link]
176 FROM ventes v
177 JOIN clients c ON v.client_id = [Link]
178 JOIN users u ON v.user_id = [Link];
Listing 2 – [Link] - Création des tables

4 Fonctionnalités Détaillées
4.1 Module Authentification
Fonctionnalités
— Écran de connexion avec validation
— Hachage sécurisé des mots de passe (bcrypt)
— Gestion de session utilisateur
— Trois niveaux de droits :
— Admin : Accès complet, gestion utilisateurs
— Manager : Consultation rapports, validation ventes
— Vendeur : Création ventes, consultation clients/produits
— Déconnexion automatique après inactivité

4.2 Module Clients


Fonctions CRUD :
— Ajouter un nouveau client (formulaire avec validation)
— Modifier les informations d’un client
— Supprimer un client (avec vérification des ventes associées)
— Recherche multicritère (nom, téléphone, email)
— Affichage de l’historique des achats
— Export de la liste clients (Excel/PDF)

8
Projet Gestion Commerciale PyQt6 + MySQL

Interface :
— TableView avec tri et filtres
— Double-clic pour édition rapide
— Statistiques par client (CA total, dernière visite)

4.3 Module Produits et Stock


Gestion produits :
— CRUD complet des produits
— Organisation par catégories
— Calcul automatique de la marge bénéficiaire
— Images produits (optionnel)
— Gestion des stocks avec alertes
Suivi des stocks :
— Alertes visuelles pour stock bas (< stock minimum)
— Historique des mouvements de stock
— Entrées/sorties manuelles avec justification
— Ajustements d’inventaire
— Rapport d’état des stocks

4.4 Module Ventes


Création de ventes :
— Sélection client (création rapide si nouveau)
— Ajout produits par recherche ou scan code-barre (optionnel)
— Calcul automatique des totaux et TVA
— Gestion des remises (montant ou pourcentage)
— Validation et génération numéro de facture automatique
Gestion des paiements :
— Paiement complet, partiel ou à crédit
— Suivi des impayés
— Historique des paiements par facture
Impression et exports :
— Génération PDF de la facture (avec logo entreprise)
— Impression directe
— Export des ventes (Excel) avec filtres par date

9
Projet Gestion Commerciale PyQt6 + MySQL

4.5 Module Statistiques et Rapports


Tableau de bord :
— Chiffre d’affaires du jour/semaine/mois
— Nombre de ventes réalisées
— Top 5 produits vendus
— Top 5 clients
— État des stocks critiques
— Graphiques (évolution CA, répartition par catégorie)
Rapports disponibles :
— Rapport de ventes par période
— Rapport de stock avec valorisation
— Rapport des impayés clients
— Rapport d’activité par vendeur
— Export PDF et Excel

4.6 Module Paramètres


— Configuration entreprise (nom, logo, coordonnées)
— Gestion des utilisateurs (admin uniquement)
— Paramètres généraux (devise, TVA, format factures)
— Sauvegarde/Restauration de la base de données
— Journal d’activité (logs)

5 Planning de Développement (3 semaines)


Voir Table 2

6 Livrables du Projet
6.1 Documents techniques
— Spécifications fonctionnelles détaillées
— Modèle de données (MCD/MLD)
— Architecture technique
— Scripts SQL (création + données de test)

6.2 Code source


— Application PyQt6 complète et commentée
— Tests unitaires pour les modèles critiques
— Scripts d’installation et de configuration
— Fichier [Link]

10
Projet Gestion Commerciale PyQt6 + MySQL

6.3 Exécutable
— Créez un éxécutable avec pyinstaller
— Créez un installable avec InnoSetup

6.4 Documentation
— Manuel utilisateur avec captures d’écran
— Guide d’installation et de déploiement
— Documentation technique du code (docstrings)
— Guide de maintenance et évolutions futures

6.5 Présentation
— Présentation PowerPoint du projet
— Démonstration vidéo des fonctionnalités
— Rapport de développement (3 semaines)

7 Points d’Attention
7.1 Sécurité
— Mots de passe : Toujours utiliser bcrypt pour le hachage
— Connexion DB : Utiliser des variables d’environnement (.env)
— SQL Injection : Utiliser des requêtes préparées (paramétrisées)
— Validation : Valider toutes les entrées utilisateur
— Sessions : Implémenter un timeout de session

7.2 Performance
— Indexer les colonnes fréquemment recherchées
— Utiliser des connexions poolées pour MySQL
— Limiter les résultats des requêtes (pagination)
— Optimiser les jointures SQL
— Mettre en cache les données statiques

7.3 Ergonomie
— Interface claire et intuitive
— Raccourcis clavier pour les actions fréquentes
— Messages d’erreur explicites
— Confirmation pour les actions critiques
— Feedback visuel des actions (spinners, progress bars)

11

Vous aimerez peut-être aussi