• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/internals/discountcoupon.php
  • Класс: BitrixSaleInternalsDiscountCouponTable
  • Вызов: DiscountCouponTable::addPacket
static function addPacket(array $data, $count, $limit = 0)
{
	$result = new MainEntityResult();
	$result->setData(array(
		'result' => 0,
		'count' => $count,
		'limit' => $limit,
		'all' => 0
	));
	$count = (int)$count;
	if ($count <= 0)
	{
		$result->addError(new MainEntityEntityError(
			Loc::getMessage('DISCOUNT_COUPON_PACKET_COUNT_ERR'),
			'COUPON_PACKET'
		));
	}
	foreach (static::getEntity()->getFields() as $field)
	{
		if ($field instanceof MainEntityScalarField &&  !array_key_exists($field->getName(), $data))
		{
			$defaultValue =  $field->getDefaultValue();

			if ($defaultValue !== null)
				$data[$field->getName()] = $field->getDefaultValue();
		}
	}
	$checkResult = static::checkPacket($data, false);
	if (!$checkResult->isSuccess())
	{
		foreach ($checkResult->getErrors() as $checkError)
		{
			$result->addError($checkError);
		}
		unset($checkError);
	}
	unset($checkResult);
	$useCoupons = false;
	$discountIterator = DiscountTable::getList(array(
		'select' => array('ID', 'USE_COUPONS'),
		'filter' => array('=ID' => $data['DISCOUNT_ID'])
	));
	if ($discount = $discountIterator->fetch())
	{
		$useCoupons = ($discount['USE_COUPONS'] == 'Y');
	}
	else
	{
		$result->addError(new MainEntityEntityError(
			Loc::getMessage('DISCOUNT_COUPON_PACKET_DISCOUNT_ERR'),
			'COUPON_PACKET'
		));
	}
	if (!$result->isSuccess(true))
		return $result;

	self::setDiscountCheckList($data['DISCOUNT_ID']);
	self::disableCheckCouponsUse();
	$limit = (int)$limit;
	if ($limit < $count)
		$limit = $count*2;
	$resultCount = 0;
	$all = 0;
	do
	{
		$data['COUPON'] = self::generateCoupon(true);
		$couponResult = self::add($data);
		if ($couponResult->isSuccess())
			$resultCount++;
		$all++;
	} while ($resultCount < $count && $all < $limit);
	$result->setData(array(
		'result' => $resultCount,
		'count' => $count,
		'limit' => $limit,
		'all' => $all
	));
	if ($resultCount == 0)
	{
		$result->addError(new MainEntityEntityError(
			($useCoupons
				? Loc::getMessage('DISCOUNT_COUPON_PACKET_GENERATE_COUPON_ZERO_ERR')
				: Loc::getMessage('DISCOUNT_COUPON_PACKET_NEW_GENERATE_COUPON_ZERO_ERR')
			),
			'COUPON_PACKET'
		));
		self::clearDiscountCheckList();
	}
	elseif ($resultCount < $count)
	{
		$result->addError(new MainEntityEntityError(
			Loc::getMessage(
				'DISCOUNT_COUPON_PACKET_GENERATE_COUPON_COUNT_ERR',
				array(
					'#RESULT#' => $resultCount,
					'#COUNT#' => $count,
					'#ALL#' => $all
				)
			),
			'COUPON_PACKET'
		));
	}
	self::enableCheckCouponsUse();
	self::updateUseCoupons();

	return $result;
}