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 int Insert(Pedido ped, List <Producto> productosConPocaMP)
        {
            Acceso         ac   = new Acceso();
            SqlTransaction tran = null;

            SqlConnection conexion = new SqlConnection(ac.getCadenaConexion());

            SqlCommand cmd = new SqlCommand("sp_Pedido_insert", conexion);

            cmd.Parameters.AddWithValue("@idCliente", ped.cliente.idPersona);
            cmd.Parameters.AddWithValue("@idEstado", ped.estado.idEstado);
            cmd.Parameters.AddWithValue("@fechaPedido", ped.fechaPedido);
            cmd.Parameters.AddWithValue("@fechaNecesidad", ped.fechaNecesidad);
            cmd.Parameters.AddWithValue("@nroPedido", ped.nroPedido);
            cmd.Parameters.AddWithValue("@direccion", ped.dirEntraga);


            try
            {
                conexion.Open();
                tran            = conexion.BeginTransaction();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Transaction = tran;
                cmd.ExecuteNonQuery();

                SqlCommand cmdIdentity = new SqlCommand("select @@Identity", conexion, tran);
                ped.idPedido = Convert.ToInt32((cmdIdentity.ExecuteScalar()));

                foreach (DetallePedido detPed in ped.detallePedido)
                {
                    //detPed.pedido.idPedido = ped.idPedido;
                    DetallePedidoDAO.Insert(detPed, conexion, tran, ped.idPedido);
                    if (detPed.reservado == true)
                    {
                        ProductoDAO.UpdateStockReservadoYDisponible(detPed, conexion, tran);
                    }
                    if (detPed.reservado == false)
                    {
                        actualizarStock(detPed, conexion, tran, ped, productosConPocaMP);
                    }
                }
                tran.Commit();
                return(ped.idPedido);
            }
            catch (ArgumentException ex)
            {
                if (conexion.State == ConnectionState.Open)
                {
                    tran.Rollback();
                }
                throw new ApplicationException(ex.Message);
            }
            catch (SqlException ex)
            {
                if (conexion.State == ConnectionState.Open)
                {
                    tran.Rollback();
                }
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                conexion.Close();
            }
        }
        public static void Update(Pedido ped, List <DetallePedido> tablaAModificar, List <Producto> productosConPocaMP)
        {
            Acceso         ac   = new Acceso();
            SqlTransaction tran = null;

            SqlConnection conexion = new SqlConnection(ac.getCadenaConexion());

            SqlCommand cmd = new SqlCommand("UPDATE [Luiggi].[dbo].[Pedido] SET [fechaNecesidad] = @fechaNecesidad, [direccion] = @direccion, [idEstado] = @idEstado  WHERE idPedido = @idPedido", conexion);

            cmd.Parameters.AddWithValue("@idPedido", ped.idPedido);
            cmd.Parameters.AddWithValue("@fechaNecesidad", ped.fechaNecesidad);
            cmd.Parameters.AddWithValue("@direccion", ped.dirEntraga);
            cmd.Parameters.AddWithValue("@idEstado", ped.estado.idEstado);



            try
            {
                conexion.Open();
                tran            = conexion.BeginTransaction();
                cmd.CommandType = CommandType.Text;
                cmd.Transaction = tran;
                cmd.ExecuteNonQuery();
                //SqlCommand cmdIdentity = new SqlCommand("select @@Identity", conexion, tran);
                //ped.idPedido = Convert.ToInt32((cmdIdentity.ExecuteScalar()));
                foreach (DetallePedido detP in tablaAModificar)
                {
                    if (detP.reservado == true)
                    {
                        ProductoDAO.UpdateStockReservadoYDisponibleEliminado(detP.producto.idProducto, detP.cantidad, conexion, tran);
                    }
                    else
                    {
                        renovarStock(detP, conexion, tran, ped, productosConPocaMP);
                    }
                }
                DetallePedidoDAO.Delete(ped.idPedido, conexion, tran);

                foreach (DetallePedido detPed in ped.detallePedido)
                {
                    //detPed.pedido.idPedido = ped.idPedido;
                    DetallePedidoDAO.Insert(detPed, conexion, tran, ped.idPedido);
                    if (detPed.reservado == true)
                    {
                        ProductoDAO.UpdateStockReservadoYDisponible(detPed, conexion, tran);
                    }
                    if (detPed.reservado == false)
                    {
                        actualizarStock(detPed, conexion, tran, ped, productosConPocaMP);
                    }
                }
                tran.Commit();
            }
            catch (ArgumentException ex)
            {
                if (conexion.State == ConnectionState.Open)
                {
                    tran.Rollback();
                }
                throw new ApplicationException(ex.Message);
            }
            catch (SqlException ex)
            {
                if (conexion.State == ConnectionState.Open)
                {
                    tran.Rollback();
                }
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                conexion.Close();
            }
        }