Просмотр исходного кода

Aggiunta vista righe ordine con dettagli

Fabio Dalle Ave 2 месяцев назад
Родитель
Сommit
9bdab13293

+ 7 - 0
lib/database/daos/ordini_dao.dart

@@ -198,6 +198,13 @@ class OrdiniDao {
         .get();
   }
 
+  Future<List<VRigheOrdineData>> getOrderLinesView(int idOrdine) {
+    return (db.select(
+      db.vRigheOrdine,
+    )..where((t) => t.idOrdine.equals(idOrdine)))
+        .get();
+  }
+
   Future<void> deleteOrderLine(int idRigaOrdine) {
     return (db.delete(
       db.righeOrdine,

+ 10 - 0
lib/database/database.dart

@@ -27,6 +27,7 @@ import 'views/ordini_senza_righe.dart';
 import 'views/top_item.dart';
 import 'views/top_customer.dart';
 import 'views/v_ordini.dart';
+import 'views/v_righe_ordine.dart';
 
 part 'database.g.dart';
 
@@ -58,6 +59,7 @@ part 'database.g.dart';
     TopItem,
     TopCustomer,
     VOrdini,
+    VRigheOrdine,
   ],
 )
 class AppDatabase extends _$AppDatabase {
@@ -150,6 +152,14 @@ class AppDatabase extends _$AppDatabase {
           LEFT JOIN Filiali f ON f.idFiliale = o.idFiliale
           JOIN Agenti a ON a.idAgente = o.idAgente
         ''');
+        await customStatement('DROP VIEW IF EXISTS v_righe_ordine');
+        await customStatement('''
+          CREATE VIEW v_righe_ordine AS
+          SELECT ro.*, a.codArticolo, a.descrizione, l.codListino, l.descrizione AS Listino
+          FROM Righe_ordine ro
+          JOIN Articoli a ON a.idArticolo = ro.idArticolo
+          LEFT JOIN Listini l ON l.idListino = ro.idListino
+        ''');
       }
       if (from < 9) {
         await m.addColumn(clienti, clienti.creditScoreColor);

Разница между файлами не показана из-за своего большого размера
+ 1201 - 0
lib/database/database.g.dart


+ 47 - 0
lib/database/views/v_righe_ordine.dart

@@ -0,0 +1,47 @@
+import 'package:drift/drift.dart';
+
+/*
+create view v_righe_ordine as
+select ro.*, a.codArticolo, a.descrizione, l.codListino, l.descrizione Listino
+from righe_ordine ro
+join articoli a on a.idarticolo = ro.idarticolo
+left JOIN Listini l on l.idlistino = ro.idlistino
+*/
+class VRigheOrdine extends Table {
+  IntColumn get idRigaOrdine => integer().named('idRigaOrdine')();
+  IntColumn get idOrdine => integer().named('idOrdine').nullable()();
+  IntColumn get idArticolo => integer().named('idArticolo').nullable()();
+  IntColumn get idListino => integer().named('idListino').nullable()();
+  RealColumn get quantita => real().named('quantita').nullable()();
+  RealColumn get prezzoLordo => real().named('prezzoLordo').nullable()();
+  RealColumn get sconto1 => real().named('sconto1').nullable()();
+  RealColumn get sconto2 => real().named('sconto2').nullable()();
+  RealColumn get sconto3 => real().named('sconto3').nullable()();
+  RealColumn get sconto4 => real().named('sconto4').nullable()();
+  RealColumn get sconto5 => real().named('sconto5').nullable()();
+  RealColumn get prezzoNetto => real().named('prezzoNetto').nullable()();
+  RealColumn get scontoMerce => real().named('scontoMerce').nullable()();
+  RealColumn get totale => real().named('totale').nullable()();
+  TextColumn get dataConsegna => text().named('dataConsegna').nullable()();
+  TextColumn get dataModifica => text().named('dataModifica').nullable()();
+  RealColumn get qtaEvasa => real().named('qtaEvasa').nullable()();
+  TextColumn get stato => text().named('stato').nullable()();
+  RealColumn get colli => real().named('colli').nullable()();
+  IntColumn get promozione => integer().named('promozione').nullable()();
+  IntColumn get rigaPromozione => integer().named('rigaPromozione').nullable()();
+  IntColumn get prezzoManuale => integer().named('prezzoManuale').nullable()();
+
+  TextColumn get codArticolo => text().named('codArticolo').nullable()();
+  TextColumn get descrizione => text().named('descrizione').nullable()();
+  TextColumn get codListino => text().named('codListino').nullable()();
+  TextColumn get listino => text().named('Listino').nullable()();
+
+  @override
+  Set<Column> get primaryKey => {idRigaOrdine};
+
+  @override
+  String get tableName => 'v_righe_ordine';
+
+  @override
+  bool get withoutRowId => true;
+}

+ 29 - 8
lib/providers/order_provider.dart

@@ -6,7 +6,7 @@ import 'database_provider.dart';
 
 class OrderState {
   final Ordine? order;
-  final List<RigaOrdine> lines;
+  final List<VRigheOrdineData> lines;
   final List<int> removedLineIds;
   final bool isLoading;
   final String? error;
@@ -57,7 +57,7 @@ class OrderNotifier extends Notifier<OrderState> {
     final mgr = _buildManager();
     final order = await mgr.loadOrder(id);
     if (order != null) {
-      final lines = await mgr.getOrderLines(id);
+      final lines = await ref.read(ordiniDaoProvider).getOrderLinesView(id);
       state = OrderState(order: order, lines: lines);
     } else {
       state = const OrderState(error: 'Ordine non trovato');
@@ -72,7 +72,7 @@ class OrderNotifier extends Notifier<OrderState> {
     );
   }
 
-  void addLine(RigaOrdine line) {
+  void addLine(VRigheOrdineData line) {
     if (state.order == null) return;
     state = OrderState(
       order: state.order,
@@ -84,7 +84,7 @@ class OrderNotifier extends Notifier<OrderState> {
   void removeLine(int index) {
     if (state.order == null || index < 0 || index >= state.lines.length) return;
     final removed = state.lines[index];
-    final newLines = List<RigaOrdine>.from(state.lines)..removeAt(index);
+    final newLines = List<VRigheOrdineData>.from(state.lines)..removeAt(index);
     final newRemovedIds = [
       ...state.removedLineIds,
       if (removed.idRigaOrdine > 0) removed.idRigaOrdine,
@@ -109,11 +109,32 @@ class OrderNotifier extends Notifier<OrderState> {
       order = order.copyWith(idOrdine: id);
     }
 
-    for (final line in state.lines) {
-      final lineToSave = line.copyWith(
-        idOrdine: Value<int?>(order.idOrdine),
+    for (final viewLine in state.lines) {
+      var lineToSave = RigaOrdine(
+        idRigaOrdine: viewLine.idRigaOrdine,
+        idOrdine: order.idOrdine,
+        idArticolo: viewLine.idArticolo,
+        idListino: viewLine.idListino,
+        quantita: viewLine.quantita,
+        prezzoLordo: viewLine.prezzoLordo,
+        sconto1: viewLine.sconto1,
+        sconto2: viewLine.sconto2,
+        sconto3: viewLine.sconto3,
+        sconto4: viewLine.sconto4,
+        sconto5: viewLine.sconto5,
+        prezzoNetto: viewLine.prezzoNetto,
+        scontoMerce: viewLine.scontoMerce,
+        totale: viewLine.totale,
+        dataConsegna: viewLine.dataConsegna,
+        dataModifica: viewLine.dataModifica,
+        qtaEvasa: viewLine.qtaEvasa,
+        stato: viewLine.stato,
+        colli: viewLine.colli,
+        promozione: viewLine.promozione,
+        rigaPromozione: viewLine.rigaPromozione,
+        prezzoManuale: viewLine.prezzoManuale,
       );
-      if (line.idRigaOrdine == 0) {
+      if (viewLine.idRigaOrdine == 0) {
         await dao.insertOrderLine(lineToSave);
       } else {
         await dao.updateOrderLine(lineToSave);

+ 8 - 4
lib/ui/pages/orders/order_edit_page.dart

@@ -149,7 +149,7 @@ class _OrderEditPageState extends ConsumerState<OrderEditPage>
     double? sconto5 = 0,
   }) {
     ref.read(orderProvider.notifier).addLine(
-          RigaOrdine(
+          VRigheOrdineData(
             idRigaOrdine: 0,
             idOrdine: ref.read(orderProvider).order?.idOrdine ?? 0,
             idArticolo: art.idArticolo,
@@ -166,6 +166,8 @@ class _OrderEditPageState extends ConsumerState<OrderEditPage>
             promozione: 0,
             rigaPromozione: 0,
             colli: colli,
+            codArticolo: art.codArticolo,
+            descrizione: art.descrizione,
           ),
         );
   }
@@ -475,7 +477,7 @@ class _OrderEditPageState extends ConsumerState<OrderEditPage>
 }
 
 class _LineCard extends StatelessWidget {
-  final RigaOrdine line;
+  final VRigheOrdineData line;
   final bool readOnly;
   final VoidCallback onDelete;
   final ThemeData theme;
@@ -495,11 +497,13 @@ class _LineCard extends StatelessWidget {
       color: isPromo ? Colors.green.shade50 : null,
       child: ListTile(
         title: Text(
-          'Articolo #${line.idArticolo ?? ''}',
+          line.codArticolo != null
+              ? '${line.codArticolo} - ${line.descrizione ?? ''}'
+              : 'Articolo #${line.idArticolo ?? ''}',
           style: TextStyle(fontWeight: isPromo ? FontWeight.bold : null),
         ),
         subtitle: Text(
-          'Qtà: ${line.quantita?.toStringAsFixed(1) ?? "0"}  Prezzo: ${line.prezzoNetto?.toStringAsFixed(2) ?? "0,00"}€',
+          'Qtà: ${line.quantita?.toStringAsFixed(1) ?? "0"}  Prezzo: ${line.prezzoNetto?.toStringAsFixed(2) ?? "0,00"}€${line.listino != null ? '  Listino: ${line.listino}' : ''}',
         ),
         trailing: Row(
           mainAxisSize: MainAxisSize.min,

Некоторые файлы не были показаны из-за большого количества измененных файлов