Рахунок-фактура – ​​це елемент Обробка замовлень Magento , який є таким же важливим, як і саме замовлення. Рахунок-фактура – ​​це документ, який означає «угоду» між магазином та особою та містить усі деталі замовлення.

Зазвичай рахунки-фактури на замовлення в Magento 2 створюються автоматично після того, як платіж був авторизований або отриманий магазином. Однак бувають випадки, коли вам потрібно створити рахунок-фактуру програмно в Magento 2.

Це саме той випадок. Ми покажемо вам, як це зробити, лише за 1 крок.

Щоб створити рахунок-фактуру програмно в Magento 2, створіть нову модель у вашому модулі, наприклад: app/code/Vendor/Module/Model/CreateInvoice.php з кодом:

<?php

namespace [Vendor]\[Module]\Model;

use Magento\Sales\Api\OrderRepositoryInterface;
use Magento\Sales\Model\Service\InvoiceService;
use Magento\Framework\DB\Transaction;
use Magento\Sales\Model\Order\Email\Sender\InvoiceSender;

class CreateInvoice
{
    protected $orderRepository;
    protected $invoiceService;
    protected $transaction;
    protected $invoiceSender;

    public function __construct(
        OrderRepositoryInterface $orderRepository,
        InvoiceService $invoiceService,
        InvoiceSender $invoiceSender,
        Transaction $transaction
    ) {
        $this->orderRepository = $orderRepository;
        $this->invoiceService = $invoiceService;
        $this->transaction = $transaction;
        $this->invoiceSender = $invoiceSender;
    }
    
    public function execute($orderId)
    {
        $order = $this->orderRepository->get($orderId);
        
        if ($order->canInvoice()) {
            $invoice = $this->invoiceService->prepareInvoice($order);
            $invoice->register();
            $invoice->save();
            
            $transactionSave = 
                $this->transaction
                    ->addObject($invoice)
                    ->addObject($invoice->getOrder());
            $transactionSave->save();
            $this->invoiceSender->send($invoice);
            
            $order->addCommentToStatusHistory(
                __('Notified customer about invoice creation #%1.', $invoice->getId())
            )->setIsCustomerNotified(true)->save();
        }
    }
}

Потім ви можете швидко перевірити, як це працює, за допомогою ObjectManager:

\Magento\Framework\App\ObjectManager::getInstance()
->create(\Vendor\Module\Model\CreateInvoice::class)
->execute(4);

Як бачите, у створенні рахунків-фактур програмно немає нічого складного. Розробка Magento може бути простою;)

Хоча створення рахунків-фактур вручну не є поширеною практикою, буде корисно знати, як це зробити. Крім того, ви також можете створити його в панелі адміністратора. Вам просто потрібно натиснути кнопку Рахунок-фактура на відповідній сторінці перегляду замовлення.

Якщо ви хочете видалити рахунок-фактуру, ви можете просто видалити замовлення в Magento 2 , і вся інформація, пов’язана із замовленням, буде видалена разом із ним.