
mspcOnSetProductDiscount 
Событие срабатывает в момент вычета скидки на товар после применения купона к корзине.
Параметры 
msPromoCode $mspc— ссылка на основной класс msPromoCodearray $coupon— массив промо-кодаarray $product— массив с данными о товаре из корзиныarray $cart— массив miniShop2 корзиныstring $key— ключ позиции из массива miniShop2 корзиныfloat $price— цена после применения скидкиfloat $old_price— цена до применения скидкиfloat|string $discount— скидка, может указываться в процентах или числомfloat $discount_amount— сумма скидки
Пример использования 
php
$sp = &$scriptProperties;
switch ($modx->event->name) {
  case "mspcOnSetProductDiscount":
    // Если купон с кодом "all"
    if (strtolower($sp['coupon']['code']) == 'all') {
      // Если это товар с ID = 15
      if ($sp['product']['id'] == 15) {
        // Если опция size = S или M
        if (!empty($sp['product']['options']['size']) && ($sp['product']['options']['size'] == 'S' || $sp['product']['options']['size'] == 'M')) {
          // Если кол-во единиц товара в корзине >= 2
          if ($sp['product']['count'] >= 2) {
            // Вычисляем скидку за 1 единицу товара
            $discount_unit = $sp['discount_amount'] / $sp['product']['count'];
            // Получаем итоговую стоимость товара
            // за вычетом скидки равной скидке за одну единицу товара
            // вне зависимости от кол-ва товара в корзине
            $sp['price'] = (float) ($sp['price'] + ($sp['discount_amount'] - $discount_unit));
          }
        }
      }
    }
    break;
}
$modx->event->returnedValues = $sp;Важно
Событие сработает, даже если скидка на товар = 0%. Главное, чтобы товар был тем или иным способом привязан к купону.
