Reglas del carrito de compras con una condición personalizada

He hecho un cupón [coupon_code = SWIMFREE] si la category es swimming equipment y el hobby es swimming tendrá un descuento del 50%.

y ahora tengo un problema con la descarga de 3 pasos. Aquí está la descripción …

  1. Carro de la compra : para aplicar al cupón
  2. Primer paso : dirección de envío y facturación
  3. Segundo paso : sales_flat_quote table tu Hobby (tiene otra sales_flat_quote table sales_flat_quote_hobby , sales_flat_quote_hobby )
  4. Paso final : Finalizar-> Descripción general

Lo que quería es : cuando el cupón se aplica y el hobby está nadando, el tercer paso es cambiar el precio para ponerle precio a cada producto, y el cupón todavía se muestra allí.

Cómo interceptar el cupón después del paso de Hobby?


Ejemplo de caso paso por paso:

1. En el carrito, ya está agregado

  • El precio normal del Swim Suit es de 100 $ (Categoría de equipamiento de natación)
  • El precio normal de Kevlar es de 50 $ (categoría de equipo de tiro)
  • Cupón aplicado SWIMFREE, Grand Total es 100 $ (debido a la condición del cupón)

2. En el paso de envío y facturación

  • Dirección de envío y facturación – Siguiente

3. En Hobby Step

  • El hobby de fútbol está marcado (botón de opción) y confirmado

4. En el paso general, entonces

  • El precio del Swim Suit es de 50 $ (Categoría de equipamiento de natación)
  • El precio de Kevlar es de 50 $ (Categoría de equipamiento de tiro)
  • El cupón aplicado SWIMFREE, Grand Total ahora es de $ 150 (porque el hobby no es nadar)

Tengo muchos productos, he tratado de agregar nuevos atributos, pero no está relacionado con el atributo, porque está en sales_flat_quote_hobby

Intenté cambiar Sales/Model/Quote/Subtotal.php para establecer los precios de todos los productos en el carrito, pero parece inútil.

Ya encontré la respuesta por mi cuenta:

Es posible crear una condición de cupón personalizada .

ejemplo de cupón

reescribe el Mage_SalesRule_Model_Rule_Condition_Product

  public function validate(Varien_Object $object){ if ($this->getAttribute() == 'quote_item_with_hobby') { $quote = Mage::getSingleton('checkout/cart')->getQuote(); $hobby= $quote->getHobbyByItemId($object->getId()); if ($hobby){ if ($this->getOperator() == '=='){ if (strtolower($this->getValue()) == $hobby->getHobby()) return true; else return false; } else if ($this->getOperator() == '!='){ if (strtolower($this->getValue()) == $hobby->getHobby()) return false; else return true; } } return true; } return parent::validate($object); } 

esta función se denominará cada paso cargado. luego verifica si es verdadero, luego se aplicará el cupón, si es falso, no se aplicará el cupón.

Gracias a todos los que participaron. Lo aprecio.

Debe implementar su recostackdor personalizado para recostackr totales. Podría basarse en Mage_SalesRule_Model_Quote_Discount .
Cómo crear colectores personalizados: vea la respuesta de stackoverflow , o puede consultar este artículo .

Sí, esa sería mi idea.

Implementa una nueva condición de regla de venta que otorga 50% de descuento.

Las reglas de venta se llaman para cada producto. entonces necesitas comprobar si el atributo es nadar y se establece el hobby. Si ese es el caso, puede copiar el rest del% -salesrule

Encontrará código para echar un vistazo en Mage_SalesRule_Model_Validator::process()

Puede encontrar un ejemplo de una condición autoejecutada aquí: https://github.com/magento-hackathon/DiscountForATweet/blob/master/app/code/community/Hackathon/DiscountForATweet/Model/Condition/Tweet.php