Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
InvoiceOrder.php
Go to the documentation of this file.
1 <?php
7 namespace Magento\Sales\Model;
8 
14 use Magento\Sales\Model\Order\Config as OrderConfig;
21 use Psr\Log\LoggerInterface;
22 
28 {
32  private $resourceConnection;
33 
37  private $orderRepository;
38 
42  private $invoiceDocumentFactory;
43 
47  private $paymentAdapter;
48 
52  private $orderStateResolver;
53 
57  private $config;
58 
62  private $invoiceRepository;
63 
67  private $invoiceOrderValidator;
68 
72  private $notifierInterface;
73 
77  private $logger;
78 
93  public function __construct(
94  ResourceConnection $resourceConnection,
95  OrderRepositoryInterface $orderRepository,
96  InvoiceDocumentFactory $invoiceDocumentFactory,
97  PaymentAdapterInterface $paymentAdapter,
98  OrderStateResolverInterface $orderStateResolver,
99  OrderConfig $config,
100  InvoiceRepository $invoiceRepository,
101  InvoiceOrderValidator $invoiceOrderValidator,
102  NotifierInterface $notifierInterface,
103  LoggerInterface $logger
104  ) {
105  $this->resourceConnection = $resourceConnection;
106  $this->orderRepository = $orderRepository;
107  $this->invoiceDocumentFactory = $invoiceDocumentFactory;
108  $this->paymentAdapter = $paymentAdapter;
109  $this->orderStateResolver = $orderStateResolver;
110  $this->config = $config;
111  $this->invoiceRepository = $invoiceRepository;
112  $this->invoiceOrderValidator = $invoiceOrderValidator;
113  $this->notifierInterface = $notifierInterface;
114  $this->logger = $logger;
115  }
116 
132  public function execute(
133  $orderId,
134  $capture = false,
135  array $items = [],
136  $notify = false,
137  $appendComment = false,
138  InvoiceCommentCreationInterface $comment = null,
140  ) {
141  $connection = $this->resourceConnection->getConnection('sales');
142  $order = $this->orderRepository->get($orderId);
143  $invoice = $this->invoiceDocumentFactory->create(
144  $order,
145  $items,
146  $comment,
147  ($appendComment && $notify),
148  $arguments
149  );
150  $errorMessages = $this->invoiceOrderValidator->validate(
151  $order,
152  $invoice,
153  $capture,
154  $items,
155  $notify,
156  $appendComment,
157  $comment,
158  $arguments
159  );
160  if ($errorMessages->hasMessages()) {
161  throw new \Magento\Sales\Exception\DocumentValidationException(
162  __("Invoice Document Validation Error(s):\n" . implode("\n", $errorMessages->getMessages()))
163  );
164  }
165  $connection->beginTransaction();
166  try {
167  $order = $this->paymentAdapter->pay($order, $invoice, $capture);
168  $order->setState(
169  $this->orderStateResolver->getStateForOrder($order, [OrderStateResolverInterface::IN_PROGRESS])
170  );
171  $order->setStatus($this->config->getStateDefaultStatus($order->getState()));
172  $invoice->setState(\Magento\Sales\Model\Order\Invoice::STATE_PAID);
173  $this->invoiceRepository->save($invoice);
174  $this->orderRepository->save($order);
175  $connection->commit();
176  } catch (\Exception $e) {
177  $this->logger->critical($e);
178  $connection->rollBack();
179  throw new \Magento\Sales\Exception\CouldNotInvoiceException(
180  __('Could not save an invoice, see error log for details')
181  );
182  }
183  if ($notify) {
184  if (!$appendComment) {
185  $comment = null;
186  }
187  $this->notifierInterface->notify($order, $invoice, $comment);
188  }
189  return $invoice->getEntityId();
190  }
191 }
$invoiceRepository
$config
Definition: fraud_order.php:17
$orderRepository
Definition: order.php:69
execute( $orderId, $capture=false, array $items=[], $notify=false, $appendComment=false, InvoiceCommentCreationInterface $comment=null, InvoiceCreationArgumentsInterface $arguments=null)
$order
Definition: order.php:55
__()
Definition: __.php:13
$logger
$invoice
$arguments
$connection
Definition: bulk.php:13
__construct(ResourceConnection $resourceConnection, OrderRepositoryInterface $orderRepository, InvoiceDocumentFactory $invoiceDocumentFactory, PaymentAdapterInterface $paymentAdapter, OrderStateResolverInterface $orderStateResolver, OrderConfig $config, InvoiceRepository $invoiceRepository, InvoiceOrderValidator $invoiceOrderValidator, NotifierInterface $notifierInterface, LoggerInterface $logger)
$items