Your IP : 127.0.0.1
<?php
namespace Mrgig\MV\Controller\Adminhtml\Invoice;
use Mrgig\MV\Model\Config\Source\Status as MVStatus;
use Magento\Framework\Controller\ResultFactory;
class MultiSend extends \Magento\Backend\App\Action
{
protected $_resultPageFactory;
public function __construct(
\Magento\Backend\App\Action\Context $context,
\Magento\Ui\Component\MassAction\Filter $filter,
\Magento\Sales\Model\ResourceModel\Order\Invoice\CollectionFactory $collectionFactory,
\Magento\Sales\Api\InvoiceRepositoryInterface $invoiceRepository,
\Mrgig\MV\Model\CustomerInvoice $customerInvoice
)
{
parent::__construct($context);
$this->filter = $filter;
$this->collectionFactory = $collectionFactory;
$this->invoiceRepository = $invoiceRepository;
$this->customerInvoice = $customerInvoice;
}
public function getInvoiceData($invoiceId)
{
try {
$invoice = $this->invoiceRepository->get($invoiceId);
} catch (\Exception $exception) {
$invoice = null;
}
return $invoice;
}
public function execute()
{
$collection = $this->filter->getCollection($this->collectionFactory->create());
$errorInvoiceIDs = [];
$sendInvoiceIDs = [];
$skipInvoiceIDs = [];
if($collection->getSize() > 0) {
foreach($collection as $invoice) {
if($invoice->getIsProcess() != MVStatus::INVOICE_SEND) {
try {
$this->customerInvoice->createInvoice($invoice);
$sendInvoiceIDs[] = $invoice->getIncrementId();
} catch(\Exception $exception) {
$errorInvoiceIDs[] = $invoice->getIncrementId();
}
} else {
$skipInvoiceIDs[] = $invoice->getIncrementId();
}
}
}
if ($sendInvoiceIDs) {
$this->messageManager->addSuccessMessage(
__('Invoices: %1 have been sent to MV.', implode(', ', $sendInvoiceIDs))
);
}
if ($errorInvoiceIDs) {
$this->messageManager->addErrorMessage(
__(
'Invoices: %1 haven\'t been send to MV. Please see MV logs for more details.',
implode(', ', $errorInvoiceIDs)
)
);
}
if ($skipInvoiceIDs) {
$this->messageManager->addNoticeMessage(
__('Invoices: %1 have been already sent to MV.', implode(', ', $skipInvoiceIDs))
);
}
return $this->resultFactory->create(ResultFactory::TYPE_REDIRECT)->setPath('sales/invoice/index');
}
}