Автоматическое создание PDF-файла счета-фактуры и сохранение на сервере при создании счета-фактуры
Надеюсь, что кто-нибудь укажет мне правильное направление.
Я бы хотел, чтобы Magento 2 автоматически создавал PDF-файл счета-фактуры и сохранял его где-нибудь на сервере при создании/создании счета-фактуры.
Возможно ли это?
Magento 2.2.7
Спасибо
2 answers
Я не думаю, что в Magento 2 есть что-то "из коробки" для этого.
Но вы можете легко создать наблюдателя для события sales_order_invoice_register
. Это событие вызывается после создания нового счета-фактуры.
Вы можете понять это с помощью чего-то вроде этого:
1. зарегистрировать наблюдателя в events.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="sales_order_invoice_register">
<observer name="yourObserverName" instance="YourCompany\YourModule\Observer\YourObserver" />
</event>
</config>
2. создать YourObserver.php
<?php
namespace YourCompany\YourModule\Observer;
use Magento\Framework\Event\ObserverInterface;
class SavePdfInvoices implements ObserverInterface
{
protected $_pdfInvoiceModel;
protected $_outputDirectory;
private $_myPdfStorageSubDirectory = "pdfinvoices";
public function __construct(
\Magento\Sales\Model\Order\Pdf\Invoice $pdfInvoiceModel,
\Magento\Framework\Filesystem $filesystem
) {
$this->_pdfInvoiceModel = $pdfInvoiceModel;
$this->_outputDirectory = $filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
try{
$order = $observer->getData('order');
if (!$order->hasInvoices()){
return $this;
}
$invoice = $order->getInvoiceCollection()->getFirstItem();
$pdfContent = $this->_pdfInvoiceModel->getPdf([$invoice])->render();
//save to file wherever you want, in this example in var/pdfinvoices/[IncrementID].pdf
$this->_outputDirectory->writeFile($this->_myPdfStorageSubDirectory. "/" . $invoice->getIncrementId() . ".pdf" ,$pdfContent);
} catch (Exception $e){
//some usefull exception handling if you need
}
return $this;
}
}
Нет, дорогая, это не работает. Неустранимая ошибка: Неперехваченное исключение: Ошибка пользователя: Некоторые транзакции не были зафиксированы или откатаны sales_order_invoice_save_after
Пожалуйста, направьте меня по адресу