9if (!Loader::includeModule(
'catalog'))
12Loc::loadMessages(__FILE__);
19 (!isset($row[
'IN_SET']) || $row[
'IN_SET'] !=
'Y') &&
22 (!isset($row[
'SET_PARENT_ID']) || (
int)$row[
'SET_PARENT_ID'] <= 0)
30 if (!empty($arOrder[
'BASKET_ITEMS']) && is_array($arOrder[
'BASKET_ITEMS']))
32 reset($arOrder[
'BASKET_ITEMS']);
33 $arRes = (is_callable($func) ? array_filter($arOrder[
'BASKET_ITEMS'], $func) : $arOrder[
'BASKET_ITEMS']);
36 $arClear = array_filter(
$arRes,
'\CSaleBasketFilter::ClearBasket');
39 foreach ($arClear as $arRow)
40 $dblSumm += (float)$arRow[
'PRICE']*(
float)$arRow[
'QUANTITY'];
53 if (!empty(
$order[
'BASKET_ITEMS']) && is_array(
$order[
'BASKET_ITEMS']))
55 reset(
$order[
'BASKET_ITEMS']);
56 $basket = (is_callable($func) ? array_filter(
$order[
'BASKET_ITEMS'], $func) :
$order[
'BASKET_ITEMS']);
59 $clearBasket = array_filter($basket,
'\CSaleBasketFilter::ClearBasket');
60 if (!empty($clearBasket))
62 foreach ($clearBasket as $row)
63 $summ += (float)$row[
'BASE_PRICE']*(
float)$row[
'QUANTITY'];
76 if (!empty($arOrder[
'BASKET_ITEMS']) && is_array($arOrder[
'BASKET_ITEMS']))
78 reset($arOrder[
'BASKET_ITEMS']);
79 $arRes = (is_callable($func) ? array_filter($arOrder[
'BASKET_ITEMS'], $func) : $arOrder[
'BASKET_ITEMS']);
82 $arClear = array_filter(
$arRes,
'\CSaleBasketFilter::ClearBasket');
85 foreach ($arClear as $arRow)
87 $dblQuantity += (float)$arRow[
'QUANTITY'];
101 if (!empty($arOrder[
'BASKET_ITEMS']) && is_array($arOrder[
'BASKET_ITEMS']))
103 reset($arOrder[
'BASKET_ITEMS']);
104 $arRes = (is_callable($func) ? array_filter($arOrder[
'BASKET_ITEMS'], $func) : $arOrder[
'BASKET_ITEMS']);
107 $arClear = array_filter(
$arRes,
'\CSaleBasketFilter::ClearBasket');
108 $intCount =
count($arClear);
119 if (!empty($arOrder[
'BASKET_ITEMS']) && is_array($arOrder[
'BASKET_ITEMS']))
121 reset($arOrder[
'BASKET_ITEMS']);
122 $arRes = (is_callable($func) ? array_filter($arOrder[
'BASKET_ITEMS'], $func) : $arOrder[
'BASKET_ITEMS']);
125 $arClear = array_filter(
$arRes,
'\CSaleBasketFilter::ClearBasket');
126 if (!empty($arClear))
138 if (empty($basketItem[
'PROPERTIES']))
142 if (isset($parameters[
'ENTITY_ID']))
143 $entity = $parameters[
'ENTITY_ID'];
147 foreach ($basketItem[
'PROPERTIES'] as $row)
149 if ($row[
$entity] != $parameters[
'ENTITY_VALUE'])
152 switch ($parameters[
'LOGIC'])
155 if ($row[
'VALUE'] === $parameters[
'VALUE'])
159 if ($row[
'VALUE'] !== $parameters[
'VALUE'])
163 if (mb_strpos($row[
'VALUE'], $parameters[
'VALUE']) !==
false)
167 if (mb_strpos($row[
'VALUE'], $parameters[
'VALUE']) ===
false)
197 return array(static::GetControlID());
208 'CondCumulativeGroup',
210 'CondBsktAmtBaseGroup',
211 'CondBsktProductGroup',
218 $className = get_called_class();
219 $controls = static::GetControlID();
220 if (empty($controls) || !is_array($controls))
224 foreach ($controls as $controlId)
229 'GetControlShow' =>
array($className,
'GetControlShow'),
230 'GetConditionShow' =>
array($className,
'GetConditionShow'),
231 'IsGroup' =>
array($className,
'IsGroup'),
232 'Parse' =>
array($className,
'Parse'),
233 'Generate' =>
array($className,
'Generate'),
234 'ApplyValues' =>
array($className,
'ApplyValues'),
235 'InitParams' =>
array($className,
'InitParams'),
238 if ($controlId !==
'CondBsktSubGroup' && $controlId !==
'CondBsktProductGroup')
240 $row[
'EXECUTE_MODULE'] =
'sale';
242 if ($controlId ===
'CondCumulativeGroup')
244 $row[
'FORCED_SHOW_LIST'] =
array(
'Period',
'PeriodRelative');
249 unset($row, $controlId, $sort, $controls, $className);
257 $controls = static::GetControls();
258 if (empty($controls) || !is_array($controls))
260 foreach ($controls as &$oneControl)
263 'controlId' => $oneControl[
'ID'],
265 'label' => $oneControl[
'LABEL'],
266 'showIn' => $oneControl[
'SHOW_IN'],
267 'visual' => $oneControl[
'VISUAL'],
270 if (isset($oneControl[
'PREFIX']))
271 $row[
'control'][] = $oneControl[
'PREFIX'];
272 switch ($oneControl[
'ID'])
274 case 'CondBsktCntGroup':
275 case 'CondBsktAmtGroup':
276 case 'CondBsktAmtBaseGroup':
277 case 'CondBsktRowGroup':
278 $row[
'control'][] = $oneControl[
'ATOMS'][
'All'];
279 $row[
'control'][] = $oneControl[
'ATOMS'][
'Logic'];
280 $row[
'control'][] = $oneControl[
'ATOMS'][
'Value'];
282 case 'CondBsktProductGroup':
283 $row[
'control'][] = $oneControl[
'ATOMS'][
'Found'];
284 $row[
'control'][] =
Loc::getMessage(
'BT_SALE_COND_GROUP_PRODUCT_DESCR');
285 $row[
'control'][] = $oneControl[
'ATOMS'][
'All'];
288 $oneControl[
'ATOMS'] = array_values($oneControl[
'ATOMS']);
289 $row[
'control'] = (empty($row[
'control']) ? $oneControl[
'ATOMS'] : array_merge($row[
'control'], $oneControl[
'ATOMS']));
292 if ($oneControl[
'ID'] ==
'CondBsktAmtGroup' || $oneControl[
'ID'] ==
'CondBsktAmtBaseGroup' || $oneControl[
'ID'] ==
'CondCumulativeGroup')
294 if (static::$boolInit)
297 if (isset(static::$arInitParams[
'CURRENCY']))
298 $currency = static::$arInitParams[
'CURRENCY'];
299 elseif (isset(static::$arInitParams[
'SITE_ID']))
303 if ($oneControl[
'ID'] ==
'CondCumulativeGroup')
305 $row[
'containsOneAction'] =
true;
312 if (!empty($row[
'control']))
325 $arControl = static::GetControls(
$arParams[
'ID']);
326 if ($arControl ===
false)
328 $arControl[
'ATOMS'] = static::GetAtomsEx($arControl[
'ID'],
true);
333 public static function Parse($arOneCondition)
335 if (!isset($arOneCondition[
'controlId']))
337 $arControl = static::GetControls($arOneCondition[
'controlId']);
338 if ($arControl ===
false)
340 $arControl[
'ATOMS'] = static::GetAtomsEx($arControl[
'ID'],
true);
342 return static::CheckAtoms($arOneCondition, $arOneCondition, $arControl,
false);
349 if (is_string($arControl))
350 $arControl = static::GetControls($arControl);
352 $boolError = !is_array($arControl);
354 if (!isset($arSubs) || !is_array($arSubs))
360 $arControl[
'ATOMS'] = static::GetAtomsEx($arControl[
'ID'],
true);
368 switch($arControl[
'ID'])
370 case 'CondBsktCntGroup':
371 $mxResult = self::__GetCntGroupCond($arOneCondition,
$arValues[
'values'],
$arParams, $arControl, $arSubs);
373 case 'CondBsktAmtGroup':
374 $mxResult = self::__GetAmtGroupCond($arOneCondition,
$arValues[
'values'],
$arParams, $arControl, $arSubs);
376 case 'CondBsktAmtBaseGroup':
377 $mxResult = self::__GetAmtBaseGroupCond($arOneCondition,
$arValues[
'values'],
$arParams, $arControl, $arSubs);
379 case 'CondBsktProductGroup':
380 $mxResult = self::__GetProductGroupCond($arOneCondition,
$arValues[
'values'],
$arParams, $arControl, $arSubs);
382 case 'CondBsktRowGroup':
383 $mxResult = self::__GetRowGroupCond($arOneCondition,
$arValues[
'values'],
$arParams, $arControl, $arSubs);
385 case 'CondBsktSubGroup':
386 $mxResult = self::__GetSubGroupCond($arOneCondition,
$arValues[
'values'],
$arParams, $arControl, $arSubs);
388 case 'CondCumulativeGroup':
389 $mxResult = self::getCodeForCumulativeGroupCondition($arOneCondition,
$arValues[
'values'],
$arParams, $arControl, $arSubs);
394 return (!$boolError ? $mxResult :
false);
397 public static function GetAtomsEx($strControlID =
false, $boolEx =
false)
399 $boolEx = ($boolEx ===
true);
400 $arAmtLabels =
array(
410 'CondBsktCntGroup' =>
array(
412 'JS' => static::GetLogicAtom(
426 'FIELD_TYPE' =>
'string',
427 'FIELD_LENGTH' => 255,
440 'FIELD_TYPE' =>
'double',
448 'name' =>
'aggregator',
454 'defaultText' =>
Loc::getMessage(
'BT_SALE_COND_GROUP_BASKET_NUMBER_GROUP_SELECT_DEF'),
455 'defaultValue' =>
'AND',
456 'first_option' =>
'...'
460 'FIELD_TYPE' =>
'string',
461 'FIELD_LENGTH' => 255,
467 'CondCumulativeGroup' =>
array(
469 'JS' => static::GetLogicAtom(
483 'FIELD_TYPE' =>
'string',
484 'FIELD_LENGTH' => 255,
497 'FIELD_TYPE' =>
'double',
503 'CondBsktAmtGroup' =>
array(
505 'JS' => static::GetLogicAtom(
507 array_keys($arAmtLabels), $arAmtLabels
512 'FIELD_TYPE' =>
'string',
513 'FIELD_LENGTH' => 255,
526 'FIELD_TYPE' =>
'double',
534 'name' =>
'aggregator',
540 'defaultText' =>
Loc::getMessage(
'BT_SALE_COND_BASKET_AMOUNT_GROUP_SELECT_DEF'),
541 'defaultValue' =>
'AND',
542 'first_option' =>
'...'
546 'FIELD_TYPE' =>
'string',
547 'FIELD_LENGTH' => 255,
553 'CondBsktAmtBaseGroup' =>
array(
555 'JS' => static::GetLogicAtom(
557 array_keys($arAmtLabels), $arAmtLabels
562 'FIELD_TYPE' =>
'string',
563 'FIELD_LENGTH' => 255,
576 'FIELD_TYPE' =>
'double',
584 'name' =>
'aggregator',
590 'defaultText' =>
Loc::getMessage(
'BT_SALE_COND_BASKET_AMOUNT_GROUP_SELECT_DEF'),
591 'defaultValue' =>
'AND',
592 'first_option' =>
'...'
596 'FIELD_TYPE' =>
'string',
597 'FIELD_LENGTH' => 255,
603 'CondBsktProductGroup' =>
array(
611 'NoFound' =>
Loc::getMessage(
'BT_SALE_COND_PRODUCT_GROUP_SELECT_NO_FOUND')
613 'defaultText' =>
Loc::getMessage(
'BT_SALE_COND_PRODUCT_GROUP_SELECT_DEF'),
614 'defaultValue' =>
'Found',
615 'first_option' =>
'...'
619 'FIELD_TYPE' =>
'string',
620 'FIELD_LENGTH' => 255,
628 'name' =>
'aggregator',
634 'defaultText' =>
Loc::getMessage(
'BT_SALE_COND_PRODUCT_GROUP_SELECT_DEF'),
635 'defaultValue' =>
'AND',
636 'first_option' =>
'...'
640 'FIELD_TYPE' =>
'string',
641 'FIELD_LENGTH' => 255,
647 'CondBsktRowGroup' =>
array(
649 'JS' => static::GetLogicAtom(
663 'FIELD_TYPE' =>
'string',
664 'FIELD_LENGTH' => 255,
677 'FIELD_TYPE' =>
'int',
685 'name' =>
'aggregator',
691 'defaultText' =>
Loc::getMessage(
'BT_SALE_COND_GROUP_BASKET_ROW_GROUP_SELECT_DEF'),
692 'defaultValue' =>
'AND',
693 'first_option' =>
'...'
697 'FIELD_TYPE' =>
'string',
698 'FIELD_LENGTH' => 255,
704 'CondBsktSubGroup' =>
array(
708 'name' =>
'aggregator',
715 'defaultValue' =>
'AND',
716 'first_option' =>
'...'
720 'FIELD_TYPE' =>
'string',
721 'FIELD_LENGTH' => 255,
736 'defaultValue' =>
'True',
737 'first_option' =>
'...'
741 'FIELD_TYPE' =>
'string',
742 'FIELD_LENGTH' => 255,
752 foreach ($arAtomList as &$arOneControl)
754 foreach ($arOneControl as &$arOneAtom)
755 $arOneAtom = $arOneAtom[
'JS'];
758 unset($arOneControl);
761 if ($strControlID ===
false)
763 elseif (isset($arAtomList[$strControlID]))
764 return $arAtomList[$strControlID];
775 $arAtoms = static::GetAtomsEx();
776 $arControlList =
array(
777 'CondCumulativeGroup' =>
array(
778 'ID' =>
'CondCumulativeGroup',
781 'SHOW_IN' =>
array(parent::GetControlID()),
782 'VISUAL' => self::__GetVisual(),
783 'ATOMS' => $arAtoms[
'CondCumulativeGroup']
785 'CondBsktCntGroup' =>
array(
786 'ID' =>
'CondBsktCntGroup',
788 'PREFIX' =>
Loc::getMessage(
'BT_SALE_COND_GROUP_BASKET_NUMBER_PREFIX'),
789 'SHOW_IN' =>
array(parent::GetControlID()),
790 'VISUAL' => self::__GetVisual(),
791 'ATOMS' => $arAtoms[
'CondBsktCntGroup']
793 'CondBsktAmtGroup' =>
array(
794 'ID' =>
'CondBsktAmtGroup',
796 'PREFIX' =>
Loc::getMessage(
'BT_SALE_COND_GROUP_BASKET_AMOUNT_PREFIX'),
797 'SHOW_IN' =>
array(parent::GetControlID()),
798 'VISUAL' => self::__GetVisual(),
799 'ATOMS' => $arAtoms[
'CondBsktAmtGroup']
801 'CondBsktAmtBaseGroup' =>
array(
802 'ID' =>
'CondBsktAmtBaseGroup',
803 'LABEL' =>
Loc::getMessage(
'BT_SALE_COND_GROUP_BASKET_AMOUNT_BASE_LABEL'),
804 'PREFIX' =>
Loc::getMessage(
'BT_SALE_COND_GROUP_BASKET_AMOUNT_BASE_PREFIX'),
805 'SHOW_IN' =>
array(parent::GetControlID()),
806 'VISUAL' => self::__GetVisual(),
807 'ATOMS' => $arAtoms[
'CondBsktAmtBaseGroup']
809 'CondBsktProductGroup' =>
array(
810 'ID' =>
'CondBsktProductGroup',
813 'SHOW_IN' =>
array(parent::GetControlID()),
814 'VISUAL' => self::__GetVisual(),
815 'ATOMS' => $arAtoms[
'CondBsktProductGroup']
817 'CondBsktRowGroup' =>
array(
818 'ID' =>
'CondBsktRowGroup',
821 'SHOW_IN' =>
array(parent::GetControlID()),
822 'VISUAL' => self::__GetVisual(),
823 'ATOMS' => $arAtoms[
'CondBsktRowGroup']
825 'CondBsktSubGroup' =>
array(
826 'ID' =>
'CondBsktSubGroup',
828 'SHOW_IN' => array_diff(self::GetControlID(),
array(
'CondCumulativeGroup')),
829 'VISUAL' => self::__GetVisual(
true),
830 'ATOMS' => $arAtoms[
'CondBsktSubGroup']
834 foreach ($arControlList as &
$control)
843 return static::searchControl($arControlList, $strControlID);
846 private static function __GetVisual($boolExt =
false)
848 $boolExt = ($boolExt ===
true);
876 'style' =>
'condition-logic-and',
877 'message' => Loc::getMessage(
'BT_SALE_COND_GROUP_LOGIC_AND')
880 'style' =>
'condition-logic-and',
881 'message' => Loc::getMessage(
'BT_SALE_COND_GROUP_LOGIC_NOT_AND')
884 'style' =>
'condition-logic-or',
885 'message' => Loc::getMessage(
'BT_SALE_COND_GROUP_LOGIC_OR')
888 'style' =>
'condition-logic-or',
889 'message' => Loc::getMessage(
'BT_SALE_COND_GROUP_LOGIC_NOT_OR')
910 'style' =>
'condition-logic-and',
911 'message' => Loc::getMessage(
'BT_SALE_COND_GROUP_LOGIC_AND')
914 'style' =>
'condition-logic-or',
915 'message' => Loc::getMessage(
'BT_SALE_COND_GROUP_LOGIC_OR')
923 private static function getCodeForCumulativeGroupCondition($oneCondition, $values,
$params,
$control, $subs)
925 $dataSumConfiguration =
'array()';
926 if ($subs && $subs[0])
928 $dataSumConfiguration = $subs[0];
931 $logic = static::SearchLogic(
945 if (!isset($logic[
'OP'][
'N']) || empty($logic[
'OP'][
'N']))
952 array(
'#FIELD#',
'#VALUE#'),
953 array(
"\CSaleCondCumulativeCtrl::getCumulativeValue({$params['ORDER']}, {$dataSumConfiguration}) ", $values[
'Value']),
958 private static function __GetSubGroupCond($arOneCondition,
$arValues,
$arParams, $arControl, $arSubs)
972 if (
'AND' == $arOneCondition[
'All'])
975 $strItemPrefix = (
'True' == $arOneCondition[
'True'] ?
'' :
'!');
979 if (
'True' == $arOneCondition[
'True'])
991 $strEval = $strItemPrefix.implode($strLogic.$strItemPrefix, $arSubs);
992 if (
'' != $strPrefix)
993 $strEval = $strPrefix.
'('.$strEval.
')';
994 $mxResult = $strEval;
1000 private static function __GetRowGroupCond($arOneCondition,
$arValues,
$arParams, $arControl, $arSubs)
1006 $arLogic = static::SearchLogic(
1020 if (!isset($arLogic[
'OP'][
'N']) || empty($arLogic[
'OP'][
'N']))
1026 if (!empty($arSubs))
1028 $strFuncName =
'$salecond'.$arParams[
'FUNC_ID'];
1030 $strLogic = (
'AND' ==
$arValues[
'All'] ?
'&&' :
'||');
1032 $strFunc = $strFuncName.
'=function($row){';
1033 $strFunc .=
'return ('.implode(
') '.$strLogic.
' (', $arSubs).
');';
1036 $strCond = str_replace(
1037 array(
'#FIELD#',
'#VALUE#'),
1044 $strCond = str_replace(
1045 array(
'#FIELD#',
'#VALUE#'),
1054 if (!empty($strFunc))
1072 private static function __GetProductGroupCond($arOneCondition,
$arValues,
$arParams, $arControl, $arSubs)
1076 if (!empty($arSubs))
1078 $strFuncName =
'$salecond'.$arParams[
'FUNC_ID'];
1080 $strLogic = (
'AND' ==
$arValues[
'All'] ?
'&&' :
'||');
1082 $strFunc = $strFuncName.
'=function($row){';
1083 $strFunc .=
'return ('.implode(
') '.$strLogic.
' (', $arSubs).
');';
1086 $strCond = (
'Found' ==
$arValues[
'Found'] ?
'' :
'!').
'CSaleBasketFilter::ProductFilter('.
$arParams[
'ORDER'].
', '.$strFuncName.
')';
1090 $strCond = (
'Found' ==
$arValues[
'Found'] ?
'' :
'!').
'CSaleBasketFilter::ProductFilter('.
$arParams[
'ORDER'].
', "")';
1093 if (!empty($strFunc))
1106 private static function __GetAmtGroupCond($arOneCondition,
$arValues,
$arParams, $arControl, $arSubs)
1113 $arLogic = static::SearchLogic(
1127 if (!isset($arLogic[
'OP'][
'N']) || empty($arLogic[
'OP'][
'N']))
1133 if (!empty($arSubs))
1135 $strFuncName =
'$salecond'.$arParams[
'FUNC_ID'];
1137 $strLogic = (
'AND' ==
$arValues[
'All'] ?
'&&' :
'||');
1139 $strFunc = $strFuncName.
'=function($row){';
1140 $strFunc .=
'return ('.implode(
') '.$strLogic.
' (', $arSubs).
');';
1143 $strCond = str_replace(
1144 array(
'#FIELD#',
'#VALUE#'),
1145 array(
'CSaleBasketFilter::AmountFilter('.
$arParams[
'ORDER'].
', '.$strFuncName.
')',
1152 $strCond = str_replace(
1153 array(
'#FIELD#',
'#VALUE#'),
1154 array(
'CSaleBasketFilter::AmountFilter('.
$arParams[
'ORDER'].
', "")',
1163 if (!empty($strFunc))
1181 private static function __GetAmtBaseGroupCond($arOneCondition,
$arValues,
$arParams, $arControl, $arSubs)
1188 $arLogic = static::SearchLogic(
1202 if (!isset($arLogic[
'OP'][
'N']) || empty($arLogic[
'OP'][
'N']))
1208 if (!empty($arSubs))
1210 $strFuncName =
'$salecond'.$arParams[
'FUNC_ID'];
1212 $strLogic = (
'AND' ==
$arValues[
'All'] ?
'&&' :
'||');
1214 $strFunc = $strFuncName.
'=function($row){';
1215 $strFunc .=
'return ('.implode(
') '.$strLogic.
' (', $arSubs).
');';
1218 $strCond = str_replace(
1219 array(
'#FIELD#',
'#VALUE#'),
1220 array(
'CSaleBasketFilter::AmountBaseFilter('.
$arParams[
'ORDER'].
', '.$strFuncName.
')',
1227 $strCond = str_replace(
1228 array(
'#FIELD#',
'#VALUE#'),
1229 array(
'CSaleBasketFilter::AmountBaseFilter('.
$arParams[
'ORDER'].
', "")',
1238 if (!empty($strFunc))
1256 private static function __GetCntGroupCond($arOneCondition,
$arValues,
$arParams, $arControl, $arSubs)
1263 $arLogic = static::SearchLogic(
1277 if (!isset($arLogic[
'OP'][
'N']) || empty($arLogic[
'OP'][
'N']))
1283 if (!empty($arSubs))
1285 $strFuncName =
'$salecond'.$arParams[
'FUNC_ID'];
1287 $strLogic = (
'AND' ==
$arValues[
'All'] ?
'&&' :
'||');
1289 $strFunc = $strFuncName.
'=function($row){';
1290 $strFunc .=
'return ('.implode(
') '.$strLogic.
' (', $arSubs).
');';
1293 $strCond = str_replace(
1294 array(
'#FIELD#',
'#VALUE#'),
1295 array(
'CSaleBasketFilter::CountFilter('.
$arParams[
'ORDER'].
', '.$strFuncName.
')',
1302 $strCond = str_replace(
1303 array(
'#FIELD#',
'#VALUE#'),
1304 array(
'CSaleBasketFilter::CountFilter('.
$arParams[
'ORDER'].
', "")',
1313 if (!empty($strFunc))
1345 $arControls = static::GetControls();
1347 'controlgroup' =>
true,
1349 'label' =>
Loc::getMessage(
'BT_MOD_SALE_COND_GROUP_BASKET_FIELDS_LABEL'),
1350 'showIn' => static::GetShowIn(
$arParams[
'SHOW_IN_GROUPS']),
1351 'children' =>
array()
1353 foreach ($arControls as $arOneControl)
1356 'controlId' => $arOneControl[
'ID'],
1357 'group' => (
'Y' == $arOneControl[
'GROUP']),
1358 'label' => $arOneControl[
'LABEL'],
1359 'showIn' => static::GetShowIn(
$arParams[
'SHOW_IN_GROUPS']),
1366 $arOne[
'control'] =
array();
1367 if (isset($arOneControl[
'PREFIX']))
1368 $arOne[
'control'][] =
array(
1371 'text' => $arOneControl[
'PREFIX']
1373 foreach ($arOneControl[
'ATOMS'] as $atom)
1374 $arOne[
'control'][] = $atom;
1379 $arOne[
'control'] =
array(
1383 'text' => $arOneControl[
'PREFIX']
1385 static::GetLogicAtom($arOneControl[
'LOGIC']),
1386 static::GetValueAtom($arOneControl[
'JS_VALUE'])
1388 if ($arOneControl[
'ID'] ==
'CondBsktFldPrice' || $arOneControl[
'ID'] ==
'CondBsktFldSumm')
1390 $boolCurrency =
false;
1391 if (static::$boolInit)
1393 if (isset(static::$arInitParams[
'CURRENCY']))
1395 $arOne[
'control'][] = static::$arInitParams[
'CURRENCY'];
1396 $boolCurrency =
true;
1398 elseif (isset(static::$arInitParams[
'SITE_ID']))
1401 if (!empty($strCurrency))
1403 $arOne[
'control'][] = $strCurrency;
1404 $boolCurrency =
true;
1411 elseif ($arOneControl[
'ID'] ==
'CondBsktFldWeight' || $arOneControl[
'ID'] == self::ENTITY_BASKET_POSITION_WEIGHT)
1413 $arOne[
'control'][] =
Loc::getMessage(
'BT_MOD_SALE_COND_MESS_WEIGHT_UNIT');
1419 unset($arOneControl);
1429 return \CSaleCondCtrlBasketProperties::GetConditionShow(
$arParams);
1431 return \CSaleCondCtrlBasketItemConditions::GetConditionShow(
$arParams);
1432 return parent::GetConditionShow(
$arParams);
1435 public static function Parse($arOneCondition)
1437 if (!isset($arOneCondition[
'controlId']))
1440 return \CSaleCondCtrlBasketProperties::Parse($arOneCondition);
1442 return \CSaleCondCtrlBasketItemConditions::Parse($arOneCondition);
1443 return parent::Parse($arOneCondition);
1450 if (is_string($arControl))
1451 $arControl = static::GetControls($arControl);
1452 $boolError = !is_array($arControl);
1457 return \CSaleCondCtrlBasketProperties::Generate($arOneCondition,
$arParams, $arControl, $arSubs);
1459 return \CSaleCondCtrlBasketItemConditions::Generate($arOneCondition,
$arParams, $arControl, $arSubs);
1465 $arValues = static::Check($arOneCondition, $arOneCondition, $arControl,
false);
1471 $arLogic = static::SearchLogic(
$arValues[
'logic'], $arControl[
'LOGIC']);
1472 if (!isset($arLogic[
'OP'][$arControl[
'MULTIPLE']]) || empty($arLogic[
'OP'][$arControl[
'MULTIPLE']]))
1478 $multyField = is_array($arControl[
'FIELD']);
1481 $fieldsList =
array();
1482 foreach ($arControl[
'FIELD'] as &$oneField)
1484 $fieldsList[] =
$arParams[
'BASKET_ROW'].
'[\''.$oneField.
'\']
';
1487 $issetField = implode(') && isset (
', $fieldsList);
1488 $valueField = implode('*
',$fieldsList);
1493 $issetField = $arParams['BASKET_ROW
'].'[\
''.$arControl[
'FIELD'].
'\']
';
1494 $valueField = $issetField;
1496 switch ($arControl['FIELD_TYPE
'])
1500 $strResult = str_replace(array('#FIELD#
', '#VALUE#
'), array($valueField, $arValues['value
']), $arLogic['OP
'][$arControl['MULTIPLE
']]);
1505 $strResult = str_replace(array('#FIELD#
', '#VALUE#
'), array($valueField, '"'.EscapePHPString($arValues['value']).'"'), $arLogic['OP
'][$arControl['MULTIPLE
']]);
1509 $strResult = str_replace(array('#FIELD#
', '#VALUE#
'), array($valueField, $arValues['value
']), $arLogic['OP
'][$arControl['MULTIPLE
']]);
1512 $strResult = 'isset(
'.$issetField.') &&
'.$strResult;
1516 return (!$boolError ? $strResult : false);
1523 public static function GetControls($strControlID = false)
1525 $arControlList = array(
1526 'CondBsktFldProduct
' => array(
1527 'ID
' => 'CondBsktFldProduct
',
1528 'FIELD
' => 'PRODUCT_ID
',
1529 'FIELD_TYPE
' => 'int',
1530 'LABEL
' => Loc::getMessage('BT_MOD_SALE_COND_BASKET_PRODUCT_ID_LABEL
'),
1531 'PREFIX
' => Loc::getMessage('BT_MOD_SALE_COND_BASKET_PRODUCT_ID_PREFIX
'),
1532 'LOGIC
' => static::GetLogic(array(BT_COND_LOGIC_EQ, BT_COND_LOGIC_NOT_EQ)),
1533 'JS_VALUE
' => array(
1535 'popup_url
' => '/bitrix/tools/sale/product_search_dialog.php
',
1536 'popup_params
' => array(
1537 'lang' => LANGUAGE_ID,
1538 'caller
' => 'discount_rules
'
1543 'PHP_VALUE
' => array(
1544 'VALIDATE
' => 'element
'
1547 'CondBsktFldName
' => array(
1548 'ID
' => 'CondBsktFldName
',
1550 'FIELD_TYPE
' => 'string',
1551 'FIELD_LENGTH
' => 255,
1552 'LABEL
' => Loc::getMessage('BT_MOD_SALE_COND_BASKET_PRODUCT_NAME_LABEL
'),
1553 'PREFIX
' => Loc::getMessage('BT_MOD_SALE_COND_BASKET_PRODUCT_NAME_PREFIX
'),
1554 'LOGIC
' => static::GetLogic(array(BT_COND_LOGIC_EQ, BT_COND_LOGIC_NOT_EQ, BT_COND_LOGIC_CONT, BT_COND_LOGIC_NOT_CONT)),
1555 'JS_VALUE
' => array(
1560 'CondBsktFldSumm
' => array(
1561 'ID
' => 'CondBsktFldSumm
',
1566 'FIELD_TYPE
' => 'double',
1567 'LABEL
' => Loc::getMessage('BT_MOD_SALE_COND_BASKET_ROW_SUMM_LABEL
'),
1568 'PREFIX
' => Loc::getMessage('BT_MOD_SALE_COND_BASKET_ROW_SUMM_EXT_PREFIX
'),
1569 'LOGIC
' => static::GetLogic(
1572 BT_COND_LOGIC_NOT_EQ,
1579 'JS_VALUE
' => array(
1583 'CondBsktFldPrice
' => array(
1584 'ID
' => 'CondBsktFldPrice
',
1586 'FIELD_TYPE
' => 'double',
1587 'LABEL
' => Loc::getMessage('BT_MOD_SALE_COND_BASKET_ROW_PRICE_LABEL
'),
1588 'PREFIX
' => Loc::getMessage('BT_MOD_SALE_COND_BASKET_ROW_PRICE_EXT_PREFIX
'),
1589 'LOGIC
' => static::GetLogic(
1592 BT_COND_LOGIC_NOT_EQ,
1599 'JS_VALUE
' => array(
1603 'CondBsktFldQuantity
' => array(
1604 'ID
' => 'CondBsktFldQuantity
',
1605 'FIELD
' => 'QUANTITY
',
1606 'FIELD_TYPE
' => 'double',
1607 'LABEL
' => Loc::getMessage('BT_MOD_SALE_COND_BASKET_ROW_QUANTITY_LABEL
'),
1608 'PREFIX
' => Loc::getMessage('BT_MOD_SALE_COND_BASKET_ROW_QUANTITY_EXT_PREFIX
'),
1609 'LOGIC
' => static::GetLogic(
1612 BT_COND_LOGIC_NOT_EQ,
1619 'JS_VALUE
' => array(
1623 self::ENTITY_BASKET_POSITION_WEIGHT => array(
1624 'ID
' => self::ENTITY_BASKET_POSITION_WEIGHT,
1629 'FIELD_TYPE
' => 'double',
1630 'LABEL
' => Loc::getMessage('BT_SALE_COND_BASKET_POSITION_WEIGHT_LABEL
'),
1631 'PREFIX
' => Loc::getMessage('BT_SALE_COND_BASKET_POSITION_WEIGHT_PREFIX
'),
1632 'LOGIC
' => static::GetLogic(
1635 BT_COND_LOGIC_NOT_EQ,
1642 'JS_VALUE
' => array(
1646 'CondBsktFldWeight
' => array(
1647 'ID
' => 'CondBsktFldWeight
',
1648 'FIELD
' => 'WEIGHT
',
1649 'FIELD_TYPE
' => 'double',
1650 'LABEL
' => Loc::getMessage('BT_MOD_SALE_COND_BASKET_ROW_WEIGHT_LABEL
'),
1651 'PREFIX
' => Loc::getMessage('BT_MOD_SALE_COND_BASKET_ROW_WEIGHT_EXT_PREFIX
'),
1652 'LOGIC
' => static::GetLogic(
1655 BT_COND_LOGIC_NOT_EQ,
1662 'JS_VALUE
' => array(
1668 $additionalControls = \CSaleCondCtrlBasketItemConditions::GetControls(false);
1669 foreach ($additionalControls as $id => $data)
1670 $arControlList[$id] = $data;
1671 $additionalControls = \CSaleCondCtrlBasketProperties::GetControls(false);
1672 foreach ($additionalControls as $id => $data)
1673 $arControlList[$id] = $data;
1674 unset($id, $data, $additionalControls);
1676 foreach ($arControlList as &$control)
1678 $control['MODULE_ID
'] = 'sale
';
1679 $control['MODULE_ENTITY
'] = 'sale
';
1680 if (!isset($control['ENTITY
']))
1681 $control['ENTITY
'] = 'BASKET
';
1682 $control['MULTIPLE
'] = 'N
';
1683 $control['GROUP
'] = 'N
';
1687 return static::searchControl($arControlList, $strControlID);
1690 public static function GetShowIn($arControls)
1692 $arControls = CSaleCondCtrlBasketGroup::GetControlID();
1693 $index = array_search('CondCumulativeGroup
', $arControls);
1694 if ($index !== false)
1696 unset($arControls[$index]);
1697 $arControls = array_values($arControls);
1705class CSaleCondCtrlBasketItemConditions extends CGlobalCondCtrlAtoms
1707 const ENTITY_BASKET_POSITION_ACTION_APPLIED = 'CondBsktAppliedDiscount
';
1709 public static function GetControlDescr()
1714 public static function GetAtomsEx($controlId = false, $extendedMode = false)
1717 self::ENTITY_BASKET_POSITION_ACTION_APPLIED => [
1724 'Y
' => Loc::getMessage('BT_SALE_COND_BASKET_DISCOUNT_APPLIED_YES
'),
1725 'N
' => Loc::getMessage('BT_SALE_COND_BASKET_DISCOUNT_APPLIED_NO
')
1727 'defaultText
' => '...
',
1728 'defaultValue
' => '',
1729 'first_option
' => '...
'
1733 'FIELD_TYPE
' => 'char',
1734 'FIELD
' => 'ACTION_APPLIED
',
1736 'VALIDATE
' => 'list
'
1742 return static::searchControlAtoms($atomList, $controlId, $extendedMode);
1745 public static function GetControls($controlId = false)
1747 $atoms = static::GetAtomsEx();
1748 $controlList = array(
1749 self::ENTITY_BASKET_POSITION_ACTION_APPLIED => array(
1750 'ID
' => self::ENTITY_BASKET_POSITION_ACTION_APPLIED,
1751 'LABEL
' => Loc::getMessage('BT_SALE_COND_BASKET_DISCOUNT_APPLIED_LABEL
'),
1752 'PREFIX
' => Loc::getMessage('BT_SALE_COND_BASKET_DISCOUNT_APPLIED_PREFIX
'),
1753 'ATOMS
' => $atoms[self::ENTITY_BASKET_POSITION_ACTION_APPLIED],
1754 'FIELD
' => 'ACTION_APPLIED
',
1759 return static::searchControl($controlList, $controlId);
1762 public static function GetShowIn($arControls)
1764 $arControls = \CSaleCondCtrlBasketGroup::GetControlID();
1765 $index = array_search('CondCumulativeGroup
', $arControls);
1766 if ($index !== false)
1768 unset($arControls[$index]);
1769 $arControls = array_values($arControls);
1776 public static function GetConditionShow($params)
1778 // remove excess condition - only for compatibility
1779 if (isset($params['DATA
']['logic
']))
1781 if ($params['DATA
']['logic
'] == 'Not
' && isset($params['DATA
']['value
']))
1783 if ($params['DATA
']['value
'] == 'Y
')
1784 $params['DATA
']['value
'] = 'N
';
1785 elseif ($params['DATA
']['value
'] == 'N
')
1786 $params['DATA
']['value
'] = 'Y
';
1788 unset($params['DATA
']['logic
']);
1790 return parent::GetConditionShow($params);
1793 public static function Parse($condition)
1795 // remove excess condition - only for compatibility
1796 if (isset($condition['logic
']))
1798 if ($condition['logic
'] == 'Not
' && isset($condition['value
']))
1800 if ($condition['value
'] == 'Y
')
1801 $condition['value
'] = 'N
';
1802 elseif ($condition['value
'] == 'N
')
1803 $condition['value
'] = 'Y
';
1805 unset($condition['logic
']);
1807 return parent::Parse($condition);
1810 public static function Generate($condition, $params, $control, $childrens = false)
1814 if (is_string($control))
1815 $control = static::GetControls($control);
1816 $error = !is_array($control);
1821 $control['ATOMS
'] = static::GetAtomsEx($control['ID
'], true);
1822 $values = static::CheckAtoms($condition, $params, $control, false);
1823 $error = ($values === false);
1828 $field = $params['BASKET_ROW
'].'[\
''.$control[
'FIELD'].
'\']
';
1829 $result = 'isset(
'.$field.') &&
'.$field.'==\
''.\CUtil::JSEscape($values[
'value']).
'\'';
1850 public static function GetAtomsEx($controlId =
false, $extendedMode =
false)
1853 $logicList = static::GetLogic(
array(
1856 foreach ($logicList as $row)
1857 $logic[$row[
'ID']] = $row[
'LABEL'];
1858 unset($row, $logicList);
1861 self::ENTITY_BASKET_PROPERTY =>
array(
1868 self::ENTITY_TYPE_CODE =>
Loc::getMessage(
'BT_SALE_COND_BASKET_PROPERTY_ENTITY_TYPE_CODE'),
1869 self::ENTITY_TYPE_NAME =>
Loc::getMessage(
'BT_SALE_COND_BASKET_PROPERTY_ENTITY_TYPE_NAME')
1871 'defaultText' =>
Loc::getMessage(
'BT_SALE_COND_BASKET_PROPERTY_ENTITY_TYPE_SELECT_DEF'),
1872 'defaultValue' => self::ENTITY_TYPE_CODE,
1873 'first_option' =>
'...'
1877 'FIELD_TYPE' =>
'string',
1878 'FIELD_LENGTH' => 255,
1880 'VALIDATE' =>
'list'
1891 'FIELD_TYPE' =>
'string',
1892 'FIELD_LENGTH' => 255,
1903 'defaultText' =>
'',
1908 'FIELD_TYPE' =>
'string',
1909 'FIELD_LENGTH' => 255,
1911 'VALIDATE' =>
'list'
1922 'FIELD_TYPE' =>
'string',
1923 'FIELD_LENGTH' => 255,
1931 return static::searchControlAtoms($atomList, $controlId, $extendedMode);
1936 $atoms = static::GetAtomsEx();
1937 $controlList =
array(
1938 self::ENTITY_BASKET_PROPERTY =>
array(
1939 'ID' => self::ENTITY_BASKET_PROPERTY,
1942 'ATOMS' => $atoms[self::ENTITY_BASKET_PROPERTY],
1943 'MODULE_ID' =>
'sale',
1944 'MODULE_ENTITY' =>
'sale',
1945 'ENTITY' =>
'BASKET_PROPERTY',
1956 return static::searchControl($controlList, $controlId);
1962 $index = array_search(
'CondCumulativeGroup', $arControls);
1963 if ($index !==
false)
1965 unset($arControls[$index]);
1966 $arControls = array_values($arControls);
1986 $error = ($values ===
false);
1992 '\'ENTITY_ID\
' => \''.$values[
'Entity'].
'\',
'.
1993 '\
'ENTITY_VALUE\' => \''.\CUtil::JSEscape($values[
'Name']).
'\',
'.
1994 '\
'LOGIC\' => '.$values[
'Logic'].
', '.
1995 '\'VALUE\
' => \''.\CUtil::JSEscape($values[
'Value']).
'\''.
1997 $result =
'\CSaleBasketFilter::BasketPropertyFilter('.$params[
'BASKET_ROW'].
', '.
$data.
')';
2016 $arControls = static::GetControls();
2018 'controlgroup' =>
true,
2020 'label' =>
Loc::getMessage(
'BT_MOD_SALE_COND_CMP_ORDER_CONTROLGROUP_LABEL'),
2021 'showIn' => static::GetShowIn(
$arParams[
'SHOW_IN_GROUPS']),
2022 'children' =>
array()
2024 foreach ($arControls as &$arOneControl)
2026 if (
'ORDER_PRICE' == $arOneControl[
'FIELD'])
2028 $arJSControl =
array(
2032 'text' => $arOneControl[
'PREFIX']
2034 static::GetLogicAtom($arOneControl[
'LOGIC']),
2035 static::GetValueAtom($arOneControl[
'JS_VALUE'])
2037 if (static::$boolInit)
2039 if (isset(static::$arInitParams[
'CURRENCY']))
2041 $arJSControl[] = static::$arInitParams[
'CURRENCY'];
2043 elseif (isset(static::$arInitParams[
'SITE_ID']))
2046 if (!empty($strCurrency))
2048 $arJSControl[] = $strCurrency;
2053 'controlId' => $arOneControl[
'ID'],
2054 'group' => (
'Y' == $arOneControl[
'GROUP']),
2055 'label' => $arOneControl[
'LABEL'],
2056 'showIn' => static::GetShowIn(
$arParams[
'SHOW_IN_GROUPS']),
2057 'control' => $arJSControl
2063 'controlId' => $arOneControl[
'ID'],
2064 'group' => (
'Y' == $arOneControl[
'GROUP']),
2065 'label' => $arOneControl[
'LABEL'],
2066 'showIn' => static::GetShowIn(
$arParams[
'SHOW_IN_GROUPS']),
2071 'text' => $arOneControl[
'PREFIX']
2073 static::GetLogicAtom($arOneControl[
'LOGIC']),
2074 static::GetValueAtom($arOneControl[
'JS_VALUE'])
2078 if (
'ORDER_WEIGHT' == $arOneControl[
'FIELD'])
2080 $arOne[
'control'][] =
Loc::getMessage(
'BT_MOD_SALE_COND_MESS_WEIGHT_UNIT');
2084 if (isset($arOneControl))
2085 unset($arOneControl);
2090 public static function Parse($arOneCondition)
2092 if (!isset($arOneCondition[
'controlId']))
2094 $arControl = static::GetControls($arOneCondition[
'controlId']);
2095 if (
false === $arControl)
2097 return static::Check($arOneCondition, $arOneCondition, $arControl,
false);
2104 if (is_string($arControl))
2106 $arControl = static::GetControls($arControl);
2108 $boolError = !is_array($arControl);
2113 $arValues = static::Check($arOneCondition, $arOneCondition, $arControl,
false);
2119 $arLogic = static::SearchLogic(
$arValues[
'logic'], $arControl[
'LOGIC']);
2120 if (!isset($arLogic[
'OP'][$arControl[
'MULTIPLE']]) || empty($arLogic[
'OP'][$arControl[
'MULTIPLE']]))
2126 $strJoinOperator =
'';
2128 if (isset($arControl[
'JS_VALUE'][
'multiple']) &&
'Y' == $arControl[
'JS_VALUE'][
'multiple'])
2131 $strJoinOperator = (isset($arLogic[
'MULTI_SEP']) ? $arLogic[
'MULTI_SEP'] :
' && ');
2133 $strField =
$arParams[
'ORDER'].
'[\''.$arControl[
'FIELD'].
'\']
';
2134 switch ($arControl['FIELD_TYPE
'])
2140 $strResult = str_replace(array('#FIELD#
', '#VALUE#
'), array($strField, $arValues['value
']), $arLogic['OP
'][$arControl['MULTIPLE
']]);
2144 $arResult = array();
2145 foreach ($arValues['value
'] as &$mxValue)
2147 $arResult[] = str_replace(array('#FIELD#
', '#VALUE#
'), array($strField, $mxValue), $arLogic['OP
'][$arControl['MULTIPLE
']]);
2149 if (isset($mxValue))
2151 $strResult = '((
'.implode(')
'.$strJoinOperator.'(
', $arResult).'))
';
2159 $strResult = str_replace(array('#FIELD#
', '#VALUE#
'), array($strField, '"'.EscapePHPString($arValues['value']).'"'), $arLogic['OP
'][$arControl['MULTIPLE
']]);
2163 $arResult = array();
2164 foreach ($arValues['value
'] as &$mxValue)
2166 $arResult[] = str_replace(array('#FIELD#
', '#VALUE#
'), array($strField, '"'.EscapePHPString($mxValue).'"'), $arLogic['OP
'][$arControl['MULTIPLE
']]);
2168 if (isset($mxValue))
2170 $strResult = '((
'.implode(')
'.$strJoinOperator.'(
', $arResult).'))
';
2177 $strResult = str_replace(array('#FIELD#
', '#VALUE#
'), array($strField, $arValues['value
']), $arLogic['OP
'][$arControl['MULTIPLE
']]);
2181 $arResult = array();
2182 foreach ($arValues['value
'] as &$mxValue)
2184 $arResult[] = str_replace(array('#FIELD#
', '#VALUE#
'), array($strField, $mxValue), $arLogic['OP
'][$arControl['MULTIPLE
']]);
2186 if (isset($mxValue))
2188 $strResult = '((
'.implode(')
'.$strJoinOperator.'(
', $arResult).'))
';
2192 $strResult = 'isset(
'.$strField.') &&
'.$strResult;
2196 return (!$boolError ? $strResult : false);
2203 public static function GetControls($strControlID = false)
2205 $arSalePersonTypes = array();
2206 $arFilter = array();
2207 if (static::$boolInit)
2209 if (isset(static::$arInitParams['
SITE_ID']))
2210 $arFilter['LID
'] = static::$arInitParams['SITE_ID'];
2212 $rsPersonTypes = CSalePersonType::GetList(
2213 array('SORT
' => 'ASC
', 'NAME
' => 'ASC
'),
2217 array('ID
', 'NAME
', 'LIDS
', 'SORT
')
2219 while ($arPersonType = $rsPersonTypes->Fetch())
2221 $id = (int)$arPersonType['ID
'];
2222 $arSalePersonTypes[$id] = $arPersonType['NAME
'].' (
'.implode(' ', $arPersonType['LIDS
']).')
';
2225 unset($arPersonType, $rsPersonTypes);
2228 $salePaySystemList = [];
2230 '!=ID
' => Sale\PaySystem\Manager::getInnerPaySystemId(),
2232 $iterator = Sale\PaySystem\Manager::getList([
2233 'select' => ['ID
', 'NAME
', 'SORT
'],
2234 'filter
' => $filter,
2235 'order
' => ['SORT
' => 'ASC
', 'NAME
' => 'ASC
']
2237 while ($row = $iterator->fetch())
2239 $salePaySystemList[$row['ID
']] = $row['NAME
'];
2241 unset($row, $iterator);
2243 $linearDeliveryList = array();
2244 $deliveryList = array();
2245 $groupIds = array();
2246 $iterator = Sale\Delivery\Services\Table::getList(array(
2247 'select' => array('ID
', 'CLASS_NAME
'),
2250 while ($row = $iterator->fetch())
2251 $groupIds[] = (int)$row['ID
'];
2252 unset($row, $iterator);
2254 $deliveryIterator = Sale\Delivery\Services\Table::getList(array(
2255 'select' => array('ID
', 'CODE
', 'NAME
', 'PARENT_ID
', 'SORT
', 'CLASS_NAME
'),
2256 'order
' => array('ID
' => 'ASC
')
2258 while ($delivery = $deliveryIterator->fetch())
2262 $deliveryId = (int)$delivery['ID
'];
2263 $parentId = (int)$delivery['PARENT_ID
'];
2264 if ($parentId > 0 && !in_array($parentId, $groupIds))
2266 if (isset($deliveryList[$parentId]))
2268 $deliveryList[$parentId]['PROFILES
'][$deliveryId] = array(
2269 'ID
' => $deliveryId,
2270 'TITLE
' => $delivery['NAME
'],
2271 'SORT
' => (int)$delivery['SORT
']
2277 $deliveryList[$deliveryId] = array(
2278 'ID
' => $deliveryId,
2279 'TITLE
' => $delivery['NAME
'],
2280 'SORT
' => (int)$delivery['SORT
'],
2281 'PROFILES
' => array()
2284 unset($parentId, $deliveryId);
2286 unset($delivery, $deliveryIterator);
2288 if (!empty($deliveryList))
2290 Main\Type\Collection::sortByColumn($deliveryList, array('SORT
' => SORT_ASC, 'TITLE
' => SORT_ASC, 'ID
' => SORT_ASC));
2291 foreach ($deliveryList as $delivery)
2293 if (empty($delivery['PROFILES
']))
2295 $linearDeliveryList[$delivery['ID
']] = $delivery['TITLE
'];
2299 $profileList = $delivery['PROFILES
'];
2300 Main\Type\Collection::sortByColumn($profileList, array('SORT
' => SORT_ASC, 'TITLE
' => SORT_ASC, 'ID
' => SORT_ASC));
2301 foreach ($profileList as $profile)
2302 $linearDeliveryList[$profile['ID
']] = $delivery['TITLE
'].':
'.$profile['TITLE
'];
2303 unset($profile, $profileList);
2308 unset($deliveryList);
2311 BT_COND_LOGIC_EQ => Loc::getMessage('BT_SALE_AMOUNT_LOGIC_EQ_LABEL
'),
2312 BT_COND_LOGIC_NOT_EQ => Loc::getMessage('BT_SALE_AMOUNT_LOGIC_NOT_EQ_LABEL
'),
2313 BT_COND_LOGIC_GR => Loc::getMessage('BT_SALE_AMOUNT_LOGIC_GR_LABEL
'),
2314 BT_COND_LOGIC_LS => Loc::getMessage('BT_SALE_AMOUNT_LOGIC_LS_LABEL
'),
2315 BT_COND_LOGIC_EGR => Loc::getMessage('BT_SALE_AMOUNT_LOGIC_EGR_LABEL
'),
2316 BT_COND_LOGIC_ELS => Loc::getMessage('BT_SALE_AMOUNT_LOGIC_ELS_LABEL
')
2318 $arLabelsWeight = array(
2319 BT_COND_LOGIC_EQ => Loc::getMessage('BT_SALE_WEIGHT_LOGIC_EQ_LABEL
'),
2320 BT_COND_LOGIC_NOT_EQ => Loc::getMessage('BT_SALE_WEIGHT_LOGIC_NOT_EQ_LABEL
'),
2321 BT_COND_LOGIC_GR => Loc::getMessage('BT_SALE_WEIGHT_LOGIC_GR_LABEL
'),
2322 BT_COND_LOGIC_LS => Loc::getMessage('BT_SALE_WEIGHT_LOGIC_LS_LABEL
'),
2323 BT_COND_LOGIC_EGR => Loc::getMessage('BT_SALE_WEIGHT_LOGIC_EGR_LABEL
'),
2324 BT_COND_LOGIC_ELS => Loc::getMessage('BT_SALE_WEIGHT_LOGIC_ELS_LABEL
')
2327 $arControlList = array(
2328 'CondSaleOrderSumm
' => array(
2329 'ID
' => 'CondSaleOrderSumm
',
2330 'FIELD
' => 'ORDER_PRICE
',
2331 'FIELD_TYPE
' => 'double
',
2332 'LABEL
' => Loc::getMessage('BT_MOD_SALE_COND_CMP_SALE_ORDER_SUMM_LABEL_EXT
'),
2333 'PREFIX
' => Loc::getMessage('BT_MOD_SALE_COND_CMP_SALE_ORDER_SUMM_PREFIX_EXT
'),
2334 'LOGIC
' => static::GetLogicEx(array_keys($arLabels), $arLabels),
2335 'JS_VALUE
' => array(
2339 'CondSalePersonType
' => array(
2340 'ID
' => 'CondSalePersonType
',
2341 'FIELD
' => 'PERSON_TYPE_ID
',
2342 'FIELD_TYPE
' => 'int
',
2343 'LABEL
' => Loc::getMessage('BT_MOD_SALE_COND_CMP_SALE_PERSON_TYPE_LABEL
'),
2344 'PREFIX
' => Loc::getMessage('BT_MOD_SALE_COND_CMP_SALE_PERSON_TYPE_PREFIX
'),
2345 'LOGIC
' => static::GetLogic(array(BT_COND_LOGIC_EQ, BT_COND_LOGIC_NOT_EQ)),
2346 'JS_VALUE
' => array(
2349 'values
' => $arSalePersonTypes,
2350 'size' => self::getSelectSize($arSalePersonTypes),
2353 'PHP_VALUE
' => array(
2354 'VALIDATE
' => 'list
'
2357 'CondSalePaySystem
' => array(
2358 'ID
' => 'CondSalePaySystem
',
2359 'FIELD
' => 'PAY_SYSTEM_ID
',
2360 'FIELD_TYPE
' => 'int
',
2361 'LABEL
' => Loc::getMessage('BT_MOD_SALE_COND_CMP_SALE_PAY_SYSTEM_LABEL
'),
2362 'PREFIX
' => Loc::getMessage('BT_MOD_SALE_COND_CMP_SALE_PAY_SYSTEM_PREFIX
'),
2363 'LOGIC
' => static::GetLogic(array(BT_COND_LOGIC_EQ, BT_COND_LOGIC_NOT_EQ)),
2364 'JS_VALUE
' => array(
2367 'values
' => $salePaySystemList,
2368 'size' => self::getSelectSize($salePaySystemList),
2371 'PHP_VALUE
' => array(
2372 'VALIDATE
' => 'list
'
2375 'CondSaleDelivery
' => array(
2376 'ID
' => 'CondSaleDelivery
',
2377 'FIELD
' => 'DELIVERY_ID
',
2378 'FIELD_TYPE
' => 'string
',
2379 'FIELD_LENGTH
' => 50,
2380 'LABEL
' => Loc::getMessage('BT_MOD_SALE_COND_CMP_SALE_DELIVERY_LABEL
'),
2381 'PREFIX
' => Loc::getMessage('BT_MOD_SALE_COND_CMP_SALE_DELIVERY_PREFIX
'),
2382 'LOGIC
' => static::GetLogic(array(BT_COND_LOGIC_EQ, BT_COND_LOGIC_NOT_EQ)),
2383 'JS_VALUE
' => array(
2386 'values
' => $linearDeliveryList,
2387 'size' => self::getSelectSize($linearDeliveryList),
2390 'PHP_VALUE
' => array(
2391 'VALIDATE
' => 'list
'
2394 'CondSaleOrderWeight
' => array(
2395 'ID
' => 'CondSaleOrderWeight
',
2396 'FIELD
' => 'ORDER_WEIGHT
',
2397 'FIELD_TYPE
' => 'double
',
2398 'LABEL
' => Loc::getMessage('BT_MOD_SALE_COND_SALE_ORDER_WEIGHT_LABEL
'),
2399 'PREFIX
' => Loc::getMessage('BT_MOD_SALE_COND_SALE_ORDER_WEIGHT_PREFIX
'),
2400 'LOGIC
' => static::GetLogicEx(array_keys($arLabelsWeight), $arLabelsWeight),
2401 'JS_VALUE
' => array(
2406 foreach ($arControlList as &$control)
2408 $control['EXECUTE_MODULE
'] = 'sale
';
2409 $control['MODULE_ID
'] = 'sale
';
2410 $control['MODULE_ENTITY
'] = 'sale
';
2411 $control['ENTITY
'] = 'ORDER
';
2412 $control['MULTIPLE
'] = 'N
';
2413 $control['GROUP
'] = 'N
';
2417 return static::searchControl($arControlList, $strControlID);
2420 public static function GetShowIn($arControls)
2422 $arControls = array(CSaleCondCtrlGroup::GetControlID());
2426 public static function GetJSControl($arControl, $arParams = array())
2431 private static function getSelectSize(array $rows): int
2434 $rowCount = count($rows);
2439 elseif ($rowCount > 3)
2441 $result = $rowCount;
2447class CSaleCondCtrlPastOrder extends CSaleCondCtrlOrderFields
2449 public static function GetControlDescr()
2451 $description = parent::GetControlDescr();
2452 $description['SORT
'] = 330;
2453 return $description;
2456 public static function onBuildDiscountConditionInterfaceControls()
2458 return new EventResult(
2459 EventResult::SUCCESS,
2460 static::getControlDescr(),
2465 public static function checkPastOrder($currentOrder, $callable)
2467 if(!is_callable($callable))
2472 if(empty($currentOrder['USER_ID
']))
2477 $orderUserId = (int)$currentOrder['USER_ID
'];
2478 $pastOrder = static::getPastOrder($orderUserId);
2485 if (!$pastOrder->isPaid())
2490 return call_user_func_array($callable, array(static::convertToArray($pastOrder)));
2493 private static function convertToArray(Sale\Order $order)
2496 'ID
' => $order->getId(),
2497 'USER_ID
' => $order->getUserId(),
2498 'SITE_ID' => $order->getSiteId(),
2499 'LID
' => $order->getSiteId(), // compatibility only
2500 'ORDER_PRICE
' => $order->getPrice(),
2501 'ORDER_WEIGHT
' => $order->getBasket()->getWeight(),
2502 'CURRENCY
' => $order->getCurrency(),
2503 'PERSON_TYPE_ID
' => $order->getPersonTypeId(),
2504 'RECURRING_ID
' => $order->getField('RECURRING_ID
'),
2505 'BASKET_ITEMS
' => array(),
2506 'PRICE_DELIVERY
' => 0,
2507 'PRICE_DELIVERY_DIFF
' => 0,
2508 'CUSTOM_PRICE_DELIVERY
' => 'N
',
2509 'SHIPMENT_CODE
' => 0,
2511 'ORDER_PROP
' => array(),
2512 'DELIVERY_ID
' => array(),
2513 'PAY_SYSTEM_ID
' => array(),
2517 foreach ($order->getShipmentCollection() as $shipment)
2519 if (!$shipment->isShipped())
2524 $orderData['DELIVERY_ID
'][] = (int)$shipment->getDeliveryId();
2528 foreach ($order->getPaymentCollection() as $payment)
2530 if ($payment->isInner())
2535 $orderData['PAY_SYSTEM_ID
'][] = (int)$payment->getPaymentSystemId();
2541 private static function getPastOrder($userId)
2543 $registry = \Bitrix\Sale\Registry::getInstance(\Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER);
2546 $orderClass = $registry->getOrderClassName();
2548 $orderData = $orderClass::getList(
2553 '=USER_ID
' => $userId
2555 'order
' => array('ID
' => 'DESC
'),
2561 if (empty($orderData['ID
']))
2566 return $orderClass::load($orderData['ID
']);
2569 public static function Generate($arOneCondition, $arParams, $arControl, $arSubs = false)
2571 $code = parent::Generate($arOneCondition, $arParams, $arControl, $arSubs);
2573 return static::GetClassName() . "::checkPastOrder({$arParams['ORDER
']}, function({$arParams['ORDER
']}){
2578 public static function GetControlShow($arParams)
2580 $controlShow = parent::GetControlShow($arParams);
2581 $controlShow['label
'] = Loc::getMessage('BT_SALE_COND_GROUP_PAST_ORDER_NAME
');
2583 return $controlShow;
2586 public static function GetControls($strControlID = false)
2588 $controls = array();
2589 foreach (parent::GetControls() as $control)
2591 $control['ID
'] = 'Past
' . $control['ID
'];
2592 $control['PREFIX
'] = $control['PREFIX
'] . Loc::getMessage("BT_SALE_COND_GROUP_PAST_ORDER_NAME_SUFFIX");
2594 if (in_array($control['FIELD
'], array('PAY_SYSTEM_ID
', 'DELIVERY_ID
')))
2596 $control['MULTIPLE
'] = 'Y
';
2599 $controls[$control['ID
']] = $control;
2602 return static::searchControl($controls, $strControlID);
2606class CSaleCondCtrlCommon extends CSaleCondCtrlComplex
2608 public static function GetControlDescr()
2610 $description = parent::GetControlDescr();
2611 $description['EXECUTE_MODULE
'] = 'sale
';
2612 $description['SORT
'] = 2000;
2613 return $description;
2616 public static function GetControlShow($arParams)
2618 $arControls = static::GetControls();
2620 'controlgroup
' => true,
2622 'label
' => Loc::getMessage('BT_MOD_SALE_COND_CMP_COMMON_CONTROLGROUP_LABEL
'),
2623 'showIn
' => static::GetShowIn($arParams['SHOW_IN_GROUPS
']),
2624 'children
' => array()
2626 foreach ($arControls as &$arOneControl)
2628 $arResult['children
'][] = array(
2629 'controlId
' => $arOneControl['ID
'],
2631 'label
' => $arOneControl['LABEL
'],
2632 'showIn
' => static::GetShowIn($arParams['SHOW_IN_GROUPS
']),
2634 $arOneControl['PREFIX
'],
2635 static::GetLogicAtom($arOneControl['LOGIC
']),
2636 static::GetValueAtom($arOneControl['JS_VALUE
'])
2640 if (isset($arOneControl))
2641 unset($arOneControl);
2646 public static function Generate($arOneCondition, $arParams, $arControl, $arSubs = false)
2650 if (is_string($arControl))
2652 $arControl = static::GetControls($arControl);
2654 $boolError = !is_array($arControl);
2656 $arValues = array();
2659 $arValues = static::Check($arOneCondition, $arOneCondition, $arControl, false);
2660 $boolError = ($arValues === false);
2665 $arLogic = static::SearchLogic($arValues['logic
'], $arControl['LOGIC
']);
2666 if (!isset($arLogic['OP
'][$arControl['MULTIPLE
']]) || empty($arLogic['OP
'][$arControl['MULTIPLE
']]))
2673 if (isset($arControl['JS_VALUE
']['multiple
']) && 'Y
' == $arControl['JS_VALUE
']['multiple
'])
2677 $intDayOfWeek = "(int)date('N
')";
2680 $strResult = str_replace(array('#FIELD#
', '#VALUE#
'), array($intDayOfWeek, $arValues['value
']), $arLogic['OP
'][$arControl['MULTIPLE
']]);
2684 $arResult = array();
2685 foreach ($arValues['value
'] as &$mxValue)
2687 $arResult[] = str_replace(array('#FIELD#
', '#VALUE#
'), array($intDayOfWeek, $mxValue), $arLogic['OP
'][$arControl['MULTIPLE
']]);
2689 if (isset($mxValue))
2691 $strResult = '((
'.implode(') || (
', $arResult).'))
';
2696 return (!$boolError ? $strResult : false);
2703 public static function GetControls($strControlID = false)
2705 $arDayOfWeek = array(
2706 1 => Loc::getMessage('BT_MOD_SALE_COND_DAY_OF_WEEK_1
'),
2707 2 => Loc::getMessage('BT_MOD_SALE_COND_DAY_OF_WEEK_2
'),
2708 3 => Loc::getMessage('BT_MOD_SALE_COND_DAY_OF_WEEK_3
'),
2709 4 => Loc::getMessage('BT_MOD_SALE_COND_DAY_OF_WEEK_4
'),
2710 5 => Loc::getMessage('BT_MOD_SALE_COND_DAY_OF_WEEK_5
'),
2711 6 => Loc::getMessage('BT_MOD_SALE_COND_DAY_OF_WEEK_6
'),
2712 7 => Loc::getMessage('BT_MOD_SALE_COND_DAY_OF_WEEK_7
')
2714 $arControlList = array(
2715 'CondSaleCmnDayOfWeek
' => array(
2716 'ID
' => 'CondSaleCmnDayOfWeek
',
2717 'EXECUTE_MODULE
' => 'sale
',
2718 'MODULE_ID
' => false,
2719 'MODULE_ENTITY
' => 'datetime
',
2720 'FIELD
' => 'DAY_OF_WEEK
',
2721 'FIELD_TYPE
' => 'int
',
2724 'LABEL
' => Loc::getMessage('BT_MOD_SALE_COND_CMP_CMN_DAYOFWEEK_LABEL
'),
2725 'PREFIX
' => Loc::getMessage('BT_MOD_SALE_COND_CMP_CMN_DAYOFWEEK_PREFIX
'),
2726 'LOGIC
' => static::GetLogic(array(BT_COND_LOGIC_EQ, BT_COND_LOGIC_NOT_EQ)),
2727 'JS_VALUE
' => array(
2730 'values
' => $arDayOfWeek
2732 'PHP_VALUE
' => array(
2733 'VALIDATE
' => 'list
'
2738 return static::searchControl($arControlList, $strControlID);
2741 public static function GetShowIn($arControls)
2743 $arControls = array(CSaleCondCtrlGroup::GetControlID());
2748class CSaleCondTree extends CGlobalCondTree
2750 protected $arExecuteFunc = array();
2751 protected $executeModule = array();
2753 public function __construct()
2755 parent::__construct();
2758 public function __destruct()
2760 parent::__destruct();
2763 public function Generate($arConditions, $arParams)
2766 $this->arExecuteFunc = array();
2767 $this->usedModules = array();
2768 $this->usedExtFiles = array();
2769 $this->usedEntity = array();
2770 $this->executeModule = array();
2772 if (!$this->boolError)
2775 if (!empty($arConditions) && is_array($arConditions))
2777 $arParams['FUNC_ID
'] = '';
2778 $arResult = $this->GenerateLevel($arConditions, $arParams, true);
2779 if (empty($arResult))
2782 $this->boolError = true;
2786 $strResult = current($arResult);
2791 $this->boolError = true;
2793 if (!$this->boolError)
2795 $strFinal = 'function(
'.$arParams['ORDER
'].'){
';
2796 if (!empty($this->arExecuteFunc))
2798 $strFinal .= implode(';
', $this->arExecuteFunc).';
';
2800 $strFinal .= 'return '.$strResult.'; };
';
2801 $strFinal = preg_replace("#;{2,}#",";", $strFinal);
2811 public function GenerateLevel(&$arLevel, $arParams, $boolFirst = false)
2813 $arResult = array();
2814 $boolFirst = ($boolFirst === true);
2815 if (empty($arLevel) || !is_array($arLevel))
2819 if (!isset($arParams['FUNC_ID
']))
2821 $arParams['FUNC_ID
'] = '';
2826 $arParams['ROW_NUM
'] = $intRowNum;
2827 if (!empty($arLevel['CLASS_ID
']))
2829 $defaultBlock = $this->GetDefaultConditions();
2830 if ($arLevel['CLASS_ID
'] !== $defaultBlock['CLASS_ID
'])
2834 if (isset($this->arControlList[$arLevel['CLASS_ID
']]))
2836 $arOneControl = $this->arControlList[$arLevel['CLASS_ID
']];
2837 if ($arOneControl['GROUP
'] == 'Y
')
2839 $arSubParams = $arParams;
2840 $arSubParams['FUNC_ID
'] .= '_
'.$intRowNum;
2841 $arSubEval = $this->GenerateLevel($arLevel['CHILDREN
'], $arSubParams);
2842 if (false === $arSubEval || !is_array($arSubEval))
2844 $arGroupParams = $arParams;
2845 $arGroupParams['FUNC_ID
'] .= '_
'.$intRowNum;
2846 $mxEval = call_user_func_array($arOneControl['Generate'],
2847 array($arLevel['DATA
'], $arGroupParams, $arLevel['CLASS_ID
'], $arSubEval)
2849 if (is_array($mxEval))
2851 if (isset($mxEval['FUNC
']))
2853 $this->arExecuteFunc[] = $mxEval['FUNC
'];
2855 $strEval = (isset($mxEval['COND
']) ? $mxEval['COND
'] : false);
2864 $strEval = call_user_func_array($arOneControl['Generate'],
2865 array($arLevel['DATA
'], $arParams, $arLevel['CLASS_ID
'])
2868 if ($strEval === false || !is_string($strEval) || $strEval === 'false')
2872 $arResult[] = '(
'.$strEval.')
';
2873 $this->fillUsedData($arOneControl);
2879 foreach ($arLevel as $arOneCondition)
2881 $arParams['ROW_NUM
'] = $intRowNum;
2882 if (!empty($arOneCondition['CLASS_ID
']))
2884 if (isset($this->arControlList[$arOneCondition['CLASS_ID
']]))
2886 $arOneControl = $this->arControlList[$arOneCondition['CLASS_ID
']];
2887 if ($arOneControl['GROUP
'] == 'Y
')
2889 $arSubParams = $arParams;
2890 $arSubParams['FUNC_ID
'] .= '_
'.$intRowNum;
2891 $arSubEval = $this->GenerateLevel($arOneCondition['CHILDREN
'], $arSubParams);
2892 if ($arSubEval === false || !is_array($arSubEval))
2894 $arGroupParams = $arParams;
2895 $arGroupParams['FUNC_ID
'] .= '_
'.$intRowNum;
2896 $mxEval = call_user_func_array($arOneControl['Generate'],
2897 array($arOneCondition['DATA
'], $arGroupParams, $arOneCondition['CLASS_ID
'], $arSubEval)
2899 if (is_array($mxEval))
2901 if (isset($mxEval['FUNC
']))
2903 $this->arExecuteFunc[] = $mxEval['FUNC
'];
2905 $strEval = (isset($mxEval['COND
']) ? $mxEval['COND
'] : false);
2914 $strEval = call_user_func_array($arOneControl['Generate'],
2915 array($arOneCondition['DATA
'], $arParams, $arOneCondition['CLASS_ID
'])
2918 if ($strEval === false || !is_string($strEval) || $strEval === 'false')
2922 $arResult[] = '(
'.$strEval.')
';
2923 $this->fillUsedData($arOneControl);
2928 unset($arOneCondition);
2931 if (!empty($arResult))
2933 foreach ($arResult as $key => $value)
2935 if ($value == '' || $value == '()
')
2936 unset($arResult[$key]);
2939 if (!empty($arResult))
2940 $arResult = array_values($arResult);
2945 public function GetExecuteModule()
2947 return (!empty($this->executeModule) ? array_keys($this->executeModule) : array());
2950 protected function fillUsedData(&$control)
2952 parent::fillUsedData($control);
2953 if (!empty($control['EXECUTE_MODULE
']))
2954 $this->executeModule[$control['EXECUTE_MODULE
']] = true;
2958class CSaleCondCumulativeCtrl extends \CSaleCondCtrlComplex
2960 const TYPE_ORDER_ARCHIVED = CumulativeCalculator::TYPE_ORDER_ARCHIVED;
2961 const TYPE_ORDER_NON_ARCHIVED = CumulativeCalculator::TYPE_ORDER_NON_ARCHIVED;
2963 public static function onBuildDiscountConditionInterfaceControls()
2965 return new EventResult(
2966 EventResult::SUCCESS,
2967 static::getControlDescr(),
2972 public static function getControlDescr()
2974 $description = parent::getControlDescr();
2975 $description['SORT
'] = 700;
2976 return $description;
2979 public static function getControlShow($params)
2982 'controlgroup
' => true,
2984 'label
' => Loc::getMessage('BT_SALE_COND_GROUP_CUMULATIVE_COND_GROUP_TITLE
'),
2985 'showIn
' => static::getShowIn($params['SHOW_IN_GROUPS
']),
2986 'children
' => array()
2989 foreach (static::getControls() as $control)
2991 $controlShow = array(
2992 'controlId
' => $control['ID
'],
2994 'label
' => $control['LABEL
'],
2995 'showIn
' => static::getShowIn($params['SHOW_IN_GROUPS
']),
2996 'control
' => array()
2999 if ($controlShow['controlId
'] === 'Period
')
3001 $controlShow['control
'] = array(
3003 Loc::getMessage('BT_SALE_COND_GROUP_CUMULATIVE_COND_PERIOD_START
'),
3004 $control['ATOMS
']['ValueStart
'],
3005 Loc::getMessage('BT_SALE_COND_GROUP_CUMULATIVE_COND_PERIOD_END
'),
3006 $control['ATOMS
']['ValueEnd
'],
3010 if ($controlShow['controlId
'] === 'PeriodRelative
')
3012 $controlShow['control
'] = array(
3014 $control['ATOMS
']['Value
'],
3015 $control['ATOMS
']['TypeRelativePeriod
'],
3019 $result['children
'][] = $controlShow;
3025 public static function GetConditionShow($arParams)
3027 if (!isset($arParams['ID
']))
3029 $arControl = static::GetControls($arParams['ID
']);
3030 if ($arControl === false)
3032 $arControl['ATOMS
'] = static::GetAtomsEx($arControl['ID
'], true);
3034 return static::CheckAtoms($arParams['DATA
'], $arParams, $arControl, true);
3037 public static function generate($oneCondition, $params, $control, $subs = false)
3039 if (is_string($control))
3041 $control = static::getControls($control);
3044 if (!is_array($control))
3049 $control['ATOMS
'] = static::GetAtomsEx($control['ID
'], true);
3050 $params['COND_NUM
'] = $params['FUNC_ID
'];
3052 $values = static::CheckAtoms($oneCondition, $params, $control, true);
3053 if ($values === false)
3058 //be careful! this conditions have to work only with CSaleCondCtrlBasketGroup because this class provide filter to
3060 return static::exportConfiguration($values);
3063 private static function exportConfiguration(array $configuration)
3065 unset($configuration['id']);
3067 $controlId = $configuration['controlId
'];
3068 if ($controlId === 'Period
')
3070 if (!empty($configuration['values
']['ValueStart
']))
3072 static::ConvertDateTime2Int(
3073 $configuration['values
']['ValueStart
'],
3075 \CTimeZone::getOffset()
3078 if (!empty($configuration['values
']['ValueEnd
']))
3080 static::ConvertDateTime2Int(
3081 $configuration['values
']['ValueEnd
'],
3083 \CTimeZone::getOffset()
3088 return var_export($configuration, true);
3091 public static function getCumulativeValue($currentOrder, array $dataSumConfiguration = array())
3093 if(empty($currentOrder['USER_ID
']))
3098 $cumulativeCalculator = new CumulativeCalculator((int)$currentOrder['USER_ID
'], $currentOrder['SITE_ID']);
3099 $cumulativeCalculator->setSumConfiguration(
3100 static::convertDataToSumConfiguration($dataSumConfiguration)
3103 return $cumulativeCalculator->calculate();
3106 protected static function convertDataToSumConfiguration(array $dataSumConfiguration)
3108 $sumConfiguration = array(
3109 'type_sum_period
' => CumulativeCalculator::TYPE_COUNT_PERIOD_ALL_TIME,
3112 $controlId = $dataSumConfiguration['controlId
'];
3113 if ($controlId === 'Period
')
3115 $sumConfiguration['type_sum_period
'] = CumulativeCalculator::TYPE_COUNT_PERIOD_INTERVAL;
3116 $sumConfiguration['sum_period_data
'] = array(
3117 'order_start
' => $dataSumConfiguration['values
']['ValueStart
'],
3118 'order_end
' => $dataSumConfiguration['values
']['ValueEnd
'],
3121 elseif ($controlId == 'PeriodRelative
')
3123 $sumConfiguration['type_sum_period
'] = CumulativeCalculator::TYPE_COUNT_PERIOD_RELATIVE;
3124 $sumConfiguration['sum_period_data
'] = array(
3125 'period_value
' => $dataSumConfiguration['values
']['Value
'],
3126 'period_type
' => $dataSumConfiguration['values
']['TypeRelativePeriod
'],
3130 return $sumConfiguration;
3138 public static function getControls($controlId = false)
3140 $atoms = static::GetAtomsEx();
3141 $controlList = array(
3144 'LABEL
' => Loc::getMessage('BT_SALE_COND_GROUP_CUMULATIVE_COND_PERIOD
'),
3145 'PREFIX
' => Loc::getMessage('BT_SALE_COND_GROUP_CUMULATIVE_COND_PERIOD
'),
3146 'ATOMS
' => $atoms['Period
']
3148 'PeriodRelative
' => array(
3149 'ID
' => 'PeriodRelative
',
3150 'LABEL
' => Loc::getMessage('BT_SALE_COND_GROUP_CUMULATIVE_COND_PERIOD_RELATIVE
'),
3151 'PREFIX
' => Loc::getMessage('BT_SALE_COND_GROUP_CUMULATIVE_COND_PERIOD_RELATIVE
'),
3152 'ATOMS
' => $atoms['PeriodRelative
']
3156 if (false === $controlId)
3158 return $controlList;
3160 elseif (isset($controlList[$controlId]))
3162 return $controlList[$controlId];
3170 public static function getShowIn($arControls)
3172 return array('CondCumulativeGroup
');
3175 public static function Parse($arOneCondition)
3177 if (!isset($arOneCondition['controlId
']))
3179 $arControl = static::GetControls($arOneCondition['controlId
']);
3180 if ($arControl === false)
3182 $arControl['ATOMS
'] = static::GetAtomsEx($arControl['ID
'], true);
3184 $checkAtoms = static::CheckAtoms($arOneCondition, $arOneCondition, $arControl, false);
3189 public static function ConvertInt2DateTime(&$value, $format, $offset)
3192 if (is_array($value))
3194 foreach ($value as $i => $piece)
3196 if (static::ConvertInt2DateTime($piece, $format, $offset))
3200 $value[$i] = $piece;
3212 return parent::ConvertInt2DateTime($value, $format, $offset);
3216 public static function ConvertDateTime2Int(&$value, $format, $offset)
3219 if (is_array($value))
3221 foreach ($value as $i => $piece)
3223 if (static::ConvertDateTime2Int($piece, $format, $offset))
3227 $value[$i] = $piece;
3239 return parent::ConvertDateTime2Int($value, $format, $offset);
3243 public static function GetAtomsEx($strControlID = false, $boolEx = false)
3245 $arAtomList = array(
3247 'ValueStart
' => array(
3249 'id' => 'ValueStart
',
3250 'name
' => 'ValueStart
',
3251 'type
' => 'datetime
',
3252 'format
' => 'datetime
'
3255 'ID
' => 'ValueStart
',
3256 'FIELD_TYPE
' => 'datetime
',
3260 'ValueEnd
' => array(
3263 'name
' => 'ValueEnd
',
3264 'type
' => 'datetime
',
3265 'format
' => 'datetime
'
3269 'FIELD_TYPE
' => 'datetime
',
3274 'PeriodRelative
' => array(
3283 'FIELD_TYPE
' => 'int',
3287 'TypeRelativePeriod
' => array(
3289 'id' => 'TypeRelativePeriod
',
3290 'name
' => 'TypeRelativePeriod
',
3293 'Y
' => Loc::getMessage('BT_SALE_COND_GROUP_CUMULATIVE_COND_PERIOD_RELATIVE_Y
'),
3294 'M
' => Loc::getMessage('BT_SALE_COND_GROUP_CUMULATIVE_COND_PERIOD_RELATIVE_M
'),
3295 'D
' => Loc::getMessage('BT_SALE_COND_GROUP_CUMULATIVE_COND_PERIOD_RELATIVE_D
'),
3297 'defaultText
' => '...
',
3298 'defaultValue
' => 'Y
',
3299 'first_option
' => '...
'
3302 'ID
' => 'TypeRelativePeriod
',
3303 'FIELD_TYPE
' => 'char',
3305 'VALIDATE
' => 'list
'
3313 foreach ($arAtomList as &$arOneControl)
3315 foreach ($arOneControl as &$arOneAtom)
3316 $arOneAtom = $arOneAtom['JS
'];
3319 unset($arOneControl);
3322 if ($strControlID === false)
3324 elseif (isset($arAtomList[$strControlID]))
3325 return $arAtomList[$strControlID];
const BT_COND_LOGIC_NOT_CONT
const BT_COND_LOGIC_NOT_EQ
static getMessage($code, $replace=null, $language=null)
static getSiteCurrency($siteId)
static ProductFilter(&$arOrder, $func)
static AmountBaseFilter(&$order, $func)
static CountFilter(&$arOrder, $func)
static AmountFilter(&$arOrder, $func)
static BasketPropertyFilter($basketItem, $parameters)
static RowFilter(&$arOrder, $func)
static GetConditionShow($arParams)
static Generate($arOneCondition, $arParams, $arControl, $arSubs=false)
static Parse($arOneCondition)
const ENTITY_BASKET_POSITION_WEIGHT
static GetControlShow($arParams)
static GetConditionShow($arParams)
static Generate($arOneCondition, $arParams, $arControl, $arSubs=false)
static Parse($arOneCondition)
static GetControls($strControlID=false)
static GetAtomsEx($strControlID=false, $boolEx=false)
static GetControlShow($arParams)
const ENTITY_BASKET_POSITION_ACTION_APPLIED
const ENTITY_BASKET_PROPERTY
static GetAtomsEx($controlId=false, $extendedMode=false)
static GetShowIn($arControls)
static GetControls($controlId=false)
static Generate($condition, $params, $control, $childrens=false)
static GetShowIn($arControls)
static Generate($arOneCondition, $arParams, $arControl, $arSubs=false)
static Parse($arOneCondition)
static GetControlShow($arParams)
Generate($arConditions, $arParams)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']