import 'package:flutter/material.dart'; import 'package:turquessa_mesas_hoster/core/models/categoria_producto_model.dart'; import 'package:turquessa_mesas_hoster/core/models/media_model.dart'; import 'package:turquessa_mesas_hoster/core/models/pedido_model.dart'; import 'package:turquessa_mesas_hoster/core/models/producto_model.dart'; class CreacionPedidoViewModel extends ChangeNotifier { // Lista de productos disponibles para elegir final List _productosDisponibles = [ Producto( id: 1, // Añadido id para facilitar la búsqueda idCategoria: 1, nombre: 'Café Latte', descripcion: 'Café con leche y espuma', imagen: 'https://example.com/cafe_latte.jpg', venta: 1, existencia: 50, precio: 4.50, verMenu: 1, codigo: 'CL001', descuento: '10%', toping: 1, topings: [ Producto(id: 1, nombre: 'Crema Batida', precio: 0.50), Producto(id: 2, nombre: 'Chocolate', precio: 0.75), ], activo: 1, media: [], idWeb: 101, sincronizado: 'Sí', ), Producto( id: 2, idCategoria: 1, nombre: 'Pizza al horno', descripcion: 'Pizza tradicional italiana', imagen: 'https://example.com/pizza.jpg', venta: 1, existencia: 50, precio: 4.50, verMenu: 1, codigo: 'PZ001', descuento: '10%', toping: 1, topings: [ Producto(id: 3, nombre: 'Extra queso', precio: 0.50), Producto(id: 4, nombre: 'Champiñones', precio: 0.75), ], activo: 1, media: [], idWeb: 102, sincronizado: 'Sí', ), Producto( id: 3, idCategoria: 1, nombre: 'Capuchino', descripcion: 'Café con espuma de leche', imagen: 'https://example.com/capuchino.jpg', venta: 1, existencia: 50, precio: 4.50, verMenu: 1, codigo: 'CP001', descuento: '10%', toping: 1, topings: [ Producto(id: 1, nombre: 'Crema Batida', precio: 0.50), Producto(id: 5, nombre: 'Canela', precio: 0.25), ], activo: 1, media: [], idWeb: 103, sincronizado: 'Sí', ), Producto( id: 4, idCategoria: 1, nombre: 'Pastel de Chocolate', descripcion: 'Pastel casero de chocolate', imagen: 'https://example.com/pastel.jpg', venta: 1, existencia: 50, precio: 4.50, verMenu: 1, codigo: 'PC001', descuento: '10%', toping: 1, topings: [ Producto(id: 6, nombre: 'Helado', precio: 1.00), Producto(id: 7, nombre: 'Frutos rojos', precio: 0.75), ], activo: 1, media: [], idWeb: 104, sincronizado: 'Sí', ) ]; // Lista del carrito que se mostrará en el DataTable final List _carrito = []; // Getters List get productosDisponibles => _productosDisponibles; List get carrito => _carrito; // Método para agregar un producto al carrito void agregarAlCarrito(Producto producto) { // Buscar si el producto ya está en el carrito int index = _carrito.indexWhere((p) => p.id == producto.id); if (index != -1) { // Si ya existe en el carrito, incrementar cantidad _carrito[index].venta = (_carrito[index].venta ?? 0) + 1; } else { // Si no existe, crear una copia del producto y añadirlo al carrito final productoCarrito = Producto( id: producto.id, nombre: producto.nombre, precio: producto.precio, descripcion: producto.descripcion, imagen: producto.imagen, venta: 1, // Iniciar con cantidad 1 codigo: producto.codigo, topings: producto.topings, // Otros atributos que necesites copiar ); _carrito.add(productoCarrito); } notifyListeners(); } // Método para reducir la cantidad de un producto en el carrito void reducirDelCarrito(Producto producto) { int index = _carrito.indexWhere((p) => p.id == producto.id); if (index != -1) { if (_carrito[index].venta! > 1) { // Reducir cantidad si es mayor que 1 _carrito[index].venta = _carrito[index].venta! - 1; } else { // Eliminar del carrito si la cantidad llega a 0 _carrito.removeAt(index); } notifyListeners(); } } // Método para eliminar un producto específico del carrito void eliminarDelCarrito(Producto producto) { _carrito.removeWhere((p) => p.id == producto.id); notifyListeners(); } // Método para limpiar todo el carrito void limpiarCarrito() { _carrito.clear(); notifyListeners(); } // Método para calcular el total del carrito double calcularTotalCarrito() { return _carrito.fold( 0, (total, producto) => total + ((producto.precio ?? 0) * (producto.venta ?? 0))); } }