Magento 2: Как я могу получить Заказчика во время collectRates на заказной способ доставки - PullRequest
0 голосов
/ 22 марта 2019

Как я могу получить клиента и корзину во время функции collectRates () моего пользовательского метода доставки.

public function __construct(
    \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
    \Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory $rateErrorFactory,
    \Psr\Log\LoggerInterface $logger,
    \Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory,
    \Magento\Quote\Model\Quote\Address\RateResult\MethodFactory $rateMethodFactory,
    \Magento\Checkout\Model\Cart $cart,
    \Magento\Customer\Model\Session $customerSession,
    array $data = []
) {
    $this->_cart = $cart;
    $this->_rateResultFactory = $rateResultFactory;
    $this->_rateMethodFactory = $rateMethodFactory;
    $this->_customerSession = $customerSession;

    parent::__construct($scopeConfig, $rateErrorFactory, $logger, $data);
}

public function collectRates(RateRequest $request)
{

    if (!$this->getConfigFlag('active')) {
        return false;
    }

    if(!$this->_customerSession->isLoggedIn()) {
        return false;
    }

    $customer = $this->_customerSession->getCustomer();
    $qty = $this->_cart->getItemsQty();
    ...

Использование сеанса клиента и проверка, работает ли isLoggedIn () только для внешнего интерфейса, но возвращает false при размещении заказа в админке.

Как правильно получить клиента и рассчитать цену за единицу для размещения как внешнего интерфейса, так и администратора?

1 Ответ

1 голос
/ 25 марта 2019

Если вы можете определить, когда ваш код запускается в Admin, вы можете использовать \ Magento \ Backend \ Model \ Session \ Quote в качестве [admin_session] и используйте [admin_session] -> getCustomerId () вместе с хранилищем клиентов (вставьте интерфейсы в конструктор и позвольте DI передавать правильные объекты), чтобы получить объект заказчика.

Я бы предложил проверить содержимое объекта \ Magento \ Backend \ Model \ Session \ Quote, так как он может уже содержать предварительно загруженный объект клиента, и в этом случае вы можете избежать его загрузки.

Вы можете использовать \ Magento \ Framework \ App \ State :: getAreaCode (), чтобы проверить, находится ли администратор в пределах

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