Pregunta

El problema básico es este: Hemos habilitado la creación de facturas para pedidos gratuitos (subtotal cero).Esto funciona bien y se crea la factura, excepto que no se envía el correo electrónico de la factura.

Esperaba que solo necesitara anular el método dondequiera que se creara, probablemente solo para agregar un $invoice->sendEmail(), pero tengo problemas para encontrar dónde estaría exactamente.

¿Fue útil?

Solución

Suponiendo que haya configurado correctamente las direcciones de correo electrónico salientes en Menu > System > Configuration :Almacenar direcciones de correo electrónico:

Menu  loading= System > Configuration : Store Email Addresses Configuration">

Vaya a Ventas:Pestaña Correos electrónicos de ventas en la misma interfaz que arriba y expanda el menú de acordeón Factura:Sales : Sales Emails tab Invoice Email Settings

Deberá asegurarse de:

  1. Que los correos electrónicos de facturas estén habilitados
  2. Que ha seleccionado una dirección De según la que configuró anteriormente.Este ejemplo utiliza un representante de ventas, pero puede seleccionar cualquier dirección de correo electrónico configurada correctamente.
  3. Que se seleccione una plantilla para usuarios registrados (si estás probando usuarios registrados)
  4. Que se seleccione una plantilla para usuarios invitados (si estás probando usuarios invitados)

Tomé estas capturas de pantalla en CE 1.9.1, pero la configuración debería ser similar en EE.La versión de Magento EE que está utilizando no utiliza el nuevo sistema de cola, por lo que siempre que haya configurado estos ajustes correctamente e implemente un observador personalizado similar al código en esta publicación de blog, se deben enviar los correos electrónicos de su factura.

La clave es que su módulo personalizado adjunte un observador al sales_order_invoice_save_after evento: después de guardar la factura, puede consultar el contenido de la factura y enviar un correo electrónico.

* NOTAS IMPORTANTES *

Si su objetivo es garantizar que esta funcionalidad se aplique a los productos descargables en las facturas de pago con subtotal cero, como podría ser el caso de productos más habituales, como @xinqiu anotado en los comentarios, probablemente deberías adjuntar tu observador al sales_order_invoice_save_commit_after evento en su lugar.

Cuando sales_order_invoice_save_after se activa, la operación de escritura que contiene los detalles del enlace del producto descargable comprado aún no se ha guardado en la base de datos, aunque es posible que se haya guardado otra información de pedido/factura y otra línea de pedido.

Aunque esta es un área en la que no tengo experiencia directa, tengo entendido que si hay alguna falla en el nivel de la base de datos y MySQL revierte la transacción, se regenerará la URL que se creó originalmente para el enlace único del producto descargable. por Magento cuando reintenta la operación de guardar/confirmar

Dicho de manera más sucinta, no se puede saber que la URL única se ha conservado de forma segura en la base de datos y se ha confirmado con éxito en una transacción de base de datos hasta que sales_order_invoice_save_commit_after se activa el evento (incluso si ya se han confirmado otros detalles del pedido de alto nivel en MySQL, como totales, número de pedido/factura, etc.)

Aunque todavía no he tenido la oportunidad de probarlo por mi cuenta, parece que no puedo encontrar un defecto en la lógica de esa estrategia (aunque esta puede ser una de las áreas en las que tengo mucha menos experiencia que Yo preferiría).Supongo que deberías poder confirmarlo después de investigar un poco y experimentar; cuando experimente brevemente por mi cuenta, debo confesar que creo que podría ser más prudente usar sales_order_invoice_save_commit_after...

...no importa con qué tipo de productos estés tratando en tu Tienda Magento...Dada su secuencia (posterior) en el flujo de trabajo general de pedidos/facturación de Magento, como mínimo sabrás en este punto que todos los productos relevantes Los detalles del pedido y de la línea de pedido se almacenaron y generaron una excepción de algún tipo y se revirtieron y reintentaron adecuadamente, o se comportaron como se esperaba normalmente.

Suponiendo que desea incluir el enlace a su producto descargable en la plantilla que está utilizando para generar su correo electrónico de factura, debe modificar el código que incluyo a continuación para adjuntarlo a sales_order_invoice_save_commit_after lo que garantizará que toda la información relevante sobre el pedido y cualquier producto descargable se guarde en la base de datos y se confirme en una transacción (si es posible).

No puedo ver por qué usar sales_order_invoice_save_commit_after podría presentar otros problemas, aunque tenga en cuenta la advertencia de que yo nunca lo he hecho y que el código que proporciono a continuación lo he usado varias veces con éxito, por lo que podría estar equivocado y "Su kilometraje puede variar".

* NOTAS IMPORTANTES *

El código del módulo en ese ejemplo es bastante simple.De forma predeterminada, la función de envío de factura por correo electrónico solo se activa para una factura de $0,00 cuando hace clic en el botón en la interfaz de administración para enviar manualmente un correo electrónico de la factura al cliente (se envía automáticamente si el total < 0).

El código anterior activa la misma lógica que el botón, pero se activa cuando el evento activa al observador.La solución son 3 componentes básicos:

Módulo 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>

Código de observador:

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;
}

}

Configuración de activación del módulo:

<?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:Si tiene habilitada la compilación, tendrá que deshabilitarla/recompilarla después de implementar su personalización para que se ejecute, o es posible que obtenga un error como:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top