# 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\_ catalogono 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: ```SQL 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.vbEditar el límite de un producto
EditarProductoLibro.vb Catalogo.vbEditar el límite de un producto
EditarProductoLibroConsignacion.vb Catalogo.vbEditar el límite de un producto