4 次代码提交 73fcfea796 ... 73f64d0f05

作者 SHA1 备注 提交日期
  ElPoteito 73f64d0f05 13215: Pedido- al editar ( finalizar ) no esta editando, esta insertando. 6 月之前
  ElPoteito 7bdc76b426 13209: Filtrar Por Mesa Con un selector en GRId 6 月之前
  ElPoteito 54a3d2a92d 13212 POs: Falta el check de Pedido exacto. no sale como en conalepo actual VERLO CON OSCAR 6 月之前
  ElPoteito ea7d95d35e 13214: Pedido de mesa no se ve el total 6 月之前

+ 6 - 6
lib/models/pedido_model.dart

@@ -26,7 +26,7 @@ class Pedido extends Basico {
   double? cantTransferencia;
   List<PedidoProducto> productos = [];
   int? idWeb;
-  Mesa? mesa;
+  // Mesa? mesa;
 
   String? sincronizado;
 
@@ -52,7 +52,7 @@ class Pedido extends Basico {
     this.cantTransferencia,
     this.productos = const [],
     this.idWeb,
-    this.mesa,
+    // this.mesa,
     this.sincronizado,
   });
 
@@ -78,7 +78,7 @@ class Pedido extends Basico {
       'cantEfectivo': cantEfectivo,
       'cantTarjeta': cantTarjeta,
       'cantTransferencia': cantTransferencia,
-      'mesa': mesa,
+      // 'mesa': mesa,
       'sincronizado': sincronizado,
     }..addAll(super.toJson());
   }
@@ -99,7 +99,7 @@ class Pedido extends Basico {
       'cantEfectivo': cantEfectivo,
       'cantTarjeta': cantTarjeta,
       'cantTransferencia': cantTransferencia,
-      'mesa': mesa,
+      // 'mesa': mesa,
       'productos': productos.map((producto) => producto.toApi()).toList(),
     };
     Map<String, dynamic> basicoMap = super.toJson();
