고객이 다른 운송 / 청구 주소로 주문을 입력합니다.
관리자에서 주문을 수정해야하는 경우 새 주문이 생성되며, 새 주문에서 배송 주소는 기본적으로 '청구서와 동일'하며 원래 배송 주소는 손실됩니다!
- 설치가 동일하게 수행되는지 누구나 확인할 수 있습니다.
- 누구나 해결책이 있습니다.
고객이 다른 운송 / 청구 주소로 주문을 입력합니다.
관리자에서 주문을 수정해야하는 경우 새 주문이 생성되며, 새 주문에서 배송 주소는 기본적으로 '청구서와 동일'하며 원래 배송 주소는 손실됩니다!
답변:
나는이 문제가 있었다. 내 문제는 same_as_billing_address
프론트 엔드를 통해 배송 주소로 설정되었으므로 백엔드가 생각하고 두 번째 주소가 없으며 렌더링을 건너 뛰었습니다.
프론트 엔드가 올바른 데이터를 제출하는지 확인하십시오.
same_as_billing_address
올바르게 설정되어 있습니다.
마 젠토 1.9에서 재현 할 수 없었습니다.
릴리스 노트에 언급 된 버그 수정은 없지만 1.8.0.0 릴리스 노트 에서 다음을 발견했습니다 .
행정 명령 및 대변 메모 수정
- 관리자 패널을 사용하여 주문을 작성하고 기본 청구 주소와 기본 운송 주소를 지정하면 주소가 올바르게 사용됩니다.
아마도 이것은 관련이 있고 버그도 수정했습니다. 릴리스 노트가 항상 완전한 것은 아닙니다.
최신 Magento 1.9.2.4 및 2.0.5에서 동일한 문제가 발생했습니다.
대본:
결과 : 배송지 주소가 손실되고 청구 지 주소가 대신 표시됩니다.
이유 : _isSameAsBilling () 메소드가 항상 반환 사실 순서가 게스트로 배치 된 경우. 적절한 행동이 아닙니다.
문제의 방법 :
마 젠토 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());
}
마 젠토 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()));
}
고객이 등록되지 않았는지 확인할 수 있듯이 청구 및 배송 주소가 다른 경우에도 _isSameAsBilling () 메소드는 true를 반환 합니다 .
원래 운송 주소가 유실되므로 관리자 패널을 통해 편집 한 모든 주문에 심각한 영향을 미칩니다.
이것은 버그입니까, 아니면 뭔가 빠졌습니까?
app / code / core / Mage / Adminhtml / Model / Sales / Order / Create.php에서 Magento 1.7과 동일한 문제가 발생했으며 다음과 같이 변경되었습니다.
깨끗한 방법으로 클래스를 덮어 써야합니다 :)
이 코드를 사용하여 _initShippingAddressFromOrder 메소드를 변경하십시오.
protected function _initShippingAddressFromOrder(Mage_Sales_Model_Order $order)
{
$this->getQuote()->getShippingAddress()->setCustomerAddressId('');
Mage::helper('core')->copyFieldset(
'sales_copy_order_shipping_address',
'to_order',
$order->getShippingAddress(),
$this->getQuote()->getShippingAddress()
);
$this->getQuote()->getShippingAddress()->setSameAsBilling(false);
if($order->getShippingAddress()->getCustomerAddressId() && $order->getShippingAddress()->getCustomerAddressId() == $order->getBillingAddress()->getCustomerAddressId()) {
$this->getQuote()->getShippingAddress()->setSameAsBilling(true);
}
}