3require_once(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/catalog/general/discount_save.php");
14 $arInsert =
$DB->PrepareInsert(
"b_catalog_discount",
$arFields);
16 $strSql =
"INSERT INTO b_catalog_discount(".$arInsert[0].
") VALUES(".$arInsert[1].
")";
22 foreach (
$arFields[
'RANGES'] as &$arRange)
24 $arRange[
'DISCOUNT_ID'] =
$ID;
25 $arInsert =
$DB->PrepareInsert(
"b_catalog_disc_save_range", $arRange);
26 $strSql =
"INSERT INTO b_catalog_disc_save_range(".$arInsert[0].
") VALUES(".$arInsert[1].
")";
30 foreach (
$arFields[
'GROUP_IDS'] as &$intGroupID)
32 $strSql =
"INSERT INTO b_catalog_disc_save_group(DISCOUNT_ID,GROUP_ID) VALUES(".$ID.
",".$intGroupID.
")";
36 $boolCalc = ($boolCalc ===
true);
55 $strUpdate =
$DB->PrepareUpdate(
"b_catalog_discount",
$arFields);
56 if (!empty($strUpdate))
58 $strSql =
"update b_catalog_discount SET ".$strUpdate.
" where ID = ".$intID.
" and TYPE = ".self::ENTITY_ID;
64 $DB->Query(
"delete from b_catalog_disc_save_range where DISCOUNT_ID = ".$intID);
65 foreach (
$arFields[
'RANGES'] as &$arRange)
67 $arRange[
'DISCOUNT_ID'] = $intID;
68 $arInsert =
$DB->PrepareInsert(
"b_catalog_disc_save_range", $arRange);
69 $strSql =
"insert into b_catalog_disc_save_range(".$arInsert[0].
") values(".$arInsert[1].
")";
77 $DB->Query(
"delete from b_catalog_disc_save_group where DISCOUNT_ID = ".$intID);
78 foreach (
$arFields[
'GROUP_IDS'] as &$intGroupID)
80 $strSql =
"insert into b_catalog_disc_save_group(DISCOUNT_ID,GROUP_ID) values(".$intID.
",".$intGroupID.
")";
86 $boolCalc = ($boolCalc ===
true);
106 "ID" =>
array(
"FIELD" =>
"DS.ID",
"TYPE" =>
"int"),
107 "XML_ID" =>
array(
"FIELD" =>
"DS.XML_ID",
"TYPE" =>
"string"),
108 'SITE_ID' =>
array(
"FIELD" =>
"DS.SITE_ID",
"TYPE" =>
"string"),
109 "TYPE" =>
array(
"FIELD" =>
"DS.TYPE",
"TYPE" =>
"int"),
110 'NAME' =>
array(
"FIELD" =>
"DS.NAME",
"TYPE" =>
"string"),
111 'ACTIVE' =>
array(
"FIELD" =>
"DS.ACTIVE",
"TYPE" =>
"char"),
112 "SORT" =>
array(
"FIELD" =>
"DS.SORT",
"TYPE" =>
"int"),
113 "CURRENCY" =>
array(
"FIELD" =>
"DS.CURRENCY",
"TYPE" =>
"string"),
114 "ACTIVE_FROM" =>
array(
"FIELD" =>
"DS.ACTIVE_FROM",
"TYPE" =>
"datetime"),
115 "ACTIVE_TO" =>
array(
"FIELD" =>
"DS.ACTIVE_TO",
"TYPE" =>
"datetime"),
116 "COUNT_PERIOD" =>
array(
"FIELD" =>
"DS.COUNT_PERIOD",
"TYPE" =>
"char"),
117 "COUNT_SIZE" =>
array(
"FIELD" =>
"DS.COUNT_SIZE",
"TYPE" =>
"int"),
118 "COUNT_TYPE" =>
array(
"FIELD" =>
"DS.COUNT_TYPE",
"TYPE" =>
"char"),
119 "COUNT_FROM" =>
array(
"FIELD" =>
"DS.COUNT_FROM",
"TYPE" =>
"datetime"),
120 "COUNT_TO" =>
array(
"FIELD" =>
"DS.COUNT_TO",
"TYPE" =>
"datetime"),
121 "ACTION_SIZE" =>
array(
"FIELD" =>
"DS.ACTION_SIZE",
"TYPE" =>
"int"),
122 "ACTION_TYPE" =>
array(
"FIELD" =>
"DS.ACTION_TYPE",
"TYPE" =>
"char"),
123 "TIMESTAMP_X" =>
array(
"FIELD" =>
"DS.TIMESTAMP_X",
"TYPE" =>
"datetime"),
124 "MODIFIED_BY" =>
array(
"FIELD" =>
"DS.MODIFIED_BY",
"TYPE" =>
"int"),
125 "DATE_CREATE" =>
array(
"FIELD" =>
"DS.DATE_CREATE",
"TYPE" =>
"datetime"),
126 "CREATED_BY" =>
array(
"FIELD" =>
"DS.CREATED_BY",
"TYPE" =>
"int"),
127 "SALE_ID" =>
array(
"FIELD" =>
"DS.SALE_ID",
"TYPE" =>
"int"),
129 "RANGE_FROM" =>
array(
"FIELD" =>
"DSR.RANGE_FROM",
"TYPE" =>
"double",
"FROM" =>
"LEFT JOIN b_catalog_disc_save_range DSR ON (DS.ID = DSR.DISCOUNT_ID)"),
130 "VALUE" =>
array(
"FIELD" =>
"DSR.VALUE",
"TYPE" =>
"double",
"FROM" =>
"LEFT JOIN b_catalog_disc_save_range DSR ON (DS.ID = DSR.DISCOUNT_ID)"),
131 "VALUE_TYPE" =>
array(
"FIELD" =>
"DSR.TYPE",
"TYPE" =>
"char",
"FROM" =>
"LEFT JOIN b_catalog_disc_save_range DSR ON (DS.ID = DSR.DISCOUNT_ID)"),
133 "GROUP_ID" =>
array(
"FIELD" =>
"DSG.GROUP_ID",
"TYPE" =>
"int",
"FROM" =>
"LEFT JOIN b_catalog_disc_save_group DSG ON (DS.ID = DSG.DISCOUNT_ID)"),
136 if (empty($arSelectFields))
137 $arSelectFields =
array(
'ID',
'XML_ID',
'SITE_ID',
'TYPE',
'NAME',
'ACTIVE',
'SORT',
'CURRENCY',
'ACTIVE_FROM',
'ACTIVE_TO',
'COUNT_PERIOD',
'COUNT_SIZE',
'COUNT_TYPE',
'COUNT_FROM',
'COUNT_TO',
'ACTION_SIZE',
'ACTION_TYPE',
'TIMESTAMP_X',
'MODIFIED_BY',
'DATE_CREATE',
'CREATED_BY');
138 elseif (is_array($arSelectFields) && in_array(
'*',$arSelectFields))
139 $arSelectFields =
array(
'ID',
'XML_ID',
'SITE_ID',
'TYPE',
'NAME',
'ACTIVE',
'SORT',
'CURRENCY',
'ACTIVE_FROM',
'ACTIVE_TO',
'COUNT_PERIOD',
'COUNT_SIZE',
'COUNT_TYPE',
'COUNT_FROM',
'COUNT_TO',
'ACTION_SIZE',
'ACTION_TYPE',
'TIMESTAMP_X',
'MODIFIED_BY',
'DATE_CREATE',
'CREATED_BY');
147 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"DISTINCT", $arSqls[
"SELECT"]);
149 if (empty($arGroupBy) && is_array($arGroupBy))
151 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_discount DS ".$arSqls[
"FROM"];
152 if (!empty($arSqls[
"WHERE"]))
153 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
154 if (!empty($arSqls[
"GROUPBY"]))
155 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
164 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_discount DS ".$arSqls[
"FROM"];
165 if (!empty($arSqls[
"WHERE"]))
166 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
167 if (!empty($arSqls[
"GROUPBY"]))
168 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
169 if (!empty($arSqls[
"ORDERBY"]))
170 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
173 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
174 if ($boolNavStartParams && array_key_exists(
'nTopCount', $arNavStartParams))
176 $intTopCount = intval($arNavStartParams[
"nTopCount"]);
178 if ($boolNavStartParams && 0 >= $intTopCount)
180 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_catalog_discount DS ".$arSqls[
"FROM"];
181 if (!empty($arSqls[
"WHERE"]))
182 $strSql_tmp .=
" WHERE ".$arSqls[
"WHERE"];
183 if (!empty($arSqls[
"GROUPBY"]))
184 $strSql_tmp .=
" GROUP BY ".$arSqls[
"GROUPBY"];
188 if (empty($arSqls[
"GROUPBY"]))
195 $cnt =
$dbRes->SelectedRowsCount();
200 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
204 if ($boolNavStartParams && 0 < $intTopCount)
206 $strSql .=
" LIMIT ".$intTopCount;
219 "ID" =>
array(
"FIELD" =>
"DSR.ID",
"TYPE" =>
"int"),
220 "DISCOUNT_ID" =>
array(
"FIELD" =>
"DSR.DISCOUNT_ID",
"TYPE" =>
"int"),
221 "RANGE_FROM" =>
array(
"FIELD" =>
"DSR.RANGE_FROM",
"TYPE" =>
"double"),
222 "VALUE" =>
array(
"FIELD" =>
"DSR.VALUE",
"TYPE" =>
"double"),
223 "TYPE" =>
array(
"FIELD" =>
"DSR.TYPE",
"TYPE" =>
"char"),
228 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
230 if (empty($arGroupBy) && is_array($arGroupBy))
232 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_disc_save_range DSR ".$arSqls[
"FROM"];
233 if (!empty($arSqls[
"WHERE"]))
234 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
235 if (!empty($arSqls[
"GROUPBY"]))
236 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
245 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_disc_save_range DSR ".$arSqls[
"FROM"];
246 if (!empty($arSqls[
"WHERE"]))
247 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
248 if (!empty($arSqls[
"GROUPBY"]))
249 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
250 if (!empty($arSqls[
"ORDERBY"]))
251 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
254 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
255 if ($boolNavStartParams && array_key_exists(
'nTopCount', $arNavStartParams))
257 $intTopCount = intval($arNavStartParams[
"nTopCount"]);
259 if ($boolNavStartParams && 0 >= $intTopCount)
261 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_catalog_disc_save_range DSR ".$arSqls[
"FROM"];
262 if (!empty($arSqls[
"WHERE"]))
263 $strSql_tmp .=
" WHERE ".$arSqls[
"WHERE"];
264 if (!empty($arSqls[
"GROUPBY"]))
265 $strSql_tmp .=
" GROUP BY ".$arSqls[
"GROUPBY"];
269 if (empty($arSqls[
"GROUPBY"]))
276 $cnt =
$dbRes->SelectedRowsCount();
281 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
285 if ($boolNavStartParams && 0 < $intTopCount)
287 $strSql .=
" LIMIT ".$intTopCount;
300 "ID" =>
array(
"FIELD" =>
"DSG.ID",
"TYPE" =>
"int"),
301 "DISCOUNT_ID" =>
array(
"FIELD" =>
"DSG.DISCOUNT_ID",
"TYPE" =>
"int"),
302 "GROUP_ID" =>
array(
"FIELD" =>
"DSG.GROUP_ID",
"TYPE" =>
"int"),
307 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
309 if (empty($arGroupBy) && is_array($arGroupBy))
311 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_disc_save_group DSG ".$arSqls[
"FROM"];
312 if (!empty($arSqls[
"WHERE"]))
313 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
314 if (!empty($arSqls[
"GROUPBY"]))
315 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
324 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_disc_save_group DSG ".$arSqls[
"FROM"];
325 if (!empty($arSqls[
"WHERE"]))
326 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
327 if (!empty($arSqls[
"GROUPBY"]))
328 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
329 if (!empty($arSqls[
"ORDERBY"]))
330 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
333 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
334 if ($boolNavStartParams && array_key_exists(
'nTopCount', $arNavStartParams))
336 $intTopCount = intval($arNavStartParams[
"nTopCount"]);
338 if ($boolNavStartParams && 0 >= $intTopCount)
340 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_catalog_disc_save_group DSG ".$arSqls[
"FROM"];
341 if (!empty($arSqls[
"WHERE"]))
342 $strSql_tmp .=
" WHERE ".$arSqls[
"WHERE"];
343 if (!empty($arSqls[
"GROUPBY"]))
344 $strSql_tmp .=
" GROUP BY ".$arSqls[
"GROUPBY"];
348 if (empty($arSqls[
"GROUPBY"]))
355 $cnt =
$dbRes->SelectedRowsCount();
360 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
364 if ($boolNavStartParams && 0 < $intTopCount)
366 $strSql .=
" LIMIT ".$intTopCount;
379 "ID" =>
array(
"FIELD" =>
"DSU.ID",
"TYPE" =>
"int"),
380 "DISCOUNT_ID" =>
array(
"FIELD" =>
"DSU.DISCOUNT_ID",
"TYPE" =>
"int"),
381 "USER_ID" =>
array(
"FIELD" =>
"DSU.USER_ID",
"TYPE" =>
"int"),
382 "ACTIVE_FROM" =>
array(
"FIELD" =>
"DSU.ACTIVE_FROM",
"TYPE" =>
"datetime"),
383 "ACTIVE_TO" =>
array(
"FIELD" =>
"DSU.ACTIVE_TO",
"TYPE" =>
"datetime"),
384 "RANGE_FROM" =>
array(
"FIELD" =>
"DSU.RANGE_FROM",
"TYPE" =>
"double"),
389 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
391 if (empty($arGroupBy) && is_array($arGroupBy))
393 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_disc_save_user DSU ".$arSqls[
"FROM"];
394 if (!empty($arSqls[
"WHERE"]))
395 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
396 if (!empty($arSqls[
"GROUPBY"]))
397 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
406 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_disc_save_user DSU ".$arSqls[
"FROM"];
407 if (!empty($arSqls[
"WHERE"]))
408 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
409 if (!empty($arSqls[
"GROUPBY"]))
410 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
411 if (!empty($arSqls[
"ORDERBY"]))
412 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
415 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
416 if ($boolNavStartParams && array_key_exists(
'nTopCount', $arNavStartParams))
418 $intTopCount = intval($arNavStartParams[
"nTopCount"]);
420 if ($boolNavStartParams && 0 >= $intTopCount)
422 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_catalog_disc_save_user DSU ".$arSqls[
"FROM"];
423 if (!empty($arSqls[
"WHERE"]))
424 $strSql_tmp .=
" WHERE ".$arSqls[
"WHERE"];
425 if (!empty($arSqls[
"GROUPBY"]))
426 $strSql_tmp .=
" GROUP BY ".$arSqls[
"GROUPBY"];
430 if (empty($arSqls[
"GROUPBY"]))
437 $cnt =
$dbRes->SelectedRowsCount();
442 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
446 if ($boolNavStartParams && 0 < $intTopCount)
448 $strSql .=
" LIMIT ".$intTopCount;
462 if (!empty($arUserGroup) && is_array($arUserGroup))
465 foreach ($arUserGroup as &$intGroupID)
467 $intGroupID = intval($intGroupID);
468 if (0 < $intGroupID && 2 != $intGroupID)
469 $arValid[] = $intGroupID;
471 if (isset($intGroupID))
473 if (!empty($arValid))
475 $arUserGroup = array_unique($arValid);
477 $strUserGroup = implode(
' or GROUP_ID = ',$arUserGroup);
479 $strQuery =
'select DISCOUNT_ID from b_catalog_disc_save_group WHERE GROUP_ID = '.$strUserGroup;
481 $rsDiscounts =
$DB->Query($strQuery);
482 while ($arDiscount = $rsDiscounts->Fetch())
484 $arResult[] = intval($arDiscount[
'DISCOUNT_ID']);
501 if (!is_array($arSettings))
502 $arSettings =
array();
503 $boolActiveFromFilter =
true;
505 if (!empty($arSettings) && isset($arSettings[
'ACTIVE_FROM']))
506 $boolActiveFromFilter = (
true === $arSettings[
'ACTIVE_FROM'] ? true :
false);
507 if (!empty($arSettings) && isset($arSettings[
'DELETE']))
508 $boolDelete = (
true === $arSettings[
'DELETE'] ? true :
false);
510 $intUserID = intval(
$arParams[
'USER_ID']);
511 $intDiscountID = intval(
$arParams[
'DISCOUNT_ID']);
512 $strActiveDate = strval(
$arParams[
'ACTIVE_FROM']);
513 if (0 < $intUserID && 0 < $intDiscountID && !($boolActiveFromFilter && empty($strActiveDate)))
515 $strQuery =
'select U.*, '.
516 $DB->DateToCharFunction(
'U.ACTIVE_FROM',
'FULL').
' as ACTIVE_FROM_FORMAT, '.
517 $DB->DateToCharFunction(
'U.ACTIVE_TO',
'FULL').
' as ACTIVE_TO_FORMAT '.
518 'from b_catalog_disc_save_user U where DISCOUNT_ID = '.$intDiscountID.
' AND USER_ID = '.$intUserID;
519 if ($boolActiveFromFilter)
520 $strQuery .=
' AND ACTIVE_FROM >= '.$DB->CharToDateFunction($strActiveDate);
521 $rsResults =
$DB->Query($strQuery);
530 $strQuery =
'delete from b_catalog_disc_save_user where DISCOUNT_ID = '.$intDiscountID.
' AND USER_ID = '.$intUserID;
531 $DB->Query($strQuery);
544 if (!is_array($arSettings))
545 $arSettings =
array();
548 if (!empty($arSettings) && isset($arSettings[
'SEARCH']))
549 $boolSearch = (
true === $arSettings[
'SEARCH'] ? true :
false);
550 if (!empty($arSettings) && isset($arSettings[
'DELETE']))
551 $boolDelete = (
true === $arSettings[
'DELETE'] ? true :
false);
553 $intUserID = intval(
$arParams[
'USER_ID']);
554 $intDiscountID = intval(
$arParams[
'DISCOUNT_ID']);
555 $strActiveFrom = strval(
$arParams[
'ACTIVE_FROM']);
556 $strActiveTo = strval(
$arParams[
'ACTIVE_TO']);
557 if (0 < $intUserID && 0 < $intDiscountID && !empty($strActiveFrom) && !empty($strActiveTo))
561 $strQuery =
'select ID from b_catalog_disc_save_user where DISCOUNT_ID = '.$intDiscountID.
' AND USER_ID = '.$intUserID.
' limit 1';
562 $rsItems =
$DB->Query($strQuery);
563 if ($arItem = $rsItems->Fetch())
570 $strQuery =
'delete from b_catalog_disc_save_user where DISCOUNT_ID = '.$intDiscountID.
' AND USER_ID = '.$intUserID;
571 $DB->Query($strQuery);
573 $arInsert =
$DB->PrepareInsert(
"b_catalog_disc_save_user",
$arParams);
575 "INSERT INTO b_catalog_disc_save_user(".$arInsert[0].
") ".
576 "VALUES(".$arInsert[1].
")";
577 $DB->Query($strQuery);
static UserDiscountCalc($intID, $arFields=array(), $boolNew=false)
static CheckFields($strAction, &$arFields, $intID=0)
static PrepareSql(&$arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields)
static Add($arFields, $boolCalc=false)
static GetRangeByDiscount($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static Update($intID, $arFields, $boolCalc=false)
static GetGroupByDiscount($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetUserInfoByDiscount($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static __UpdateUserInfoByDiscount($arParams, $arSettings=array())
static __GetUserInfoByDiscount($arParams, $arSettings=array())
static __GetDiscountIDByGroup($arUserGroup=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)