using Controladora; using Entidades; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.DirectoryServices.ActiveDirectory; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Vista { public partial class FrmPresupuesto : Form { private Presupuesto presupuesto = new Presupuesto(); private int id = 0; public FrmPresupuesto() { InitializeComponent(); CargarDatos(); } private void CargarDatos() { dgvProducto.DataSource = null; dgvProducto.DataSource = ControladoraProductos.Instance.Listar(); var presupuestolist = ControladoraPresupuestos.Instance.Listar(); numId.Value = (presupuestolist.Count > 0) ? presupuestolist.Max(x => x.Id + 1) : 0; numId.Enabled = false; } private void btnCerrar_Click(object sender, EventArgs e) { this.Close(); } private void btnGuardar_Click(object sender, EventArgs e) { // Crear una nueva instancia de Presupuesto var presupuesto = new Presupuesto(); // Obtener el ID del NumericUpDown int idPresupuesto = (int)numId.Value; // Asegúrate de que numId es el nombre correcto del NumericUpDown presupuesto.Id = idPresupuesto; // Obtener la fecha actual presupuesto.Fecha = DateTime.Now; // Obtener el proveedor seleccionado del DataGridView if (dgvProveedor.SelectedRows.Count == 0) { MessageBox.Show("Por favor, seleccione un proveedor."); return; } var proveedorSeleccionado = (Proveedor)dgvProveedor.SelectedRows[0].DataBoundItem; presupuesto.Proveedor = proveedorSeleccionado; // Obtener el estado habilitado y aceptado desde los controles si es necesario presupuesto.Habilitado = true; // Ajusta según el estado actual presupuesto.Aceptado = false; // Ajusta según el estado actual // Aquí deberías tener la lógica para asegurarte de que los detalles están añadidos al presupuesto // Si ya tienes los detalles en un DataGridView, puedes hacerlo así: foreach (var detalle in GetDetallesFromDataGridView()) { presupuesto.AñadirDetalle(detalle); } // Usar la controladora para guardar el presupuesto y sus detalles try { // Guardar el presupuesto usando la controladora string resultado = ControladoraPresupuestos.Instance.Añadir(presupuesto); MessageBox.Show(resultado); } catch (Exception ex) { MessageBox.Show($"Error al guardar el presupuesto: {ex.Message}"); } this.Close(); } private List GetDetallesFromDataGridView() { var detalles = new List(); foreach (DataGridViewRow row in dgvPedido.Rows) { if (row.DataBoundItem is DetallePresupuesto detalle) { detalles.Add(detalle); } } return detalles; } private void btnAddProducto_Click(object sender, EventArgs e) { if (VerificacionesDetalles()) return; if (dgvProducto.SelectedRows.Count > 0 && dgvProveedor.SelectedRows.Count > 0) { var selectedRow = dgvProducto.SelectedRows[0] as DataGridViewRow; Producto producto = (Producto)selectedRow.DataBoundItem; try { // Verifica si el valor de numCantidad está dentro del rango válido para int int cantidad = Convert.ToInt32(numCantidad.Value); if (cantidad < int.MinValue || cantidad > int.MaxValue) { MessageBox.Show("La cantidad está fuera del rango permitido."); return; } // Verifica si el producto ya está en los detalles del presupuesto bool productoExistente = presupuesto.MostrarDetalles().Any(d => d.Producto.Id == producto.Id); if (productoExistente) { MessageBox.Show("El producto ya está agregado al presupuesto."); return; } // Crear el detalle del presupuesto DetallePresupuesto detalle = new DetallePresupuesto { Id = (int)numId.Value, Producto = producto, Cantidad = cantidad, MontoCUPropuesto = Convert.ToDouble(numPreciopropuesto.Value), IdPresupuesto = (int)numId.Value }; // Añadir el detalle al presupuesto presupuesto.AñadirDetalle(detalle); // Actualizar el DataGridView dgvPedido.DataSource = null; dgvPedido.DataSource = presupuesto.MostrarDetalles(); // Configura las columnas a mostrar y sus encabezados dgvPedido.Columns["IDPresupuesto"].Visible = true; dgvPedido.Columns["Cantidad"].Visible = true; dgvPedido.Columns["NombreDelProducto"].Visible = true; dgvPedido.Columns["IDPresupuesto"].HeaderText = "ID Presupuesto"; dgvPedido.Columns["Cantidad"].HeaderText = "Cantidad"; dgvPedido.Columns["NombreDelProducto"].HeaderText = "Producto"; // Oculta todas las demás columnas foreach (DataGridViewColumn column in dgvPedido.Columns) { if (column.Name != "IDPresupuesto" && column.Name != "Cantidad" && column.Name != "NombreDelProducto") { column.Visible = false; } } } catch (OverflowException ex) { MessageBox.Show($"Error de desbordamiento: {ex.Message}"); } catch (Exception ex) { MessageBox.Show($"Error al agregar producto: {ex.Message}"); } } else { MessageBox.Show("Por favor, selecciona una fila para agregar el producto."); } } private bool VerificacionesDetalles() { string ret = ""; if (numCantidad.Value <= 0) ret += "Cantidad de productos invalida"; if (numPreciopropuesto.Value <= 0) ret += "Precio C/U Invalido"; if (ret == "") { return false; } MessageBox.Show("ret"); return true; } private bool VerificacionesPresupuesto() { string ret = ""; if (numId.Value < 0) ret += "No es un codigo id Valido"; if (ret == "") { return false; } MessageBox.Show(ret); return true; } private void btnrmProducto_Click(object sender, EventArgs e) { if (dgvPedido.SelectedRows.Count == 0) { MessageBox.Show("Por favor, seleccione un producto para eliminar."); return; } // Confirmar la eliminación var confirmResult = MessageBox.Show("¿Estás seguro de que quieres eliminar este producto del presupuesto?", "Confirmación de Eliminación", MessageBoxButtons.YesNo); if (confirmResult == DialogResult.Yes) { try { // Obtener el detalle seleccionado var detalleSeleccionado = (DetallePresupuesto)dgvPedido.SelectedRows[0].DataBoundItem; // Eliminar el detalle del presupuesto presupuesto.EliminarDetalle(detalleSeleccionado); // Actualizar el DataGridView dgvPedido.DataSource = null; dgvPedido.DataSource = presupuesto.MostrarDetalles(); // Configura las columnas a mostrar y sus encabezados dgvPedido.Columns["IDPresupuesto"].Visible = true; dgvPedido.Columns["Cantidad"].Visible = true; dgvPedido.Columns["NombreDelProducto"].Visible = true; dgvPedido.Columns["IDPresupuesto"].HeaderText = "ID Presupuesto"; dgvPedido.Columns["Cantidad"].HeaderText = "Cantidad"; dgvPedido.Columns["NombreDelProducto"].HeaderText = "Producto"; // Oculta todas las demás columnas foreach (DataGridViewColumn column in dgvPedido.Columns) { if (column.Name != "IDPresupuesto" && column.Name != "Cantidad" && column.Name != "NombreDelProducto") { column.Visible = false; } } } catch (Exception ex) { MessageBox.Show($"Error al eliminar el producto: {ex.Message}"); } } } private void dgvProducto_CellClick(object sender, DataGridViewCellEventArgs e) { if (dgvProducto.SelectedRows.Count == 0) return; if (dgvProducto.SelectedRows.Count > 0) { Producto producto = new Producto { Id = Convert.ToInt32(dgvProducto.SelectedRows[0].Cells["Id"].Value.ToString()), }; dgvProveedor.DataSource = ControladoraProductos.Instance.ListarProveedores(producto); } } } }