Quater Posted September 14, 2013 Share Posted September 14, 2013 Buenos días, en primer lugar aclarar que estoy con PS 1.5.5.0, aunque supongo que este error es común al resto de versiones. Me he dado cuenta del siguiente error del módulo loyalty (puntos de fidelidad): Cuando se solicita una devolución de algún producto de un pedido, nos genera puntos de fidelidad negativos (es como devolver los puntos que obtuvimos al generar el pedido, algo lógico) El caso es que si le damos a convertir nuestro saldo actual de puntos en un cupón, nos crea el cupón correctamente (sumando los puntos positivos y negativos), pero mientras que los puntos positivos utilizados los pasa de "disponibles" a "convertidos", los negativos no (y debería), los sigue dejando en "cancelado" por lo que siempre están ahí, teniendo ahora un saldo negativo cuando deberíamos tener un saldo cero justo al crear el cupón (ya he usado los negativos en el cupón, los negativos deberían cambiar también de "Cancelado" a "Convertidos") Creo que la madre del cordero está en esta función de LoyaltyModule.php: public static function registerDiscount($cartRule) { if (!Validate::isLoadedObject($cartRule)) die(Tools::displayError('Incorrect object CartRule.')); $items = self::getAllByIdCustomer((int)$cartRule->id_customer, NULL, true); $associated = false; foreach ($items AS $item) { $lm = new LoyaltyModule((int)$item['id_loyalty']); /* Check for negative points for this order */ $negativePoints = (int)Db::getInstance()->getValue('SELECT SUM(points) points FROM '._DB_PREFIX_.'loyalty WHERE id_order = '.(int)$f->id_order.' AND id_loyalty_state = '.(int)LoyaltyStateModule::getCancelId().' AND points < 0'); if ($lm->points + $negativePoints <= 0) continue; $lm->id_cart_rule = (int)$cartRule->id; $lm->id_loyalty_state = (int)LoyaltyStateModule::getConvertId(); $lm->save(); $associated = true; } return $associated; } Donde dice /* Check for negative points for this order */ chequea si hay puntos negativos asociados a esa orden y los resta del total de puntos antes de hacer el cupón, y entonces cambia el id_loyalty_state del registro que tiene los puntos positivos para ese pedido de disponibles a convertidos (con la función getConvertId() ) Hasta ahí bien, pero es que los registros con valores negativos que ha consultado antes para coger el valor de lso puntos no los actualiza, y debería actualizarlos también, cambiarles también el id_loyalty_sate a Convertidos. ¿Alguien sabe qué habría que añadir a este código para que lo hiciera? A ver si entre varios podemos arreglar este error. Link to comment Share on other sites More sharing options...
Recommended Posts