Richtiger Magento-Beobachter für bezahlte Bestellung

7

Ich versuche, Bestellungen nach und NUR nach Zahlung einer Bestellung an einen Dritten zu senden, und wurde nun als Status auf "Verarbeitung" gesetzt. Was ist der beste Beobachter, um dies für alle Zahlungsarten einzurichten?

Nach dem Lesen mehrerer Quellen scheint es wie:

sales_order_invoice_pay

Sollte für alle Zahlungsmethoden funktionieren, scheint aber unter Magento 1.9 entfernt worden zu sein: http://rabee.me/codes/magento/cheatsheet/1.9/

Die andere Option war:

'sales_order_payment_pay'

Wenn ich es teste und die Zahlungsmethode auf "Scheck / Zahlungsanweisung" setze, wird es NICHT ausgelöst, nachdem ich die Rechnung im Backend über "Bestellung"> "Rechnung"> "Rechnung senden" erstellt habe

Wird diese Methode nur mit den anderen Zahlungsmethoden aufgerufen? (paypal / authotize.net)

AKTUALISIEREN:

Nach dem Lesen: Diese andere Frage scheint die einzige Möglichkeit zu sein, um zu garantieren, dass ich die Bestellung exportiere, nachdem eine Zahlung (online oder offline) erfolgt ist, zu erfassen, wann eine Rechnung erstellt wird, und dass für Magento 1.9 der richtige Beobachter ist ::

sales_order_invoice_register

Werden Rechnungen automatisch erstellt und nach Zahlungseingang über die Online-Methoden paypal / authotize.net gesendet? Trifft dies weiterhin zu, wenn sie im Sandbox- / Testmodus verwendet werden?

Vielen Dank für deine Hilfe

Ox3
quelle

Antworten:

1

Ich benutze wie folgt:

1 - app / code / loca / Paketname / Modulname / etc / config.xml

<config>
<global>
    <models>
        <sales>
            <rewrite>
                <order>Packagename_Modulename_Model_Rewrite_Order</order>
            </rewrite>
        </sales>
        <sales_resource>
            <rewrite>
                <quote>Packagename_Modulename_Model_Rewrite_Resource_Sales_Quote</quote>
            </rewrite>
        </sales_resource>
        <modelrewrite>
            <class>Packagename_Modulename_Model_Rewrite</class>
        </modelrewrite>
    </models>        
    <events>
        <packagename_modulename_order_status_change>
            <observers>
                <packagename_modulename_model_rewrite>
                    <type>singleton</type>
                    <class>modelrewrite/observer</class>
                    <method>changeStateOrder</method>
                </packagename_modulename_model_rewrite>
            </observers>
        </packagename_modulename_order_status_change>
    </events>        
     <resources>
        <modulename_setup>
            <setup>
                <module>Packagename_Modulename</module>
                 <class>Mage_Sales_Model_Resource_Setup</class>
            </setup>
            <connection>
            <use>core_setup</use>
            </connection>
        </modulename_setup>
    </resources>        
</global>
  <crontab>
    <!-- here I am listing only major routines  -->
    <jobs>        
        <Packagename_Modulename_Model_Rewrite_SendOrderToERP>
            <schedule>
                <cron_expr>12 * * * *</cron_expr>
            </schedule>
            <run>
                <model>modelrewrite/observer::runSendOrderToERP</model>
            </run>
        </Packagename_Modulename_Model_Rewrite_SendOrderToERP>            
        <Packagename_Modulename_Model_Rewrite_ReceiveERPStatusOrder>
            <schedule>
                <cron_expr>*/5 * * * *</cron_expr>
            </schedule>
            <run>
                <model>modelrewrite/observer::runReceiveERPStatusOrder</model>
            </run>
        </Packagename_Modulename_Model_Rewrite_ReceiveERPStatusOrder>            
    </jobs>        
</crontab>

2 - app / code / loca / Paketname / Modulname / Modell / Umschreiben / Order.php

Klasse Packagename_Modulename_Model_Rewrite_Order erweitert Mage_Sales_Model_Order {

public function _setState($state, $status = false, $comment = '', $isCustomerNotified = null, $shouldProtectState = false){
    // attempt to set the specified state
    // tenta definir o status especificado
    if ($shouldProtectState) {
        if ($this->isStateProtected($state)) {
            Mage::throwException(
                Mage::helper('sales')->__('The Order State "%s" must not be set manually.', $state)
            );
        }
    }
    $this->setData('state', $state);

    // add status history
    if ($status) {
        if ($status === true) {
            $status = $this->getConfig()->getStateDefaultStatus($state);
        }
        $this->setStatus($status);
        $history = $this->addStatusHistoryComment($comment, false); // no sense to set $status again
        $history->setIsCustomerNotified($isCustomerNotified); // for backwards compatibility
    }

    Mage::dispatchEvent('packagename_modulename_order_status_change', array('order' => $this, 'state' => $state, 'status' => $status, 'comment' => $comment, 'isCustomerNotified' => $isCustomerNotified));              
    Mage::log("Packagename_Modulename_Model_Rewrite_Order Changing order to STATE ".$state." STATUS ".$status);
    return $this;
}

}}

3 - app / code / loca / Paketname / Modulname / Modell / Umschreiben / Beobachter.php

class Packagename_modulename_Model_Rewrite_Observer{

public function implementOrderStatus($event){
    $order = $event->getOrder();
    $state = $event->getState();
    $status = $event->getStatus();
    return $this;
} 

public function changeStateOrder($observer){
    Mage::log('changeStateOrder');
    $order = $observer->getEvent()->getOrder();       

    if($order->getStatus() == "processing_paid"){
        $this->autoInvoicing($order);
    }
    else if($order->getStatus() == "processing_shipped"){
        $this->autoShipment($order);
    }

    // use your necessary ifs
    $this->sendTransactionalEmail($order);

    return $this;
}


public function autoShipment(Mage_Sales_Model_Order $order){ 
    //...    
}

public function autoInvoicing(Mage_Sales_Model_Order $order){ 
    //...    
    //return $this;
}

public function sendTransactionalEmail(Mage_Sales_Model_Order $order){

    switch ($order->getStatus()) {            
        case "processing":
            $templateId = 1;                        
            break;
        case "pending_payment":
            $templateId = 0;                        
            break;            
    //...                    
        default:
            $templateId = 0;
            break;
    }        

//...
}


public function runSendOrderToERP($schedule){
     //...
}


public function runReceiveERPStatusOrder($schedule){        
    //...
}

//And much more another methods can be used after change state / status order: refund, calcel, etc
Alfredo A.
quelle