Domanda

Il problema di base è questo: Abbiamo abilitato la creazione di fatture per gli ordini gratuiti (zero subtotale).Funziona bene, e la fattura viene creata, ad eccezione dell'e-mail della fattura non viene inviata.

Mi aspettavo di aver solo bisogno di ignorare il metodo ovunque vengano creati, probabilmente per aggiungere un $invoice->sendEmail(), ma sto avendo problemi a trovare dove fosse esattamente.

È stato utile?

Soluzione

Supponendo di aver impostato gli indirizzi e-mail in uscita correttamente in Menu > System > Configuration: archivia Indirizzi email:

Menu loading= Sistema> Configurazione: archivia Indirizzi email Configurazione">

Sfoglia le vendite: scheda E-mail di vendita nella stessa interfaccia di cui sopra ed espandere il menu della fisarmonica della fattura: Vendite: Scheda E-mail di vendita Impostazioni e-mail della fattura

Dovrai assicurarti:

    .
  1. che le e-mail della fattura sono abilitate
  2. che hai selezionato A da Indirizzo in base a quello che hai configurato sopra. Questo esempio utilizza il rappresentante di vendita, ma è possibile selezionare qualsiasi indirizzo email configurato correttamente.
  3. che un modello è selezionato per gli utenti registrati (se stai testando gli utenti registrati)
  4. che un modello è selezionato per gli utenti degli ospiti (se stai testando gli utenti degli ospiti)
  5. Ho preso questi screenshot su CE 1.9.1, ma le impostazioni dovrebbero essere simili in EE. La versione di Magento EE che stai utilizzando non utilizza il nuovo sistema di code, quindi finché hai configurato correttamente queste impostazioni e implementa un osservatore personalizzato Simile al codice in questo post del blog , le e-mail della fattura dovrebbero essere inviate. La chiave è di disporre del modulo personalizzato Allegare un osservatore all'evento sales_order_invoice_save_after: dopo che la fattura viene salvata, è possibile interrogare il contenuto della fattura e sparare un'e-mail.

    * Note importanti *

    Se il tuo obiettivo è garantire che questa funzionalità sia applicata ai prodotti scaricabili nelle fatture del checkout subtotale zero come potrebbe essere per prodotti più regolari, come @xinqiu Notato nei commenti , è probabile che sia in grado di allegare invece il tuo osservatore all'evento sales_order_invoice_save_commit_after.

    Quando viene licenziato sales_order_invoice_save_after, l'operazione di scrittura contenente i dettagli del collegamento del prodotto scaricabile acquistabile non è stato ancora salvato nel database, anche se altre informazioni su ordinazione / fattura e altre linee di linea potrebbero essere state.

    Anche se questa è un'area in cui ho zero esperienza diretta, la mia comprensione è che se c'è un errore al livello del database e la transazione viene eseguita indietro da MySQL, l'URL che è stato originariamente creato per il collegamento del prodotto scaricabile unico sarebbe rigenerato da Magento quando tenterà il funzionamento Salva / Commit

    Metti più sincamente, non si può sapere che l'URL unico è stato persiste in sicurezza nel database e commesso correttamente in una transazione DB fino a quando l'evento sales_order_invoice_save_commit_after è stato licenziato (anche se altri dettagli di ordine di alto livello sono già stati commessi in MySQL Come totali, ordine ordine / fattura, ecc ...)

    Sebbene non abbia avuto la possibilità di provarlo ancora per conto mio, non riesco a trovare un difetto nella logica di quella strategia (anche se questo potrebbe essere una delle aree in cui sono molto meno esperto di quanto preferirei). Immagino che dovresti essere in grado di confermare che con dopo un po 'scavando e sperimentando - quando sperimentando brevemente il mio devo confessare che sento che potrebbe essere più prudente usare sales_order_invoice_save_commit_after ...

    ... non importa quale tipo di prodotti con cui hai a che fare sul tuo Magento Store ... data la sua sequenza (successiva) nel flusso di lavoro generale di ordinazione / fatturazione magento, al minimo che sapresti almeno a questo punto Il fatto che tutti i dettagli dell'ordine e dell'oggetto pertinenti siano stati memorizzati e generato un'eccezione di alcuni tipi e sono stati riportati in modo appropriato e ritentato / o il suo comportamento come normalmente previsto.

    Supponendo che si desidera includere il collegamento al tuo prodotto scaricabile nel modello che stai utilizzando per generare la tua e-mail della fattura, è necessario modificare il codice che includo qui sotto per allegare a sales_order_invoice_save_commit_after che garantirà che tutte le informazioni rilevanti sull'ordine e Eventuali prodotti scaricabili vengono salvati nel database e commessi in una transazione (se possibile).

    Non riesco a capire perché usare sales_order_invoice_save_commit_after potrebbe introdurre altri problemi, anche se si prega di notare il cavernatore che non ho mai fatto io stesso e il codice che fornito di seguito ho usato con successo un po 'di volte, quindi potrei essere sbagliato e " Il tuo chilometraggio può variare. "

    * Note importanti *

    Il codice del modulo in quell'esempio è piuttosto semplice. Per impostazione predefinita, la funzione di posta elettronica di invio è attivata solo per la fattura da $ 0.00 quando si fa clic sul pulsante nell'interfaccia di amministrazione per inviare manualmente un'e-mail della fattura al cliente (viene automaticamente inviato se il totale <0).

    Il codice sopra riportato accese la stessa logica del pulsante, ma viene attivato quando l'evento attiva l'osservatore. La soluzione è 3 base c

Osponenti:

Module Config.xml:

<config>
  <modules>
    <Havsund_Autoorder>
      <version>1.0.0</version>
    </Havsund_Autoorder>
  </modules>
  <global>
  <events>
    <sales_order_invoice_save_after>
      <observers>
        <havsund_autoorder_observer>
          <type>singleton</type>
          <class>Havsund_Autoorder_Model_Observer</class>
          <method>automaticallyInvoiceShipCompleteOrder</method>
        </havsund_autoorder_observer>
       </observers>
     </sales_order_invoice_save_after>
    </events>
  </global>
</config>
.

Codice Observer:

class Havsund_Autoorder_Model_Observer
{

/* @var Magento_Sales_Model_Order_Invoice */
var $_invoice;

/**
* Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
* protected $_eventPrefix = 'sales_order';
* protected $_eventObject = 'order';
* event: sales_order_save_after
*/
public function automaticallyInvoiceShipCompleteOrder($observer)
{
   try {
      /* @var $order Magento_Sales_Model_Order_Invoice */
      $this->_invoice = $observer->getEvent()->getInvoice();
      $this->_invoice->sendEmail();

   } catch (Mage_Core_Exception $e) {
       Mage::log("HAVSUND AUTOORDER: Fehler #58 " . $e->getMessage());
   }

   return $this;
}

}
.

Modulo Attivazione Config:

<?xml version="1.0"?>
  <config>
    <modules>
      <Havsund_Autoorder>
        <active>true</active>
        <version>1.0.0</version>
        <codePool>local</codePool>
        <depends>
        </depends>
      </Havsund_Autoorder>
    </modules>
   </config>
.

Nota: se si dispone della compilazione abilitata, dovrai disabilitare / ricompilare dopo aver distribuito la personalizzazione per essere eseguita, o È possibile ottenere un errore come:

Warning: get_class() expects parameter 1 to be object, boolean given in /app/code/core/Mage/Core/Model/App.php on line 1340

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top