2

问题是,我想通过 API 手动发送它们,因为在我的国家,发票是受法律约束的订单。有没有办法做到这一点?

谢谢你的帮助!

4

2 回答 2

5

转到系统->配置->销售电子邮件并禁用“发票”。

欢呼西蒙

于 2013-01-25T22:11:46.773 回答
1

我不认为接受的答案是处理问题的最佳方法。如果您从后端完全禁用自动交易电子邮件,您也无法手动触发它们或在您的自定义模块中使用它们。这意味着,如果您需要在另一点将其作为 magento 标准发送,则必须创建从头开始禁用的每封交易电子邮件,这也是事后需要进行的大量维护工作。

我想出的解决方案是以编程方式禁用在创建发票时发送电子邮件,并在自定义观察者事件中利用默认发件人类。在我们的例子中,我们希望在创建货件时发送发票电子邮件。

您可以通过覆盖 \Magento\Sales\Model\InvoiceOrder 来做到这一点。找到线路

$this->notifierInterface->notify($order, $invoice, $comment);

并删除它。如果您想触发电子邮件,您仍然可以使用 InvoiceSender 中的标准“发送”功能从任何您想要的地方执行此操作。在我们的例子中,我们触发来自观察者的电子邮件,如下所示:

<?php

namespace Vendor\Module\Observer;

use Magento\Framework\Event\ObserverInterface;
use Magento\Sales\Model\Order;
use Magento\Sales\Model\Order\Email\Sender\InvoiceSender;

class SendInvoiceWithShipment implements ObserverInterface
{
    protected $_invoiceSender;

    public function __construct(
        InvoiceSender $invoiceSender
    ) {
        $this->_invoiceSender = $invoiceSender;
    }

    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $order = $observer->getShipment()->getOrder();
        $invoices = $order->getInvoiceCollection();
        foreach ($invoices as $invoice) {
             // this is where the magic happens
             $this->_invoiceSender->send($invoice);
        }               


    }
}

观察者由事件 sales_order_shipment_save_after 触发

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name='sales_order_shipment_save_after'>
        <observer name='SendInvoiceWithShipment' instance='Vendor\Module\Observer\SendInvoiceWithShipment'
        />
    </event>
</config>

您可以对每封交易电子邮件执行此操作。

于 2018-10-19T12:09:11.277 回答