Magento 2: Как программно удалить счет-фактуру, кредит-ноту и отгрузку заказа?
Я хотел бы удалить счет-фактуру заказа, кредит-ноту и отгрузку программным способом.
Как этого добиться, передав только идентификатор заказа?
4
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