Magento: использовать чужой адрес во время оформления заказа - PullRequest
0 голосов
/ 01 декабря 2011

В одном из моих проектов мне нужно иметь возможность сделать заказ с чужим адресом. Поэтому я сделал некоторые изменения, чтобы иметь возможность показывать адреса других клиентов в моем списке адресов во время оформления заказа. Все работает нормально, единственная проблема в том, что когда заказ выполнен, адрес передается мне, а другой клиент больше не имеет доступа к этому адресу.

Итак, я предполагаю, что где-то происходит что-то вроде address-> setCustomer ($ myId). Я прокомментировал эту строку в customer / model / customer.php:

public function getAddressesCollection()
{
    if (is_null($this->_addressesCollection)) {
        $this->_addressesCollection = $this->getAddressCollection()
            ->setCustomerFilter($this)
            ->addAttributeToSelect('*');
        foreach ($this->_addressesCollection as $address) {
            //$address->setCustomer($this);
        }
        // My call to add other customer's address to the list here
    }

    return $this->_addressesCollection;
}

И я добавляю адреса других клиентов, добавляя что-то вроде этого в той же функции: $ This-> getAddressesCollection () -> AddItem ($ customer_address); Но комментирование этой строки «$ address-> setCustomer ($ this);», похоже, не помогает…

Есть идеи?

Спасибо!

1 Ответ

0 голосов
/ 01 декабря 2011

Единственное решение, которое я нашел, состояло в том, чтобы заставить цитату быть гостевой цитатой. Похоже, что это ничего не меняет в процессе оформления заказа, заказ назначается пользователю и отображается в списке заказов (на стороне клиента и на стороне администратора), как обычно и ожидается.

Итак, насколько я тестировал, prepareGuestQuote делает то же самое, что prepareCustomerQuote, с той лишь разницей, что он не назначает выбранный адрес текущему клиенту, поэтому, похоже, он решает мою проблему.

В /checkout/model/type/onepage.php в функции saveOrder () измените это:

switch ($this->getCheckoutMethod()) {
        case self::METHOD_GUEST:
            $this->_prepareGuestQuote();
            break;
        case self::METHOD_REGISTER:
            $this->_prepareNewCustomerQuote();
            $isNewCustomer = true;
            break;
        default:
            $this->_prepareCustomerQuote();
            break;
}

для этого:

$this->_prepareGuestQuote();

Я уверен, что это не «лучшее» решение, но это единственное, что я нашел, которое работает на данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...