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 Producto _producto; private bool _esModificacion; public FrmProducto() { InitializeComponent(); CargarCategorias(); CargarTabla(); } public FrmProducto(Producto producto = null, bool esModificacion = false) { InitializeComponent(); _producto = producto ?? new Producto(); _esModificacion = esModificacion; CargarCategorias(); CargarTabla(); InicializarFormulario(); } private void InicializarFormulario() { if (_esModificacion && _producto != null) { numericUpDown1.Value = _producto.Id; numericUpDown1.Enabled = false; textBox1.Text = _producto.Nombre; numericUpDown2.Value = (decimal)_producto.Precio; checkBox1.Checked = _producto.Habilitado; comboBox1.SelectedValue = _producto.Categoria.Id; dgvProveedorAñadido.DataSource = _producto.ListarProveedores(); } } private void CargarTabla() { dgvProveedor.DataSource = null; dgvProveedor.DataSource = ControladoraProveedores.Instance.Listar(); } private void CargarCategorias() { // Obtener la lista de categorías desde la controladora var categorias = ControladoraCategorias.Instance.Listar(); // Configurar el ComboBox para categorías comboBox1.DisplayMember = "Descripcion"; // Mostrar la propiedad Descripcion comboBox1.ValueMember = "Id"; // Usar la propiedad Id como valor // Asignar la lista de categorías al ComboBox comboBox1.DataSource = categorias; } private void CargarDatosProducto() { if (_producto != null) { numericUpDown1.Value = _producto.Id; textBox1.Text = _producto.Nombre; numericUpDown2.Value = Convert.ToDecimal(_producto.Precio); checkBox1.Checked = _producto.Habilitado; comboBox1.SelectedItem = _producto.Categoria; if (_esModificacion) { numericUpDown1.Enabled = false; // Bloquear el ID } } } private bool ValidarDatos() { string devolucion = ""; // Validar Nombre if (string.IsNullOrEmpty(textBox1.Text)) { devolucion += "El nombre del producto no puede estar vacío.\n"; } else if (textBox1.Text.Length > 100) // Limite de caracteres { devolucion += "El nombre del producto no puede superar los 100 caracteres.\n"; } // Validar Precio if (numericUpDown2.Value <= 0) { devolucion += "El precio debe ser mayor a cero.\n"; } // Validar ID (Si es necesario) if (!_esModificacion && ControladoraProductos.Instance.Listar().Any(p => p.Id == (int)numericUpDown1.Value)) { devolucion += "Ya existe un producto con el mismo ID.\n"; } // Validar Categoría Seleccionada if (comboBox1.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 button1_Click(object sender, EventArgs e) { if (ValidarDatos()) { _producto.Nombre = textBox1.Text; _producto.Precio = (double)numericUpDown2.Value; _producto.Habilitado = checkBox1.Checked; _producto.Categoria = (Categoria)comboBox1.SelectedItem; string mensaje; if (_esModificacion) { mensaje = ControladoraProductos.Instance.Modificar(_producto); } else { _producto.Id = (int)numericUpDown1.Value; mensaje = ControladoraProductos.Instance.Añadir(_producto); } MessageBox.Show(mensaje, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information); Close(); } } private void button2_Click(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) { try { if (dgvProveedor.SelectedRows.Count > 0) { foreach (DataGridViewRow selectedRow in dgvProveedor.SelectedRows) { Proveedor proveedor = (Proveedor)selectedRow.DataBoundItem; _producto.AñadirProveedor(proveedor); dgvProveedorAñadido.DataSource = null; dgvProveedorAñadido.DataSource = _producto.ListarProveedores(); } } else { MessageBox.Show("Por favor, selecciona una fila para añadir Proveedor al producto."); } } catch (Exception ex) { MessageBox.Show($"Error al añadir proveedor: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } 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; dgvProveedorAñadido.Rows.Remove(selectedRow); Proveedor proveedoreliminar = _producto.ListarProveedores().FirstOrDefault(x => x.Cuit == proveedor.Cuit); _producto.EliminarProveedor(proveedoreliminar); } } 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); } } } }