Невозможно найти определение функции setIsInProcess()

Я пытаюсь программно создать отгрузку для заказов, на которые уже выставлен счет, но мне не удается заставить ее работать, в том смысле, что отгрузка создана правильно для всех позиций в заказе, но вместо этого статус заказа остается "Обрабатывается" идти к "завершить".

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

Я искал во всех классах модуля продаж, но не повезло.

Может ли somenone сказать мне, где найти этот метод? Он принадлежит Sales\Order и используется как $order->setIsInProcess(true)но я не могу найти function setIsInProcess(....) нет нигде.

Я, очевидно, также искал с grep внутри всего .php файлы из командной строки.

Любая подсказка????? Пожалуйста, я борюсь с 2 дня!

1 ответ

Решение

setIsInProcess($value) Метод является псевдонимом для setData('is_in_process', $value) соответствующей модели. Вы можете найти его определение в родительском классе Magento\Framework\Model\AbstractExtensibleModel или в Magento\Framework\Model\AbstractModel, Магические методы реализованы в родительском классе (обычно для всех моделей) Magento\Framework\DataObject в __call метод:

/**
 * Set/Get attribute wrapper
 *
 * @param   string $method
 * @param   array $args
 * @return  mixed
 * @throws \Magento\Framework\Exception\LocalizedException
 */
public function __call($method, $args)
{
    switch (substr($method, 0, 3)) {
        case 'get':
            $key = $this->_underscore(substr($method, 3));
            $index = isset($args[0]) ? $args[0] : null;
            return $this->getData($key, $index);
        case 'set':
            $key = $this->_underscore(substr($method, 3));
            $value = isset($args[0]) ? $args[0] : null;
            return $this->setData($key, $value);
        case 'uns':
            $key = $this->_underscore(substr($method, 3));
            return $this->unsetData($key);
        case 'has':
            $key = $this->_underscore(substr($method, 3));
            return isset($this->_data[$key]);
    }
    throw new \Magento\Framework\Exception\LocalizedException(
        new \Magento\Framework\Phrase('Invalid method %1::%2', [get_class($this), $method])
    );
}

Нечто подобное использовалось в magento 1, и я рекомендую вам прочитать эту статью, написанную Райаном Стрит

PS: используется только в одном месте: Magento\Sales\Model\ResourceModel\Order\Handler\State::check‌​(Order $order) на линии 41. Я думаю, что это связано с вашей проблемой, потому что здесь состояние заказа и статус меняется на обработку.

Другие вопросы по тегам