2017-10-05 91 views
2

我試圖以編程方式爲已經開具發票的訂單創建裝運,但我無法設法使其工作,因爲正確創建了裝運,對於所有物品訂單,但訂單狀態保持'處理'而不是'完成'。無法找到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\AbstractExtensibleModelMagento\Framework\Model\AbstractModel中找到它的定義。該魔術方法是在__call方法(通常爲所有型號)Magento\Framework\DataObject父類實現:

/** 
* 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使用的類似,我會建議你閱讀this article written by Ryan Street

PS:它只在一個地方使用:Magento\Sales\Model\ResourceModel\Order\Handler\State::check‌​(Order $order)在第41行。我認爲這與你的問題有關,因爲這裏的訂單狀態和狀態正在改變爲處理。

+0

謝謝您的回覆,我會接受。只是澄清一下:所以這意味着sales_order模型中應該有一個'is_in_process'屬性/字段可以設置爲true/false。可能它被映射到state ='processing'。我的猜測是對的嗎?我對Magento非常陌生,但仍然在爲它的魔力掙扎:) – sissy

+0

@sissy它只用在一個地方:'Magento \ Sales \ Model \ ResourceModel \ Order \ Handler \ State :: check(Order $ order)'on第41行。我認爲這與你的問題有關,因爲這裏的訂單狀態和狀態正在改變爲處理。是的,你是對的:) –

+0

再次感謝,非常好的提示,但不幸的是這並不能解決我的其他問題。我昨天問了一個問題https://stackoverflow.com/questions/46563363/creating-shipment-does-not-update-items-shipped-quantity-and-order-is-not-comple,甚至評論setIsInProcess,或嘗試強制一個完整的狀態,我的訂單仍然處理和項目發貨數量仍然是0.你是否也有線索?提前致謝。 – sissy