События 
Системные события 
mspdOnBeforeGetDiscounts - генерируется перед получением списка активных скидок 
Доступные параметры:
- $query - объект класса \xPDOQuery.
 - $object - экземпляр класса MsProductDiscounts\Discounts.
 
Пример плагина
// ограничиваем выборку скидок теми, которые связаны с ресурсом 123
switch ($modx->event->name){
  case 'mspdOnBeforeGetDiscounts':
    $query->where(['mspdDiscount.resource' => 123]);
    break;
}mspdOnGetDiscounts - генерируется после получения списка активных скидок 
Доступные параметры:
- $discounts - массив активных скидок.
 - $object - экземпляр класса MsProductDiscounts\Discounts.
 
Пример плагина
switch ($modx->event->name){
// добавляем скидки с id = 123
  case 'mspdOnGetDiscounts':
      if($discount = $modx->getObject('mspdDiscount', 123)){
        $object->discounts[] = $discount->toArray();
      }       
    break;
}mspdOnFilterIdsByDiscount - генерируется при запросе списка скидок для товаров в каталоге или на странице отдельного товара 
Доступные параметры:
- $data - массив всех данных товаров.
 - $ids - массив id товаров.
 - $object - экземпляр класса MsProductDiscounts\Discounts.
 
Пример плагина
// показываем все скидки вне зависимости от системной настройки
switch($modx->event->name){
  case 'mspdOnFilterIdsByDiscount':
        $object->showDiscountsForAll = true;   
    break;
}mspdOnGetProductDiscounts - генерируется при получении скидок для товара 
Доступные параметры:
- $productData - массив данных товара, для которого будут получены скидки.
 - $object - экземпляр класса MsProductDiscounts\Discounts.
 
Пример плагина
// добавим опцию color со значением red если товар имеет id = 123
switch($modx->event->name){
  case 'mspdOnGetProductDiscounts':
        if($productData['id'] === 123){
            $productData['options']['color'] = 'red';
        }        
    break;
}mspdOnBeforeCheckDiscount - генерируется перед началом проверки товара на соответствие условиям отдельной скидки 
Доступные параметры:
- $discount - массив данных скидки, содержит только один элемент.
 - $productData - массив данных товара, для которого будут получены скидки.
 - $object - экземпляр класса MsProductDiscounts\Discounts.
 
Пример плагина
// добавим опцию color со значением red если скидка имеет id = 123
switch($modx->event->name){
  case 'mspdOnBeforeCheckDiscount':
        if($discount[0]['id'] === 123){
            $productData['options']['color'] = 'red';
        }        
    break;
}mspdOnCheckDiscount - генерируется после проверки товара на соответствие условиям отдельной скидки 
Доступные параметры:
- $discount - массив данных скидки, содержит только один элемент.
 - $productData - массив данных товара, для которого будут получены скидки.
 - $object - экземпляр класса MsProductDiscounts\Discounts.
 
Пример плагина
// принудительно исключаем товар 123 для скидки 123, если выбран цвет red
switch($modx->event->name){
  case 'mspdOnCheckDiscount':
        if($discount[0]['id'] === 123 && $productData['id'] === 123 && $productData['options']['color'] === 'red'){
            $object->apply = false;
        }        
    break;
}mspdOnBeforeCheckCommonConditions - генерируется перед проверкой общих условий: количества в корзине, общей суммы, отступа и лимита. 
Доступные параметры:
- $discount - массив данных скидки, содержит только один элемент.
 - $productData - массив данных товара, для которого будут получены скидки.
 - $object - экземпляр класса MsProductDiscounts\Discounts.
 
Пример плагина
// отменяем проврку общих условий для случаем, когда скидки нужно просто показать; не будет запущено если mspd_show_for_all = `Нет` или $object->showDiscountsForAll = false
switch($modx->event->name){
  case 'mspdOnBeforeCheckCommonConditions':
        if($object->forShow){
            $object->ignoreCommonConditions = true;
        }        
    break;
}mspdOnGetProductDataByIds - генерируется перед получение данных о товарах. 
Доступные параметры:
- $ids - массив id товаров, для которых будет проведена проверка на доступность скидок.
 - $object - экземпляр класса MsProductDiscounts\Discounts.
 
