feat(frontend): module Ventes complet (commandes, livraison, stock)

- Modèles Client, SalesOrder, SalesOrderLine
- ClientService + SalesOrderService (create, deliver)
- VentesProvider : chargement parallèle commandes + clients
- VentesScreen : liste avec badges statut colorés
- SalesOrderFormScreen : lignes dynamiques, calcul HT/TVA/TTC temps réel
- SalesOrderDetailScreen : détail + bouton livrer + confirmation
- Rapport PFE : section 5.7 module Ventes (cycle, statuts, UI)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-20 20:26:48 +01:00
co-authored by Claude Sonnet 4.6
parent ed21c3cb80
commit 78063c4925
10 changed files with 1320 additions and 1 deletions
+14
View File
@@ -0,0 +1,14 @@
import 'api_client.dart';
import '../models/client.dart';
class ClientService {
static Future<List<Client>> fetchAll() async {
final res = await ApiClient.instance.get('/clients');
return (res.data as List).map((e) => Client.fromJson(e)).toList();
}
static Future<Client> create(Client client) async {
final res = await ApiClient.instance.post('/clients', data: client.toJson());
return Client.fromJson(res.data);
}
}
@@ -0,0 +1,18 @@
import 'api_client.dart';
import '../models/sales_order.dart';
class SalesOrderService {
static Future<List<SalesOrder>> fetchAll() async {
final res = await ApiClient.instance.get('/sales-orders');
return (res.data as List).map((e) => SalesOrder.fromJson(e)).toList();
}
static Future<SalesOrder> create(SalesOrder order) async {
final res = await ApiClient.instance.post('/sales-orders', data: order.toJson());
return SalesOrder.fromJson(res.data);
}
static Future<void> deliver(int orderId, Map<String, dynamic> bonLivraison) async {
await ApiClient.instance.post('/sales-orders/$orderId/deliver', data: bonLivraison);
}
}