@@ -133,8 +133,8 @@ class Pedido extends Basico {
     cantTransferencia = Basico.parseDouble(json['cantTransferencia']);
     idWeb = Basico.parseInt(json['idWeb']);
     sincronizado = Basico.parseString(json['sincronizado']);
-    mesa =
-        json["mesa"] == null ? null : Mesa.fromJson(json["mesa"]);
+    // mesa =
+    //     json["mesa"] == null ? null : Mesa.fromJson(json["mesa"]);
 
     List<PedidoProducto> _productos = [];
     if (json["productos"] != null && (json["productos"] as List).isNotEmpty) {

+ 23 - 0
lib/viewmodels/pedido_view_model.dart

@@ -243,6 +243,29 @@ class PedidoViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
+  Future<void> buscarPedidosPorMesa(int idMesa) async {
+    setIsLoading(true);
+    RepoService<Pedido> repoPedido = RepoService<Pedido>();
+
+    var dbClient = await repoPedido.db;
+
+    print(
+        'Ejecutando consulta: SELECT * FROM Pedido WHERE "idMesa" = $idMesa');
+
+    List<Map<String, dynamic>> maps = await dbClient!.rawQuery('''
+    SELECT * FROM Pedido 
+    WHERE idMesa = ?
+  ''', [idMesa]);
+
+    print('Resultado de la consulta: ${maps.length} pedidos encontrados.');
+
+    List<Pedido> localPedidos = maps.map((map) => Pedido.fromJson(map)).toList();;
+    _pedidos = localPedidos;
+
+    setIsLoading(false);
+    notifyListeners();
+  }
+
   Future<List<Pedido>> buscarPorFecha(
       DateTime startDate, DateTime endDate) async {
     setIsLoading(true);

+ 2 - 0
lib/views/home/home_screen.dart

@@ -1,4 +1,5 @@
 import 'package:conalep_pos/themes/themes.dart';
+import 'package:conalep_pos/viewmodels/mesa_view_model.dart';
 import 'package:conalep_pos/widgets/widgets.dart';
 import 'package:flutter/material.dart';
 import 'package:provider/provider.dart';
@@ -27,6 +28,7 @@ class Formulario extends State<HomeScreen> {
     WidgetsBinding.instance.addPostFrameCallback((_) {
       Provider.of<ProductoViewModel>(context, listen: false)
           .sincronizarProductosYCategorias();
+        Provider.of<MesaViewModel>(context, listen: false).fetchLocalAll();
     });
   }
 

文件差异内容过多而无法显示
+ 593 - 346
lib/views/pedido_mesa/pedido_mesa_form.dart


+ 55 - 6
lib/views/pedido_mesa/pedido_mesa_screen.dart

@@ -1,3 +1,4 @@
+import 'package:conalep_pos/models/mesa_model.dart';
 import 'package:conalep_pos/models/models.dart';
 import 'package:conalep_pos/themes/themes.dart';
 import 'package:conalep_pos/viewmodels/mesa_view_model.dart';
@@ -20,6 +21,8 @@ class _PedidoMesaScreenState extends State<PedidoMesaScreen> {
   final _busqueda = TextEditingController(text: '');
   DateTime? fechaInicio;
   DateTime? fechaFin;
+  List<DropdownMenuItem<int>> listaMesas = [];
+  int? selectedMesa = 0;
   ScrollController horizontalScrollController = ScrollController();
 
   @override
@@ -28,7 +31,31 @@ class _PedidoMesaScreenState extends State<PedidoMesaScreen> {
     WidgetsBinding.instance.addPostFrameCallback((_) {
       Provider.of<PedidoViewModel>(context, listen: false)
           .fetchLocalMesaPedidosForScreen();
-      Provider.of<MesaViewModel>(context, listen: false).fetchLocalAll();
+      final mvm = Provider.of<MesaViewModel>(context, listen: false);
+      // Provider.of<MesaViewModel>(context, listen: false).fetchLocalAll();
+      final mesas = mvm.mesas;
+      if (mesas.isNotEmpty) {
+        mesas.sort((a, b) => a.nombre!.compareTo(b.nombre!));
+        listaMesas = mesas
+            .map(
+              (mesa) => DropdownMenuItem<int>(
+                value: mesa.id,
+                child: Text(
+                  '${mesa.clave} - ${mesa.nombre}',
+                  style: const TextStyle(color: Colors.black),
+                ),
+              ),
+            )
+            .toList();
+      }
+
+      listaMesas.add(DropdownMenuItem<int>(
+        value: 0,
+        child: Text(
+          'Seleccionar Mesa',
+          style: const TextStyle(color: Colors.black),
+        ),
+      ));
     });
   }
 
@@ -68,8 +95,9 @@ class _PedidoMesaScreenState extends State<PedidoMesaScreen> {
       _busqueda.clear();
       fechaInicio = null;
       fechaFin = null;
+      selectedMesa = 0;
       Provider.of<PedidoViewModel>(context, listen: false)
-          .fetchLocalPedidosForScreen();
+          .fetchLocalMesaPedidosForScreen();
     });
   }
 
@@ -192,7 +220,10 @@ class _PedidoMesaScreenState extends State<PedidoMesaScreen> {
           onTap: () => go(item),
         ),
         DataCell(
-          Text(Provider.of<MesaViewModel>(context, listen: false).fetchLocalById(idMesa: item.idMesa).nombre.toString()),
+          Text(Provider.of<MesaViewModel>(context, listen: false)
+              .fetchLocalById(idMesa: item.idMesa)
+              .nombre
+              .toString()),
           onTap: () => go(item),
         ),
         /* DataCell(
@@ -429,7 +460,7 @@ class _PedidoMesaScreenState extends State<PedidoMesaScreen> {
     return Row(
       children: [
         Expanded(
-          flex: 3,
+          flex: 4,
           child: AppTextField(
             prefixIcon: const Icon(Icons.search),
             etiqueta: 'Búsqueda por folio...',
@@ -439,7 +470,7 @@ class _PedidoMesaScreenState extends State<PedidoMesaScreen> {
         ),
         const SizedBox(width: 5),
         Expanded(
-          flex: 3,
+          flex: 4,
           child: clase.FechaSelectWidget(
             fecha: fechaInicio,
             onFechaChanged: (d) {
@@ -453,7 +484,7 @@ class _PedidoMesaScreenState extends State<PedidoMesaScreen> {
         ),
         const SizedBox(width: 5),
         Expanded(
-          flex: 3,
+          flex: 4,
           child: clase.FechaSelectWidget(
             fecha: fechaFin,
             onFechaChanged: (d) {
@@ -465,6 +496,21 @@ class _PedidoMesaScreenState extends State<PedidoMesaScreen> {
             context: context,
           ),
         ),
+        const SizedBox(width: 5),
+        Expanded(
+          flex: 4,
+          child: AppDropdownModel<int>(
+            etiqueta: "Mesa",
+            hint: 'Seleccionar',
+            items: listaMesas,
+            selectedValue: selectedMesa,
+            onChanged: (value) {
+              setState(() {
+                selectedMesa = value;
+              });
+            },
+          ),
+        )
       ],
     );
   }
@@ -505,6 +551,9 @@ class _PedidoMesaScreenState extends State<PedidoMesaScreen> {
                     } else if (fechaInicio != null && fechaFin != null) {
                       await Provider.of<PedidoViewModel>(context, listen: false)
                           .buscarPedidosPorFecha(fechaInicio!, fechaFin!);
+                    } else if (selectedMesa != null && selectedMesa != 0) {
+                      await Provider.of<PedidoViewModel>(context, listen: false)
+                          .buscarPedidosPorMesa(selectedMesa!);
                     } else {
                       ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
                           content: Text(