Пример плагина
// добавим id = 123
switch($modx->event->name){
  case 'mspdOnGetProductDataByIds':
         $object->ids[] = 123;      
    break;
}mspdOnGetWebConfig - генерируется перед добавление JS на страницу. 
Доступные параметры:
- $webConfig - массив параметров фронтэнда.
 - $object - экземпляр класса MsProductDiscounts\Base.
 
Пример плагина
// передадим на фронт параметр myparam
switch($modx->event->name){
  case 'mspdOnGetWebConfig':
         $object->webConfig['myparam'] = 123;      
    break;
}mspdOnBeforeGetPromocode - генерируется перед получением данных промокода. 
Доступные параметры:
- $code - значение промокода.
 - $ctx - ключ контекста.
 - $object - экземпляр класса MsProductDiscounts\Promocodes.
 
Пример плагина
// меняем контекст и промокод если передан промокод TEST
switch($modx->event->name){
  case 'mspdOnBeforeGetPromocode':
      if($code === 'TEST'){
        $object->ctx = 'web'
        $object->code = 'BUYNOW'
      } 
    break;
}mspdOnGetPromocode - генерируется после получением данных промокода. 
Доступные параметры:
- $code - значение промокода.
 - $promocodeData - массив данных промокода.
 - $object - экземпляр класса MsProductDiscounts\Promocodes.
 
Пример плагина
// передадим на фронт flag = true, если значение промокода TEST
switch($modx->event->name){
  case 'mspdOnGetPromocode':
      if($code === 'TEST'){       
        $object->promocodeData['flag'] = true;
      } 
    break;
}mspdOnBeforeGetDiscountPrice - генерируется перед получением цены со скидкой. 
Доступные параметры:
- $discount - массив данных скидки, содержит только один элемент.
 - $price - цена товара до применения скидки.
 - $object - экземпляр класса MsProductDiscounts\Discounts.
 
Пример плагина
// устновим минимальную цену товара в 0 если скидка id = 123
switch($modx->event->name){
  case 'mspdOnBeforeGetDiscountPrice':
      if($discount[0]['id'] === 123){       
        $object->minPrice = 0;
      } 
    break;
}События JavaScript 
mscdek:initialized - инициализация компонента завершена 
Событие возникает после загрузки всех модулей, указанных в JS конфигурации. Не может быть отменено. Чтобы без проблем использовать все модули, подписывайте на это событие, так как после его срабатывания объект mscdek и его дочерние элементы точно доступны.
Доступные параметры:
- object - экземпляр класса Mscdek.
 
Пример использования
document.addEventListener('mscdek:initialized', (e) => {
  console.log(e.detail.object);
});mscdek:init - инициализация отдельного модуля компонента завершена 
Событие возникает, когда конкретный модуль загружен и инициализирован. Не может быть отменено.
Доступные параметры:
- moduleName - имя инициализированного модуля (Address, List, Map).
 - object - экземпляр класса текущего модуля.
 
Пример использования
document.addEventListener('mscdek:init', e => {
  const {moduleName, object} = e.detail;
   console.log(moduleName, object);
})mscdek:address:select:suggestion - выбор подсказки при вводе адреса 
Событие возникает, когда пользователь выбирает одну из подсказок. Может быть отменено.
Доступные параметры:
- location - объект данных о выбранном населенном пункте.
 - ymap - объект карты.
 - object - экземпляр класса Address.
 
Пример использования
document.addEventListener('mscdek:address:select:suggestion', e => {
  const {location, ymap, object} = e.detail;  
  console.log(location, ymap, object);  
})mscdek:list:get - получение списка ПВЗ 
Событие возникает, когда от сервера получен список ПВЗ. Не может быть отменено.
Доступные параметры:
- showList - параметр, определяющий будет ли показан список пользователю.
 - cache - параметр, информирующий о том откуда был получен список с сервера или из кэша.
 - result - объект ответа сервера.
 - object - экземпляр класса List.
 
