public static void Update(ProductoXProveedor prodXProv, ProductoXProveedor prodXProvViejo)
        {
            Acceso        ac       = new Acceso();
            SqlConnection conexion = new SqlConnection(ac.getCadenaConexion());

            SqlCommand cmd = new SqlCommand("Update ProductoXProveedor SET idProveedor = @idPers ,idProducto = @idProd, fecha = @fecha, precio = @precio Where idProveedor = @idPers2 and idProducto = @idProd2 and fecha = @fecha2", conexion);

            cmd.Parameters.AddWithValue("@idPers", prodXProv.proveedor.idPersona);
            cmd.Parameters.AddWithValue("@idProd", prodXProv.producto.idProducto);
            cmd.Parameters.AddWithValue("@fecha", prodXProv.fechaPrecio.Date);
            cmd.Parameters.AddWithValue("@precio", prodXProv.precioProveedor);
            cmd.Parameters.AddWithValue("@idPers2", prodXProvViejo.proveedor.idPersona);
            cmd.Parameters.AddWithValue("@idProd2", prodXProvViejo.producto.idProducto);
            cmd.Parameters.AddWithValue("@fecha2", prodXProvViejo.fechaPrecio.Date);

            try
            {
                conexion.Open();

                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
            }
            catch (ArgumentException ex)
            {
                throw new ApplicationException(ex.Message);
            }
            catch (SqlException ex)
            {
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                conexion.Close();
            }
        }
        public static void Insert(ProductoXProveedor prodXProv)
        {
            Acceso        ac       = new Acceso();
            SqlConnection conexion = new SqlConnection(ac.getCadenaConexion());

            SqlCommand cmd = new SqlCommand("Insert into ProductoXProveedor (idProveedor,idProducto,fecha,precio) values (@idPers,@idProd,@fecha,@precio)", conexion);

            cmd.Parameters.AddWithValue("@idPers", prodXProv.proveedor.idPersona);
            cmd.Parameters.AddWithValue("@idProd", prodXProv.producto.idProducto);
            cmd.Parameters.AddWithValue("@fecha", prodXProv.fechaPrecio.Date);
            cmd.Parameters.AddWithValue("@precio", prodXProv.precioProveedor);

            try
            {
                conexion.Open();

                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
            }
            catch (ArgumentException ex)
            {
                throw new ApplicationException(ex.Message);
            }
            catch (SqlException ex)
            {
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                conexion.Close();
            }
        }
        public static void Delete(ProductoXProveedor prodXProv)
        {
            Acceso        ac       = new Acceso();
            SqlConnection conexion = new SqlConnection(ac.getCadenaConexion());

            SqlCommand cmd = new SqlCommand("DELETE ProductoXProveedor WHERE idProveedor = @idPers and idProducto = @idProd and fecha = @fecha", conexion);

            cmd.Parameters.AddWithValue("@idPers", prodXProv.proveedor.idPersona);
            cmd.Parameters.AddWithValue("@idProd", prodXProv.producto.idProducto);
            cmd.Parameters.AddWithValue("@fecha", prodXProv.fechaPrecio.Date);

            try
            {
                conexion.Open();

                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
            }
            catch (ArgumentException ex)
            {
                throw new ApplicationException(ex.Message);
            }
            catch (SqlException ex)
            {
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                conexion.Close();
            }
        }
        public static List <ProductoXProveedor> GetByIdProd(int idProv)
        {
            Acceso                    ac        = new Acceso();
            SqlConnection             conexion  = new SqlConnection(ac.getCadenaConexion());
            List <ProductoXProveedor> productos = new List <ProductoXProveedor> ();
            SqlCommand                cmd       = new SqlCommand();
            string                    sql       = "Select * From CONSULTAR_PRODUCTOS_X_PROVEEDOR where idProveedor = @idProv";

            cmd.Parameters.AddWithValue("@idProv", idProv);
            Persona            pr;
            Producto           p;
            UnidadMedida       u;
            ProductoXProveedor pp;

            try
            {
                conexion.Open();

                cmd.Connection  = conexion;
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;

                SqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    pr          = new Persona();
                    pr.Apellido = dr["apellido"].ToString();
                    pr.Nombre   = dr["nombreRepresentante"].ToString();
                    pr.telefono = dr["telefonoContacto"].ToString();
                    pr.mail     = dr["email"].ToString();
                    pp          = new ProductoXProveedor();
                    //u.IDUnidad = Convert.ToInt32(dr["idunidad"]);
                    u            = new UnidadMedida();
                    p            = new Producto();
                    p.idProducto = Convert.ToInt32(dr["idProducto"]);
                    p.Unidad     = new UnidadMedida()
                    {
                        Nombre = dr["unidad"].ToString()
                    };
                    p.Nombre          = dr["nombre"].ToString();
                    p.Descripcion     = dr["descripcion"].ToString();
                    p.StockActual     = Convert.ToDouble(dr["stockActual"]);
                    p.StockDisponible = Convert.ToDouble(dr["stockDisponible"]);
                    p.StockReservado  = Convert.ToDouble(dr["StockReservado"]);
                    p.StockRiesgo     = Convert.ToDouble(dr["StockdeRiesgo"]);


                    pp.producto        = p;
                    pp.fechaPrecio     = Convert.ToDateTime(dr["fecha"]);
                    pp.precioProveedor = Convert.ToDouble(dr["precio"]);
                    pp.proveedor       = pr;
                    productos.Add(pp);
                }
            }

            catch (InvalidOperationException ex)
            {
                throw new ApplicationException(ex.Message);
            }
            catch (SqlException ex)
            {
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                conexion.Close();
            }


            return(productos);
        }
        public static List <ProductoXProveedor> buscarProductosXProveedor()
        {
            Acceso ac = new Acceso();

            List <ProductoXProveedor> productos = new List <ProductoXProveedor>();

            string        sql      = "SELECT idProveedor, idProducto, fecha, precio, nombre, descripcion, stockDisponible, stockDeRiesgo, stockActual, stockReservado, unidad, idUnidad, razonSocial, CUIT, nombreRepresentante, apellido, email, telefonoContacto, idCategoria from CONSULTAR_PRODUCTOS_X_PROVEEDOR order by nombre asc";
            SqlCommand    cmd      = new SqlCommand();
            SqlConnection conexion = new SqlConnection(ac.getCadenaConexion());

            try
            {
                conexion.Open();

                cmd.Connection  = conexion;
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;

                SqlDataReader dr = cmd.ExecuteReader();

                Producto           prod;
                Persona            prov;
                Categoria          c;
                UnidadMedida       u;
                ProductoXProveedor PPP;

                while (dr.Read())
                {
                    u          = new UnidadMedida();
                    u.IDUnidad = Convert.ToInt32(dr["idUnidad"]);
                    u.Nombre   = dr["unidad"].ToString();

                    prod = new Producto();

                    prod.idProducto      = Convert.ToInt32(dr["idProducto"]);
                    prod.Nombre          = dr["nombre"].ToString();
                    prod.Descripcion     = dr["descripcion"].ToString();
                    prod.Unidad          = u;
                    prod.StockRiesgo     = Convert.ToInt32(dr["stockDeRiesgo"]);
                    prod.StockDisponible = Convert.ToInt32(dr["stockDisponible"]);
                    prod.StockActual     = Convert.ToInt32(dr["stockActual"]);
                    prod.StockReservado  = Convert.ToInt32(dr["stockReservado"]);

                    prov = new Persona();

                    prov.NroProveedor = Convert.ToInt32(dr["idProveedor"]);
                    prov.RazonSocial  = dr["razonSocial"].ToString();
                    prov.cuil         = dr["CUIT"].ToString();
                    prov.Nombre       = dr["nombreRepresentante"].ToString();
                    prov.Apellido     = dr["apellido"].ToString();
                    prov.mail         = dr["email"].ToString();
                    prov.telefono     = dr["telefonoContacto"].ToString();
                    //prov.idPersona = Convert.ToInt32(dr["idPersona"]);

                    PPP = new ProductoXProveedor();

                    PPP.fechaPrecio     = Convert.ToDateTime(dr["fecha"]);
                    PPP.precioProveedor = Convert.ToDouble(dr["precio"]);
                    PPP.producto        = prod;
                    PPP.proveedor       = prov;

                    productos.Add(PPP);
                }
            }

            catch (InvalidOperationException ex)
            {
                throw new ApplicationException(ex.Message);
            }
            catch (SqlException ex)
            {
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                conexion.Close();
            }


            return(productos);
        }