/** * Main method ran during event raise * * @param \Magento\Framework\Event\Observer $observer */ public function execute(Observer $observer) { if (!$this->canRun()) { return false; } $order = $observer->getOrder(); if (!$order || !$order->getId()) { return false; } $this->logger->addInfo("Auto-invoicing order " . $order->getId()); if (!$order->canInvoice() || $order->getState() != \Magento\Sales\Model\Order::STATE_PROCESSING) { $this->logger->addInfo("Order cannot be invoiced"); if ($this->apiConfig->isLoggingEnabled()) { $this->apiOrderLogger->logInvoice($order); } return false; } $invoice = $this->state->emulateAreaCode('adminhtml', array($this->invoiceService, 'prepareInvoice'), array($order)); if (!$invoice->getTotalQty()) { $this->logger->addInfo("Cannot create an invoice without products"); return; } try { $invoice->setRequestedCaptureCase($this->apiConfig->getCaptureCase())->addComment(__('Invoice automatically created by Riskified when order was approved'), false, false)->register(); $order->setStatus('riskified_approved'); $order->addStatusHistoryComment(__("Reviewed and approved by Riskified"), 'riskified_approved'); $order->save(); } catch (\Exception $e) { $this->logger->addInfo("Error creating invoice: " . $e->getMessage()); return false; } try { $invoice->save(); $invoice->getOrder()->save(); } catch (\Exception $e) { $this->logger->addCritical("Error creating transaction: " . $e->getMessage()); return false; } $this->logger->addInfo("Transaction saved"); }