51 return 'b_sale_gift_related_data';
63 'data_type' =>
'integer',
65 'autocomplete' =>
true,
67 'DISCOUNT_ID' =>
array(
68 'data_type' =>
'integer',
72 'data_type' =>
'\Bitrix\Sale\Internals\DiscountTable',
74 '=this.DISCOUNT_ID' =>
'ref.ID'
76 'join_type' =>
'INNER',
78 'DISCOUNT_GROUP' =>
array(
79 'data_type' =>
'\Bitrix\Sale\Internals\DiscountGroupTable',
81 '=this.DISCOUNT_ID' =>
'ref.DISCOUNT_ID'
83 'join_type' =>
'INNER',
85 'ELEMENT_ID' =>
array(
86 'data_type' =>
'integer',
88 'SECTION_ID' =>
array(
89 'data_type' =>
'integer',
91 'MAIN_PRODUCT_SECTION_ID' =>
array(
92 'data_type' =>
'integer',
105 if(empty($discountIds))
112 'delete from '.$helper->quote(self::getTableName()).
113 ' where ' . $helper->quote(
'DISCOUNT_ID') .
' in ('.implode(
',', array_map(
'intval', $discountIds)).
')'
125 $discountId = (int)$discountId;
132 $connection->queryExecute(
'delete from ' . $helper->quote(self::getTableName()) .
' where ' . $helper->quote(
'DISCOUNT_ID') .
' = ' . $discountId);
143 list($elementIds, $sectionIds) = static::getGiftsData(
$discount);
144 list($productElementIds, $productSectionIds) = static::getProductsData(
$discount);
147 $mainProductSectionId = reset($productSectionIds);
148 if(!is_int($mainProductSectionId))
150 $mainProductSectionId =
null;
154 foreach($elementIds as $elementId)
158 'ELEMENT_ID' => $elementId,
159 'SECTION_ID' =>
null,
160 'MAIN_PRODUCT_SECTION_ID' => $mainProductSectionId,
164 foreach($sectionIds as $sectionId)
168 'ELEMENT_ID' =>
null,
169 'SECTION_ID' => $sectionId,
170 'MAIN_PRODUCT_SECTION_ID' => $mainProductSectionId,
174 static::insertBatch(
$items);
185 $sectionIds = $elementIds =
array();
189 && checkSerializedData(
$discount[
'ACTIONS']))
191 $discount[
'ACTIONS_LIST'] = unserialize(
$discount[
'ACTIONS'], [
'allowed_classes' =>
false]);
194 if(!isset(
$discount[
'ACTIONS_LIST'][
'CHILDREN']) && is_array(
$discount[
'ACTIONS_LIST'][
'CHILDREN']))
196 return array($elementIds, $sectionIds);
199 foreach(
$discount[
'ACTIONS_LIST'][
'CHILDREN'] as $child)
201 if(!isset($child[
'CLASS_ID']) || !isset($child[
'DATA']) || $child[
'CLASS_ID'] !== \CSaleActionGiftCtrlGroup::getControlID())
205 foreach($child[
'CHILDREN'] as $gifterChild)
207 switch($gifterChild[
'CLASS_ID'])
209 case 'GifterCondIBElement':
210 $elementIds = array_merge($elementIds, (
array)$gifterChild[
'DATA'][
'Value']);
212 case 'GifterCondIBSection':
213 $sectionIds = array_merge($sectionIds, (
array)$gifterChild[
'DATA'][
'Value']);
221 return array($elementIds, $sectionIds);
232 $sectionIds = $elementIds =
array();
236 && checkSerializedData(
$discount[
'CONDITIONS']))
238 $discount[
'CONDITIONS_LIST'] = unserialize(
$discount[
'CONDITIONS'], [
'allowed_classes' =>
false]);
241 if(!isset(
$discount[
'CONDITIONS_LIST'][
'CLASS_ID']) ||
$discount[
'CONDITIONS_LIST'][
'CLASS_ID'] !==
'CondGroup')
243 return array($elementIds, $sectionIds);
245 if(empty(
$discount[
'CONDITIONS_LIST'][
'CHILDREN']))
247 return array($elementIds, $sectionIds);
251 return array($elementIds, $sectionIds);
253 $child = reset(
$discount[
'CONDITIONS_LIST'][
'CHILDREN']);
255 if($child[
'CLASS_ID'] !==
'CondBsktProductGroup')
257 return array($elementIds, $sectionIds);
260 if(empty($child[
'CHILDREN']))
262 return array($elementIds, $sectionIds);
264 if(
count($child[
'CHILDREN']) > 1)
266 return array($elementIds, $sectionIds);
268 $condition = reset($child[
'CHILDREN']);
270 if(!isset($condition[
'DATA'][
'logic']) || $condition[
'DATA'][
'logic'] !==
'Equal')
272 return array($elementIds, $sectionIds);
275 switch($condition[
'CLASS_ID'])
277 case 'CondIBElement':
278 $elementIds = (
array)$condition[
'DATA'][
'value'];
280 case 'CondIBSection':
281 $sectionIds = (
array)$condition[
'DATA'][
'value'];
285 return array($elementIds, $sectionIds);
295 $tableName = static::getTableName();
304 list($prefix, $values) = $sqlHelper->prepareInsert($tableName, $item);
307 if(mb_strlen(
$query) > self::MAX_LENGTH_BATCH_MYSQL_QUERY)
309 $connection->queryExecute(
"INSERT INTO {$tableName} ({$prefix}) VALUES {$query}");
317 $connection->queryExecute(
"INSERT INTO {$tableName} ({$prefix}) VALUES {$query}");
322 $valueData =
array();
325 list($prefix, $values) = $sqlHelper->prepareInsert($tableName, $item);
326 $valueData[] =
"SELECT {$values}";
330 $valuesSql = implode(
' UNION ALL ', $valueData);
331 if($valuesSql && $prefix)
333 $connection->queryExecute(
"INSERT INTO {$tableName} ({$prefix}) $valuesSql");
338 $valueData =
array();
341 list($prefix, $values) = $sqlHelper->prepareInsert($tableName, $item);
342 $valueData[] =
"SELECT {$values} FROM dual";
346 $valuesSql = implode(
' UNION ALL ', $valueData);
347 if($valuesSql && $prefix)
349 $connection->queryExecute(
"INSERT INTO {$tableName} ({$prefix}) $valuesSql");
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)