在Magento 2中,除了以编程方式创建产品和客户外,您还可以按照Magento 2以编程方式创建发票主题中的给定指南,轻松地以编程方式创建发票。
为什么Magento 2商店需要设置用于创建发票的程序?如您所知,每次创建发票时,都意味着成功下达了订单,同时Magento会通知您已从客户那里赚了钱。但是,通过这种常规方式,如果您的客户在订单中实施了部分付款,则您将从Magento 2系统获得批量通知,并创建同等数量的发票。因此,此主题是形成发票的绝佳解决方案,而不必依赖订单的总付款额。
在Magento 2中以编程方式创建发票的概述
步骤1:声明事件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>
步骤2:设置观察者类
/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());
}
}