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(); if (producto != null) { nuevoproducto = producto; mod = true; InicializarFormulario(); } } private void InicializarFormulario() { numId.Value = nuevoproducto.Id; numId.Enabled = false; txtNombre.Text = nuevoproducto.Nombre; numPrecio.Value = (decimal)nuevoproducto.Precio; checkHabilitado.Checked = nuevoproducto.Habilitado; cmbCategoria.SelectedValue = nuevoproducto.Categoria.Id; dgvProveedorAñadido.DataSource = nuevoproducto.ListarProveedores(); } private void CargarTabla() { dgvProveedor.DataSource = null; dgvProveedor.DataSource = ControladoraProveedores.Instance.Listar(); if (mod) { foreach (Proveedor prov in ControladoraProductos.Instance.ListarProveedores(nuevoproducto)) { nuevoproducto.AñadirProveedor(prov); } } } private void CargarCategorias() { // Obtener la lista de categorías desde la controladora var categorias = ControladoraCategorias.Instance.Listar(); // Configurar el ComboBox para categorías cmbCategoria.DisplayMember = "Descripcion"; // Mostrar la propiedad Descripcion cmbCategoria.ValueMember = "Id"; // Usar la propiedad Id como valor // Asignar la lista de categorías al ComboBox cmbCategoria.DataSource = categorias; 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"; } if (numId.Value <= 0) { devolucion += "NO es un cuit válido"; }; // 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 if (cmbCategoria.SelectedItem == null) { devolucion += "Debe seleccionar una categoría.\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()) { nuevoproducto.Nombre = txtNombre.Text; nuevoproducto.Precio = (double)numPrecio.Value; nuevoproducto.Habilitado = checkHabilitado.Checked; nuevoproducto.Categoria = (Categoria)cmbCategoria.SelectedItem; string mensaje; if (mod) { mensaje = ControladoraProductos.Instance.Modificar(nuevoproducto); } else { nuevoproducto.Id = (int)numId.Value; mensaje = ControladoraProductos.Instance.Añadir(nuevoproducto); } 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) { // Puedes usar este método para manejar cambios en el ComboBox si es necesario } 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.ListarProveedores().Contains(proveedor); if (checkcolicion) { MessageBox.Show("El proveedor ya fue cargado"); return; } nuevoproducto.AñadirProveedor(proveedor); dgvProveedorAñadido.DataSource = null; dgvProveedorAñadido.DataSource = nuevoproducto.ListarProveedores(); } } 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.ListarProveedores(); } } 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); } } } }