123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- 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<Producto> _productosDisponibles = <Producto>[
- 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<Producto> _carrito = [];
- // Getters
- List<Producto> get productosDisponibles => _productosDisponibles;
- List<Producto> 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)));
- }
- }
|