2013-07-30 Orden por precio en listados de productos con diferentes precios por cliente

Orden por precio en listados de productos con diferentes precios por cliente.

Una de las funcionalidades que hemos tenido que implementar en nuestros Ecommerce es la ordenación por precio ascendente y descendente.

A priori parece algo sencillo si pensamos que el precio del producto se encuentra en la tabla “productos” y la consulta que ejecutamos lleva el ORDER BY “price” incluido. Correcto! Si fuese así de sencillo no escribiría este artículo.

La cuestión es: ¿Cómo ordenarlos si el precio de ese producto debe ser calculado previamente en base a unos acuerdos comerciales?

El módulo de Acuerdos Comerciales de liveCommmerce permite generar diferentes precios a cada uno de los productos de forma individual o colectiva en base a condiciones como por ejemplo: el tiempo, el grupo de cliente, el cliente individual, la zona en la que reside el usuario y aplicarlo de forma percentual o fija.

De este modo podemos tener diferentes precios de un mismo producto para un mismo cliente y el sistema es capaz de seleccionar el mejor precio que se le puede aplicar a dicho cliente para un producto específico.

Por lo tanto la consulta SQL se complica enormemente y hace falta procesar los datos con un lenguaje de programación.

¿Qué solución existe?

Después de mucho pensar la única solución posible y que nos ha dado muy buenos resultados es la de crear una tabla temporal que relacione las 3 entidades principales (producto, cliente y precio) una vez se han calculado todos los precios finales de cada producto.

Hemos programado un proceso responsable de rellenar esta tabla temporal cada vez que se modifica un acuerdo comercial o cualquier otro tipo de funcionalidad relacionada con los precios de los productos.

En nuestras pruebas nos hemos dado cuenta de que un producto puede tener diferentes precios para un mismo cliente. Todos ellos se guardan actualmente en la tabla temporal y luego se ordenan de menor a mayor para mostrar el precio más bajo al cliente.

De esta forma con una consulta que incluya un LEFT JOIN contra la tabla temporal de precios junto con la cláusula ORDER BY es posible mostrar el orden de los productos en relación al precio de venta.

Una solución elegante que ha demostrado ser 100% estable para todos nuestros Ecommerce.

Sigue leyendo