Tôi đã gặp vấn đề tương tự trong Magento 1.9.2.4 và 2.0.5 mới nhất.
Kịch bản:
- Khách đặt hàng
- Đơn hàng có địa chỉ Thanh toán và Giao hàng khác nhau
- Quản trị viên chỉnh sửa thứ tự trong Bảng quản trị
Kết quả:
Địa chỉ giao hàng bị mất và thay vào đó là địa chỉ thanh toán.
Lý do:
Phương thức _isSameAsBilling () luôn trả về giá trị đúng nếu đơn đặt hàng được đặt bởi Khách. Đó là hành vi không đúng đắn.
Phương pháp trong câu hỏi:
Magento 2.0.5: /app/code/Magento/Quote/Model/Quote/Address.php
protected function _isSameAsBilling()
{
return $this->getAddressType() == \Magento\Quote\Model\Quote\Address::TYPE_SHIPPING &&
($this->_isNotRegisteredCustomer() ||
$this->_isDefaultShippingNullOrSameAsBillingAddress());
}
Magento 1.9.2.4: /app/code/core/Mage/Sales/Model/Quote/Address.php
protected function _isSameAsBilling()
{
return ($this->getAddressType() == Mage_Sales_Model_Quote_Address::TYPE_SHIPPING
&& ($this->_isNotRegisteredCustomer() || $this->_isDefaultShippingNullOrSameAsBillingAddress()));
}
Như bạn có thể thấy nếu Khách hàng chưa đăng ký, phương thức _isSameAsBilling () trả về đúng ngay cả khi địa chỉ Thanh toán và Giao hàng khác nhau.
Nó có ý nghĩa nghiêm trọng đối với tất cả các đơn đặt hàng được chỉnh sửa thông qua Bảng quản trị vì Địa chỉ giao hàng ban đầu bị mất.
Đây có phải là một lỗi hoặc tôi đang thiếu một cái gì đó?