Я пытаюсь программно создать отгрузку для заказов, на которые уже выставлен счет, но мне не удается заставить ее работать, в том смысле, что отгрузка создана правильно для всех позиций в заказе, но вместо этого статус заказа остается «Обрабатывается» идти к «завершить».
Я обнаружил проблему с отгруженными товарами, поскольку их количество остается равным 0 после создания отгрузки. Я уже спрашивал об этом, но безуспешно, поэтому я пытаюсь отладить основные функции Magento, чтобы выяснить, что происходит, но я не могу найти, где setIsInProcess()
функция определена.
Я искал во всех классах модуля продаж, но не повезло.
Может ли somenone сказать мне, где найти этот метод? Он принадлежит Sales\Order
и используется как $order->setIsInProcess(true)
но я не могу найти function setIsInProcess(....)
нет нигде.
Я, очевидно, также искал с grep
внутри всего .php
файлы из командной строки.
Любая подсказка ????? Пожалуйста, я борюсь с 2 дня!
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. Я думаю, что это связано с вашей проблемой, потому что здесь состояние заказа и статус меняется на обработку.
Других решений пока нет …