Ver código fonte

Guardado y cancelado de pedidos de mesa

ElPoteito 8 meses atrás
pai
commit
49b1ee97c0

+ 9 - 6
lib/services/repo_service.dart

@@ -420,18 +420,21 @@ class RepoService<T> {
       modelMap.remove('eliminado');
     }
 
+    int resultado;
+    int? identificadorLocal = modelMap[Basico.identificadorLocal];
+
     if (modelMap['id'] == null || modelMap['id'] == 0) {
       modelMap.remove('id');
+      identificadorLocal = modelMap[Basico.identificadorLocal];
+    } else {
+      identificadorLocal = modelMap['id'];
     }
 
-    int resultado;
-    int? identificadorLocal = modelMap[Basico.identificadorLocal];
-
     if (identificadorLocal != null && identificadorLocal > 0) {
       resultado = await dbClient!.update(
         nombreTabla,
         modelMap,
-        where: "$idLocal = ?",
+        where: "$id = ?",
         whereArgs: [identificadorLocal],
       );
     } else {
@@ -547,7 +550,7 @@ class RepoService<T> {
         limit: limit,
         offset: offset,
         orderBy: 'id DESC',
-        where: 'idMesa = null');
+        where: 'idMesa IS NULL');
     return result.map((map) => Pedido.fromJson(map)).toList();
   }
 
@@ -558,7 +561,7 @@ class RepoService<T> {
         limit: limit,
         offset: offset,
         orderBy: 'id DESC',
-        where: 'idMesa != null');
+        where: 'idMesa IS NOT NULL');
     return result.map((map) => Pedido.fromJson(map)).toList();
   }
 

+ 2 - 0
lib/viewmodels/pedido_view_model.dart

