Example #1
0
 /**
  * Check if order item can be invoiced. Dummy item can be invoiced or with his children or
  * with parent item which is included to invoice
  *
  * @param \Magento\Sales\Model\Order\Item $item
  * @param array $qtys
  * @return bool
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 protected function _canInvoiceItem($item, $qtys = [])
 {
     if ($item->getLockedDoInvoice()) {
         return false;
     }
     if ($item->isDummy()) {
         if ($item->getHasChildren()) {
             foreach ($item->getChildrenItems() as $child) {
                 if (empty($qtys)) {
                     if ($child->getQtyToInvoice() > 0) {
                         return true;
                     }
                 } else {
                     if (isset($qtys[$child->getId()]) && $qtys[$child->getId()] > 0) {
                         return true;
                     }
                 }
             }
             return false;
         } elseif ($item->getParentItem()) {
             $parent = $item->getParentItem();
             if (empty($qtys)) {
                 return $parent->getQtyToInvoice() > 0;
             } else {
                 return isset($qtys[$parent->getId()]) && $qtys[$parent->getId()] > 0;
             }
         }
     } else {
         return $item->getQtyToInvoice() > 0;
     }
 }
 /**
  * @param \Magento\Sales\Model\Order\Item $orderItem
  * @return void
  */
 protected function invoiceOrder(\Magento\Sales\Model\Order\Item $orderItem)
 {
     $invoiceData = [$orderItem->getId() => $orderItem->getQtyToInvoice()];
     $invoice = $this->createInvoice($orderItem->getOrderId(), $invoiceData);
     if ($invoice) {
         $invoice->register();
         $invoice->getOrder()->setIsInProcess(true);
         $invoiceTransaction = $this->transactionFactory->create()->addObject($invoice)->addObject($invoice->getOrder());
         $invoiceTransaction->save();
     }
 }