Bạn sẽ tìm thấy mã liên quan đến điều này trong lớp Mage_Sales_Model_Order_Creditmemo_Total_Tax
.
Dòng mã $part = $creditmemo->getShippingAmount()/$orderShippingAmount;
(nằm ở dòng 116) cho thấy rõ điều này được mã hóa cụ thể để chỉ tính thuế theo trường vận chuyển hàng hóa từ biểu mẫu creditMemo.
Thay đổi rõ ràng là điều chỉnh mã đó để sử dụng trường "Hoàn tiền điều chỉnh".
Bạn thực sự không thể viết lại lớp này, do cách magento khởi tạo nó như là một phần của hệ thống con bộ sưu tập tổng, trong các tính toán của creditmemo.
Tuy nhiên, bạn có thể điều chỉnh trình thu thập để sử dụng phiên bản lớp của riêng bạn, vì vậy tất cả không bị mất.
Vì vậy, trong mô-đun của riêng bạn, bạn sẽ đặt đoạn mã sau vào tệp config.xml. Nó đi vào bên trong các <global>
yếu tố
<global>
<sales>
<order_creditmemo>
<totals>
<tax>
<class>NAMESPACE_MODULE/order_creditmemo_total_tax</class>
<after>subtotal</after>
</tax>
</totals>
</order_creditmemo>
</sales>
<global>
Bây giờ bạn sẽ tạo tệp lớp NAMESPACE/MODULE/Model/Order/Creditmemo/Total/Tax
, mở rộng tệp lõi.
class NAMESPACE_MODULE_Model_Order_Creditmemo_Total_Tax extends Mage_Sales_Model_Order_Creditmemo_Total_Tax
Bạn sẽ cần sao chép toàn bộ phương thức 'thu thập' tạo thành lớp lõi vào tệp mới của bạn.
Thêm mã sau vào dòng 114 (ngay sau mã $shippingDelta = $baseOrderShippingAmount - $baseOrderShippingRefundedAmount
)
/** adjust to also calculate tax on the adjustment value **/
$adjustment = ($creditmemo->getAdjustment() > 0)?$creditmemo->getAdjustment():$creditmemo->getShippingAmount();
if($creditmemo->getAdjustment() > 0 && $creditmemo->getShippingAmount() > 0) {
$adjustment = $creditmemo->getAdjustment() + $creditmemo->getShippingAmount();
}
/** end adjustment **/
và điều chỉnh dòng 116 từ $part = $creditmemo->getShippingAmount()/$orderShippingAmount;
đến$part = $adjustment/$orderShippingAmount;
Điều này sau đó sẽ sử dụng hiệu quả Số tiền vận chuyển hoặc Số tiền điều chỉnh trong tính toán.