• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/discountcouponsmanagerbase.php
  • Класс: BitrixSaleDiscountCouponsManagerBase
  • Вызов: DiscountCouponsManagerBase::saveApplied
static function saveApplied(): MainResult
{
	$commonResult = new MainResult();
	if (
		self::$useMode == self::MODE_SYSTEM
		|| !self::isEntered()
		|| !self::$allowedSave
	)
	{
		return $commonResult;
	}

	$result = array();
	$currentTime = new MainTypeDateTime();
	$userId = self::getUserId();

	$appliedCoupons = self::filterCoupons(
		array('STATUS' => self::STATUS_APPLYED, 'MODULE_ID' => 'sale', 'SAVED' => 'N'),
		true
	);

	if (!empty($appliedCoupons))
	{
		$result['sale'] = array(
			'COUPONS' => $appliedCoupons
		);
		$saveResult = InternalsDiscountCouponTable::saveApplied($appliedCoupons, $userId, $currentTime);

		if ($saveResult === false)
		{
			$result['sale']['ERROR'] = true;
		}
		else
		{
			if ($saveResult['STATUS'])
			{
				$result['sale']['DEACTIVATE'] = $saveResult['DEACTIVATE'];
				$result['sale']['LIMITED'] = $saveResult['LIMITED'];
				$result['sale']['INCREMENT'] = $saveResult['INCREMENT'];
				self::eraseAppliedCoupons($result['sale']);
			}
			else
			{
				$commonResult->addError(new MainError(
					Loc::getMessage('BX_SALE_DCM_ERR_SAVE_APPLIED'),
					'sale',
					$saveResult['ERROR']
				));
				return $commonResult;
			}
		}
	}
	if (!self::$onlySaleDiscount && !empty(self::$couponProviders))
	{
		foreach (self::$couponProviders as $provider)
		{
			$appliedCoupons = self::filterCoupons(
				array('STATUS' => self::STATUS_APPLYED, 'MODULE_ID' => $provider['module'], 'SAVED' => 'N'),
				true
			);
			if (empty($appliedCoupons))
				continue;
			$result[$provider['module']] = array(
				'COUPONS' => $appliedCoupons
			);
			$saveResult = call_user_func_array(
				$provider['saveApplied'],
				array(
					$appliedCoupons,
					$userId,
					$currentTime
				)
			);
			if (empty($saveResult) || !is_array($saveResult))
			{
				$result[$provider['module']]['ERROR'] = true;
			}
			else
			{
				if (!isset($saveResult['STATUS']) || $saveResult['STATUS'])
				{
					$result[$provider['module']]['DEACTIVATE'] = (isset($saveResult['DEACTIVATE']) ? $saveResult['DEACTIVATE'] : array());
					$result[$provider['module']]['LIMITED'] = (isset($saveResult['LIMITED']) ? $saveResult['LIMITED'] : array());
					$result[$provider['module']]['INCREMENT'] = (isset($saveResult['INCREMENT']) ? $saveResult['INCREMENT'] : array());
					self::eraseAppliedCoupons($result[$provider['module']]);
				}
				else
				{
					$commonResult->addError(new MainError(
						Loc::getMessage('BX_SALE_DCM_ERR_SAVE_APPLIED'),
						$provider['module'],
						$saveResult['ERROR']
					));
					return $commonResult;
				}
			}
		}
	}
	self::saveToStorage();
	self::$allowedSave = false;
	$event = new MainEvent('sale', self::EVENT_ON_SAVE_APPLIED_COUPONS, $result);
	$event->send();

	return $commonResult;
}