Мы очень аккуратно стараемся добавлять хуки, так как огромное количество хуков - это самая большая беда многих систем.
В данном случае можно обойтись без добавления новых хуков. Вам необходимо, как вы правильно заметили, отключить в настройках обмена "обнуление остатков у товаров, которых не было в выгрузке".
Далее, в обработчике 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('Удалить')
//Убрали отсюда пункт с обнулением остатков
)
);
}
}