Решается просто. В моделе надо навесить обработку события на сохранение товара и на окончание импорта 1с (чтобы раскидать по спецкатегориям, например).
function init()
{
$this
->bind('exchange.gate.afterimport.all')//событие после импорта 1c
->bind('orm.beforewrite.catalog-product');//перехватываем сохранение товара
}
Пример для простановки даты создания товара. Аналогично тут можно сравнить старую и новую цену и сделать еще что-либо
public static function ormBeforewriteCatalogProduct(array $params, \RS\Event\Event $event)
{
if ($params['flag'] == \RS\Orm\AbstractObject::INSERT_FLAG) { //Если это добавление товара
/**
* Получаем из параметра ORM объект
* @var \Catalog\Model\Orm\Product
*/
$product = $params['orm'];
if (!isset($product->dateof)) $product->dateof=date('Y-m-d H:i:s') ;
}
}
Вот пример того, как раскидать товары по спецкатегориям:
public static function exchangeGateAfterimportAll()
{
$router = \RS\Router\Manager::obj();
if (\Setup::$INSTALLED) {
$config = \RS\Config\Loader::byModule('users');
$new_days = 20;//$config['new_days']; пусть будет 20 дней
$dir_new=2;//id спецкатегории "новинки"
///добавляем товары в спецкатегории
//удалим связи с новинками
\RS\Orm\Request::make()
->delete()
->from(new \Catalog\Model\Orm\Xdir())
->where("dir_id in (".$dir_new.")")
->exec();
$xdir_table = \RS\Orm\Tools::getTable( new \Catalog\Model\Orm\Xdir() );
$product_table = \RS\Orm\Tools::getTable( new \Catalog\Model\Orm\Product() );
\RS\Db\Adapter::sqlExec( "INSERT IGNORE INTO {$xdir_table} (product_id, dir_id) SELECT wp.id,{$dir_new} FROM {$product_table} wp WHERE TO_DAYS(NOW()) - TO_DAYS(wp.dateof) <= ".$new_days);
}
}