我创建了一张带有“固定金额”的优惠券,假设为100美元,我正在向购物车添加产品,价格为100美元。现在我已经在System-> configuration-> tax->计算设置的后端选择了“在折扣后应用客户税”和“在价格上应用折扣不含税”。
以下是场景: 1)当我将产品添加到购物车并应用优惠券时,总额将变为0.(因为优惠券价值100和产品价格为100因此它变为0)现在如果我按结帐按钮,结帐页面价格显示$ 0和税显示$ 0。
如果我申请优惠券,我想申请一次税,我的税款应根据40美元(例如)的金额计算。如果我已经为国家制定了10%的税收规则,那么在点击结帐按钮之前,我的税收应该按40美元* 10/100 = 4美元加税计算。
有谁知道我需要在哪个观察者中查找添加这些条件。
我试过以下事情: 我观察以下观察员:
<checkout_cart_save_after>
<observers>
<NamespaceModulename>
<type>singleton</type>
<class>Namespace_Modulename_Model_Observer</class>
<method>updateTaxAfterDiscountApplied</method>
</NamespaceModulename>
</observers>
</checkout_cart_save_after>
以下是我的方法代码:
public function updateTaxAfterDiscountApplied()
{
$quote = Mage::getModel('checkout/cart')->getQuote();
$coupon_code = $quote->getCouponCode();
if($coupon_code)
{
$coupon_rule_id = $quote->getAppliedRuleIds();
echo 'rule id'.$coupon_rule_id;
echo $coupon_code.'couponcode';
}
if($coupon_rule_id){
$con = Mage::getSingleton('core/resource')->getConnection('core_read');
$sale_rule_result = $con->fetchAll("SELECT * FROM salesrule where rule_id=".$coupon_rule_id);
foreach($sale_rule_result as $rule){
echo 'tax price'.$rule['tax_calculation_price'];
}
}
}
在上面的方法中,“tax_calculation_price”是我的自定义字段,当我申请优惠券和我的总计零时使用。然后我有这个字段,用于根据税收计算计算税额。例如tax_calculation_price = 40然后对于假设canada-&gt; ontario我的税率是12%然后它应该计算40%的12%并且加上总计。所以如何取税,以便我可以用tax_calculation_price计算它。 ?任何帮助欣赏。
答案 0 :(得分:0)
您可以使用此观察者事件
<global>
<events>
<salesrule_validator_process>
<observers>
<Test_Mymodule_Hook>
<type>singleton</type>
<class>Test_Mymodule_Model_Observer</class>
<method>specialpricediscount</method>
</Test_Mymodule_Hook>
</observers>
</salesrule_validator_process>
</events>
</global>
答案 1 :(得分:0)
最后我得到了我的问题的答案。在这里,我提供的代码是在申请优惠券后更新税,如果总零,那么它也将更新税。 在全局节点内的config.xml中写下代码。
<events>
<sales_quote_collect_totals_after>
<observers>
<NamespaceModulename>
<type>singleton</type>
<class>Namespace_Modulename_Model_Observer</class>
<method>updateTaxAfterDiscountApplied</method>
</NamespaceModulename>
</observers>
</sales_quote_collect_totals_after>
</events>
创建了observer.php并添加了以下方法:
//Apply tax after discount even if grand total 0.
public function updateTaxAfterDiscountApplied()
{
$billing_data = Mage::app()->getRequest()->getPost('billing', array());
$shipping_data = Mage::app()->getRequest()->getPost('shipping', array());
$quote = Mage::getModel('checkout/cart')->getQuote();
$coupon_code = $quote->getCouponCode();
if($coupon_code)
{
$coupon_rule_id = $quote->getAppliedRuleIds();
if($coupon_rule_id){
$con = Mage::getSingleton('core/resource')->getConnection('core_read'); // fetching custom amount value to calculate with tax
$sale_rule_result = $con->fetchAll("SELECT * FROM salesrule where rule_id=".$coupon_rule_id);
foreach($sale_rule_result as $rule){
$tax_calculation_based_on_price = $rule['tax_calculation_price'];
}
}
$country = $billing_data['country_id'];
$region_id = $billing_data['region_id'];
$TaxRequest = new Varien_Object();
$TaxRequest->setCountryId( $country );
$TaxRequest->setRegionId( $region_id );
//$TaxRequest->setPostcode( $postcode );
$TaxRequest->setStore( Mage::app()->getStore() );
$TaxRequest->setCustomerClassId(3);
$TaxRequest->setProductClassId(5);
$taxCalculationModel = Mage::getSingleton('tax/calculation');
$rate = $taxCalculationModel->getRate($TaxRequest);
$tax_percentage = (($tax_calculation_based_on_price * $rate)/100);
$q=$quote;
$f=0;
foreach ($q->getAllAddresses() as $address) {
if($f)continue;
$address->setTaxAmount($tax_percentage);
$address->setBaseTaxAmount($tax_percentage);
Mage::log('ww'.$address->getTaxAmount(),null,'billing.log');
Mage::log('pw'.$q->getTaxAmount(),null,'billing.log');
$address->setGrandTotal($address->getGrandTotal() + $address->getTaxAmount());
$address->setBaseGrandTotal($address->getBaseGrandTotal() + $address->getBaseTaxAmount());
$f=1;
}
}
}
有关Magento Events作弊表的更多信息,请点击以下链接: https://www.nicksays.co.uk/magento-events-cheat-sheet-1-8/
谢谢!