顧客は異なる配送先/請求先住所で注文を入力します。
管理者で注文を編集する必要がある場合は、新しい注文が作成されます。新しい注文では、配送先住所はデフォルトで「請求と同じ」になり、元の配送先住所は失われます。
- 彼らのインストールが同じかどうか誰でも確認できます
- 誰かが解決策を持っていますか?
顧客は異なる配送先/請求先住所で注文を入力します。
管理者で注文を編集する必要がある場合は、新しい注文が作成されます。新しい注文では、配送先住所はデフォルトで「請求と同じ」になり、元の配送先住所は失われます。
回答:
私はこの問題を抱えていました。私の問題は、それsame_as_billing_address
がフロントエンドを介した配送先住所に設定されていたため、バックエンドが2番目の住所がないと考え、レンダリングをスキップしたことでした。
フロントエンドが正しいデータを送信するかどうかを確認します。
same_as_billing_address
正しく設定されています。
Magento 1.9では再現できませんでした。
リリースノートに記載されているこの問題のバグ修正はありませんが、1.8.0.0のリリースノートに次の内容が含まれています。
管理注文とクレジットメモの修正
- 管理パネルを使用して注文を作成し、デフォルトの請求先住所とデフォルトの配送先住所を指定した場合、住所は正しく使用されます。
おそらくこれは関連しており、バグも修正されています。リリースノートは必ずしも完全ではありません。
最新のMagento 1.9.2.4および2.0.5でも同じ問題が発生しました。
シナリオ:
結果: 配送先住所が失われ、代わりに請求先住所が表示されます。
理由:_isSameAsBilling()メソッドは常に返し、真の順序がゲストで設置した場合。それは適切な行動ではありません。
問題の方法:
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()));
}
Customerが登録されていない場合は、請求先住所と配送先住所が異なっていても、_isSameAsBilling()メソッドはtrueを返します。
元の配送先住所が失われるため、管理パネルで編集されたすべての注文に深刻な影響があります。
これはバグですか、それとも何か不足していますか?
Magento 1.7で同じ問題があり、この変更で修正しました:app / code / core / Mage / Adminhtml / Model / Sales / Order / Create.php
あなたはきれいな方法でクラスを上書きする必要があります:)
メソッドを変更します:_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);
}
}