Пример использования
document.addEventListener('mscdek:list:get', e => {
  const {showList, cache, result, object} = e.detail;
  console.log(cache, result, object);  
})mscdek:status:get - получение статуса доставки 
Событие возникает, когда от сервера получен статус доставки. Не может быть отменено.
Доступные параметры:
- status - данные о доставке.
 - result - объект ответа сервера.
 - object - экземпляр класса List.
 
Пример использования
document.addEventListener('mscdek:status:get', e => {
  const {status, result, object} = e.detail;
  console.log(status, result, object);  
})mscdek:point:change - создание маркера на карте 
Событие возникает, когда выбран ПВЗ из списка. Не может быть отменено.
Доступные параметры:
- mscdekCode - код выбранного ПВЗ.
 - selectedPoint - объект данных выбранного ПВЗ.
 - result - объект ответа сервера.
 - object - экземпляр класса List.
 
Пример использования
document.addEventListener('mscdek:point:change', e => {
  const {mscdekCode, selectedPoint, result, object} = e.detail;
  console.log(mscdekCode, selectedPoint, result, object);
})mscdek:point:error - создание маркера на карте 
Событие возникает, когда пользователь отправляет заказ не выбрав ПВЗ. Не может быть отменено.
Доступные параметры:
- response - объект ответа сервера.
 - object - экземпляр класса List.
 
Пример использования
document.addEventListener('mscdek:point:error', e => {
  const {response, object} = e.detail;
  console.log(response, object);
})mscdek:map:init - инициализация карты 
Событие возникает, когда карта инициализирована, тут можно добавить объекты и слои. Не может быть отменено.
Доступные параметры:
- mapBlock - html элемент блока, в который отрисована карта.
 - ymap - объект карты.
 - object - экземпляр класса Map.
 
Пример использования
document.addEventListener('mscdek:map:init', e => {
  const {mapBlock, ymap, object} = e.detail;
  console.log(mapBlock, ymap, object);
})mscdek:map:show - карта показана 
Событие возникает, перед показом карты пользователю, тут можно добавить объекты и слои, изменить координаты центра или зум. Не может быть отменено.
Доступные параметры:
- mapBlock - html элемент блока, в который отрисована карта.
 - mapUpdParams - объект параметров обновления карты.
 - ymap - объект карты.
 - object - экземпляр класса Map.
 
Пример использования
document.addEventListener('mscdek:map:show', e => {
  const {mapBlock, mapUpdParams, ymap, object} = e.detail;
  console.log(mapBlock, points, coordinates, ymap, object);
})mscdek:map:hide - карта скрыта 
Событие возникает, после того как карта скрыта. Не может быть отменено.
Доступные параметры:
- mapBlock - html элемент блока, в который отрисована карта.
 - ymap - объект карты.
 - object - экземпляр класса Map.
 
Пример использования
document.addEventListener('mscdek:map:hide', e => {
  const {mapBlock, ymap, object} = e.detail;
  console.log(mapBlock, ymap, object);
})mscdek:map:choose - выбран ПВЗ на карте 
Событие возникает, после того как пользователь выбрал ПВЗ на карте. Не может быть отменено.
Доступные параметры:
- allMarkers - коллекция html элементов маркеров.
 - marker - html элемент выбранного маркера.
 - markerData - объект данных выбранного ПВЗ.
 - mapBlock - html элемент блока, в который отрисована карта.
 - ymap - объект карты.
 - object - экземпляр класса Map.
 
Пример использования
document.addEventListener('mscdek:map:choose', e => {
  const {allMarkers, marker, mapBlock, markerData, ymap, object} = e.detail;
  console.log(allMarkers, marker, mapBlock, markerData, ymap, object); 
})mscdek:marker:create - создание маркера на карте 
Событие возникает, когда создаётся новый маркер на карте. Не может быть отменено.
Доступные параметры:
- marker - html элемент выбранного маркера.
 - markerData - объект данных выбранного ПВЗ.
 - object - экземпляр класса Map.
 
Пример использования
document.addEventListener('mscdek:marker:create', e => {
  const {marker, markerData, object} = e.detail;
  console.log(marker, markerData, object);  
})