Magento 2: Как программно удалить счет-фактуру, кредит-ноту и отгрузку заказа?


Я хотел бы удалить счет-фактуру заказа, кредит-ноту и отгрузку программным способом.

Как этого добиться, передав только идентификатор заказа?

Author: Jackson, 2017-04-05

1 answers

Для этого требуется несколько шагов.

Загрузка по заводским заказам

Введите заводской класс \Magento\Sales\Model\OrderFactory на __construct класс. для получения заказа.

Затем закажите получение по идентификатору заказа

 $order = $this->orderFactory->create()->load($orderId);

Получить сбор счетов-фактур из объекта заказа

Получить Сбор счетов-фактур из объекта заказа с помощью getinvoicecollection Получение()

Как вы хотите запустить операцию удаления затем вы должны установить $this->registry->register('isSecureArea', true);

Получить сбор отгрузки из объекта заказа

Получить Сбор отправлений из объекта заказа с использованием getShipmentsCollection()

Получить коллекцию кредитных нот из объекта заказа

Получить коллекцию кредитных нот из объекта заказа с помощью getCreditmemosCollection()

Код:

<?php
namespace [YournameSapce];
class DeleteorderInvoiceetc
{
  protected $order;
  protected $redirectFactory;
  protected $registry;

  public function __construct(
      ........
      \Magento\Sales\Model\OrderFactory $orderFactory,
      \Magento\Framework\Registry $registry
  ) {
      ......
      $this->orderFactory = $orderFactory;
      $this->registry = $registry;
  }   
  public function Order(){
      $orderId = 'xyz';
      if(!$this->order){  
          $this->order = $this->orderFactory->create()->load($orderId);
      }
       return $this->order;
  }
  public function deleteInvoices(){

      if(!$this->Order()){
          return;
      }

      if($this->registry->registry('isSecureArea')){
          $this->registry->unregister('isSecureArea');
      }
      $this->registry->register('isSecureArea', true);

      $_invoices = $this->Order()->getInvoiceCollection();

      if($_invoices){
          foreach($_invoices as $invoice){
              $invoice->delete();
          }
      }

  }
  /*
  * Shipemrnt delete
  */
  public function deleteShipments(){

      if(!$this->Order()){
          return;
      }

      if($this->registry->registry('isSecureArea')){
          $this->registry->unregister('isSecureArea');
      }
      $this->registry->register('isSecureArea', true);

      $_shipments = $this->Order()->getShipmentsCollection();

      if($_shipments){
          foreach($_shipments as $_shipment){
              $_shipment->delete();
          }
      }

  }
      /*
  * Credit memo delete
  */
  public function deleteCreditmemos(){

      if(!$this->Order()){
          return;
      }

      if($this->registry->registry('isSecureArea')){
          $this->registry->unregister('isSecureArea');
      }
      $this->registry->register('isSecureArea', true);

      $_creditmemos = $this->Order()->getCreditmemosCollection();

      if($_creditmemos){
          foreach($_creditmemos as $_creditmemo){
              $_creditmemo->delete();
          }
      }

  }   
}
 8
Author: Amit Bera, 2019-02-02 14:57:38