Запретить администратору делать заказы на товары, которых нет в наличии - PullRequest
0 голосов
/ 08 февраля 2019

В Magneto 2.2 администратор может создавать заказы в бэкэнде для продуктов, которых нет в наличии или которые отключены.Он сообщает администратору, что выбранного вами товара нет в наличии, но позволяет ему завершить заказ.

Как я могу предотвратить выполнение этого заказа, если администратор выбрал в заказе товар со склада или заказалколичество для товара, которого не хватает?

В Каталоге> Инвентарь Я установил, чтобы скрыть товары, которых нет в наличии, и выставил заказ на NO.но это применимо только к внешнему интерфейсу, но не к бэкэнду.

Мне был дан этот код с помощью Сохеля Раны и Ирена Кадивара, но он не завершен:

Попробуйте следующим образом:

app / code / SR / MagentoStackExchange / etc / adminhtml / di.xml

    <?xml version="1.0"?>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid">
    <plugin name="SR_MagentoStackExchange::product_grid_create_order"
            type="SR\MagentoStackExchange\Plugin\Block\Sales\Adminhtml\Order\Create\Search\Grid" sortOrder="1"/>
   </type>
   </config>

app / code / SR / MagentoStackExchange / Плагин / Блок / Продажи / Adminhtml / Заказ / Создание / Поиск /Grid.php

<?php
namespace SR\MagentoStackExchange\Plugin\Block\Sales\Adminhtml\Order\Create\Search;

class Grid
{
    /**
     * @var \Magento\CatalogInventory\Helper\Stock
     */
    private $stockFilter;

    /**
     * Grid constructor.
     *
     * @param \Magento\CatalogInventory\Helper\Stock $stockFilter
     */
    public function __construct(
        \Magento\CatalogInventory\Helper\Stock $stockFilter
    ) {
        $this->stockFilter = $stockFilter;
    }

    public function aroundSetCollection(
        \Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid $subject,
        \Closure $proceed,
        $collection
    ) {
        $this->stockFilter->addInStockFilterToCollection($collection);
        $proceed($collection);
    }
}
?>

Этот метод не сработал полностью (частичное решение), большинство продуктов являются настраиваемым продуктом.Таким образом, для простого продукта продукт, которого нет в наличии, скрыт, и администратор не может выбрать его, это было сделано с помощью расширения, написанного выше.Но для конфигурируемого продукта администратор по-прежнему может выбрать продукт, выбрав конфигурируемый продукт по умолчанию, а также выбрать «Настройка» и выбрать продукт, которого нет в наличии.После выбора товара, отсутствующего на складе, под продуктом показывался большой красный крестик X Говорит, что товара нет в наличии.Но администратор смог сделать заказ на этот товар.

Примечание: допустим, размер обуви 43 отсутствует, а 42 есть в наличии, в сетке обувь 43 товара скрыта от сетки, но обувь42 показана также обувь по умолчанию, которая сочетает в себе все размеры, поэтому администратор может выбрать обувь по умолчанию и нажать «настроить», затем выбрать размер 43, которого нет в наличии, тогда он может сделать заказ (вот проблема).

1 Ответ

0 голосов
/ 11 февраля 2019

если вы перейдете в /vendor/magento/module-sales/Block/Adminhtml/Order/Create/Search/Grid.php для функции _prepareCollection и добавите

$collection->joinField(
            'qty', 'cataloginventory_stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left'
        );
        $collection->addFieldToFilter('qty', ['neq' => 0]);

, вы не должны видеть никаких продуктовв сетке число qty равно 0 , но было бы плохой практикой записывать его здесь, поэтому вам придется перезаписать этот файл.С небольшой помощью от Google, я уверен, что вы справитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...