![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/extmag/shiplab/Controller/Rma/ |
<?php /** * Copyright © Extmag. All rights reserved. */ namespace Extmag\Shiplab\Controller\Rma; use Extmag\Shiplab\Controller\Rma; use Exception; use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface; use Magento\Framework\App\Area; use Magento\Sales\Api\Data\OrderItemInterface; use Magento\Sales\Model\Order; use Magento\Store\Model\Store; class Save extends Rma implements HttpPostActionInterface { public function execute() { try { /** * @var Order $order */ $order = $this->orderRepository->get($this->getRequest()->getParam('order_id')); if ($order) { $carrierCode = $this->getCarrierCode($order); if (!empty($carrierCode) && $this->manager->getConfig( $carrierCode . '_refund/customer/allow_create', $order->getStoreId(), 'refund', $order->getShippingAddress()->getCountryId() ) == 1 ) { $productsQty = $this->getRequest()->getPost('product', []); $comment = $this->getRequest()->getPost('comment'); if (!empty($productsQty) && is_array($productsQty)) { $products = []; foreach ($productsQty as $key => $value) { if (is_numeric($value) && $value > 0) { /** * @var OrderItemInterface $orderProduct */ $orderProduct = $order->getItemById($key); if ($orderProduct) { $productQuantity = $orderProduct->getQtyShipped() > 0 ? $orderProduct->getQtyShipped() : $orderProduct->getQtyOrdered(); if ($productQuantity - $orderProduct->getQtyRefunded() >= (int)$value) { $orderProduct->setQtyOrdered($value); $products[] = $orderProduct; } else { $this->messageManager->addErrorMessage( __('Product %1 has wrong quantity', $orderProduct->getName()) ); unset($products); break; } } else { $this->messageManager->addErrorMessage(__('Product is not found')); unset($products); break; } } } if (!empty($products)) { $helperLabel = $this->helperLabel->create(); $savedLabels = $helperLabel->makeDataAndSaveLabel( $carrierCode, [$order->getId()], 'order', 'refund', 'customer', $products, ['comment' => $comment] ); if (!empty($savedLabels['success'])) { $this->sendEmail($carrierCode, $order, $savedLabels['success'], $comment); $this->messageManager->addSuccessMessage( __('Labels were created for %1 shipment(s)', count($savedLabels['success'])) ); } if (!empty($savedLabels['error'])) { $this->messageManager->addErrorMessage( __('Labels were not created for %1 shipment(s)', count($savedLabels['error'])) ); } } else { $this->messageManager->addErrorMessage(__('Carrier is wrong')); } } else { $this->messageManager->addErrorMessage(__('Post data is wrong')); } } else { $this->messageManager->addErrorMessage(__('Access denied')); } } else { $this->messageManager->addErrorMessage(__('Order is not found')); } } catch (Exception $e) { $this->logger->error($e->getMessage()); $this->logger->error($e->getTraceAsString()); $this->messageManager->addErrorMessage(__('Unknown error')); } $result = $this->resultRedirectFactory->create(); $result->setPath('sales/order/view', ['order_id' => $this->getRequest()->getParam('order_id')]); return $result; } private function sendEmail($carrierCode, $order, $labels, $comment) { $trackingNumbers = []; foreach ($labels as $label){ $trackingNumbers = array_merge($trackingNumbers, $this->labelRepository->getById((int)$label)->getTrackingNumbers()); } $to = $this->senderResolver->resolve( $this->manager->getConfig( $carrierCode . '_refund/general/email_recipient', $order->getStoreId(), 'refund', $order->getShippingAddress()->getCountryId() ) ); $this->state->suspend(); $transport = $this->transportBuilder ->setTemplateIdentifier( $this->manager->getConfig( $carrierCode . '_refund/general/email_template', $order->getStoreId(), 'refund', $order->getShippingAddress()->getCountryId() ) ) ->setTemplateOptions([ 'area' => Area::AREA_FRONTEND, 'store' => Store::DEFAULT_STORE_ID, ]) ->setTemplateVars( [ 'order_id' => $order->getIncrementId(), 'tracking_number' => implode(", ", $trackingNumbers), 'date' => date('Y-m-d H:i:s'), 'customer_name' => $order->getBillingAddress()->getFirstName() . ' ' . $order->getBillingAddress()->getLastName(), 'comment' => $comment, ] ) ->setFromByScope( $this->manager->getConfig( $carrierCode . '_refund/general/email_recipient', $order->getStoreId(), 'refund', $order->getShippingAddress()->getCountryId() ) ) ->addTo($to['email'], $to['name']); $transport = $transport->getTransport(); $transport->sendMessage(); $this->state->resume(); } }