# События модуля



# События связанные с вебхуками

##### 1. OnPostWebhookProcessing 

Это событие вызывается после обработки сущности вебхука. Оно срабатывает как при отложенной обработке вебхука в очереди, так и при обработке в реальном времени. Если в теле запроса вебхука присутствует несколько сущностей, событие будет вызываться для каждой из них отдельно.

Пример обработчика события (init.php):

```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnPostWebhookProcessing', 
    'OnPostWebhookProcessingHandler'
);

/**
 * @param string $href ссылка на сущность
 * @param string $action действие на которое срабатывает вебхук (CREATE, UPDATE и т.д.)
 * @param string $type код сущности вебхука (product, customerorder и т.д.) 
 * @return void
 */
function OnPostWebhookProcessingHandler(string $href, string $action, string $type)
{
  // код обработчика
}
```

# События связанные с отгрузками

##### 1. OnBeforeAprixSendDemandToMS 

Это событие вызывается перед отправкой запроса в МойСклад на создание/изменение отгрузки. В обработчике события можно модифицировать тело запроса перед отправкой его в МойСклад.

Пример обработчика события (init.php):

```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnBeforeAprixSendDemandToMS', 
    'OnBeforeAprixSendDemandToMSHandler'
);

/**
 * @param string $action действие на которое срабатывает событие. Может быть CREATE или UPDATE
 * @param array $msData массив тела запроса (передается по ссылке и может быть модифицирован)
 * @return void
 */
function OnBeforeAprixSendDemandToMSHandler(string $action, array &$msData)
{
  // код обработчика
}
```

##### 2. OnBeforeAprixUpdateOrderWithModifiedShipment

Это событие вызывается в цикле синхронизации отгрузок в направлении из МойСклад на сайт. Оно срабатывает перед сохранением заказа после изменения или добавления отгрузки на сайте. Это событие можно использовать для модификации заказа перед его сохранением после обновления отгрузки в заказе.

Пример обработчика события (init.php):

```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnBeforeAprixUpdateOrderWithModifiedShipment', 
    'OnBeforeAprixUpdateOrderWithModifiedShipmentHandler'
);

/**
 * @param \Bitrix\Sale\Order $order объект заказа сайта
 * @param array $msDemand массив отгрузки из МойСклад
 * @return void
 */
function OnBeforeAprixUpdateOrderWithModifiedShipmentHandler(\Bitrix\Sale\Order $order, array $msDemand)
{
  // код обработчика
}
```

# События связанные с товарами и модификациями

##### 1. OnBeforeAprixCreateElementinSite 

Это событие вызывается перед созданием товара или торгового предложения на сайте при синхронизации данных из МойСклад в сторону сайта. Для торговых предложений событие срабатывает только при обработке вебхука, во время создания или обновления родительского товара, и не вызывается в цикле синхронизации модификаций.

Пример обработчика события (init.php):
```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnBeforeAprixCreateElementinSite', 
    'OnBeforeAprixCreateElementinSiteHandler'
);

/**
 * @param string $action действие на которое срабатывает событие. Может быть CREATE или UPDATE
 * @param array $arFields массив полей товара или торгового предложения, по которым они создаются на сайте (передаётся по ссылке и может быть модифицирован).
 * @return void
 */
function OnBeforeAprixCreateElementinSiteHandler(string $action, array &$arFields)
{
  // код обработчика
}
```
##### 2. OnAprixBeforeUpdateProduct
Событие, которое вызывается перед добавлением товара на сайт:

Пример обработчика события (init.php):
```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnAprixBeforeUpdateProduct', 
    'OnAprixBeforeUpdateProductHandler'
);

/**
 * @param int $idProduct идентификатор товара на сайте
 * @param array &$arProduct массив, который содержит поля товара на сайте и поля соответствующего товара в МойСклад. Передается по ссылке и может быть модифицирован
 * @return void
 */
function OnAprixBeforeUpdateProductHandler(int $idProduct, array &$arProduct)
{
  // код обработчика
}
```
##### 3. OnAprixAfterUpdateProduct
Событие, которое вызывается после обновления товара на сайте.

Пример обработчика события (init.php):
```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnAprixAfterUpdateProduct', 
    'OnAprixAfterUpdateProductHandler'
);

/**
 * @param int $idProduct идентификатор товара на сайте
 * @param array $arProduct массив, который содержит поля товара на сайте и поля этого же товара в МойСклад.
 * @return void
 */
function OnAprixAfterUpdateProductHandler(int $idProduct, array $arProduct)
{
  // код обработчика
}
```
##### 4. OnAprixBeforeAddProduct
Событие, которое вызывается передсозданием товара на сайте.

Пример обработчика события (init.php):
```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnAprixBeforeAddProduct', 
    'OnAprixBeforeAddProductHandler'
);

/**
 * @param array &$arProduct массив, который содержит поля товара на сайте и поля этого же товара в МойСклад. Передается по ссылке, поэтому может быть модифицирован.
 * @return void
 */
function OnAprixBeforeAddProductHandler(array &$arProduct)
{
  // код обработчика
}
```
##### 5. OnAprixAfterAddProduct
Событие вызывается после добавления товара на сайт. 

