none
Diseñando Lista de Precios RRS feed

  • Pregunta

  • Hola

    Tengo una lista de precios en la cual tengo registrado servicios y productos en el caso del servicio se vende impresión de papel desde centímetros hasta el metro.

    La regla del negocio es el siguiente con la impresión:

    • 0.01 cm hasta 0.50 la impresión vale 2.50(sea la cantidad que sea en ese rango se cobra 2.50. Ojo no cantidad * 2.50)
    • 0.51 cm hasta 5.00 m se cobra 5.00(acá si se cobra cantidad * precio)
    • 5.01 hasta infinito se cobra 4.50(cantidad * precio)

    Con el siguiente diseño lo tengo controlado.

    Esta viene hacer la implementacion del código:

    //preguntar en ProductoPrecio
                            var productoPrecioList = _productoPrecioRepository
                                .Filter(x => x.ProductoId == entity.ProductoId).ToList();
    
                            foreach (var item in productoPrecioList)
                            {
                                if (item.ImporteMinimo != null)
                                {
                                    if (entity.Cantidad >= item.CantidadMinima && entity.Cantidad <= item.CantidadMaxima)
                                    {
                                        entity.ProductoPrecioId = item.ProductoPrecioId;
                                        entity.Precio = Convert.ToDecimal(item.ImporteMinimo);
                                        importe = Convert.ToDecimal(item.ImporteMinimo);
                                        entity.SubTotalIva = entity.Importe;
                                        entity.SubTotalIva = Math.Round(importe * 10000M / (100M + entity.Iva)) / 100M;
                                        entity.ValorIva = importe - entity.SubTotalIva;
                                        _ventaRepository.Agregar(entity);
                                    }
                                }
                                else
                                {
                                    if (entity.Cantidad >= item.CantidadMinima && entity.Cantidad <= item.CantidadMaxima)
                                    {
                                        entity.ProductoPrecioId = item.ProductoPrecioId;
                                        entity.Precio = item.Pvp;
                                        entity.SubTotalIva = entity.Importe;
                                        entity.SubTotalIva = Math.Round(entity.Importe * 10000M / (100M + entity.Iva)) / 100M;
                                        entity.ValorIva = entity.Importe - entity.SubTotalIva;
                                        _ventaRepository.Agregar(entity);
                                    }
                                }
                            }

    Lo único que no me tiene muy conforme es que por ejemplo si vendo un producto en el cual es precio minorista, cantidad mínima es 1 y la máxima es 2, pvp es 9.00 pero el mismo producto pero en mayorista cantidad mínima 3 y máxima 10000 el precio es 8.50

    El tema es que si no pongo cantidad máxima 10, 000 ya no me muestra el producto si pongo 4 unidades, lo que quiero decir es que tengo que poner la cantidad máxima 10, 000 porque si no ya no puedo vender 5, 6, 7, etc. unidades.

    ¿Eso esta bien?

    Saludos! 

    Nota: Trabajo con Entity Framework enfoque code-first, N-Capas, SQL Server 2014


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    • Editado Pedro Ávila martes, 10 de diciembre de 2019 17:13
    martes, 10 de diciembre de 2019 15:36

Respuestas

  • hola

    Lo que veo es que estas definiendo reglas para calcular un precio pero lo programar de forma procedural en lugar de hacerlo orientado a objetos

    Deberias aplicar algun patron como ser Decorator

     Patrones de diseño: Decorator

    o quizas aplicar un Rule Engine, para definir como ir aplicando las validaciones y esto cambie el calculo del monto

    NRules

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 10 de diciembre de 2019 17:04
  • hola

    >>¿Se podría inyectarle funcionalidades a las entidades con algún IoC?

    no se donde aplicaria eso en la logica del calculo que explicaste

    la inyeccion de dependencias es para otra funcionalidad diferente

    quizas sino es Decorator podria ser algun patron Strategy el que deberias aplicar, o sea segun ciertas condiciones que aplique una formaula u otra

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Pedro Ávila miércoles, 11 de diciembre de 2019 0:03
    martes, 10 de diciembre de 2019 23:48

Todas las respuestas

  • hola

    Lo que veo es que estas definiendo reglas para calcular un precio pero lo programar de forma procedural en lugar de hacerlo orientado a objetos

    Deberias aplicar algun patron como ser Decorator

     Patrones de diseño: Decorator

    o quizas aplicar un Rule Engine, para definir como ir aplicando las validaciones y esto cambie el calculo del monto

    NRules

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 10 de diciembre de 2019 17:04
  • Hola @Leandro

    ¿Se podría inyectarle funcionalidades a las entidades con algún IoC?

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    martes, 10 de diciembre de 2019 23:29
  • hola

    >>¿Se podría inyectarle funcionalidades a las entidades con algún IoC?

    no se donde aplicaria eso en la logica del calculo que explicaste

    la inyeccion de dependencias es para otra funcionalidad diferente

    quizas sino es Decorator podria ser algun patron Strategy el que deberias aplicar, o sea segun ciertas condiciones que aplique una formaula u otra

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Pedro Ávila miércoles, 11 de diciembre de 2019 0:03
    martes, 10 de diciembre de 2019 23:48