Límites de descuento de productos
Descripción
Permite especificar un límite de descuento por porcentaje o por monto (por unidad vendida). Sirve para controlar los descuentos que los usuarios aplican al vender, pero permitiendo que tengan un margen de decisión sobre cuánto dar de descuento. La idea es que un vendedor gana más comisión mientras menos descuento ofrezca.
Funciona por medio de excepciones: El límite para el catálogo aplica para todos los códigos, luego se pueden agregar excepciones por categoría y/o producto. Cuando el usuario aplica un descuento, el sistema lo compara primero con el límite del producto, si no tiene, con el de la categoría y, si ésta no tiene, con el del catálogo.
Implementación
Los límites de descuento se guardan en las siguientes columnas:
Límite para |
Columna Límite (numeric >= -1, not null, default -1) |
Columna Tipo (text, not null default 'porcentaje') |
Catálogo |
parametros.limite_descuento_porcentaje_ catalogo | no tiene |
Categoría |
categorias.limite_descuento |
categorias.limite_descuento_tipo |
Productos |
productos.limite_descuento |
productos.limite_descuento_tipo |
Los límites de descuento se consideran desactivados si el valor es -1, si tienen valor 0 significa que no se permiten descuentos, el default en las columnas es -1. Todo esto es validado en CHECK CONSTRAINTS en las columnas de arriba.
-1 es la constante: Sesion.LIMITE_DESCUENTO_DESACTIVADO
Valor |
Efecto cuando es tipo porcentaje |
Efecto cuando es tipo monto |
<-1 |
No permitido |
No permitido |
-1 |
No hay límite de descuento |
No hay límite de descuento |
>-1 y <0 |
No permitido |
No permitido |
0 |
No se permiten descuentos |
No se permiten descuentos |
>0 y <1 |
Descuento ordinario, se multiplica por 100 para obtener el porcentaje |
Descuento ordinario en quetzales |
1 |
Descuento del 100% |
Descuento ordinario en quetzales |
>1 |
No permitido |
Descuento ordinario en quetzales |
El orden para identificar el límite es:
COALESCE(
NULLIF(producto.limite_descuento, -1),
NULLIF(categoria.limite_descuento, -1),
NULLIF(parametros.limite_descuento, -1)
)
La columna de tipo puede ser 'porcentaje' o 'monto'
Para el catálogo solo se puede especificar descuento en porcentaje
Permisos
id |
Nombre |
Descripción |
Tipo |
77 |
Límites de descuento productos |
Definir límites de descuento por categoría y producto. |
Administración |
78 |
Ignorar límite de descuento |
Ignora el límite de descuento especificado para el producto. |
Operación |
El usuario debe tener permiso para hacer descuentos
Si el usuario tiene ambos permisos, gana el permiso de Ignorar límite de descuento
Clases .NET
En LimitesDescuentoProductos están todas las funciones utilizadas para:
- Especificar límites válidos del catálogo, categoría y producto
- Validar que un descuento está dentro del límite
- Listar límites por categoría y producto
Objetos DB
Para validar el límite hay un trigger trg_lineas_ventas_limite_descuento con before insert y update que ejecuta validar_limite_descuento_trigger
Para listar los límites está la vista: limites_descuento_productos
Errores DB
Código |
Descripción |
Q3001 |
Error de límite de descuento de productos |
Pantallas
La idea es que desde la pantalla LimitesDescuentosProductos se trabajen los límites para poder ver en un solo lugar cómo está la situación. Cada vez que se cambia algo desde LimitesDescuentosProductos se están actualizando ParametrosGenerales, EditarCategoria y EditarProducto; en éstos también se puede ver y editar el límite específico para cada uno.
Form |
Accesible desde |
Descripción |
LimitesDescuentosProductos.vb |
Catalogo.vb |
Menú Catálogo |
ParametrosGenerales.vb |
MenuInicial.vb |
Pestaña Ventas |
EditarCategoria.vb |
Catalogo.vb |
Editar el límite de una categoría |
EditarProducto.vb |
Catalogo.vb |
Editar el límite de un producto |
EditarProductoConsignacion.vb |
Catalogo.vb | Editar el límite de un producto |
EditarProductoLibro.vb |
Catalogo.vb | Editar el límite de un producto |
EditarProductoLibroConsignacion.vb |
Catalogo.vb | Editar el límite de un producto |