Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CreditmemoLoader.php
Go to the documentation of this file.
1 <?php
8 
11 use \Magento\Sales\Model\Order\CreditmemoFactory;
12 
27 {
32 
36  protected $creditmemoFactory;
37 
41  protected $orderFactory;
42 
46  protected $invoiceRepository;
47 
51  protected $eventManager;
52 
56  protected $backendSession;
57 
61  protected $messageManager;
62 
66  protected $registry;
67 
72 
86  public function __construct(
89  \Magento\Sales\Model\OrderFactory $orderFactory,
90  \Magento\Sales\Api\InvoiceRepositoryInterface $invoiceRepository,
91  \Magento\Framework\Event\ManagerInterface $eventManager,
92  \Magento\Backend\Model\Session $backendSession,
93  \Magento\Framework\Message\ManagerInterface $messageManager,
94  \Magento\Framework\Registry $registry,
95  \Magento\CatalogInventory\Api\StockConfigurationInterface $stockConfiguration,
96  array $data = []
97  ) {
98  $this->creditmemoRepository = $creditmemoRepository;
99  $this->creditmemoFactory = $creditmemoFactory;
100  $this->orderFactory = $orderFactory;
101  $this->invoiceRepository = $invoiceRepository;
102  $this->eventManager = $eventManager;
103  $this->backendSession = $backendSession;
104  $this->messageManager = $messageManager;
105  $this->registry = $registry;
106  $this->stockConfiguration = $stockConfiguration;
107  parent::__construct($data);
108  }
109 
115  protected function _getItemData()
116  {
117  $data = $this->getCreditmemo();
118  if (!$data) {
119  $data = $this->backendSession->getFormData(true);
120  }
121 
122  if (isset($data['items'])) {
123  $qtys = $data['items'];
124  } else {
125  $qtys = [];
126  }
127  return $qtys;
128  }
129 
135  protected function _canCreditmemo($order)
136  {
140  if (!$order->getId()) {
141  $this->messageManager->addErrorMessage(__('The order no longer exists.'));
142  return false;
143  }
144 
148  if (!$order->canCreditmemo()) {
149  $this->messageManager->addErrorMessage(__('We can\'t create credit memo for the order.'));
150  return false;
151  }
152  return true;
153  }
154 
159  protected function _initInvoice($order)
160  {
161  $invoiceId = $this->getInvoiceId();
162  if ($invoiceId) {
163  $invoice = $this->invoiceRepository->get($invoiceId);
164  $invoice->setOrder($order);
165  if ($invoice->getId()) {
166  return $invoice;
167  }
168  }
169  return false;
170  }
171 
178  public function load()
179  {
180  $creditmemo = false;
181  $creditmemoId = $this->getCreditmemoId();
182  $orderId = $this->getOrderId();
183  if ($creditmemoId) {
184  $creditmemo = $this->creditmemoRepository->get($creditmemoId);
185  } elseif ($orderId) {
186  $data = $this->getCreditmemo();
187  $order = $this->orderFactory->create()->load($orderId);
188  $invoice = $this->_initInvoice($order);
189 
190  if (!$this->_canCreditmemo($order)) {
191  return false;
192  }
193 
194  $savedData = $this->_getItemData();
195 
196  $qtys = [];
197  $backToStock = [];
198  foreach ($savedData as $orderItemId => $itemData) {
199  if (isset($itemData['qty'])) {
200  $qtys[$orderItemId] = $itemData['qty'];
201  }
202  if (isset($itemData['back_to_stock'])) {
203  $backToStock[$orderItemId] = true;
204  }
205  }
206  $data['qtys'] = $qtys;
207 
208  if ($invoice) {
209  $creditmemo = $this->creditmemoFactory->createByInvoice($invoice, $data);
210  } else {
211  $creditmemo = $this->creditmemoFactory->createByOrder($order, $data);
212  }
213 
217  foreach ($creditmemo->getAllItems() as $creditmemoItem) {
218  $orderItem = $creditmemoItem->getOrderItem();
219  $parentId = $orderItem->getParentItemId();
220  if ($parentId && isset($backToStock[$parentId]) && $backToStock[$parentId]) {
221  $creditmemoItem->setBackToStock(true);
222  } elseif (isset($backToStock[$orderItem->getId()])) {
223  $creditmemoItem->setBackToStock(true);
224  } elseif (empty($savedData)) {
225  $creditmemoItem->setBackToStock(
226  $this->stockConfiguration->isAutoReturnEnabled()
227  );
228  } else {
229  $creditmemoItem->setBackToStock(false);
230  }
231  }
232  }
233 
234  $this->eventManager->dispatch(
235  'adminhtml_sales_order_creditmemo_register_before',
236  ['creditmemo' => $creditmemo, 'input' => $this->getCreditmemo()]
237  );
238 
239  $this->registry->register('current_creditmemo', $creditmemo);
240  return $creditmemo;
241  }
242 }
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
$orderItem
Definition: order.php:30
$order
Definition: order.php:55
__()
Definition: __.php:13
$invoice
__construct(CreditmemoRepositoryInterface $creditmemoRepository, CreditmemoFactory $creditmemoFactory, \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Sales\Api\InvoiceRepositoryInterface $invoiceRepository, \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Backend\Model\Session $backendSession, \Magento\Framework\Message\ManagerInterface $messageManager, \Magento\Framework\Registry $registry, \Magento\CatalogInventory\Api\StockConfigurationInterface $stockConfiguration, array $data=[])