2011-09-22 3 views
16

특정 상황에서 할인을 제공하는 맞춤 주문 총계를 만들었습니다. 총액은 항상 올바르지 만 계산할 때 판매 세 계산에서 내 할인을 고려하지 않습니다 (따라서 10 달러 할인을 내면 판매 세액이 할인 전 전체 금액으로 계산됩니다). 다음과 같은 예를 들어Magento의 주문형 할인 주문 합계를 추가해도 판매 세가 변경되지 않는다

테이크는 :

Subtotal:    $856.49 
Multi Unit Discounts: -$22.50 
Shipping:    $10.96 
Tax:     $52.05 
Grand Total:   $897.00 

내 사용자 정의 할인 멀티 유닛 할인입니다. 세율은 6 %입니다. 보시다시피 총액은 모든 광고 항목을 기준으로 정확하지만 세금 금액 자체가 올바르지 않습니다 (내 할인을 제외한 모든 광고 항목을 기반으로 함). 내 config.xml 파일에서

나는 시스템에 내 주문 총 작업을 얻기 위해 다음과 같은 한 :

 <sales> 
     <quote> 
      <totals> 
       <mud> 
        <class>Wpe_Multiunitdiscount_Model_Multiunitdiscount</class> 
        <before>tax</before> 
       </mud> 
      </totals> 
     </quote> 
    </sales>  

다음은 내 주문 전체 클래스의 내용입니다 :

class Wpe_Multiunitdiscount_Model_Multiunitdiscount extends Mage_Sales_Model_Quote_Address_Total_Abstract { 

public function collect(Mage_Sales_Model_Quote_Address $address) { 

    if ($address->getData('address_type')=='billing') return $this; 

    $items = $address->getAllItems(); 

    $total_discount = 0; 

    foreach($items as $item) { 
     $product_discounts = Mage::helper("multiunitdiscount")->findDiscounts($item); 
     if($product_discounts > 0) { 
      $total_discount += $product_discounts; 
     } 
    } 

    $address->setMudAmount($total_discount); 

    $address->setGrandTotal($address->getGrandTotal() - $address->getMudAmount()); 
$address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getMudAmount()); 
    return $this; 
} 

public function fetch(Mage_Sales_Model_Quote_Address $address) { 

    if ($address->getData('address_type')=='billing') return $this; 

    if($address->getMudAmount() > 0) { 

     $address->addTotal(array(
      'code' => $this->getCode(), 
      'title' => Mage::helper('sales')->__('Multi Unit Discounts'), 
      'value' => -$address->getMudAmount(), 
     )); 
    } 
    return $this; 
} 

}

여기에 엄청난 양의 코드를 게시하지 않기 위해 위의 코드에서 도우미가 단순히 금액을 디스코로 반환한다고 말할 수 있습니다. unt는 견적의 특정 항목을 나타냅니다.

판매 세 계산이 올바르다는 것을 알려줄 수 있습니까?

편집 :

이 간단한 유지하기 위해, 나는 할인을 계산 뒤에 내 많은 로직을 제거하고 지금 할인으로 주문 합계 떨어져 $ 10 걸릴 간단한하려합니다. 제안 된대로 주소의 총계를 수정하지 않았으며 할인 금액 및 기본 할인 금액 만 설정합니다. 이제 판매 세가 합산되지 않고 총액이 할인됩니다. 어쩌면 누군가가 저에게 도움이 될 것이라고 지적 할 수있는 훌륭한 자습서가 있다면 어떨까요? 순서 합계가 모두 서로 상호 작용하는 방식을 파악하고있는 것 같지 않습니다.

public function collect(Mage_Sales_Model_Quote_Address $address) { 

    if ($address->getData('address_type')=='billing') return $this; 

    $address->setMudDiscount(10); 
    $address->setDiscountAmount($address->getDiscountAmount() + $address->getMudDiscount()); 
    $address->setBaseDiscountAmount($address->getBaseDiscountAmount() + $address->getMudDiscount()); 

    return $this; 
} 

public function fetch(Mage_Sales_Model_Quote_Address $address) { 

    if ($address->getData('address_type')=='billing') return $this; 

    $address->addTotal(array(
     'code' => $this->getCode(), 
     'title' => Mage::helper('sales')->__('Multi Unit Discounts'), 
     'value' => -$address->getMudDiscount(), 
    )); 
    return $this; 
} 
+0

흠, 왜 당신이 당신의 할인 클래스에 grandtotal 직접 $ 주소를 수정하기 위해 "Apply Customer Tax"매개 변수를 변경해보십시오? 당신은'$ address-> setDiscountAmount ($ address-> getDiscountAmount() + $ total_discount)'를 사용하거나 아이템 당 할인을 설정하기 위해'$ item-> setDiscountAmount()'를 사용해야한다.) 그리고 할인은'Mage_Sales_Model_Quote_Address_Total_Tax : : 세금 계산을 위해 collect()'. – Zyava

+0

내가 아는 한, 직접 총액을 수정할 수는 없습니다. 이미 할인 가격을 설정해야하며 Magento는 합계를 계산할 때이를 고려합니다. config.xml을 수정하고 소계도 실행 해보십시오. Magento가 합계 계산을 처리하는 방식을 정말로 이해하기까지는 시간이 좀 걸렸습니다. – Kenny

+0

그래서 나는 너희들이 말한 것을 두 가지 모두 시도해 보았다. 나는 같은 문제를 겪고있다. (나는 총합을 직접 수정하기로되어 있지 않기 때문에 총합계가 추가되었다.) 다른 총 모듈 중 하나에서 총합을 수정하는 아이디어가 있습니다.나는 subtotalWithDiscount와 subtotalWithoutDiscount를 설정할 수있는 할인 모듈을보고 있으므로 그렇게 시도 할 것입니다. –

답변

3

System > Configuration으로 이동하십시오. 왼쪽 탐색 메뉴에서 "Tax"을 선택한 다음 "Calculation Settings" 그룹이 아직 열리지 않은 경우 엽니 다.

"After Discount"

+1

나는이 질문이 약간 날짜가 있지만 유사한 작업을 수행하는 동안 그것을 가로 질렀다는 것을 알고있다. 나는 이것이 Magento의 관점에서 정확하게 '할인'이 아닌 맞춤형 총 수집가라는 사실 때문에 주로 효과가있을 것이라고 생각하지 않습니다. –

관련 문제