为此,您需要向sales/quote
表(可能还有sales/order
table).
因此,在您的安装脚本中,执行以下命令(我还包含了销售/订单表/实体属性):
$installer->addAttribute('order', 'use_special_coupon', array('type' => 'int', 'grid' => true, 'source' => 'adminhtml/system_config_source_yesno'));
$installer->addAttribute('quote', 'use_special_coupon', array('type' => 'int', 'grid' => true, 'source' => 'adminhtml/system_config_source_yesno'));
$installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'use_special_coupon', 'TINYINT(1) unsigned default 0');
$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'use_special_coupon', 'TINYINT(1) unsigned default 0');
然后,在你的控制器中,执行如下操作:
$quote = Mage::getSingleton('checkout/session')->getQuote();
$quote
->setUseSpecialCoupon(true)
->save();
或者,相反,在您的removeAction中:
$quote = Mage::getSingleton('checkout/session')->getQuote();
$quote
->setUseSpecialCoupon(false)
->save();
最后,在您的总模型中,将其修改为:
<?php
class Dani_Prueba_Model_Total_Aver extends Mage_Sales_Model_Quote_Address_Total_Abstract{
public function collect(Mage_Sales_Model_Quote_Address $address)
{
if ($address->getQuote()->getUseSpecialCoupon()) {
$baseDiscount = 2.5;
$discount = Mage::app()->getStore()->convertPrice($baseDiscount);
$address->setCustomDiscount($baseDiscount);
$address->setBaseGrandTotal($address->getBaseGrandTotal() - $baseDiscount);
$address->setGrandTotal($address->getGrandTotal() - $discount);
}
return $this;
}
public function fetch(Mage_Sales_Model_Quote_Address $address){
if ($address->getQuote()->useSpecialCoupon()) {
$this->setCode('aver');
$amount = $address->getCustomDiscount();
if ($amount != 0){
$address->addTotal(array(
'code' => $this->getCode(),
'title' => 'Custom Discount',
'value' => $amount
));
}
}
return $this;
}
}