cambios nachito a form factura

This commit is contained in:
2024-08-04 02:26:06 +01:00
parent 4bc99e9cc6
commit 6092f6f08b
40 changed files with 750 additions and 116 deletions

View File

@@ -18,16 +18,28 @@ namespace Vista
{
private Factura factura;
private Cliente clienteSeleccionado;
private List<Lote> carrito; // Lista para almacenar los lotes en el carrito
public FrmFactura(Factura? factura = null)
{
InitializeComponent();
ConfigurarDataGridView();
ConfigurarDataGridViewCarrito(); // Nueva configuración del DataGridView para el carrito
ActualizarGrilla();
CargarClientes();
carrito = new List<Lote>(); // Inicializar la lista del carrito
cmbCliente.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
// Para el primer control NumericUpDown
numid.Maximum = int.MaxValue; // Esto permitirá IDs muy grandes
// Para el segundo control NumericUpDown
numtotal.Maximum = decimal.MaxValue; // Esto permitirá totales muy grandes
numtotal.Enabled = false; // Deshabilitar el control para que no se pueda modificar
// Configurar NumericUpDown para unidades
numericUpDown1.Maximum = int.MaxValue; // Configurar el máximo valor permitido
cmbCliente.DisplayMember = "Cliente";
cmbCliente.SelectedIndex = -1;
@@ -44,17 +56,68 @@ namespace Vista
}
}
private void ConfigurarDataGridView()
{
dataGridView1.AutoGenerateColumns = false;
// Definir las columnas manualmente
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn
{
DataPropertyName = "Id",
HeaderText = "ID",
Name = "Id"
});
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn
{
DataPropertyName = "Nombre",
HeaderText = "Nombre",
Name = "Nombre"
});
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn
{
DataPropertyName = "Precio",
HeaderText = "Precio",
Name = "Precio"
});
}
private void ConfigurarDataGridViewCarrito()
{
dataGridView2.AutoGenerateColumns = false;
// Definir las columnas manualmente
dataGridView2.Columns.Add(new DataGridViewTextBoxColumn
{
DataPropertyName = "NombreProducto", // Usa la propiedad NombreProducto
HeaderText = "Producto",
Name = "Producto"
});
dataGridView2.Columns.Add(new DataGridViewTextBoxColumn
{
DataPropertyName = "CantidadDeProductos",
HeaderText = "Cantidad",
Name = "CantidadDeProductos"
});
// Asignar la lista de lotes al DataGridView
dataGridView2.DataSource = carrito;
}
private void ActualizarGrilla()
{
dataGridView1.DataSource = null;
dataGridView1.DataSource = ControladoraProductos.Instance.Listar();
}
private void CargarClientes()
{
// Obtener la lista de clientes desde el repositorio
ReadOnlyCollection<Cliente> clientes = RepositorioClientes.Instance.Listar();
// Asignar la lista de clientes como origen de datos para el ComboBox
cmbCliente.DataSource = clientes;
// Establecer la propiedad para mostrar el nombre del cliente en el ComboBox
cmbCliente.DisplayMember = "NombreCompleto";
}
@@ -64,8 +127,6 @@ namespace Vista
clienteSeleccionado = (Cliente)cmbCliente.SelectedItem;
}
private void CargarDatos()
{
numid.Value = factura.Id;
@@ -77,16 +138,33 @@ namespace Vista
{
cmbCliente.SelectedItem = factura.Cliente;
}
// Recuperar los lotes asociados a la factura y actualizar el DataGridView
carrito = ControladoraLotes.Instance.ListarPorFacturaId(factura.Id).ToList() ?? new List<Lote>();
dataGridView2.DataSource = null;
dataGridView2.DataSource = carrito;
// Actualizar el total
ActualizarTotal();
}
private void ActualizarTotal()
{
// Recalcular el total de la factura
decimal total = 0;
foreach (var lote in carrito)
{
total += (decimal)(lote.Producto.Precio * lote.CantidadDeProductos);
}
numtotal.Value = total;
}
private bool ValidarDatos()
{
string devolucion = "";
if (string.IsNullOrEmpty(numid.Text)) devolucion += "El ID no puede ser nulo o vacío\n";
if (numtotal.Value <= 0) devolucion += "El total debe ser mayor que cero\n";
if (clienteSeleccionado == null) devolucion += "Debe seleccionar un cliente\n";
if (devolucion == "")
@@ -100,14 +178,20 @@ namespace Vista
}
}
private void button1_Click(object sender, EventArgs e)
{
// Validar los datos antes de continuar
if (ValidarDatos())
{
try
{
// Verificar si la ID de la factura ya está en uso
if (RepositorioFactura.Instance.ExistePorId((int)numid.Value) && factura == null)
{
MessageBox.Show("La ID de la factura ya está en uso. Por favor, elija una ID diferente.", "ID en Uso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
if (factura == null)
{
// Crear una nueva factura con los datos proporcionados
@@ -116,10 +200,18 @@ namespace Vista
Id = (int)numid.Value,
Total = (double)numtotal.Value,
Fecha = datepick.Value,
Cliente = (Cliente)cmbCliente.SelectedItem,
Cliente = (Cliente)cmbCliente.SelectedItem
};
// Agregar la factura a la colección
ControladoraFacturas.Instance.Añadir(factura);
// Guardar los lotes asociados a la factura
foreach (var lote in carrito)
{
lote.Id = factura.Id; // Usar la ID de la factura
lote.Fecha = factura.Fecha; // Usar la fecha de la factura
ControladoraLotes.Instance.Añadir(lote);
}
}
else
{
@@ -130,6 +222,15 @@ namespace Vista
factura.Cliente = (Cliente)cmbCliente.SelectedItem;
// Modificar la factura en la colección
ControladoraFacturas.Instance.Modificar(factura);
// Actualizar los lotes asociados a la factura
ControladoraLotes.Instance.EliminarPorFacturaId(factura.Id); // Eliminar lotes antiguos
foreach (var lote in carrito)
{
lote.Id = factura.Id; // Usar la ID de la factura
lote.Fecha = factura.Fecha; // Usar la fecha de la factura
ControladoraLotes.Instance.Añadir(lote);
}
}
MessageBox.Show("Operación realizada con éxito", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
Close();
@@ -153,5 +254,77 @@ namespace Vista
}
private void button3_Click(object sender, EventArgs e)
{
// Validar los datos antes de crear el lote
if (ValidarDatos() && ValidarDatosLote())
{
// Verifica si hay una fila seleccionada en el DataGridView
if (dataGridView1.CurrentRow != null)
{
// Deshabilitar los controles para ID, fecha, y cliente
numid.Enabled = false;
datepick.Enabled = false;
cmbCliente.Enabled = false;
// Crear un nuevo lote con los datos proporcionados
var lote = new Lote
{
Id = (int)numid.Value, // Usar la misma ID que la de la factura
Fecha = datepick.Value, // Usar la misma fecha que la de la factura
Producto = (Producto)dataGridView1.CurrentRow.DataBoundItem,
CantidadDeProductos = (long)numericUpDown1.Value, // Usar el valor de unidades del NumericUpDown
Habilitado = true // Asignar un valor por defecto o según tus necesidades
};
// Añadir el lote al carrito
carrito.Add(lote);
// Actualizar el total de la factura
ActualizarTotal();
// Actualizar el DataGridView para reflejar los cambios
dataGridView2.DataSource = null;
dataGridView2.DataSource = carrito;
}
else
{
// Mostrar un mensaje si no se ha seleccionado ninguna fila
MessageBox.Show("Por favor, seleccione un producto en el carrito antes de añadir.", "Selección Requerida", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
// Función actualizada para validar los datos del lote
private bool ValidarDatosLote()
{
string devolucion = "";
// Validar la selección del producto
if (dataGridView1.CurrentRow == null)
devolucion += "Debe seleccionar un producto para añadir al lote\n";
// Validar la cantidad de productos
if (numericUpDown1.Value <= 0)
devolucion += "La cantidad de productos debe ser mayor que cero\n";
if (devolucion == "")
{
return true;
}
else
{
MessageBox.Show(devolucion, "Errores de Validación", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
}
private void datepick_ValueChanged(object sender, EventArgs e)
{
}
}
}
}