Cuối cùng chúng tôi đã tạo ra một người trợ giúp đặc biệt cho việc này (chúng tôi gọi đó là hỗn hợp giá trị).
Bạn cần ghi đè getprice và get Specialprice cho Catalog_Model_Sản phẩm:
public function getPrice()
{
return Mage::helper('catalog/mixedprice')
->getProductPrice($this);
}
public function getSpecialPrice()
{
return Mage::helper('catalog/mixedprice')
->getProductSpecialPrice($this);
}
Ý tưởng đằng sau người trợ giúp này khá đơn giản, nhưng tôi cần đưa ra nhiều bối cảnh hơn. Chúng tôi bán phần mềm khách hàng của chúng tôi, không có sản phẩm vật lý. Chúng tôi cần một số sản phẩm để có giá cố định cho khách hàng B2B và một số sản phẩm có giá cố định cho khách hàng B2C (giá cuối cùng không đổi, thay đổi số lượng lớn cho từng quốc gia khách hàng). Bạn không thể có cả hai rõ ràng.
Chúng tôi đã thêm cột cho sản phẩm 'is_vat_included'. Đối với B2B đã sửa, chúng tôi hy vọng điều đó là sai, đối với B2C đã cố định, chúng tôi hy vọng điều đó là đúng. (vì vậy bất cứ ai duy trì danh mục sản phẩm phải chăm sóc nó).
Như bạn có thể biết: có cấu hình toàn cầu cho magento cho biết giá có hoặc không có thuế (\ Mage_Tax_Helper_Data :: priceIncludesTax). Chúng tôi đã giả định rằng cấu hình này phải đúng (bạn có thể giả sử ngược lại hoặc không đưa ra giả định nào và xem xét cấu hình này khi thao túng giá trong trình trợ giúp "hỗn hợp giá trị".
Phần còn lại khá đơn giản: * if 'is_vat_included' == true cho sản phẩm, không làm gì đặc biệt * if 'is_vat_included' == false, gửi nó qua TaxHelper của magento để tính giá bằng VAT
Vì vậy, đại khái mã sẽ trông như thế này cho Catalog_Model_ Productt:
public function getPrice()
{
if($this->getIsVatIncluded()) {
return parent::getPrice();
}
return Mage::helper('tax')->getPrice(
$this, // product
parent::getPrice(), // excl. VAT
true, // ask for price inclugin Tax
null, // shipping address - we sell downloadable software, you may care more about this param
$billingAddress, // you can get it from quote
null,
null,
false, // price we're passing (parent::getPrice())doesn't include tax
false, // do not round this price (it's too soon)
)
}
Đây là logic chung mà chúng tôi đã rút ra cho người trợ giúp "hỗn hợp giá trị" của chúng tôi (tôi đã nêu nó ở đây cho rõ ràng).
Xin lưu ý: 1. Tôi không thể sao chép + dán mã chính xác cho bạn, vì vậy đây là ý tưởng sơ bộ. Nếu bạn muốn quản lý một số cửa hàng với các sản phẩm bao gồm VAT và một số cửa hàng nơi các sản phẩm loại trừ VAT theo mặc định - phương pháp này sẽ phức tạp hơn. 2. Bạn cần một thủ thuật tương tự cho sản phẩm :: get Specialprice 3. Bạn cần nhiều hơn nữa nếu bạn đang sử dụng các tùy chọn tùy chỉnh. 4. Kiểm tra đơn vị là bạn của bạn - chúng tôi đã sử dụng nó như điên (chúng tôi đã phải triển khai việc này vào ngày 1 tháng 1 năm 2015, nó đã hoạt động).
Cảm ơn đã làm rõ của @ Jeffrey - vui lòng bỏ phiếu trả lời: Cài đặt thuế qua biên giới cho khách hàng doanh nghiệp