using Controladora; using Entidades; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static System.Windows.Forms.VisualStyles.VisualStyleElement; namespace Vista { public partial class FrmProducto : Form { private Producto nuevoproducto = new Producto(); private bool mod = false; public FrmProducto(Producto? producto = null) { InitializeComponent(); CargarCategorias(); CargarTabla(); cargarcombo(); if (producto != null) { nuevoproducto = producto; mod = true; InicializarFormulario(); } } private void cargarcombo() { cmbEnvase.DataSource = Enum.GetValues(typeof(EnvaseTipo)); } private void InicializarFormulario() { numId.Value = nuevoproducto.Id; numId.Enabled = false; txtNombre.Text = nuevoproducto.Nombre; numPrecio.Value = (decimal)nuevoproducto.Precio; checkHabilitado.Checked = nuevoproducto.Habilitado; dgvProveedorAñadido.DataSource = nuevoproducto.proveedores.AsReadOnly(); } private void CargarTabla() { dgvProveedor.DataSource = null; dgvProveedor.DataSource = ControladoraProductos.Instance.ListarProveedores(); if (mod) { foreach (Proveedor prov in ControladoraProductos.Instance.ListarProveedores(nuevoproducto)) { nuevoproducto.AñadirProveedor(prov); } } } private void CargarCategorias() { var listprod = ControladoraProductos.Instance.Listar(); numId.Value = (listprod.Count > 0) ? listprod.Max(x => x.Id + 1) : 0; numId.Enabled = false; } private bool ValidarDatos() { string devolucion = ""; // Validar Nombre if (string.IsNullOrEmpty(txtNombre.Text)) { devolucion += "El nombre del producto no puede estar vacío.\n"; } if (txtNombre.Text.Length > 100) { devolucion += "El nombre del producto no puede superar los 100 caracteres.\n"; } // Validar Precio if (numPrecio.Value <= 0) { devolucion += "El precio debe ser mayor a cero.\n"; } // Validar ID (Si es necesario) if (!mod && ControladoraProductos.Instance.Listar().Any(p => p.Id == (int)numId.Value)) { devolucion += "Ya existe un producto con el mismo ID.\n"; } // Validar Categoría Seleccionada (wip) //devolucion += "Debe seleccionar una categoría.\n"; // Validar Tipo de Producto if (!checkBox1.Checked && cmbEnvase.SelectedItem == null) { devolucion += "Debe seleccionar un tipo de envase para el producto no perecedero.\n"; } if (checkBox1.Checked) // Producto Perecedero { if (numericUpDown1.Value <= 0 || numericUpDown2.Value <= 0) { devolucion += "Los meses hasta consumo preferente y vencimiento deben ser mayores a cero.\n"; } } if (devolucion == "") { return true; } else { MessageBox.Show(devolucion, "Errores de Validación", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } } private void btnacept_Click(object sender, EventArgs e) { if (ValidarDatos()) { if (checkBox1.Checked) // Producto Perecedero { var productoPerecedero = new ProductoPercedero { Id = (int)numId.Value, Nombre = txtNombre.Text, Precio = (double)numPrecio.Value, Habilitado = checkHabilitado.Checked, MesesHastaConsumoPreferente = (int)numericUpDown1.Value, MesesHastaVencimiento = (int)numericUpDown2.Value, }; foreach (var proveedor in nuevoproducto.proveedores.AsReadOnly()) { productoPerecedero.AñadirProveedor(proveedor); } string mensaje = mod ? ControladoraProductoPercedero.Instance.Modificar(productoPerecedero) : ControladoraProductoPercedero.Instance.Añadir(productoPerecedero); MessageBox.Show(mensaje, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information); } else // Producto No Perecedero { var productoNoPerecedero = new ProductoNoPercedero { Id = (int)numId.Value, Nombre = txtNombre.Text, Precio = (double)numPrecio.Value, Habilitado = checkHabilitado.Checked, TipoDeEnvase = (EnvaseTipo)cmbEnvase.SelectedItem, }; foreach (var proveedor in nuevoproducto.proveedores.AsReadOnly()) { productoNoPerecedero.AñadirProveedor(proveedor); } string mensaje = mod ? ControladoraProductoNoPercedero.Instance.Modificar(productoNoPerecedero) : ControladoraProductoNoPercedero.Instance.Añadir(productoNoPerecedero); MessageBox.Show(mensaje, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information); } Close(); } } private void btnCerrar(object sender, EventArgs e) { this.Close(); } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void btnaddProveedor_Click(object sender, EventArgs e) { if (dgvProveedor.SelectedRows.Count > 0) { foreach (DataGridViewRow selectedRow in dgvProveedor.SelectedRows) { Proveedor proveedor = (Proveedor)selectedRow.DataBoundItem; var checkcolicion = nuevoproducto.proveedores.Contains(proveedor); if (checkcolicion) { MessageBox.Show("El proveedor ya fue cargado"); return; } nuevoproducto.AñadirProveedor(proveedor); dgvProveedorAñadido.DataSource = null; dgvProveedorAñadido.DataSource = nuevoproducto.proveedores.AsReadOnly(); } } else { MessageBox.Show("Por favor, selecciona una fila para añadir Proveedor al producto."); } } private void btnrmProveedor_Click(object sender, EventArgs e) { try { if (dgvProveedorAñadido.SelectedRows.Count > 0) { foreach (DataGridViewRow selectedRow in dgvProveedorAñadido.SelectedRows) { Proveedor proveedor = (Proveedor)selectedRow.DataBoundItem; nuevoproducto.EliminarProveedor(proveedor); dgvProveedorAñadido.DataSource = null; dgvProveedorAñadido.DataSource = nuevoproducto.proveedores.AsReadOnly(); } } else { MessageBox.Show("Por favor, selecciona una fila para eliminar Proveedor del producto."); } } catch (Exception ex) { MessageBox.Show($"Error al eliminar proveedor: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void checkBox1_CheckedChanged(object sender, EventArgs e) { bool esPerecedero = checkBox1.Checked; numericUpDown1.Enabled = esPerecedero; numericUpDown2.Enabled = esPerecedero; cmbEnvase.Enabled = !esPerecedero; } private void numericUpDown2_ValueChanged(object sender, EventArgs e) { } private void numericUpDown1_ValueChanged(object sender, EventArgs e) { } } }