2011-01-11 3 views
1

Я пытаюсь установить ставку налога или тариф класса клиента для magento на основе используемого скидочного кода. Я использую только код скидки, так как я могу использовать его для ввода.Установите ставку налога в Magento на основе кода скидки/купона

Кто-нибудь знает, как это может быть достигнуто или какие-либо указатели?

С наилучшими пожеланиями

Крис

+0

не Если ставка налога устанавливается в стране и продукт, а не клиент? –

+0

В этом случае клиент в этом случае должен указать, что они не облагаются налогом на эти определенные продукты. – Knade

ответ

1

Это то, что я сделал для этого. Должен оказаться весьма полезным. Скопируйте это приложение файл/код/​​ядро ​​/ Mage/Tax/Модель/Calculation.php к приложению/код/​​местные/Mage/Налоги/модель/Calculation.php затем по линии 178 Theres эта функция

public function getRate($request) 
    { 
     if (!$request->getCountryId() || !$request->getCustomerClassId() || !$request->getProductClassId()) { 
      return 0; 
     } 

    $cacheKey = $this->_getRequestCacheKey($request); 
    if (!isset($this->_rateCache[$cacheKey])) { 
     $this->unsRateValue(); 
     $this->unsCalculationProcess(); 
     $this->unsEventModuleId(); 
     Mage::dispatchEvent('tax_rate_data_fetch', array('request'=>$request)); 
     if (!$this->hasRateValue()) { 
      $rateInfo = $this->_getResource()->getRateInfo($request); 
      $this->setCalculationProcess($rateInfo['process']); 
      $this->setRateValue($rateInfo['value']); 
     } else { 
      $this->setCalculationProcess($this->_formCalculationProcess()); 
     } 
     $this->_rateCache[$cacheKey] = $this->getRateValue(); 
     $this->_rateCalculationProcess[$cacheKey] = $this->getCalculationProcess(); 
    } 
    return $this->_rateCache[$cacheKey]; 
} 

Я я изменил это на это. Его жестко закодированный код скидка и идентификационный код продукта на основе моих требований к этому проекту.

public function getRate($request) 
    { 
     if (!$request->getCountryId() || !$request->getCustomerClassId() || !$request->getProductClassId()) { 
      return 0; 
     } 

    $cacheKey = $this->_getRequestCacheKey($request); 
    if (!isset($this->_rateCache[$cacheKey])) { 
     $this->unsRateValue(); 
     $this->unsCalculationProcess(); 
     $this->unsEventModuleId(); 
     Mage::dispatchEvent('tax_rate_data_fetch', array('request'=>$request)); 
     if (!$this->hasRateValue()) { 
      $rateInfo = $this->_getResource()->getRateInfo($request); 
      $this->setCalculationProcess($rateInfo['process']); 
      $thisDiscountCode = Mage::getSingleton('checkout/session')->getQuote()->getCouponCode(); 
      $thisProductClassCode = $request->getProductClassId(); 
      if($thisDiscountCode == "0000" && $thisProductClassCode == "5"): 
      $this->setRateValue(0); 
      else:  
      $this->setRateValue($rateInfo['value']); 
      endif;    
     } else { 
      $this->setCalculationProcess($this->_formCalculationProcess()); 
     } 
     $this->_rateCache[$cacheKey] = $this->getRateValue(); 
     $this->_rateCalculationProcess[$cacheKey] = $this->getCalculationProcess(); 
    } 
    return $this->_rateCache[$cacheKey]; 
} 

Приветствие для помощи на этом

+0

Спасибо, что отправил свой ответ ... помог мне решить несвязанную, но схожую проблему изменения цены доставки с кодом купона! – shaune

2

Там нет пути по умолчанию не делать этого. Вы должны установить класс клиента для них через администратора, таким образом, они получают свою конкретную ставку налога всегда, не вводя ничего.

+0

Приветствия для часового механизма ответа, я выяснил способ сделать это через calc.php. Это существенно модифицирует код ядра, но я собираюсь объединить его с классом налога на продукт, чтобы получить то, что я хочу. Попробуем запомнить, чтобы после этого код был отправлен. Спасибо – Knade

Смежные вопросы