
Як би власники магазинів не хотіли отримувати жодних повернень коштів, це не зовсім можливо. Клієнти можуть придбати неправильний розмір, колір тощо, отримати неправильні товари або несподівано змінити свою думку. Продавці також можуть не враховувати різні деталі замовлення. Таким чином, політика повернення коштів є необхідністю для забезпечення надійних відносин між магазином і клієнтом.
У Magento 2 повернення коштів називається кредитним авізо. Воно визначає суму грошей, яку клієнт повинен отримати назад. Зазвичай, Кредитні авізо створюються в адміністративній панелі . Однак ви також можете зробити це за допомогою коду.
Отже, у цій статті ви дізнаєтеся, як створити кредитне авізо в Magento 2 програмно.
Створення кредитного авізо за допомогою впровадження залежностей
Одним із рекомендованих варіантів є метод впровадження залежностей. Наступний код допоможе вам створити кредитне авізо програмно.
<?php
namespace Venodr\MyModule\Model;
use Magento\Sales\Api\OrderRepositoryInterface;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Sales\Model\RefundOrder;
use Magento\Sales\Model\Order\Creditmemo\ItemCreationFactory;
class CreateCreditMemo
{
protected $itemCreationFactory;
protected $orderRepository;
protected $refundOrder;
public function __construct(
ItemCreationFactory $itemCreationFactory,
OrderRepositoryInterface $orderRepository,
RefundOrder $refundOrder
){
$this->itemCreationFactory = $itemCreationFactory;
$this->orderRepository = $orderRepository;
$this->refundOrder = $refundOrder;
}
public function createCreditMemo(int $orderId)
{
try {
$order = $this->orderRepository->get($orderId);
}
catch (NoSuchEntityException $e) {
return ['error' => 1, 'msg' => 'Undefined orderId: ' . $orderId];
}
if (!$order->canCreditmemo()) {
return ['error' => 1, 'msg' => 'Cannot create credit memo for order : ' . $orderId];
}
$itemIdsToRefund = [];
foreach ($order->getAllItems() as $orderItem) {
$creditMemoItem = $this->itemCreationFactory->create();
$creditMemoItem->setQty($orderItem->getQtyOrdered())->setOrderItemId($orderItem->getId());
$itemIdsToRefund[] = $creditMemoItem;
}
try {
$this->refundOrder->execute($orderId, $itemIdsToRefund);
}
catch (\Exception $e) {
return ['error' => 1, 'msg' => 'Cannot create credit memo : '];
}
return ['success' => 1, 'msg' => 'Refund was created'];
}
}
Створення кредитного авізо за допомогою диспетчера об'єктів
Як ви, можливо, знаєте, Менеджер об'єктів може приховувати реальні залежності класу. Однак, якщо ви звикли застосовувати цей метод для своїх завдань розробки, ви можете спробувати створити кредитне авізо таким чином.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
use Magento\Framework\App\Bootstrap;
require __DIR__ . '/app/bootstrap.php';
$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get(Magento\Framework\App\State::class);
$state->setAreaCode('adminhtml');
$itemCreationFactory = $objectManager->create(\Magento\Sales\Model\Order\Creditmemo\ItemCreationFactory::class);
$orderRepository = $objectManager->create(\Magento\Sales\Api\OrderRepositoryInterface::class);
$refundOrder = $objectManager->create(\Magento\Sales\Model\RefundOrder::class);
$orderId = 81;
try {
$order = $orderRepository->get($orderId);
}
catch (NoSuchEntityException $e) {
return ['error' => 1, 'msg' => 'Undefined orderId: ' . $orderId];
}
if (!$order->canCreditmemo()) {
return ['error' => 1, 'msg' => 'Cannot create credit memo for order : ' . $orderId];
}
$itemIdsToRefund = [];
foreach ($order->getAllItems() as $orderItem) {
$creditMemoItem = $itemCreationFactory->create();
$creditMemoItem->setQty($orderItem->getQtyOrdered())->setOrderItemId($orderItem->getId());
$itemIdsToRefund[] = $creditMemoItem;
}
try {
$refundOrder->execute($orderId, $itemIdsToRefund);
}
catch (\Exception $e) {
return ['error' => 1, 'msg' => 'Cannot create credit memo : '];
}
return ['success' => 1, 'msg' => 'Refund was created'];
Програмний спосіб створення кредитних авіз може бути корисним, якщо вам потрібно керувати великою кількістю повернень коштів. Таким чином, їх швидка обробка принесе користь обробка замовлень в цілому.
Однак, щоб оптимізувати процес, вам потрібно врахувати багато інших аспектів. Вам, можливо, потрібно знати, як створити замовлення програмно . Однак, чим більше ви знаєте, тим кращий клієнтський досвід ви можете запропонувати.