2012-08-10 2 views
3

견적에 사용자 정의 총 필드를 추가하는 Magento 용 추가 모듈을 만들었습니다. 추가 요금은 세금을 포함하여 Magento에 입력됩니다. 견적서에 추가 요금을 추가 한 모듈을 성공적으로 가져 왔으며 총액은 결제 페이지에서 정확합니다.Magento - 사용자 견적 합계 필드에 세금 적용

세금이 세금 계산서에 적용되어 계산대 페이지의 세금 필드에 포함되고 표시 될 때 문제가 발생합니다. 현재 제품 및 배송비에 대한 세금 만 포함됩니다.

나는 세금을 계산할 수 있었지만 견적에 세금을 부과 할 수 없기 때문에 세금 필드에 표시 될뿐만 아니라 내 접근법도 올바르지 않다고 생각합니다. 어떤 도움이라도 대단히 감사 할 것입니다.

class ********_Deposits_Model_Quote_Address_Total_Surcharge extends Mage_Sales_Model_Quote_Address_Total_Abstract { 

protected $_config = null; 

public function __construct() 
{ 
    $this->setCode('surcharge_price'); 
    $this->_config  = Mage::getSingleton('tax/config'); 
    $this->_store = Mage::app()->getStore(); 
} 

protected function _calculateTax(Mage_Sales_Model_Quote_Address $address) 
{ 
    $calculator  = Mage::getSingleton('tax/calculation'); 
    $inclTax  = $this->_config->priceIncludesTax($this->_store); 

    $taxRateRequest = $calculator->getRateRequest(
     $address, 
     $address->getQuote()->getBillingAddress(), 
     $address->getQuote()->getCustomerTaxClassId(), 
     $this->_store 
    ); 

    $taxRateRequest->setProductClassId(Mage::getStoreConfig('********/surcharges/tax_class', $this->_store)); 

    $rate = $calculator->getRate($taxRateRequest); 

    $baseTax = $tax = $calculator->calcTaxAmount($address->getBaseSurchargePriceAmount(), $rate, $inclTax, true); 


} 

/** 
* Collect address subtotal 
* 
* @param ********_Surcharges_Model_Quote_Address $address 
* @return ********_Surcharges_Model_Quote_Address_Total_Surcharge 
*/ 
public function collect(Mage_Sales_Model_Quote_Address $address) 
{ 

    parent::collect($address); 

    $this->_setAmount(0)->_setBaseAmount(0); 

    // If Surcharges Is Enabled Then Calculate Away :-) 
    if(Mage::getStoreConfig('********/surcharges/surcharge_enabled')) { 

     $items = $this->_getAddressItems($address); 
     if (!count($items)) { 
      return $this; 
     } 

     // Calculate Total Surcharge For Items In Quote (Base Prices!) 
     $surcharge = 0.0; 
     foreach ($items as $item) { 
     $price = $item->getData('base_surcharge_price', null); 
     if(isset($price)) { 
      $surcharge += $item->getData('base_surcharge_price') * $item->getQty(); 
     } 
     } 

    $this->_setAmount($surcharge); 
    $this->_setBaseAmount($surcharge); 

    $this->_calculateTax($address); 
    } 


    return $this; 
} 

public function fetch(Mage_Sales_Model_Quote_Address $address) 
{ 

    if(Mage::getStoreConfig('********/surcharges/surcharge_enabled')) { 
    $surcharge = $address->getSurchargePriceAmount(); 
    if(isset($surcharge) && $surcharge > 0) { 
     $address->addTotal(array(
      'code' => $this->getCode(), 
      'title' => Mage::getStoreConfig('********/surcharges/surcharge_label'), 
      'value' => $surcharge 
    )); 
    } 
    } 

    return $this; 
} 

public function getLabel() 
{ 
    return Mage::getStoreConfig('********/surcharges/surcharge_label'); 
} 
+0

안녕 애슐리 당신은이 작업을 얻을 관리 않았다? –

+0

안녕하세요 조나단. 나는 세수 금액 아들을 주소 개체로 효과적으로 재 계산함으로써 결국했다. 아래 게시물을 참조하십시오! – Ashley

답변

6

다음 코드를 사용하여이 문제를 해결할 수있었습니다. 최고의 솔루션은 아니지만 시간을 보내려고 노력하고 아무데도 빨리 가지 않았다. 아스테릭스를 대체해야합니다.

class *****_Deposits_Model_Quote_Address_Total_Surcharge extends Mage_Sales_Model_Quote_Address_Total_Abstract { 

protected $_taxConfig = null; 

public function __construct() 
{ 
    $this->setCode('surcharge_price'); 
    $this->_taxConfig  = Mage::getSingleton('tax/config'); 
    $this->_store = Mage::app()->getStore(); 
} 

protected function _calculateTax(Mage_Sales_Model_Quote_Address $address) 
{ 
    $calculator  = Mage::getSingleton('tax/calculation'); 
    $calculator->setCustomer($address->getQuote()->getCustomer()); 

    $inclTax  = $this->_taxConfig->priceIncludesTax($this->_store); 

    $taxRateRequest = $calculator->getRateRequest(
     $address, 
     $address->getQuote()->getBillingAddress(), 
     $address->getQuote()->getCustomerTaxClassId(), 
     $this->_store 
    ); 

    $taxRateRequest->setProductClassId(Mage::getStoreConfig('*****/surcharges/tax_class', $this->_store)); 

    $rate = $calculator->getRate($taxRateRequest); 

    if($rate > 0.0) { 
     $baseTax = $calculator->calcTaxAmount($address->getBaseSurchargePriceAmount(), $rate, $inclTax, true); 
     $tax = $address->getQuote()->getStore()->convertPrice($baseTax, false); 

     $address->addTotalAmount('tax', $tax); 
     $address->addBaseTotalAmount('tax', $baseTax); 

     $rates = array(); 
     foreach ($address->getAppliedTaxes() as $rate) { 
     $rate['amount'] = $rate['amount'] + $tax; 
     $rate['base_amount'] = $rate['base_amount'] + $baseTax; 
     $rates[] = $rate; 
     } 

     $address->setAppliedTaxes($rates); 

     if($inclTax) { 
     $address->setGrandTotal($address->getGrandTotal() - $tax); 
     $address->setBaseGrandTotal($address->getBaseGrandTotal() - $baseTax); 
     } 
    } 

} 

/** 
* Collect address subtotal 
* 
* @param *****_Surcharges_Model_Quote_Address $address 
* @return *****_Surcharges_Model_Quote_Address_Total_Surcharge 
*/ 
public function collect(Mage_Sales_Model_Quote_Address $address) 
{ 

    parent::collect($address); 

    // Clear Cached Values As Multiple Addresses Causes Values To Be Added Twice Otherwise! 
    $this->_setAmount(0)->_setBaseAmount(0); 

    // If Surcharges Is Enabled Then Calculate Away :-) 
    if(Mage::getStoreConfig('*****/surcharges/surcharge_enabled')) { 

     $items = $this->_getAddressItems($address); 
     if (!count($items)) { 
      return $this; 
     } 

     // Calculate Total Surcharge For Items In Quote (Base Prices!) 
     $surcharge = 0.0; 
     foreach ($items as $item) { 
     $price = $item->getData('base_surcharge_price', null); 
     if(isset($price)) { 
      $surcharge += $item->getData('base_surcharge_price') * $item->getQty(); 
     } 
     } 

    $this->_setAmount($address->getQuote()->getStore()->convertPrice($surcharge, false)); 
    $this->_setBaseAmount($surcharge); 

     $this->_calculateTax($address); 
    } 


    return $this; 
} 

/** 
* Assign subtotal amount and label to address object 
* 
* @param *****_Surcharges_Model_Quote_Address $address 
* @return *****_Surcharges_Model_Quote_Address_Total_Surcharge 
*/ 
public function fetch(Mage_Sales_Model_Quote_Address $address) 
{ 

    if(Mage::getStoreConfig('*****/surcharges/surcharge_enabled')) { 
    $surcharge = $address->getSurchargePriceAmount(); 
    if(isset($surcharge) && $surcharge > 0) { 
     $address->addTotal(array(
      'code' => $this->getCode(), 
      'title' => Mage::getStoreConfig('*****/surcharges/surcharge_label'), 
      'value' => $surcharge 
    )); 
    } 
    } 

    return $this; 
} 

/** 
* Get Surcharge label 
* 
* @return string 
*/ 
public function getLabel() 
{ 
    return Mage::getStoreConfig('*****/surcharges/surcharge_label'); 
} 

}

+0

작동하지 않는 magento 1.7 모든 본체에서 1.7에 대한 해결책을 제공 할 수 있습니다. –

+0

Magento 1.7에서는 문제가 없습니다. 그것은 내가 그것을 위해 개발 한 것입니다. 이것은 완전한 해결책이 아니며, 그 중 일부일뿐입니다. 전체 질문을 읽으면이 모듈이 어떻게 달성되었는지에 대한 몇 가지 지침을 얻을 수 있습니다. – Ashley

+0

+1 Magento EE 1.13.0.2에서 나를 위해 일했습니다. –

관련 문제