Пример обработчика события (init.php):
```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnAprixAfterAddProduct', 
    'OnAprixAfterAddProductHandler'
);

/**
 * @param int $idProduct идентификатор нового товара, который был добавлен на сайт
 * @param array $arProduct массив, который содержит поля товара на сайте и поля соответствующего товара в МойСклад.
 * @return void
 */
function OnAprixAfterAddProductHandler(int $idProduct, array $arProduct)
{
  // код обработчика
}
```
##### 6. OnAprixAfterAddOffer
Событие, которое вызывается после добавления торгового предложения на сайт.

Пример обработчика события (init.php):
```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnAprixAfterAddOffer', 
    'OnAprixAfterAddOfferHandler'
);

/**
 * @param int $idSKU идентификатор торгового предложения на сайте
 * @param array $arSKU массив, который содержит поля торгового предложения на сайте и поля соответствующей модификации в МойСклад.
 * @return void
 */
function OnAprixAfterAddOfferHandler(int $idSKU, array $arSKU)
{
  // код обработчика
}
```
##### 7. OnAprixAfterUpdateOffer
Событие, которое вызывается после обновления торгового предложения на сайте.

Пример обработчика события (init.php):
```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnAprixAfterUpdateOffer', 
    'OnAprixAfterUpdateOfferHandler'
);

/**
 * @param int $idSKU идентификатор торгового предложения на сайте
 * @param array $arSKU массив, который содержит поля торгового предложения на сайте и поля соответствующей модификации в МойСклад.
 * @return void
 */
function OnAprixAfterUpdateOfferHandler(int $idSKU, array $arSKU)
{
  // код обработчика
}
```
##### 8. OnAprixAfterCreateOffer
Событие, которое вызывается после создания торгового предложения на сайте.

Пример обработчика события (init.php):
```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnAprixAfterCreateOffer', 
    'OnAprixAfterCreateOfferHandler'
);

/**
 * @param int $idSKU идентификатор торгового предложения на сайте
 * @param array $arSKU массив, который содержит поля торгового предложения на сайте и поля соответствующей модификации в МойСклад.
 * @return void
 */
function OnAprixAfterCreateOfferHandler(int $idSKU, array $arSKU)
{
  // код обработчика
}
```

# События связанные с заказами

##### 1. OnBeforeAprixSendOrderToMS
Это событие вызывается перед отправкой запроса в МойСклад на создание заказа. В обработчике события можно модифицировать тело запроса перед отправкой его в МойСклад.

Пример обработчика события (init.php):

```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnBeforeAprixSendOrderToMS', 
    'OnBeforeAprixSendOrderToMSHandler'
);

/**
 * @param string $action действие на которое срабатывает событие. На данный момент только "CREATE"
 * @param array &$arOrderJSON массив тела запроса (передается по ссылке и может быть модифицирован)
 * @return void
 */
function OnBeforeAprixSendOrderToMSHandler(string $action, array &$arOrderJSON)
{
  // код обработчика
}
```
##### 2. OnAprixAddBasketItems
Это событие вызывается перед добавлением товаров в корзину при выгрузке заказа из МойСклад на сайт. Оно предназначено для предотвращения добавления в корзину той или иной позиции.

Пример обработчика события (init.php):
```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnAprixAddBasketItems', 
    'OnAprixAddBasketItemsHandler'
);

/**
 * @param int $idOrder идентификатор заказа на сайте
 * @param array &$excludedProductIds пустой массив, который передаётся по ссылке. Добавленные в него идентификаторы товаров будут исключены из позиций заказа на сайте.
 * @return void
 */
function OnAprixAddBasketItemsHandler(int $idOrder, array &$excludedProductIds )
{
  // код обработчика
}
```
##### 3. OnBeforeAprixSendUserToMS
Событие которое вызывается перед созданием или обновлением контрагента в МойСклад.

Пример обработчика события (init.php):
```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnBeforeAprixSendUserToMS', 
    'OnBeforeAprixSendUserToMSHandler'
);

/**
 * @param string $action действие на которое срабатывает событие "CREATE" или "UPDATE"
 * @param array &$arCounterpartyFields массив для создания или обновления контрагента в МойСклад. Передаётся по ссылке, поэтому может быть модифицирован в теле обработчика.
 * @param int $idUser Идентификатор пользователя на сайте
 * @return void
 */
function OnBeforeAprixSendUserToMSHandler(string $action, array &$arCounterpartyFields, int $idUser)
{
  // код обработчика
}
```
##### 4. OnAfterAprixSendUserToMS
Событие, которое вызывается после создания контрагента в МойСклад. 

Пример обработчика события (init.php):
```php
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'design2u.syncms', 
    'OnAfterAprixSendUserToMS', 
    'OnAfterAprixSendUserToMSHandler'
);

/**
 * @param array $arUserData массив данных пользователя на сайте
 * @param string $idCounterparty идентификатор контрагента в МойСклад
 * @return void
 */
function OnAfterAprixSendUserToMSHandler(array &$arUserData, string $idCounterparty)
{
  // код обработчика
}
```