2017-10-05 1 views
2

Ich versuche, Sendung für Aufträge, die bereits in Rechnung gestellt werden, zu erstellen, aber ich kann nicht schaffen, dass es funktioniert, in dem Sinne, dass die Sendung korrekt erstellt wird, für alle Artikel in der Auftrag, aber der Auftragsstatus bleibt "Verarbeitung", anstatt auf "Fertig" zu gehen.SetIsInProcess() Funktionsdefinition kann nicht gefunden werden

Ich habe ein Problem bei ausgelieferten Produkten gefunden, da ihre Menge nach der Erstellung der Lieferung auf 0 bleibt. Ich habe bereits darüber nachgedacht, ohne Glück, also versuche ich Magento-Kernfunktionen zu debuggen, um herauszufinden, was vor sich geht, aber ich kann nicht finden, wo die setIsInProcess() Funktion definiert ist.

Ich habe in allen Klassen der Modul-Verkäufe gesucht aber kein Glück.

Kann mir Somenone sagen, wo ich diese Methode finde? Es ist im Besitz von Sales\Order und verwendet wie $order->setIsInProcess(true), aber ich kann function setIsInProcess(....) nirgendwo finden.

Ich habe natürlich auch mit einer grep innerhalb aller .php Dateien von der Befehlszeile gesucht.

Irgendwelche Hinweise ????? Bitte, ich kämpfe seit 2 Tagen!

Antwort

1

Die setIsInProcess($value) Methode ist ein Alias ​​für die setData('is_in_process', $value) des entsprechenden Modells. Sie finden die Definition in der Elternklasse oder in der Magento\Framework\Model\AbstractModel. Die Magie Methoden wird in der übergeordneten Klasse realisiert (in der Regel für alle Modelle) Magento\Framework\DataObject im __call Methode:

/** 
* 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]) 
    ); 
} 

Etwas ähnliches verwendet wurde, in der magento 1, und ich werde Sie empfehlen zu lesen this article written by Ryan Street

PS: Es wird nur an einem Ort verwendet: Magento\Sales\Model\ResourceModel\Order\Handler\State::check‌​(Order $order) auf Linie 41. Ich denke, es ist mit Ihrem Problem verbunden, weil hier der Auftragsstatus und Status zur Verarbeitung wechselt.

+0

Vielen Dank für Ihre Antwort, ich werde es akzeptieren. Nur eine Klarstellung: Es bedeutet also, dass ein "is_in_process" -Attribut/Feld im sales_order-Modell vorhanden sein muss, das auf "true/false" gesetzt werden kann. Wahrscheinlich wird es auf state = 'processing' abgebildet. Ist meine Vermutung richtig? Ich bin ziemlich neu in Magento und kämpfe immer noch mit seinen Zaubereien :) – sissy

+0

@sissy Es wird nur an einer Stelle verwendet: 'Magento \ Sales \ Model \ ResourceModel \ Order \ Handler \ State :: check (Auftrag $ order)' on Zeile 41. Ich denke, es hängt mit deinem Problem zusammen, denn hier ändert sich der Bestellstatus und -status in die Verarbeitung. Und ja, du hast recht :) –

+0

Danke nochmal, sehr gute Hinweise, aber leider löst das mein anderes Problem nicht. Ich habe gestern eine Frage gestellt https://stackoverflow.com/questions/46563363/creating-shipment-does-not-update-items-shipped-quantity-and-order-is-not-comple und sogar kommentieren die setIsInProcess, oder versuchen Um einen vollständigen Status zu erzwingen, bleiben meine Bestellungen Verarbeitung und Artikel Die Liefermenge ist noch 0. Haben Sie auch eine Ahnung? Danke im Voraus. – sissy

Verwandte Themen