none
Descontar Stock Detalle Pedido NCapas Reglas de Negocio RRS feed

  • Pregunta

  • Estoy desarrollando una aplicación winform en una arquitectura NCAPAS.

    Utilizo el siguiente método DAL para grabar mi cabecera y detalle del pedido  y luego llamo a ese DAL desde mi capade negocio.

    public sealed class PedidoDAL { public static bool Insert(PedidoEntity pedido) { long IdPedido; using (MySqlConnection cnx = new MySqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())) { MySqlCommand cmd = new MySqlCommand("proc_insertar_pedido", cnx); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@p_id_cliente", pedido.Cliente.IdCliente); cmd.Parameters.AddWithValue("@p_id_local", pedido.Local.IdLocal); cmd.Parameters.AddWithValue("@p_id_usuario", pedido.Usuario.IdUsuario); cmd.Parameters.AddWithValue("@p_id_moneda", pedido.Moneda.IdMoneda); cmd.Parameters.AddWithValue("@p_fecha", pedido.Fecha); cmd.Parameters.AddWithValue("@p_total", pedido.Total);

    cnx.Open(); IdPedido = Convert.ToInt32(cmd.ExecuteScalar());

    foreach (DetallePedidoEntity detalle in pedido.DetallePedido) { cmd.Parameters.Clear(); cmd.CommandText = "proc_insertar_detalle_pedido"; cmd.Parameters.AddWithValue("@p_id_pedido", IdPedido); cmd.Parameters.AddWithValue("@p_id_producto", detalle.Producto.IdProducto); cmd.Parameters.AddWithValue("@p_precio_unitario", detalle.PrecioUnitario); cmd.Parameters.AddWithValue("@p_cantidad", detalle.Cantidad); cmd.Parameters.AddWithValue("@p_total", detalle.Total); cmd.ExecuteNonQuery(); } } return true; } }

    public sealed class PedidoBL
    {
        public static bool Save(PedidoEntity pedido)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                return PedidoDAL.Insert(pedido);
    
                scope.Complete();
            }
        }
    }

    Hasta acá no tengo problemas,la duda que tengo es la siguiente:

    1)En donde debería considerar la parte que descuenta el stock del pedido,ya que el stock se descuenta cuando va grabando detalle por detalle, y eso se hace en método DAL que graba el pedido. He pensado en crear un método actualizar stock en la DAL y llamarla desde la capa de negocio, recorriendo otra vez el detalle del pedido que viene en un List<DetallePedido>.

    La idea la tengo, pero no se cual es la mejor forma  siguiendo las buenas practicas de estructurar el descuento del stock en una arquitectura NCAPAS. 

    'Grabar Cabecera y Detalle
    PedidoDAL.Insert(pedido);
    
    'Actualiza stock
    for each detallePedido detalle in pedido.Detalle
    {
    PedidoDAL.DescontarStock(pedido.Id,detallePedido.cantidad);
    } 

    Así tenia pensado hacerlo?? o no si ejecutarlo directamente en el DAL el descuenta stock

    De Antemano muchas gracias.




    jueves, 16 de abril de 2020 5:53

Todas las respuestas

  • Hola Ernesto Guerra Fuentes

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, vamos a darte seguimiento e investigaremos para buscar la mejor respuesta para ti.

     

    Gracias por usar los foros de MSDN.

     

    Luis Diego Mora

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 16 de abril de 2020 13:31
    Moderador
  • hola

    Hay varias formas de poder implementarlo dependiendo ese descuento de estoy que tan vinculado este a la accion de confirmacion del pedido

    Podrias separarlo como bien comantas en un DescontarStock() iterando desde la logica de negocio o podrias hacerlo en el mismo DAL cuando insertas

    public sealed class PedidoDAL
    {
        public static bool Insert(PedidoEntity pedido)
        {
            long IdPedido;
            using (MySqlConnection cnx = new MySqlConnection())
            {
                //codigo
    
                cnx.Open();
                IdPedido = Convert.ToInt32(cmd.ExecuteScalar());
    
                foreach (DetallePedidoEntity detalle in pedido.DetallePedido)
                {
                   //codigo
                    cmd.ExecuteNonQuery();
    				
    		DescontarStock(IdPedido, detalle.Cantidad);
                }
            }
            return true;
        }
    }

    para que volver a iterar si puedes hacerlo alli mismo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 16 de abril de 2020 13:55
  • Ya veo puedo aplicar un método descontarStock  en el mismo DAL, para así evitar recorrer otra vez desde la capa de negocio.

    También es valido descontar el stock desde el mismo stored procedure que inserta los detalles, o aplicar trigger para que haga el descuento cada vez que se inserta los detalles. ¿Es valido hacerlo de esa manera en una arquitectura ncapas.?

    Yo solía hacerlo asi años atraz cuando programaba en una arquitectura cliente servidor. Mi duda va por ese lado, la mejor forma forma en una arquitectura ncapas?

    A parte de descontar el stock del detalle del pedido,hay otra serie de procesos que debe realizar, por ejemplo la acumulación de puntos de promicion para el cliente. Es un  update en una tabla que se basa  en el detalle. Estoes valido ahcerlo en la DAL igualmente.

    Algo asi:

    1)Registra cabecera

    2)Registra detalle

    3)Descuenta Stock del inventario basado en el detalle

    4)Acumula puntos promocionales para el cliente, se basa en el detalle del pedido

    Es valido hacer todo este proceso en un solo método DAL que luego sera llamado desde la capa Lógica Negocio???


    jueves, 16 de abril de 2020 20:07