Browse Source

requete pour retourner point de vente

28062025_02
Stephane 4 months ago
parent
commit
99d570bd3a
  1. 111
      lib/Services/stock_managementDatabase.dart

111
lib/Services/stock_managementDatabase.dart

@ -806,12 +806,24 @@ class AppDatabase {
Future<List<Commande>> 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<int> createCommandeComplete(
Client client, Commande commande, List<DetailCommande> details) async {
final db = await database;
Future<int> createCommandeComplete(
Client client, Commande commande, List<DetailCommande> 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<int> updateDetailCommande(DetailCommande detail) async {

Loading…
Cancel
Save