после скидки, если итоговая сумма 0, тогда нужно рассчитать налог на основе пользовательского поля цены и добавить в общую сумму на странице корзины

Я создал один купон с «Фиксированной суммой», который должен составлять 100 долларов, и я добавляю товар в корзину, цена которого составляет 100 долларов. Теперь я выбрал в бэкэнде в меню Система-> Конфигурация-> Налог-> Расчет «Применить налог с клиента после скидки» и «Применить скидку к цене без учета налога».

Теперь ниже сценарии:
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, тогда и для предположения, что Канада-> Онтарио, моя налоговая ставка составляет 12%, тогда она должна рассчитать 12% из 40 и добавить к общей сумме. так как получить налог, чтобы я мог рассчитать его с помощью tax_calculation_price. ? любую помощь ценим.

1

Решение

Вы можете использовать это событие obeserver

<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>
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/

Спасибо!

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector