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

Зазвичай інвойси на замовлення в 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 може бути легкою;)

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

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