2namespace Bitrix\Sale\Internals;
5use Bitrix\Main\Localization\Loc;
6use Bitrix\Sale\Internals;
8Loc::loadMessages(__FILE__);
50 'DISCOUNT_ID' =>
'ID',
51 'CONDITIONS' =>
'CONDITIONS_LIST',
52 'ACTIONS' =>
'ACTIONS_LIST',
53 'MODULE_ID' =>
'MODULE'
56 'CONDITIONS' =>
'CONDITIONS_LIST',
57 'ACTIONS' =>
'ACTIONS_LIST'
67 return 'b_sale_order_discount';
80 'autocomplete' =>
true,
81 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_ID_FIELD')
85 'validation' =>
array(__CLASS__,
'validateModuleId'),
86 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_MODULE_ID_FIELD')
90 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_DISCOUNT_ID_FIELD')
93 'validation' =>
array(__CLASS__,
'validateName'),
94 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_NAME_FIELD')
98 'validation' =>
array(__CLASS__,
'validateDiscountHash'),
99 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_DISCOUNT_HASH_FIELD')
102 'serialized' =>
true,
103 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_CONDITIONS_FIELD')
106 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_UNPACK_FIELD')
109 'serialized' =>
true,
110 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_ACTIONS_FIELD')
113 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_APPLICATION_FIELD')
116 'values' =>
array(
'N',
'Y'),
117 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_USE_COUPONS_FIELD')
120 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_SORT_FIELD')
123 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_PRIORITY_FIELD')
126 'values' =>
array(
'N',
'Y'),
127 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_LAST_DISCOUNT_FIELD')
130 'serialized' =>
true,
131 'title' => Loc::getMessage(
'ORDER_DISCOUNT_ENTITY_ACTIONS_DESCR_FIELD')
181 $discountIterator = self::getList(
array(
182 'select' =>
array(
'ID',
'DISCOUNT_HASH'),
185 if (
$discount = $discountIterator->fetch())
203 foreach (self::$requiredFields as $fieldName)
256 foreach (self::$replaceFields as
$dest => $src)
264 foreach (self::$requiredFields as $fieldName)
286 return self::$requiredFields;
289 foreach (self::$replaceFields as
$dest => $src)
295 foreach (self::$requiredFields as $fieldName)
298 $fields[] = (isset(self::$revertFields[$fieldName]) ? self::$revertFields[$fieldName] :$fieldName);
315 $needDiscountModules =
array();
318 $needDiscountModules = (
326 if (!empty(
$discount[
'HANDLERS'][
'MODULES']))
328 $needDiscountModules = (
329 !is_array(
$discount[
'HANDLERS'][
'MODULES'])
335 if (!empty($needDiscountModules))
337 foreach ($needDiscountModules as &$module)
339 $module = trim((
string)$module);
362 $helper = $conn->getSqlHelper();
363 $discountRows = array_chunk(
$discount, 500);
364 $query =
'delete from '.$helper->quote(self::getTableName()).
' where '.$helper->quote(
'ID');
365 foreach ($discountRows as &$row)
367 $conn->queryExecute(
$query.
' in ('.implode(
', ', $row).
')');
370 unset($row,
$query, $discountRows, $helper, $conn);
399 return 'b_sale_order_coupons';
412 'autocomplete' =>
true,
413 'title' => Loc::getMessage(
'ORDER_COUPONS_ENTITY_ID_FIELD')
417 'title' => Loc::getMessage(
'ORDER_COUPONS_ENTITY_ORDER_ID_FIELD')
421 'title' => Loc::getMessage(
'ORDER_COUPONS_ENTITY_ORDER_DISCOUNT_ID_FIELD')
425 'validation' =>
array(__CLASS__,
'validateCoupon'),
426 'title' => Loc::getMessage(
'ORDER_COUPONS_ENTITY_COUPON_FIELD')
430 'validation' =>
array(__CLASS__,
'validateType'),
431 'title' => Loc::getMessage(
'ORDER_COUPONS_ENTITY_TYPE_FIELD')
435 'serialized' =>
true,
436 'title' => Loc::getMessage(
'ORDER_COUPONS_ENTITY_DATA_FIELD')
440 'title' => Loc::getMessage(
'ORDER_COUPONS_ENTITY_COUPON_ID_FIELD')
442 'ORDER_DISCOUNT' =>
new Main\
Entity\ReferenceField(
444 'Bitrix\Sale\Internals\OrderDiscount',
445 array(
'=this.ORDER_DISCOUNT_ID' =>
'ref.ID'),
446 array(
'join_type' =>
'LEFT')
471 array(__CLASS__,
'checkType')
489 return Loc::getMessage(
'ORDER_COUPONS_VALIDATOR_TYPE');
505 $helper = $conn->getSqlHelper();
506 $conn->queryExecute(
'delete from '.$helper->quote(self::getTableName()).
' where '.$helper->quote(
'ORDER_ID').
' = '.
$order);
507 unset($helper, $conn);
518 if (!is_array($coupon))
519 $coupon =
array($coupon);
524 $helper = $conn->getSqlHelper();
525 $couponRows = array_chunk($coupon, 500);
526 $query =
'delete from '.$helper->quote(self::getTableName()).
' where '.$helper->quote(
'ID');
527 foreach ($couponRows as &$row)
529 $conn->queryExecute(
$query.
' in ('.implode(
', ', $row).
')');
531 unset($row,
$query, $couponRows, $helper, $conn);
544 if (
$order <= 0 || empty($coupons))
546 if (!is_array($coupons))
547 $coupons =
array($coupons);
552 $helper = $conn->getSqlHelper();
554 'update '.$helper->quote(self::getTableName()).
555 ' set '.$helper->quote(
'ORDER_ID').
' = '.
$order.
' where '.
556 $helper->quote(
'ID').
' in ('.implode(
',', $coupons).
') and '.
557 $helper->quote(
'ORDER_ID').
' = 0'
584 return 'b_sale_order_modules';
597 'autocomplete' =>
true,
598 'title' => Loc::getMessage(
'ORDER_MODULES_ENTITY_ID_FIELD')
602 'title' => Loc::getMessage(
'ORDER_MODULES_ENTITY_ORDER_DISCOUNT_ID_FIELD')
606 'validation' =>
array(__CLASS__,
'validateModuleId'),
607 'title' => Loc::getMessage(
'ORDER_MODULES_ENTITY_MODULE_ID_FIELD')
632 $discountId = (int)$discountId;
633 if ($discountId <= 0)
635 if (!is_array($moduleList))
636 $moduleList =
array($moduleList);
641 $helper = $conn->getSqlHelper();
642 $query =
'delete from '.$helper->quote(self::getTableName()).
' where '.$helper->quote(
'ORDER_DISCOUNT_ID').
' = '.$discountId;
643 $conn->queryExecute(
$query);
644 foreach ($moduleList as &$module)
646 $module = (string)$module;
650 'ORDER_DISCOUNT_ID' => $discountId,
651 'MODULE_ID' => $module
662 $conn->queryExecute(
$query);
664 unset(
$query, $helper, $conn);
682 $helper = $conn->getSqlHelper();
683 $discountRows = array_chunk(
$discount, 500);
684 $query =
'delete from '.$helper->quote(self::getTableName()).
' where '.$helper->quote(
'ORDER_DISCOUNT_ID');
685 foreach ($discountRows as &$row)
687 $conn->queryExecute(
$query.
' in ('.implode(
', ', $row).
')');
689 unset($row,
$query, $discountRows, $helper, $conn);
728 return 'b_sale_order_discount_data';
741 'autocomplete' =>
true,
742 'title' => Loc::getMessage(
'ORDER_DISCOUNT_DATA_ENTITY_ID_FIELD')
746 'title' => Loc::getMessage(
'ORDER_DISCOUNT_DATA_ENTITY_ORDER_ID_FIELD')
751 self::ENTITY_TYPE_BASKET_ITEM,
752 self::ENTITY_TYPE_DELIVERY,
753 self::ENTITY_TYPE_SHIPMENT,
754 self::ENTITY_TYPE_DISCOUNT,
755 self::ENTITY_TYPE_ORDER,
756 self::ENTITY_TYPE_ROUND,
757 self::ENTITY_TYPE_DISCOUNT_STORED_DATA
759 'title' => Loc::getMessage(
'ORDER_DISCOUNT_DATA_ENTITY_ENTITY_TYPE_FIELD')
763 'title' => Loc::getMessage(
'ORDER_DISCOUNT_DATA_ENTITY_ENTITY_ID_FIELD')
766 'validation' =>
array(__CLASS__,
'validateEntityValue'),
767 'title' => Loc::getMessage(
'ORDER_DISCOUNT_DATA_ENTITY_ENTITY_VALUE_FIELD')
771 'serialized' =>
true,
772 'title' => Loc::getMessage(
'ORDER_DISCOUNT_DATA_ENTITY_ENTITY_DATA_FIELD')
800 $basket = (int)$basket;
803 $clear = ($clear ===
true);
806 'ENTITY_DATA' =>
$data
808 $dataIterator = self::getList(
array(
809 'select' =>
array(
'ID',
'ENTITY_DATA'),
810 'filter' =>
array(
'=ORDER_ID' =>
$order,
'=ENTITY_TYPE' => self::ENTITY_TYPE_BASKET_ITEM,
'=ENTITY_ID' => $basket)
812 if ($oldData = $dataIterator->fetch())
814 if (!$clear && !empty($oldData[
'ENTITY_DATA']))
815 $fields[
'ENTITY_DATA'] = array_merge($oldData[
'ENTITY_DATA'],
$fields[
'ENTITY_DATA']);
816 $id = (int)$oldData[
'ID'];
818 unset($oldData, $dataIterator);
826 $fields[
'ENTITY_TYPE'] = self::ENTITY_TYPE_BASKET_ITEM;
827 $fields[
'ENTITY_ID'] = $basket;
828 $fields[
'ENTITY_VALUE'] = $basket;
845 $basket = (int)$basket;
850 $helper = $conn->getSqlHelper();
852 'delete from '.$helper->quote(self::getTableName()).
853 ' where '.$helper->quote(
'ENTITY_TYPE').
' = '.self::ENTITY_TYPE_BASKET_ITEM.
854 ' and '.$helper->quote(
'ENTITY_ID').
' = '.$basket
856 unset($helper, $conn);
873 $helper = $conn->getSqlHelper();
874 $conn->queryExecute(
'delete from '.$helper->quote(self::getTableName()).
' where '.$helper->quote(
'ORDER_ID').
' = '.
$order);
875 unset($helper, $conn);
888 if (!is_array($discountList))
889 $discountList =
array($discountList);
890 if (empty($discountList))
893 if (empty($discountList))
897 $helper = $conn->getSqlHelper();
899 'delete from '.$helper->quote(self::getTableName()).
900 ' where '.$helper->quote(
'ENTITY_TYPE').
' = '.self::ENTITY_TYPE_DISCOUNT.
901 ' and '.$helper->quote(
'ENTITY_ID').
' in ('.implode(
',', $discountList).
')'
903 unset($helper, $conn);
943 return 'b_sale_order_rules';
956 'autocomplete' =>
true,
957 'title' => Loc::getMessage(
'ORDER_RULES_ENTITY_ID_FIELD')
961 'validation' =>
array(__CLASS__,
'validateModuleId'),
962 'title' => Loc::getMessage(
'ORDER_RULES_ENTITY_MODULE_ID_FIELD')
966 'title' => Loc::getMessage(
'ORDER_RULES_ENTITY_ORDER_DISCOUNT_ID_FIELD')
970 'title' => Loc::getMessage(
'ORDER_RULES_ENTITY_ORDER_ID_FIELD')
974 'values' =>
array(self::ENTITY_TYPE_BASKET_ITEM, self::ENTITY_TYPE_DELIVERY),
975 'title' => Loc::getMessage(
'ORDER_RULES_ENTITY_ENTITY_TYPE_FIELD')
979 'title' => Loc::getMessage(
'ORDER_RULES_ENTITY_ENTITY_ID_FIELD')
982 'validation' =>
array(__CLASS__,
'validateEntityValue'),
983 'title' => Loc::getMessage(
'ORDER_RULES_ENTITY_ENTITY_VALUE_FIELD')
987 'title' => Loc::getMessage(
'ORDER_RULES_ENTITY_COUPON_ID_FIELD')
990 'values' =>
array(
'N',
'Y'),
991 'title' => Loc::getMessage(
'ORDER_RULES_ENTITY_APPLY_FIELD')
994 'serialized' =>
true,
999 'ORDER_DISCOUNT' =>
new Main\
Entity\ReferenceField(
1001 'Bitrix\Sale\Internals\OrderDiscount',
1002 array(
'=this.ORDER_DISCOUNT_ID' =>
'ref.ID'),
1003 array(
'join_type' =>
'INNER')
1007 'Bitrix\Sale\Internals\OrderRulesDescr',
1008 array(
'=this.ID' =>
'ref.RULE_ID'),
1009 array(
'join_type' =>
'LEFT')
1045 $basket = (int)$basket;
1049 self::clear(
array(
'=ENTITY_TYPE' => self::ENTITY_TYPE_BASKET_ITEM,
'=ENTITY_ID' => $basket,
'=ORDER_ID' => 0));
1060 if (empty($basketList) || !is_array($basketList))
1063 if (empty($basketList))
1066 self::clear(
array(
'=MODULE_ID' =>
'sale',
'=ENTITY_TYPE' => self::ENTITY_TYPE_BASKET_ITEM,
'@ENTITY_ID' => $basketList,
'=ORDER_ID' => 0));
1093 if (empty($orderDiscountList) || empty($ruleList))
1096 $discountIterator = self::getList(
array(
1098 'filter' =>
array(
'!@ID' => $ruleList,
'@ORDER_DISCOUNT_ID' => $orderDiscountList),
1099 'group' =>
array(
'DISCOUNT_ID')
1101 while (
$discount = $discountIterator->fetch())
1107 unset($orderDiscountList[
$discount[
'ORDER_DISCOUNT_ID']]);
1122 if (empty($orderCouponList) || empty($ruleList))
1127 'filter' =>
array(
'!@ID' => $ruleList,
'@COUPON_ID' => $orderCouponList),
1128 'group' =>
array(
'COUPON_ID')
1132 $coupon[
'CNT'] = (int)$coupon[
'CNT'];
1133 if ($coupon[
'CNT'] > 0)
1135 $coupon[
'COUPON_ID'] = (int)$coupon[
'COUPON_ID'];
1136 unset($orderCouponList[$coupon[
'COUPON_ID']]);
1153 $ruleList =
array();
1154 $orderDiscountList =
array();
1155 $orderCouponList =
array();
1156 $ruleIterator = self::getList(
array(
1157 'select' =>
array(
'ID',
'ORDER_DISCOUNT_ID',
'COUPON_ID'),
1160 while ($rule = $ruleIterator->fetch())
1162 $rule[
'ID'] = (int)$rule[
'ID'];
1163 $rule[
'ORDER_DISCOUNT_ID'] = (int)$rule[
'ORDER_DISCOUNT_ID'];
1164 $rule[
'COUPON_ID'] = (int)$rule[
'COUPON_ID'];
1165 $ruleList[] = $rule[
'ID'];
1167 unset($rule, $ruleIterator);
1168 if (empty($ruleList))
1172 $helper = $conn->getSqlHelper();
1173 $ruleRows = array_chunk($ruleList, 500);
1174 $mainQuery =
'delete from '.$helper->quote(self::getTableName()).
' where '.$helper->quote(
'ID');
1176 foreach ($ruleRows as &$row)
1178 $conn->queryExecute($mainQuery.
' in ('.implode(
', ', $row).
')');
1179 $conn->queryExecute($descrQuery.
' in ('.implode(
', ', $row).
')');
1181 unset($row, $descrQuery, $mainQuery, $ruleRows, $ruleList);
1182 unset($helper, $conn);
1184 if (!empty($orderDiscountList))
1186 unset($orderDiscountList);
1187 if (!empty($orderCouponList))
1189 unset($orderCouponList);
1231 return 'b_sale_order_rules_descr';
1244 'autocomplete' =>
true,
1245 'title' => Loc::getMessage(
'ORDER_RULES_DESCR_ENTITY_ID_FIELD')
1249 'validation' =>
array(__CLASS__,
'validateModuleId'),
1250 'title' => Loc::getMessage(
'ORDER_RULES_DESCR_ENTITY_MODULE_ID_FIELD')
1254 'title' => Loc::getMessage(
'ORDER_RULES_DESCR_ENTITY_ORDER_DISCOUNT_ID_FIELD')
1258 'title' => Loc::getMessage(
'ORDER_RULES_DESCR_ENTITY_ORDER_ID_FIELD')
1262 'title' => Loc::getMessage(
'ORDER_RULES_DESCR_ENTITY_RULE_ID_FIELD')
1266 'serialized' =>
true,
1267 'title' => Loc::getMessage(
'ORDER_RULES_DESCR_ENTITY_DESCR_FIELD')
static getConnection($name="")
static normalizeArrayValuesByInt(&$map, $sorted=true)
static isValidCouponType($couponType)
static clearByOrder($order)
static applyOrder($coupons, $order)
static clearList($coupon)
static checkType($value, $primary, array $row, Main\Entity\Field $field)
static clearByOrder($order)
const ENTITY_TYPE_BASKET_ITEM
static clearByDiscount($discountList)
const ENTITY_TYPE_SHIPMENT
const ENTITY_TYPE_DISCOUNT_STORED_DATA
static clearByBasketItem($basket)
static saveBasketItemData($order, $basket, $data, $clear=false)
const ENTITY_TYPE_DISCOUNT
static validateEntityValue()
const ENTITY_TYPE_DELIVERY
static prepareDiscountData($discount)
static getDiscountByHash($hash)
static clearList($discount)
static validateDiscountHash()
static getDiscountModules($discount)
static getEmptyFields($discount)
static calculateRuleHash($discount)
static validateModuleId()
static calculateHash($discount)
static saveOrderDiscountModules($discountId, $moduleList)
static validateModuleId()
static clearByDiscount($discount)
static validateModuleId()
static checkUseOrderDiscounts(&$orderDiscountList, &$ruleList)
static clearByOrder($order)
const ENTITY_TYPE_BASKET_ITEM
static checkUseOrderCoupons(&$orderCouponList, &$ruleList)
static clearByBasketItem($basket)
static validateEntityValue()
static clearBasketSaleDiscount($basketList)
const ENTITY_TYPE_DELIVERY
static validateModuleId()
if($usePageNavigation) $couponIterator
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(!empty($sellerData)) $dest