특정 상황에서 할인을 제공하는 맞춤 주문 총계를 만들었습니다. 총액은 항상 올바르지 만 계산할 때 판매 세 계산에서 내 할인을 고려하지 않습니다 (따라서 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;
}
흠, 왜 당신이 당신의 할인 클래스에 grandtotal 직접 $ 주소를 수정하기 위해 "
Apply Customer Tax
"매개 변수를 변경해보십시오? 당신은'$ address-> setDiscountAmount ($ address-> getDiscountAmount() + $ total_discount)'를 사용하거나 아이템 당 할인을 설정하기 위해'$ item-> setDiscountAmount()'를 사용해야한다.) 그리고 할인은'Mage_Sales_Model_Quote_Address_Total_Tax : : 세금 계산을 위해 collect()'. – Zyava내가 아는 한, 직접 총액을 수정할 수는 없습니다. 이미 할인 가격을 설정해야하며 Magento는 합계를 계산할 때이를 고려합니다. config.xml을 수정하고 소계 도 실행 해보십시오. Magento가 합계 계산을 처리하는 방식을 정말로 이해하기까지는 시간이 좀 걸렸습니다. –
Kenny
그래서 나는 너희들이 말한 것을 두 가지 모두 시도해 보았다. 나는 같은 문제를 겪고있다. (나는 총합을 직접 수정하기로되어 있지 않기 때문에 총합계가 추가되었다.) 다른 총 모듈 중 하나에서 총합을 수정하는 아이디어가 있습니다.나는 subtotalWithDiscount와 subtotalWithoutDiscount를 설정할 수있는 할인 모듈을보고 있으므로 그렇게 시도 할 것입니다. –