public static void finalizarOTPadre(OrdenDeTrabajo ot, double canPed, double canPlan, List <DetalleProducto> tabla)
        {
            Acceso ac = new Acceso();

            SqlConnection  cn   = new SqlConnection(ac.getCadenaConexion());
            SqlTransaction tran = null;

            string sql = "UPDATE [Luiggi].[dbo].[OrdenTrabajo] SET [idEstado] = 20, [cantidadProducidaReal]= @cantreal, [observaciones] = @observaciones WHERE idOrdenTrabajo =  @idOrdenTrabajo ";

            SqlCommand cmd = new SqlCommand();

            cmd.Parameters.AddWithValue("@idOrdenTrabajo", ot.idOrdenTrabajo);
            cmd.Parameters.AddWithValue("@cantreal", ot.cantidadReal);
            cmd.Parameters.AddWithValue("@observaciones", ot.observaciones);

            try
            {
                cn.Open();
                tran            = cn.BeginTransaction();
                cmd.Connection  = cn;
                cmd.Transaction = tran;
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();

                ProductoDAO.UpdateStockReservadoYDisponibleOTFinalizada(ot.producto.idProducto, canPlan, canPed, cn, tran);

                foreach (DetalleProducto det in tabla)
                {
                    ProductoDAO.UpdateStockReservadoYDisponibleMatiaPrimaOTfinalizada(det.idProducto, det.cantidad, det.cantidadProductos, cn, tran);
                }

                DetallePedidoDAO.finalizarDetalleDePedido(ot.fechaCreacion, ot.producto.idProducto, tran, cn);

                tran.Commit();
            }
            catch (ArgumentException ex)
            {
                tran.Rollback();
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            catch (SqlException ex)
            {
                tran.Rollback();
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                cn.Close();
            }
        }
        public static void finalizarOTHija(OrdenDeTrabajo ot, List <DetalleProducto> tabla)
        {
            Acceso ac = new Acceso();

            SqlConnection  cn   = new SqlConnection(ac.getCadenaConexion());
            SqlTransaction tran = null;

            string sql = "UPDATE [Luiggi].[dbo].[OrdenTrabajo] SET [idEstado] = 20, [cantidadProducidaReal]= @cantreal, [observaciones] = @observaciones WHERE idOrdenTrabajo =  @idOrdenTrabajo ";

            SqlCommand cmd = new SqlCommand();

            cmd.Parameters.AddWithValue("@idOrdenTrabajo", ot.idOrdenTrabajo);
            cmd.Parameters.AddWithValue("@cantreal", ot.cantidadReal);
            cmd.Parameters.AddWithValue("@observaciones", ot.observaciones);

            try
            {
                cn.Open();
                tran            = cn.BeginTransaction();
                cmd.Connection  = cn;
                cmd.Transaction = tran;
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();

                //ACTUALIZAR EL STOCK DE PROD INTERMEDIOS
                if (ot.cantidad >= ot.cantidadReal)
                {
                    sql             = "Update Producto set stockActual = stockActual + @cantreal, stockReservado = stockReservado + @cantreal where idProducto = @idProducto";
                    cmd.CommandText = sql;
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@idProducto", ot.producto.idProducto);
                    cmd.Parameters.AddWithValue("@cantreal", ot.cantidadReal);
                    cmd.ExecuteNonQuery();
                }
                if (ot.cantidad < ot.cantidadReal)
                {
                    sql             = "Update Producto set stockActual = stockActual + @cantreal, stockReservado = stockReservado + @cant, stockDisponible = stockDisponible + @cantreal - @cant where idProducto = @idProducto";
                    cmd.CommandText = sql;
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@idProducto", ot.producto.idProducto);
                    cmd.Parameters.AddWithValue("@cantreal", ot.cantidadReal);
                    cmd.Parameters.AddWithValue("@cant", ot.cantidad);
                    cmd.ExecuteNonQuery();
                }
                ////////////////////////////////////////////
                //ACTUALIZAR EL STOCK DE INSUMOS
                foreach (DetalleProducto det in tabla)
                {
                    ProductoDAO.UpdateStockReservadoYDisponibleMatiaPrimaOTfinalizada(det.idProducto, det.cantidad, det.cantidadProductos, cn, tran);
                }
                //////////////////////////////////////


                tran.Commit();
            }
            catch (ArgumentException ex)
            {
                tran.Rollback();
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            catch (SqlException ex)
            {
                tran.Rollback();
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                cn.Close();
            }
        }