在 Magento 2 中,除了以编程方式创建产品和客户外,您还可以根据下面的教程轻松地用编程方式创建发票。
为什么 Magento 2 商店需要设置用于创建发票的程序?如您所知,每次一个发票被创建,都意味着消费者成功下达了订单,同时 Magento 系统会通知您已从客户那里赚到了钱。然而,通过这种方式,如果您的客户在订单中实施了部分付款,您就会从 Magento 2 系统获得批量通知并创建同等数量的发票。因此,这篇教程是不依赖订单的总付款额来生成发票的绝佳解决方案。
Mageplaza通过两个简单的步骤来实现,现在我们开始吧。
以编程方式创建发票的概览
-
声明 sales_order_invoice_pay 事件
-
设置 observer 类
声明 sales_order_invoice_pay 事件
在自定义模块中开始设置 events.xml 文件: /app/code/Mageplaza/HelloWorld/etc/events.xml
<?xml version="1.0"?>
<event name="sales_order_invoice_pay">
<observer name="webpos_sales_order_invoice_pay" instance="Mageplaza\HelloWorld\Observer\SalesOrderInvoicePay" />
</event>
</config>
设置 observer 类
/app/code/Mageplaza/HelloWorld/Observer/SalesOrderInvoicePay.php
<?php
namespace Mageplaza\HelloWorld\Observer\Sales;
use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\Event\ObserverInterface;
class SalesOrderInvoicePay implements ObserverInterface
{
/**
* @param EventObserver $observer
* @return $this
*/
public function execute(EventObserver $observer)
{
$invoice = $observer->getEvent()->getInvoice();
$order = $invoice->getOrder();
/* reset total_paid & base_total_paid of order */
$order->setTotalPaid($order->getTotalPaid() - $invoice->getGrandTotal());
$order->setBaseTotalPaid($order->getBaseTotalPaid() - $invoice->getBaseGrandTotal());
}
}