编程方式创建发票

在 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());
}    
}

本教程翻译自Mageplaza模块开发系列,其他内容请点击下面链接: