5require_once(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/sale/general/basket.php");
19 $subProp = COption::GetOptionString(
"sale",
"subscribe_prod",
"");
20 $arSubProp = unserialize($subProp, [
'allowed_classes' =>
false]);
22 $dayDelete = intval($arSubProp[$LID][
"del_after"]);
26 "FROM b_sale_basket ".
27 "WHERE ((ORDER_ID IS NULL) OR (ORDER_ID = 0)) AND CAN_BUY = 'N' AND SUBSCRIBE = 'Y' AND TO_DAYS(DATE_INSERT) < (TO_DAYS(NOW()) - ".$dayDelete.
") LIMIT 500";
39 if (!is_array($arOrder) && !is_array(
$arFilter))
41 $arOrder = strval($arOrder);
47 if (is_array($arGroupBy))
53 if (mb_strtoupper(
$arFilter[
"ORDER_ID"]) ==
"NULL")
59 if ($isOrderConverted !=
'N')
73 if (empty($arSelectFields) || !is_array($arSelectFields))
75 $arSelectFields =
array(
93 "ORDER_CALLBACK_FUNC",
95 "CANCEL_CALLBACK_FUNC",
96 "PRODUCT_PROVIDER_CLASS",
118 elseif (in_array(
"*", $arSelectFields))
120 $arSelectFields =
array(
139 "ORDER_CALLBACK_FUNC",
141 "CANCEL_CALLBACK_FUNC",
142 "PRODUCT_PROVIDER_CLASS",
151 "ORDER_ALLOW_DELIVERY",
152 "ORDER_DATE_ALLOW_DELIVERY",
177 "ID" =>
array(
"FIELD" =>
"B.ID",
"TYPE" =>
"int"),
178 "FUSER_ID" =>
array(
"FIELD" =>
"B.FUSER_ID",
"TYPE" =>
"int"),
179 "ORDER_ID" =>
array(
"FIELD" =>
"B.ORDER_ID",
"TYPE" =>
"int"),
180 "PRODUCT_ID" =>
array(
"FIELD" =>
"B.PRODUCT_ID",
"TYPE" =>
"int"),
181 "PRODUCT_PRICE_ID" =>
array(
"FIELD" =>
"B.PRODUCT_PRICE_ID",
"TYPE" =>
"int"),
182 "PRICE" =>
array(
"FIELD" =>
"B.PRICE",
"TYPE" =>
"double"),
183 "CURRENCY" =>
array(
"FIELD" =>
"B.CURRENCY",
"TYPE" =>
"string"),
184 "DATE_INSERT" =>
array(
"FIELD" =>
"B.DATE_INSERT",
"TYPE" =>
"datetime"),
185 "DATE_UPDATE" =>
array(
"FIELD" =>
"B.DATE_UPDATE",
"TYPE" =>
"datetime"),
186 "WEIGHT" =>
array(
"FIELD" =>
"B.WEIGHT",
"TYPE" =>
"double"),
187 "QUANTITY" =>
array(
"FIELD" =>
"B.QUANTITY",
"TYPE" =>
"double"),
188 "LID" =>
array(
"FIELD" =>
"B.LID",
"TYPE" =>
"string"),
189 "DELAY" =>
array(
"FIELD" =>
"B.DELAY",
"TYPE" =>
"char"),
190 "NAME" =>
array(
"FIELD" =>
"B.NAME",
"TYPE" =>
"string"),
191 "CAN_BUY" =>
array(
"FIELD" =>
"B.CAN_BUY",
"TYPE" =>
"char"),
192 "MODULE" =>
array(
"FIELD" =>
"B.MODULE",
"TYPE" =>
"string"),
193 "CALLBACK_FUNC" =>
array(
"FIELD" =>
"B.CALLBACK_FUNC",
"TYPE" =>
"string"),
194 "NOTES" =>
array(
"FIELD" =>
"B.NOTES",
"TYPE" =>
"string"),
195 "ORDER_CALLBACK_FUNC" =>
array(
"FIELD" =>
"B.ORDER_CALLBACK_FUNC",
"TYPE" =>
"string"),
196 "PAY_CALLBACK_FUNC" =>
array(
"FIELD" =>
"B.PAY_CALLBACK_FUNC",
"TYPE" =>
"string"),
197 "CANCEL_CALLBACK_FUNC" =>
array(
"FIELD" =>
"B.CANCEL_CALLBACK_FUNC",
"TYPE" =>
"string"),
198 "PRODUCT_PROVIDER_CLASS" =>
array(
"FIELD" =>
"B.PRODUCT_PROVIDER_CLASS",
"TYPE" =>
"string"),
199 "DETAIL_PAGE_URL" =>
array(
"FIELD" =>
"B.DETAIL_PAGE_URL",
"TYPE" =>
"string"),
200 "DISCOUNT_PRICE" =>
array(
"FIELD" =>
"B.DISCOUNT_PRICE",
"TYPE" =>
"double"),
201 "CATALOG_XML_ID" =>
array(
"FIELD" =>
"B.CATALOG_XML_ID",
"TYPE" =>
"string"),
202 "PRODUCT_XML_ID" =>
array(
"FIELD" =>
"B.PRODUCT_XML_ID",
"TYPE" =>
"string"),
203 "DISCOUNT_NAME" =>
array(
"FIELD" =>
"B.DISCOUNT_NAME",
"TYPE" =>
"string"),
204 "DISCOUNT_VALUE" =>
array(
"FIELD" =>
"B.DISCOUNT_VALUE",
"TYPE" =>
"string"),
205 "DISCOUNT_COUPON" =>
array(
"FIELD" =>
"B.DISCOUNT_COUPON",
"TYPE" =>
"string"),
206 "VAT_RATE" =>
array(
"FIELD" =>
"B.VAT_RATE",
"TYPE" =>
"double"),
207 "SUBSCRIBE" =>
array(
"FIELD" =>
"B.SUBSCRIBE",
"TYPE" =>
"char"),
208 "BARCODE_MULTI" =>
array(
"FIELD" =>
"B.BARCODE_MULTI",
"TYPE" =>
"char"),
209 "RESERVED" =>
array(
"FIELD" =>
"B.RESERVED",
"TYPE" =>
"char"),
210 "DEDUCTED" =>
array(
"FIELD" =>
"B.DEDUCTED",
"TYPE" =>
"char"),
211 "RESERVE_QUANTITY" =>
array(
"FIELD" =>
"B.RESERVE_QUANTITY",
"TYPE" =>
"double"),
212 "CUSTOM_PRICE" =>
array(
"FIELD" =>
"B.CUSTOM_PRICE",
"TYPE" =>
"char"),
213 "DIMENSIONS" =>
array(
"FIELD" =>
"B.DIMENSIONS",
"TYPE" =>
"string"),
214 "TYPE" =>
array(
"FIELD" =>
"B.TYPE",
"TYPE" =>
"int"),
215 "SET_PARENT_ID" =>
array(
"FIELD" =>
"B.SET_PARENT_ID",
"TYPE" =>
"int"),
216 "MEASURE_CODE" =>
array(
"FIELD" =>
"B.MEASURE_CODE",
"TYPE" =>
"int"),
217 "MEASURE_NAME" =>
array(
"FIELD" =>
"B.MEASURE_NAME",
"TYPE" =>
"string"),
218 "RECOMMENDATION" =>
array(
"FIELD" =>
"B.RECOMMENDATION",
"TYPE" =>
"string"),
220 "ORDER_ALLOW_DELIVERY" =>
array(
"FIELD" =>
"O.ALLOW_DELIVERY",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
221 "ORDER_DATE_ALLOW_DELIVERY" =>
array(
"FIELD" =>
"O.DATE_ALLOW_DELIVERY",
"TYPE" =>
"datetime",
"FROM" =>
"LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
223 "ORDER_STATUS" =>
array(
"FIELD" =>
"O.STATUS_ID",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
224 "ORDER_CANCELED" =>
array(
"FIELD" =>
"O.CANCELED",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
225 "ORDER_DATE" =>
array(
"FIELD" =>
"O.DATE_INSERT",
"TYPE" =>
"datetime",
"FROM" =>
"LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
226 "ORDER_PAYED" =>
array(
"FIELD" =>
"O.PAYED",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
227 "ORDER_DATE_PAYED" =>
array(
"FIELD" =>
"O.DATE_PAYED",
"TYPE" =>
"datetime",
"FROM" =>
"LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
228 "ORDER_PRICE" =>
array(
"FIELD" =>
"O.PRICE",
"TYPE" =>
"double",
"FROM" =>
"LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
230 "USER_ID" =>
array(
"FIELD" =>
"F.USER_ID",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_sale_fuser F ON (F.ID = B.FUSER_ID)"),
232 "ALL_PRICE" =>
array(
"FIELD" =>
"(B.PRICE+B.DISCOUNT_PRICE)",
"TYPE" =>
"double"),
233 "SUM_PRICE" =>
array(
"FIELD" =>
"(B.PRICE*B.QUANTITY)",
"TYPE" =>
"double"),
239 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"DISTINCT", $arSqls[
"SELECT"]);
241 if (is_array($arGroupBy) &&
count($arGroupBy)==0)
244 "SELECT ".$arSqls[
"SELECT"].
" ".
245 "FROM b_sale_basket B ".
246 " ".$arSqls[
"FROM"].
" ";
247 if ($arSqls[
"WHERE"] <>
'')
248 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
249 if ($arSqls[
"GROUPBY"] <>
'')
250 $strSql .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
262 "SELECT ".$arSqls[
"SELECT"].
" ".
263 "FROM b_sale_basket B ".
264 " ".$arSqls[
"FROM"].
" ";
265 if ($arSqls[
"WHERE"] <>
'')
266 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
267 if ($arSqls[
"GROUPBY"] <>
'')
268 $strSql .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
269 if ($arSqls[
"ORDERBY"] <>
'')
270 $strSql .=
"ORDER BY ".$arSqls[
"ORDERBY"].
" ";
273 if (is_array($arNavStartParams) && intval($arNavStartParams[
"nTopCount"])<=0)
276 "SELECT COUNT('x') as CNT ".
277 "FROM b_sale_basket B ".
278 " ".$arSqls[
"FROM"].
" ";
279 if ($arSqls[
"WHERE"] <>
'')
280 $strSql_tmp .=
"WHERE ".$arSqls[
"WHERE"].
" ";
281 if ($arSqls[
"GROUPBY"] <>
'')
282 $strSql_tmp .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
288 if ($arSqls[
"GROUPBY"] ==
'')
295 $cnt =
$dbRes->SelectedRowsCount();
302 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
306 if (is_array($arNavStartParams) && intval($arNavStartParams[
"nTopCount"])>0)
307 $strSql .=
"LIMIT ".intval($arNavStartParams[
"nTopCount"]);
321 if (!is_array($arOrder) && !is_array(
$arFilter))
323 $arOrder = strval($arOrder);
329 if (is_array($arGroupBy))
338 "ID" =>
array(
"FIELD" =>
"BP.ID",
"TYPE" =>
"int"),
339 "BASKET_ID" =>
array(
"FIELD" =>
"BP.BASKET_ID",
"TYPE" =>
"int"),
340 "NAME" =>
array(
"FIELD" =>
"BP.NAME",
"TYPE" =>
"string"),
341 "VALUE" =>
array(
"FIELD" =>
"BP.VALUE",
"TYPE" =>
"string"),
342 "CODE" =>
array(
"FIELD" =>
"BP.CODE",
"TYPE" =>
"string"),
343 "SORT" =>
array(
"FIELD" =>
"BP.SORT",
"TYPE" =>
"int")
349 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"DISTINCT", $arSqls[
"SELECT"]);
351 if (is_array($arGroupBy) &&
count($arGroupBy)==0)
354 "SELECT ".$arSqls[
"SELECT"].
" ".
355 "FROM b_sale_basket_props BP ".
356 " ".$arSqls[
"FROM"].
" ";
357 if ($arSqls[
"WHERE"] <>
'')
358 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
359 if ($arSqls[
"GROUPBY"] <>
'')
360 $strSql .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
372 "SELECT ".$arSqls[
"SELECT"].
" ".
373 "FROM b_sale_basket_props BP ".
374 " ".$arSqls[
"FROM"].
" ";
375 if ($arSqls[
"WHERE"] <>
'')
376 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
377 if ($arSqls[
"GROUPBY"] <>
'')
378 $strSql .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
379 if ($arSqls[
"ORDERBY"] <>
'')
380 $strSql .=
"ORDER BY ".$arSqls[
"ORDERBY"].
" ";
382 if (is_array($arNavStartParams) && intval($arNavStartParams[
"nTopCount"])<=0)
385 "SELECT COUNT('x') as CNT ".
386 "FROM b_sale_basket_props BP ".
387 " ".$arSqls[
"FROM"].
" ";
388 if ($arSqls[
"WHERE"] <>
'')
389 $strSql_tmp .=
"WHERE ".$arSqls[
"WHERE"].
" ";
390 if ($arSqls[
"GROUPBY"] <>
'')
391 $strSql_tmp .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
397 if ($arSqls[
"GROUPBY"] ==
'')
404 $cnt =
$dbRes->SelectedRowsCount();
411 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
415 if (is_array($arNavStartParams) && intval($arNavStartParams[
"nTopCount"])>0)
416 $strSql .=
"LIMIT ".intval($arNavStartParams[
"nTopCount"]);
460 $isOrderConverted = \Bitrix\Main\Config\Option::get(
"main",
"~sale_converted_15",
'Y');
464 if ($isOrderConverted ==
'N')
466 foreach(
GetModuleEvents(
"sale",
"OnBeforeBasketAdd",
true) as $arEvent)
475 if ($isOrderConverted !=
'N')
491 $basketItemData =
$result->getData();
492 if (array_key_exists(
'QUANTITY', $basketItemData))
494 $arFields[
'QUANTITY'] = $basketItemData[
'QUANTITY'];
502 $arDuplicateFilter =
array(
512 $arDuplicateFilter[
"SET_PARENT_ID"] =
$arFields[
"SET_PARENT_ID"];
514 $arDuplicateFilter[
"SET_PARENT_ID"] =
"NULL";
522 array(
"ID",
"QUANTITY")
528 $arPropsCur =
array();
529 $arPropsOld =
array();
535 if (array_key_exists(
'VALUE', $arProp)&&
'' != $arProp[
"VALUE"])
538 if (array_key_exists(
'CODE', $arProp) &&
'' != $arProp[
"CODE"])
540 $propID = $arProp[
"CODE"];
542 elseif (array_key_exists(
'NAME', $arProp) &&
'' != $arProp[
"NAME"])
544 $propID = $arProp[
"NAME"];
548 $arPropsCur[$propID] = $arProp[
"VALUE"];
560 array(
'NAME',
'VALUE',
'CODE')
562 while ($arProp = $dbProp->Fetch())
564 if (
'' != $arProp[
"VALUE"])
567 if (
'' != $arProp[
"CODE"])
569 $propID = $arProp[
"CODE"];
571 elseif (
'' != $arProp[
"NAME"])
573 $propID = $arProp[
"NAME"];
577 $arPropsOld[$propID] = $arProp[
"VALUE"];
585 foreach($arPropsCur as
$key =>
$val)
587 if (!array_key_exists(
$key, $arPropsOld) || $arPropsOld[
$key] !=
$val)
610 if ($isOrderConverted ==
'N')
612 $arInsert =
$DB->PrepareInsert(
"b_sale_basket",
$arFields);
614 $strSql =
"INSERT INTO b_sale_basket(".$arInsert[0].
", DATE_INSERT, DATE_UPDATE) VALUES(".$arInsert[1].
", ".
$DB->GetNowFunction().
", ".
$DB->GetNowFunction().
")";
617 $ID = intval(
$DB->LastID());
622 $boolOrder = (0 < (int)
$arFields[
'ORDER_ID']);
629 if (
'' != $prop[
"NAME"])
631 $arInsert =
$DB->PrepareInsert(
"b_sale_basket_props", $prop);
633 $strSql =
"INSERT INTO b_sale_basket_props(BASKET_ID, ".$arInsert[0].
") VALUES(".
$ID.
", ".$arInsert[1].
")";
644 CSaleBasket::Update(
$ID,
array(
"SET_PARENT_ID" =>
$ID));
646 if (!isset(
$arFields[
"MANUAL_SET_ITEMS_INSERTION"]))
651 if (method_exists($productProvider,
"GetSetItems"))
655 if (is_array($arSets))
657 foreach ($arSets as $arSetData)
659 foreach ($arSetData[
"ITEMS"] as $setItem)
661 $setItem[
"SET_PARENT_ID"] =
$ID;
663 $setItem[
"QUANTITY"] = $setItem[
"QUANTITY"] *
$arFields[
"QUANTITY"];
664 $setItem[
'FUSER_ID'] =
$arFields[
'FUSER_ID'];
665 CSaleBasket::Add($setItem);
689 if ($isOrderConverted ==
'N')
698 public static function Delete(
$ID)
702 $isOrderConverted = \Bitrix\Main\Config\Option::get(
"main",
"~sale_converted_15",
'Y');
708 if ($isOrderConverted !=
'N')
711 $r = \Bitrix\Sale\Compatible\BasketCompatibility::delete(
$ID);
712 if (!$r->isSuccess(
true))
714 foreach($r->getErrorMessages() as
$error)
741 if (!($arBasket = $rsBaskets->Fetch()))
744 foreach(
GetModuleEvents(
"sale",
"OnBeforeBasketDelete",
true) as $arEvent)
752 array(
"SET_PARENT_ID" =>
$ID,
"TYPE" =>
""),
766 while ($arSetItem = $rsSetItems->GetNext())
768 CSaleBasket::Delete($arSetItem[
"ID"]);
772 if (0 < intval($arBasket[
"ORDER_ID"]))
775 $DB->Query(
"DELETE FROM b_sale_basket_props WHERE BASKET_ID = ".
$ID,
true);
777 $DB->Query(
"DELETE FROM b_sale_store_barcode WHERE BASKET_ID = ".
$ID,
true);
779 $DB->Query(
"DELETE FROM b_sale_basket WHERE ID = ".
$ID,
true);
781 if (
'Y' == $arBasket[
'SUBSCRIBE'] && array_key_exists(
'NOTIFY_PRODUCT', $_SESSION))
783 $intUserID = Sale\Fuser::getUserIdById($arBasket[
'FUSER_ID']);
784 if ($intUserID && array_key_exists($intUserID, $_SESSION[
'NOTIFY_PRODUCT']))
786 if (array_key_exists($arBasket[
'PRODUCT_ID'], $_SESSION[
'NOTIFY_PRODUCT'][$intUserID]))
788 unset($_SESSION[
'NOTIFY_PRODUCT'][$intUserID][$arBasket[
'PRODUCT_ID']]);
799 public static function DeleteAll($FUSER_ID = 0, $bIncOrdered =
false)
803 $isOrderConverted = \Bitrix\Main\Config\Option::get(
"main",
"~sale_converted_15",
'Y');
805 $bIncOrdered = ($bIncOrdered ? True : False);
806 $FUSER_ID = intval($FUSER_ID);
810 $arFilter =
array(
"FUSER_ID" => $FUSER_ID,
'SET_PARENT_ID' =>
false);
828 if ($isOrderConverted !=
'N')
831 $r = \Bitrix\Sale\Compatible\BasketCompatibility::delete($arBasket[
"ID"]);
832 if (!$r->isSuccess(
true))
834 foreach($r->getErrorMessages() as
$error)
844 if (0 < intval($arBasket[
"ORDER_ID"]))
847 $DB->Query(
"DELETE FROM b_sale_basket_props WHERE BASKET_ID = ".$arBasket[
"ID"],
true);
848 $DB->Query(
"DELETE FROM b_sale_store_barcode WHERE BASKET_ID = ".$arBasket[
"ID"],
true);
849 $DB->Query(
"DELETE FROM b_sale_basket WHERE ID = ".$arBasket[
"ID"],
true);
856 public static function GetLeave($arOrder = Array(),
$arFilter = Array(), $arGroupBy =
false, $arNavStartParams =
false, $arSelectFields = Array())
860 if (!is_array($arSelectFields))
862 $arSelectFields = [];
865 if (empty($arSelectFields) || in_array(
"*", $arSelectFields))
886 "ID" =>
array(
"FIELD" =>
"B.ID",
"TYPE" =>
"int"),
887 "FUSER_ID" =>
array(
"FIELD" =>
"B.FUSER_ID",
"TYPE" =>
"int"),
888 "ORDER_ID" =>
array(
"FIELD" =>
"B.ORDER_ID",
"TYPE" =>
"int"),
889 "PRODUCT_ID" =>
array(
"FIELD" =>
"B.PRODUCT_ID",
"TYPE" =>
"int"),
890 "PRICE" =>
array(
"FIELD" =>
"B.PRICE",
"TYPE" =>
"double"),
891 "CURRENCY" =>
array(
"FIELD" =>
"B.CURRENCY",
"TYPE" =>
"string"),
892 "DATE_INSERT" =>
array(
"FIELD" =>
"B.DATE_INSERT",
"TYPE" =>
"datetime"),
893 "DATE_UPDATE" =>
array(
"FIELD" =>
"B.DATE_UPDATE",
"TYPE" =>
"datetime"),
894 "WEIGHT" =>
array(
"FIELD" =>
"B.WEIGHT",
"TYPE" =>
"double"),
895 "QUANTITY" =>
array(
"FIELD" =>
"B.QUANTITY",
"TYPE" =>
"double"),
896 "LID" =>
array(
"FIELD" =>
"B.LID",
"TYPE" =>
"string"),
897 "DELAY" =>
array(
"FIELD" =>
"B.DELAY",
"TYPE" =>
"char"),
898 "NAME" =>
array(
"FIELD" =>
"B.NAME",
"TYPE" =>
"string"),
899 "CAN_BUY" =>
array(
"FIELD" =>
"B.CAN_BUY",
"TYPE" =>
"char"),
900 "MODULE" =>
array(
"FIELD" =>
"B.MODULE",
"TYPE" =>
"string"),
901 "CALLBACK_FUNC" =>
array(
"FIELD" =>
"B.CALLBACK_FUNC",
"TYPE" =>
"string"),
902 "NOTES" =>
array(
"FIELD" =>
"B.NOTES",
"TYPE" =>
"string"),
903 "ORDER_CALLBACK_FUNC" =>
array(
"FIELD" =>
"B.ORDER_CALLBACK_FUNC",
"TYPE" =>
"string"),
904 "PAY_CALLBACK_FUNC" =>
array(
"FIELD" =>
"B.PAY_CALLBACK_FUNC",
"TYPE" =>
"string"),
905 "CANCEL_CALLBACK_FUNC" =>
array(
"FIELD" =>
"B.CANCEL_CALLBACK_FUNC",
"TYPE" =>
"string"),
906 "DETAIL_PAGE_URL" =>
array(
"FIELD" =>
"B.DETAIL_PAGE_URL",
"TYPE" =>
"string"),
907 "DISCOUNT_PRICE" =>
array(
"FIELD" =>
"B.DISCOUNT_PRICE",
"TYPE" =>
"double"),
908 "CATALOG_XML_ID" =>
array(
"FIELD" =>
"B.CATALOG_XML_ID",
"TYPE" =>
"string"),
909 "PRODUCT_XML_ID" =>
array(
"FIELD" =>
"B.PRODUCT_XML_ID",
"TYPE" =>
"string"),
910 "DISCOUNT_NAME" =>
array(
"FIELD" =>
"B.DISCOUNT_NAME",
"TYPE" =>
"string"),
911 "DISCOUNT_VALUE" =>
array(
"FIELD" =>
"B.DISCOUNT_VALUE",
"TYPE" =>
"string"),
912 "DISCOUNT_COUPON" =>
array(
"FIELD" =>
"B.DISCOUNT_COUPON",
"TYPE" =>
"string"),
913 "VAT_RATE" =>
array(
"FIELD" =>
"B.VAT_RATE",
"TYPE" =>
"double"),
914 "SUBSCRIBE" =>
array(
"FIELD" =>
"B.SUBSCRIBE",
"TYPE" =>
"char"),
915 "DIMENSIONS" =>
array(
"FIELD" =>
"B.DIMENSIONS",
"TYPE" =>
"string"),
916 "USER_ID" =>
array(
"FIELD" =>
"F.USER_ID",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_sale_fuser F ON (F.ID = B.FUSER_ID)"),
917 "QUANTITY_ALL" =>
array(
"FIELD" =>
"SUM(B.QUANTITY)",
"TYPE" =>
"double"),
918 "PRICE_ALL" =>
array(
"FIELD" =>
"SUM(B.QUANTITY*B.PRICE)",
"TYPE" =>
"double"),
919 "PR_COUNT" =>
array(
"FIELD" =>
"COUNT(B.ID)",
"TYPE" =>
"int"),
920 "DATE_INSERT_MIN" =>
array(
"FIELD" =>
"MIN(B.DATE_INSERT)",
"TYPE" =>
"datetime"),
921 "DATE_UPDATE_MAX" =>
array(
"FIELD" =>
"MAX(B.DATE_UPDATE)",
"TYPE" =>
"datetime"),
922 "NAME_SEARCH" =>
array(
"FIELD" =>
"U.NAME, U.LAST_NAME, U.SECOND_NAME, U.EMAIL, U.LOGIN, U.ID",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_user U ON (U.ID = F.USER_ID)"),
923 "USER_NAME" =>
array(
"FIELD" =>
"U.NAME",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_user U ON (U.ID = F.USER_ID)"),
924 "USER_LAST_NAME" =>
array(
"FIELD" =>
"U.LAST_NAME",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_user U ON (U.ID = F.USER_ID)"),
925 "USER_LOGIN" =>
array(
"FIELD" =>
"U.LOGIN",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_user U ON (U.ID = F.USER_ID)"),
926 "USER_EMAIL" =>
array(
"FIELD" =>
"U.EMAIL",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_user U ON (U.ID = F.USER_ID)"),
927 "USER_GROUP_ID" =>
array(
"FIELD" =>
"UG.GROUP_ID",
"TYPE" =>
"int",
"FROM" =>
"LEFT JOIN b_user_group UG ON (UG.USER_ID = F.USER_ID)"),
931 if(!in_array(
"FUSER_ID", $arSelectFields))
932 $arSelectFields[] =
"FUSER_ID";
933 if(!in_array(
"USER_ID", $arSelectFields))
934 $arSelectFields[] =
"USER_ID";
935 if(!in_array(
"LID", $arSelectFields))
936 $arSelectFields[] =
"LID";
944 if(mb_strpos(
$k,
"QUANTITY_ALL") !==
false || mb_strpos(
$k,
"PRICE_ALL") !==
false || mb_strpos(
$k,
"PR_COUNT") !==
false)
952 if (!empty($arFilterH))
958 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
961 "SELECT ".$arSqls[
"SELECT"].
" ".
962 "FROM b_sale_basket B ".
963 " ".$arSqls[
"FROM"].
" ";
964 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
965 $strSql .=
"GROUP BY B.FUSER_ID, F.USER_ID, B.LID ";
966 if (isset($arSqlsH[
"WHERE"]) && $arSqlsH[
"WHERE"] !==
'')
968 $strSql .=
"HAVING " . $arSqlsH[
"WHERE"] .
" ";
970 if ($arSqls[
"ORDERBY"] !==
'')
972 $strSql .=
"ORDER BY " . $arSqls[
"ORDERBY"] .
" ";
976 $useNavParams = is_array($arNavStartParams);
977 if ($useNavParams && isset($arNavStartParams[
'nTopCount']))
979 $topCount = (int)$arNavStartParams[
'nTopCount'];
982 if ($useNavParams && $topCount <= 0)
985 "SELECT COUNT('x') as CNT ".
986 "FROM b_sale_basket B ".
987 " ".$arSqls[
"FROM"].
" ";
988 if ($arSqls[
"WHERE"] !==
'')
990 $strSql_tmp .=
"WHERE " . $arSqls[
"WHERE"] .
" ";
992 $strSql_tmp .=
"GROUP BY B.FUSER_ID, F.USER_ID, B.LID ";
993 if (isset($arSqlsH[
"WHERE"]) && $arSqlsH[
"WHERE"] !==
'')
995 $strSql_tmp .=
"HAVING " . $arSqlsH[
"WHERE"] .
" ";
999 $cnt =
$dbRes->SelectedRowsCount();
1003 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
1007 if ($useNavParams && $topCount > 0)
1009 $strSql .=
"LIMIT " . $topCount;
1029 $internalResult = Sale\Fuser::add();
1032 $internalResult->isSuccess()
1033 ? $internalResult->getId()
1048 $arFields1 =
array();
1051 if (mb_substr(
$key, 0, 1) ==
"=")
1053 $arFields1[mb_substr(
$key, 1)] = $value;
1061 $arInsert =
$DB->PrepareInsert(
"b_sale_fuser",
$arFields);
1063 foreach ($arFields1 as
$key => $value)
1065 if ($arInsert[0] <>
'') $arInsert[0] .=
", ";
1066 $arInsert[0] .=
$key;
1067 if ($arInsert[1] <>
'') $arInsert[1] .=
", ";
1068 $arInsert[1] .= $value;
1072 "INSERT INTO b_sale_fuser(".$arInsert[0].
") ".
1073 "VALUES(".$arInsert[1].
")";
1074 $DB->Query($strSql);
1076 return (
int)
$DB->LastID();
1083 $nDays = intval($nDays);
1086 "FROM b_sale_fuser f ".
1087 "LEFT JOIN b_sale_order o ON (o.USER_ID = f.USER_ID) ".
1089 " TO_DAYS(f.DATE_UPDATE)<(TO_DAYS(NOW())-".$nDays.
") ".
1090 " AND o.ID is null ".
1091 " AND f.USER_ID is null ".
1097 CSaleBasket::DeleteAll(
$ar_res[
"ID"],
false);
1104 public static function GetBuyersList($arOrder = Array(),
$arFilter = Array(), $arGroupBy =
false, $arNavStartParams =
false, $arSelectFields = Array())
1107 if(empty($arSelectFields) || in_array(
"*", $arSelectFields))
1108 $arSelectFields = Array(
"ID",
"ACTIVE",
"LID",
"DATE_REGISTER",
"LOGIN",
"EMAIL",
"NAME",
"LAST_NAME",
"SECOND_NAME",
"PERSONAL_PHONE",
"USER_ID",
"LAST_LOGIN",
"TIMESTAMP_X",
"PERSONAL_BIRTHDAY",
"ORDER_COUNT",
"ORDER_SUM",
"CURRENCY",
"LAST_ORDER_DATE");
1110 $arFields_m =
array(
"ACTIVE",
"LOGIN",
"EMAIL",
"NAME",
"LAST_NAME",
"SECOND_NAME",
"PERSONAL_PHONE");
1111 $arFields_md =
array(
"LAST_LOGIN",
"DATE_REGISTER",
"TIMESTAMP_X",
"PERSONAL_BIRTHDAY");
1121 CModule::IncludeModule(
"currency");
1133 $rsSites = CSite::GetList(
"id",
"asc",
array(
"ACTIVE" =>
"Y"));
1135 $LID = $arSite[
"ID"];
1139 "ID" =>
array(
"FIELD" =>
"F.ID",
"TYPE" =>
"int"),
1140 "LID" =>
array(
"FIELD" =>
"O1.LID",
"TYPE" =>
"string"),
1141 "ORDER_COUNT" =>
array(
"FIELD" =>
"(SELECT COUNT(O3.PRICE) FROM b_sale_order O3 WHERE O3.USER_ID=F.USER_ID AND O3.CURRENCY = '".
$DB->ForSQL(
$CURRENCY).
"' AND O3.PAYED = 'Y' AND O3.LID = '".
$DB->ForSQL($LID).
"' )",
"TYPE" =>
"double"),
1142 "ORDER_SUM" =>
array(
"FIELD" =>
"(SELECT SUM(O3.PRICE) FROM b_sale_order O3 WHERE O3.USER_ID=F.USER_ID AND O3.CURRENCY = '".
$DB->ForSQL(
$CURRENCY).
"' AND O3.PAYED = 'Y' AND O3.LID = '".
$DB->ForSQL($LID).
"' )",
"TYPE" =>
"double"),
1143 "CURRENCY" =>
array(
"FIELD" =>
"O1.CURRENCY",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_sale_order O1 ON (O1.USER_ID=U.ID AND O1.CURRENCY = '".
$DB->ForSQL(
$CURRENCY).
"' AND O1.LID = '".
$DB->ForSQL($LID).
"' AND O1.PAYED = 'Y')"),
1144 "LAST_ORDER_DATE" =>
array(
"FIELD" =>
"(SELECT MAX(O2.DATE_INSERT) FROM b_sale_order O2 WHERE (O2.USER_ID=F.USER_ID))",
"TYPE" =>
"datetime"),
1145 "NAME_SEARCH" =>
array(
"FIELD" =>
"U.NAME, U.LAST_NAME, U.SECOND_NAME, U.EMAIL, U.LOGIN, U.ID",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (U.ID = F.USER_ID)"),
1146 "USER_ID" =>
array(
"FIELD" =>
"F.USER_ID",
"TYPE" =>
"int",
"FROM" =>
"INNER JOIN b_user U ON (U.ID = F.USER_ID)"),
1147 "GROUPS_ID" =>
array(
"FIELD" =>
"UG.GROUP_ID",
"TYPE" =>
"int",
"FROM" =>
"LEFT JOIN b_user_group UG ON (UG.USER_ID = F.USER_ID)"),
1150 foreach($arFields_m as
$val)
1152 $arFields[
$val] =
array(
"FIELD" =>
"U.".
$val,
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (U.ID = F.USER_ID)");
1154 foreach($arFields_md as
$val)
1156 $arFields[
$val] =
array(
"FIELD" =>
"U.".
$val,
"TYPE" =>
"datetime",
"FROM" =>
"INNER JOIN b_user U ON (U.ID = F.USER_ID)");
1159 if(!in_array(
"USER_ID", $arSelectFields))
1160 $arSelectFields[] =
"USER_ID";
1162 $arFilterH = Array();
1167 if(mb_strpos(
$k,
"ORDER_SUM") !==
false || mb_strpos(
$k,
"ORDER_COUNT") !==
false || mb_strpos(
$k,
"LAST_ORDER_DATE") !==
false)
1169 $arFilterH[
$k] = $v;
1175 if(!empty($arFilterH))
1179 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
1182 "SELECT ".$arSqls[
"SELECT"].
" ".
1183 "FROM b_sale_fuser F ".
1184 " ".$arSqls[
"FROM"].
" ";
1185 if($arSqls[
"WHERE"] <>
'')
1186 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
1187 $strSql .=
"GROUP BY F.USER_ID ";
1188 if ($arSqlsH[
"WHERE"] <>
'')
1189 $strSql .=
"HAVING ".$arSqlsH[
"WHERE"].
" ";
1190 if ($arSqls[
"ORDERBY"] <>
'')
1191 $strSql .=
"ORDER BY ".$arSqls[
"ORDERBY"].
" ";
1194 if (is_array($arNavStartParams) && intval($arNavStartParams[
"nTopCount"])<=0)
1197 "SELECT COUNT('x') as CNT ".
1198 "FROM b_sale_fuser F ".
1199 " ".$arSqls[
"FROM"].
" ";
1200 if ($arSqls[
"WHERE"] <>
'')
1201 $strSql_tmp .=
"WHERE ".$arSqls[
"WHERE"].
" ";
1202 $strSql_tmp .=
"GROUP BY F.USER_ID ";
1203 if ($arSqlsH[
"WHERE"] <>
'')
1204 $strSql_tmp .=
"HAVING ".$arSqlsH[
"WHERE"].
" ";
1209 $cnt =
$dbRes->SelectedRowsCount();
1215 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
1219 if (is_array($arNavStartParams) && intval($arNavStartParams[
"nTopCount"])>0)
1220 $strSql .=
"LIMIT ".intval($arNavStartParams[
"nTopCount"]);
static get($moduleId, $name, $default="", $siteId=false)
static getList($sort=array(), $filter=array(), $group=null, $nav=array(), $select=array(), $callback=false)
static getUserIdById($fuserId)
static Init($bVar=false, $bSkipFUserInit=false)
static GetProductProvider($arBasketItem)
static AddRecord($orderId, $type, $data=array(), $entityName=null, $entityId=null)
static PrepareSql(&$arFields, $arOrder, &$arFilter, $arGroupBy, $arSelectFields, $obUserFieldsSql=false, $callback=false, $arOptions=array())
static CheckFields($ACTION, &$arFields, $ID=0)
static isSetParent($arItem)
static _ClearProductSubscribe($LID)
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetLeave($arOrder=Array(), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=Array())
static GetPropsList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetBuyersList($arOrder=Array(), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=Array())
static GetUserID($intFUserID)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</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(CSalePaySystemAction::GetParamValue("DATE_PAY_BEFORE", false)) $dbBasket