Principales respuestas
Diseñando Lista de Precios

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
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
o quizas aplicar un Rule Engine, para definir como ir aplicando las validaciones y esto cambie el calculo del monto
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Diana AcuñaModerator martes, 10 de diciembre de 2019 17:31
- Marcado como respuesta Pedro Ávila martes, 10 de diciembre de 2019 22:08
-
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
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
o quizas aplicar un Rule Engine, para definir como ir aplicando las validaciones y esto cambie el calculo del monto
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Diana AcuñaModerator martes, 10 de diciembre de 2019 17:31
- Marcado como respuesta Pedro Ávila martes, 10 de diciembre de 2019 22:08
-
-
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