Files
Final_Das/Vista/FrmProducto.cs

270 lines
9.5 KiB
C#

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()
{
comboBox1.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;
cmbCategoria.SelectedValue = nuevoproducto.Categoria.Id;
dgvProveedorAñadido.DataSource = nuevoproducto.ListarProveedores();
}
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()
{
// 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"; }
// 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";
}
// Validar Tipo de Producto
if (!checkBox1.Checked && comboBox1.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,
Categoria = (Categoria)cmbCategoria.SelectedItem,
MesesHastaConsumoPreferente = (int)numericUpDown1.Value,
MesesHastaVencimiento = (int)numericUpDown2.Value,
};
foreach (var proveedor in nuevoproducto.ListarProveedores())
{
productoPerecedero.AñadirProveedor(proveedor);
}
string mensaje = mod
? ControladoraProductos.Instance.Modificar(productoPerecedero)
: ControladoraProductos.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,
Categoria = (Categoria)cmbCategoria.SelectedItem,
TipoDeEnvase = (EnvaseTipo)comboBox1.SelectedItem,
};
foreach (var proveedor in nuevoproducto.ListarProveedores())
{
productoNoPerecedero.AñadirProveedor(proveedor);
}
string mensaje = mod
? ControladoraProductos.Instance.Modificar(productoNoPerecedero)
: ControladoraProductos.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.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);
}
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
bool esPerecedero = checkBox1.Checked;
numericUpDown1.Enabled = esPerecedero;
numericUpDown2.Enabled = esPerecedero;
comboBox1.Enabled = !esPerecedero;
}
private void numericUpDown2_ValueChanged(object sender, EventArgs e)
{
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
}
}
}