279 lines
10 KiB
C#
279 lines
10 KiB
C#
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<DetallePresupuesto> GetDetallesFromDataGridView()
|
|
{
|
|
var detalles = new List<DetallePresupuesto>();
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|