@@ -156,6 +156,8 @@ class PedidoViewModel extends ChangeNotifier {
 
     List<Pedido> localPedidos =
         await repoPedido.obtenerMesaPedidosPaginados(_limit, offset);
+    // List<Pedido> localPedidos =
+        // await repoPedido.obtenerPedidosPaginados(_limit, offset);
     _pedidos = localPedidos;
 
     setIsLoading(false);

+ 98 - 23
lib/views/pedido_mesa/pedido_mesa_form.dart

@@ -108,14 +108,12 @@ class _PedidoMesaFormState extends State<PedidoMesaForm> {
         )
         .toList();
 
-    listaMesas.add(DropdownMenuItem<int>(
-        value: 0,
-        child:
-            Text('Seleccionar', style: const TextStyle(color: Colors.black))));
-
     Provider.of<DescuentoViewModel>(context, listen: false).cargarDescuentos();
 
     if (widget.pedido != null && widget.pedido!.id != null) {
+      if (widget.pedido!.idMesa != null && listaMesas.isNotEmpty) {
+        selectedMesa = widget.pedido!.idMesa;
+      }
       Future(() async {
         for (var item in widget.pedido!.productos) {
           Map<int, List<Producto>> toppingsSeleccionables =
@@ -127,6 +125,11 @@ class _PedidoMesaFormState extends State<PedidoMesaForm> {
         }
       });
     }
+
+    listaMesas.add(DropdownMenuItem<int>(
+        value: 0,
+        child:
+            Text('Seleccionar', style: const TextStyle(color: Colors.black))));
   }
 
   _onSearchChanged(String value) {
@@ -575,7 +578,7 @@ class _PedidoMesaFormState extends State<PedidoMesaForm> {
       peticion: formattedDate,
       nombreCliente: nombreCliente,
       comentarios: comentarios,
-      estatus: "NUEVO",
+      estatus: "FINALIZADO",
       totalPedido: totalPedido,
       descuento: pedidoActual?.descuento,
       tipoPago: _obtenerTipoPago(),
@@ -635,22 +638,22 @@ class _PedidoMesaFormState extends State<PedidoMesaForm> {
     String formattedDate = DateFormat('dd-MM-yyyy kk:mm:ss').format(now);
 
     Pedido nuevoPedido = Pedido(
-      peticion: formattedDate,
-      // nombreCliente: nombreCliente,
-      // comentarios: comentarios,
-      estatus: "EN PROCESO",
-      // totalPedido: totalPedido,
-      descuento: pedidoActual?.descuento,
-      idMesa: selectedMesa
-      // tipoPago: _obtenerTipoPago(),
-      // cantEfectivo:
-      //     efectivoSeleccionado ? double.tryParse(efectivoController.text) : 0,
-      // cantTarjeta:
-      //     tarjetaSeleccionada ? double.tryParse(tarjetaController.text) : 0,
-      // cantTransferencia: transferenciaSeleccionada
-      //     ? double.tryParse(transferenciaController.text)
-      //     : 0,
-    );
+        peticion: formattedDate,
+        // nombreCliente: nombreCliente,
+        // comentarios: comentarios,
+        estatus: "EN PROCESO",
+        // totalPedido: totalPedido,
+        descuento: pedidoActual?.descuento,
+        idMesa: selectedMesa
+        // tipoPago: _obtenerTipoPago(),
+        // cantEfectivo:
+        //     efectivoSeleccionado ? double.tryParse(efectivoController.text) : 0,
+        // cantTarjeta:
+        //     tarjetaSeleccionada ? double.tryParse(tarjetaController.text) : 0,
+        // cantTransferencia: transferenciaSeleccionada
+        //     ? double.tryParse(transferenciaController.text)
+        //     : 0,
+        );
 
     List<PedidoProducto> listaPedidoProducto = carrito.map((item) {
       List<PedidoProductoTopping> selectedToppings = [];
@@ -698,6 +701,78 @@ class _PedidoMesaFormState extends State<PedidoMesaForm> {
     }
   }
 
+  void cancelarPedidoActual() async {
+    if (widget.pedido == null) {
+      Navigator.of(context).pop();
+    } else {
+      DateTime now = DateTime.now();
+      String formattedDate = DateFormat('dd-MM-yyyy kk:mm:ss').format(now);
+
+      Pedido nuevoPedido = Pedido(
+          peticion: formattedDate,
+          // nombreCliente: nombreCliente,
+          // comentarios: comentarios,
+          estatus: "CANCELADO",
+          // totalPedido: totalPedido,
+          descuento: pedidoActual?.descuento,
+          idMesa: selectedMesa
+          // tipoPago: _obtenerTipoPago(),
+          // cantEfectivo:
+          //     efectivoSeleccionado ? double.tryParse(efectivoController.text) : 0,
+          // cantTarjeta:
+          //     tarjetaSeleccionada ? double.tryParse(tarjetaController.text) : 0,
+          // cantTransferencia: transferenciaSeleccionada
+          //     ? double.tryParse(transferenciaController.text)
+          //     : 0,
+          );
+
+      List<PedidoProducto> listaPedidoProducto = carrito.map((item) {
+        List<PedidoProductoTopping> selectedToppings = [];
+
+        item.selectedToppings.forEach((categoryId, selectedToppingIds) {
+          for (int toppingId in selectedToppingIds) {
+            selectedToppings.add(PedidoProductoTopping(
+              idTopping: toppingId,
+            ));
+          }
+        });
+
+        return PedidoProducto(
+          idProducto: item.producto.id,
+          producto: item.producto,
+          costoUnitario: item.producto.precio.toString(),
+          cantidad: item.cantidad,
+          // comentario: comentarios,
+          toppings: selectedToppings,
+        );
+      }).toList();
+
+      nuevoPedido.productos = listaPedidoProducto;
+
+      if (widget.pedido != null && widget.pedido!.id != null) {
+        nuevoPedido.id = widget.pedido!.id;
+      }
+
+      bool result = await Provider.of<PedidoViewModel>(context, listen: false)
+          .guardarPedidoLocal(pedido: nuevoPedido);
+
+      if (!mounted) return;
+
+      if (result) {
+        Pedido? pedidoCompleto =
+            await Provider.of<PedidoViewModel>(context, listen: false)
+                .fetchPedidoConProductos(nuevoPedido.id!);
+
+        // if (pedidoCompleto != null) {
+        //   imprimirTicketsJuntos(context, pedidoCompleto);
+        // }
+        Navigator.of(context).pop();
+      } else {
+        print("Error al guardar el pedido");
+      }
+    }
+  }
+
   String _obtenerTipoPago() {
     List<String> tiposPago = [];
     if (efectivoSeleccionado) tiposPago.add('Efectivo');
@@ -1209,7 +1284,7 @@ class _PedidoMesaFormState extends State<PedidoMesaForm> {
                   Padding(
                     padding: const EdgeInsets.all(8.0),
                     child: ElevatedButton(
-                      onPressed: _finalizeOrder,
+                      onPressed: cancelarPedidoActual,
                       style: ElevatedButton.styleFrom(
                         backgroundColor: AppTheme.tertiary,
                         textStyle: const TextStyle(fontSize: 22),

+ 12 - 0
lib/views/pedido_mesa/pedido_mesa_screen.dart

@@ -187,10 +187,18 @@ class _PedidoMesaScreenState extends State<PedidoMesaScreen> {
           )
         ])),
         DataCell(
+          Text(item.id.toString()),
+          onTap: () => go(item),
+        ),
+        DataCell(
           Text(item.folio.toString()),
           onTap: () => go(item),
         ),
         DataCell(
+          Text(item.idLocal.toString()),
+          onTap: () => go(item),
+        ),
+        DataCell(
           Text(item.nombreCliente ?? "Sin nombre"),
           onTap: () => go(item),
         ),
@@ -315,8 +323,12 @@ class _PedidoMesaScreenState extends State<PedidoMesaScreen> {
                                   columns: [
                                     DataColumn(label: Text(" ", style: estilo)),
                                     DataColumn(
+                                        label: Text("ID", style: estilo)),
+                                    DataColumn(
                                         label: Text("FOLIO", style: estilo)),
                                     DataColumn(
+                                        label: Text("IDLOCAL", style: estilo)),
+                                    DataColumn(
                                         label: Text("NOMBRE", style: estilo)),
                                     DataColumn(
                                         label: