2011-07-15 15 views
5

O ile mi zrozumieć Magento mają różne statusy zamówień pod Globalna/sprzedaż/zlecenia/stanów, które mogą być zmieniane albo przez kopiowanie app/code/core/Mage/Sales/etc/config.xml do zakresu lokalnego lub przesłonięcie go swoim modułem niestandardowym.Jak statusy zamówień/stany pracy w Magento 1.4.x

Istnieją również globalne/sprzedaży/zamówienia/stany zdefiniowane w tym samym pliku i, o ile mi zrozumieć stany są czymś jak statusów grup. Tylko stany (nie statusy) można ustawić na status zamówienia w Magento i Statusy są czymś jak stanach podziałów. Więc w interfejsie administratora można zmienić statusy z złożonego zamówienia, ale nie można zmienić państwowej ze statusu zamówienie rozwijanej (można ją zmienić albo fakturowania klienta lub anulowanie zamówienia).

O ile rozumiem, można łatwo dodać nowy statusu do Magento, ale nie można dodać nowy stan jak stany są jakoś sztywno z resztą lub przetworzenia zamówienia Magento logika. Naprawdę mam nadzieję, że się mylę.

Proszę, popraw mnie, jeśli się mylę w jakimkolwiek punkcie, ponieważ są to tylko moje przemyślenia i może to być daleko od rzeczywistego przepływu Magento 1.4.x.

Odpowiedz

7

Jestem całkiem pewien, że "stan" jest wolnymi danymi, można ustawić dowolną wartość przy użyciu opcji setData w instancji zamówienia. Więc jeśli napiszesz moduł niestandardowy, który może załadować zamówienie, ustaw dane na jeden z twoich nowych "stanów" i przetestuj z dowolną niestandardową logiką, jakiej potrzebujesz.

$order = Mage::getModel('sales/order')->load(1); 
$order->setData('state','myCustomState'); 
$order->setData('status','onCustomState'); 
echo $order->getState() 
// Returns myCustomState 

jego warto mieć w kopalni, że ZU/ODWOŁANY chronione są stany, więc próbuje użyć $ zamówienia-> setstate („my_state”) nie powiedzie się na tych porządku, ale nie powinien zawieść na setData więc można zastąpić zamknięte lub anulowane zamówienie tą metodą.

Jeśli nadpisałeś model zamówienia niestandardowym, możesz dodać własną logikę, taką jak isOnCustomState() i umożliwić obsługę zamówienia w dowolny sposób, po prostu ładując identyfikator.

Aby dodać niestandardową logikę „” do zamówienia można coś zrobić kopię aplikacji kod \ \ \ rdzenia Mage \ Sprzedaż \ model \ Order.php do lokalnego folderu, a następnie można dodać funkcje w tym modelu,

public function isActive(){ if($this->getState() == 'active'){ return true; } else { return false; } 
public function isInActive(){ if($this->getState() == 'deactivated'){ return true; } else { return false; } 

public function activate(){ 
    if(!$this->isActive()){ 
     $this->setData('state','active'); 
     $this->setData('status','Active Subscription'); 

     // some custom code to start a recuring payment 

     return $this; 
    } 
} 

public function deactiveate(){ 
    if(!$this->isInActive()){ 
     $this->setData('state','deactivated'); 
     $this->sendOrderUpdateEmail(true,'Your subscription has been deactivated.'); 

     // some custom code to stop a recuring payment 

     return $this; 
    } 
} 

teraz można załadować rozkaz i zestaw włączyć lub wyłączyć na tym, aby ogień kodu niestandardowego

$order = Mage::getModel('sales/order')->load(1)->activate(); 

ten kod jest wszystko niesprawdzone i tylko przykład latków można spróbować, proszę nie robić po prostu zrzuć ten kod do swojego modelu i oczekuj, że będzie działał idealnie.W kodzie \ rdzeniowych \ Mage \ Sprzedaż \ etc \ config.xml w sprzedaży węzły/zamówienia/stany dodać

<activated translate="label"> 
    <label>Active Subscription</label> 
    <statuses> 
     <pending default="1"/> 
    </statuses> 
    <visible_on_front/> 
</activated> 
+0

Czy w takim przypadku dodanie innego stanu przez XML nie działa? –

+0

powinieneś być w stanie dodać "stany" do modułu config.xml for magentos 'sales', ale nic to nie zrobi, ponieważ stany potrzebują akcji nie tylko do ustawienia flagi, dlatego musisz dodać niestandardową logikę . jeśli twoje stany własne są "aktywne", musisz dodać logikę, co zrobić, gdy "aktywne" zamówienie zostanie "anulowane" (np. wysłać powiadomienie do systemu PayPal, aby zatrzymać powtarzalną płatność). –

+0

Czy możesz podać jakaś podpowiedź, w jaki sposób można dodać logikę do stanu niestandardowego? –

1

Magento Zamówienie jest finite state machine.

Dlatego podczas definiowania statusu automatycznie próbowałby określić jego stan. Zmiana stanu bezpośrednio nie jest zalecana.

Podczas definiowania statusu sprawdza różne flagi pod kątem wysyłki i faktur i w zależności od tego, czy uzyska odpowiedni stan. Gdy zamówienie jest już zatwierdzone, możesz łatwo zmienić status, niezależnie od tego, czy jest faktura czy jakaś flaga itp.