1

Тема: Нужен хук в модуле обмена 1С

На сайте имеются 2 типа товара, загруженные с 1С и загруженные со стороннего источника (обмен через API).
При обмене 1С, если установлен пункт "Обнулять остаток" - обнуляются остатки всех товаров. Мне нужно как-то вклиниться, чтоб не трогало товары со стороннего апи.

Файл modules/exchange/model/task/afterimport/products.inc.php
http://joxi.ru/MAjeV0DFv7kqN2.jpg

Отлично бы подошла возможность добавить свое условие в запрос, чтоб исключить нужные мне товары. Есть возможность сюда встроить хук?

Повысить оценку Понизить оценку

2

Re: Нужен хук в модуле обмена 1С

По идее я могу подцепиться к хуку "exchange.task.afterimport.products", но как это обычно бывает, кто-то когда-то снова включит галочку "Обнулять остаток", хотелось бы чтоб все было логично.

Повысить оценку Понизить оценку

3

Re: Нужен хук в модуле обмена 1С

Мы очень аккуратно стараемся добавлять хуки, так как огромное количество хуков - это самая большая беда многих систем.

В данном случае можно обойтись без добавления новых хуков. Вам необходимо, как вы правильно заметили, отключить в настройках обмена "обнуление остатков у товаров, которых не было в выгрузке". 

Далее, в обработчике exchange.task.afterimport.products реализовать свою логику обнуления остатков.

А чтобы никто случайно не включил данную функцию, вы можете её убрать из списка на странице настроек модуля exchange.

Это делается путем обработки события orm.init.exchange-config-file, вот так:

<?php
namespace ModuleName\Config;
use \RS\Orm\Type;
use \Exchange\Config\File as ExchangeConfig;

/**
* Класс предназначен для объявления событий, которые будет прослушивать данный модуль и обработчиков этих событий.
*/
class Handlers extends \RS\Event\HandlerAbstract
{
   function init()
   {
       $this->bind('orm.init.exchange-config-file');
   }

   public static function ormInitExchangeConfigFile($config)
   {
       $config['__catalog_element_action']->setListFromArray(array(
               ExchangeConfig::ACTION_NOTHING      => t('Ничего'),
               ExchangeConfig::ACTION_DEACTIVATE   => t('Деактивировать'),
               ExchangeConfig::ACTION_REMOVE       => t('Удалить')
               //Убрали отсюда пункт с обнулением остатков
           )
       );
   }
}

Повысить оценку Понизить оценку

4

Re: Нужен хук в модуле обмена 1С

Спасибо, отличное решение!

Повысить оценку Понизить оценку