diff --git a/lib/Services/stock_managementDatabase.dart b/lib/Services/stock_managementDatabase.dart index 737155e..5ff4784 100644 --- a/lib/Services/stock_managementDatabase.dart +++ b/lib/Services/stock_managementDatabase.dart @@ -806,12 +806,24 @@ class AppDatabase { Future> getCommandes() async { final db = await database; + final result = await db.query(''' - SELECT c.*, cl.nom as clientNom, cl.prenom as clientPrenom, cl.email as clientEmail - FROM commandes c - LEFT JOIN clients cl ON c.clientId = cl.id - ORDER BY c.dateCommande DESC - '''); + SELECT + c.*, + cl.nom as clientNom, + cl.prenom as clientPrenom, + cl.email as clientEmail, + u.nom as commandeurNom, + u.prenom as commandeurPrenom, + pdv.nom as pointDeVenteNom, + pdv.id as pointDeVenteId + FROM commandes c + LEFT JOIN clients cl ON c.clientId = cl.id + LEFT JOIN users u ON c.commandeurId = u.id + LEFT JOIN points_de_vente pdv ON u.point_de_vente_id = pdv.id + ORDER BY c.dateCommande DESC + '''); + return result.map((row) => Commande.fromMap(row.fields)).toList(); } @@ -1447,61 +1459,62 @@ class AppDatabase { // --- TRANSACTIONS COMPLEXES --- // Méthode pour créer une commande complète avec remises - Future createCommandeComplete( - Client client, Commande commande, List details) async { - final db = await database; + Future createCommandeComplete( + Client client, Commande commande, List details) async { + final db = await database; - try { - await db.query('START TRANSACTION'); + try { + await db.query('START TRANSACTION'); - // 1. Créer ou récupérer le client - final existingOrNewClient = await createOrGetClient(client); - final clientId = existingOrNewClient.id!; + // 1. Créer ou récupérer le client + final existingOrNewClient = await createOrGetClient(client); + final clientId = existingOrNewClient.id!; - // 2. Créer la commande - final commandeMap = commande.toMap(); - commandeMap.remove('id'); - commandeMap['clientId'] = clientId; + // 2. Créer la commande + final commandeMap = commande.toMap(); + commandeMap.remove('id'); + commandeMap['clientId'] = clientId; - final commandeFields = commandeMap.keys.join(', '); - final commandePlaceholders = List.filled(commandeMap.length, '?').join(', '); + final commandeFields = commandeMap.keys.join(', '); + final commandePlaceholders = + List.filled(commandeMap.length, '?').join(', '); - final commandeResult = await db.query( - 'INSERT INTO commandes ($commandeFields) VALUES ($commandePlaceholders)', - commandeMap.values.toList(), - ); - final commandeId = commandeResult.insertId!; + final commandeResult = await db.query( + 'INSERT INTO commandes ($commandeFields) VALUES ($commandePlaceholders)', + commandeMap.values.toList(), + ); + final commandeId = commandeResult.insertId!; - // 3. Créer les détails de commande avec remises - for (final detail in details) { - final detailMap = detail.toMap(); - detailMap.remove('id'); - detailMap['commandeId'] = commandeId; + // 3. Créer les détails de commande avec remises + for (final detail in details) { + final detailMap = detail.toMap(); + detailMap.remove('id'); + detailMap['commandeId'] = commandeId; - final detailFields = detailMap.keys.join(', '); - final detailPlaceholders = List.filled(detailMap.length, '?').join(', '); + final detailFields = detailMap.keys.join(', '); + final detailPlaceholders = + List.filled(detailMap.length, '?').join(', '); - await db.query( - 'INSERT INTO details_commandes ($detailFields) VALUES ($detailPlaceholders)', - detailMap.values.toList(), - ); + await db.query( + 'INSERT INTO details_commandes ($detailFields) VALUES ($detailPlaceholders)', + detailMap.values.toList(), + ); - // 4. Mettre à jour le stock - await db.query( - 'UPDATE products SET stock = stock - ? WHERE id = ?', - [detail.quantite, detail.produitId], - ); - } + // 4. Mettre à jour le stock + await db.query( + 'UPDATE products SET stock = stock - ? WHERE id = ?', + [detail.quantite, detail.produitId], + ); + } - await db.query('COMMIT'); - return commandeId; - } catch (e) { - await db.query('ROLLBACK'); - print("Erreur lors de la création de la commande complète: $e"); - rethrow; + await db.query('COMMIT'); + return commandeId; + } catch (e) { + await db.query('ROLLBACK'); + print("Erreur lors de la création de la commande complète: $e"); + rethrow; + } } -} - // Méthode pour mettre à jour un détail de commande (utile pour modifier les remises) Future updateDetailCommande(DetailCommande detail) async {