72 "LOCATION" =>
"LOCATION",
73 "ADDRESS" =>
"ADDRESS"
96 $this->oAuthToken =
$settings[
"OAUTH_TOKEN"];
99 $this->oAuthClientId =
$settings[
"OAUTH_CLIENT_ID"];
102 $this->oAuthLogin =
$settings[
"OAUTH_LOGIN"];
105 $this->mapDelivery =
$settings[
"DELIVERIES"];
108 $this->outlets =
$settings[
"OUTLETS_IDS"];
111 $this->mapPaySystems =
$settings[
"PAY_SYSTEMS"];
114 $this->personTypeId =
$settings[
"PERSON_TYPE"];
117 $this->campaignId =
$settings[
"CAMPAIGN_ID"];
120 $this->yandexApiUrl =
$settings[
"YANDEX_URL"];
123 $this->yandexToken =
$settings[
"YANDEX_TOKEN"];
126 $this->authType =
$settings[
"AUTH_TYPE"];
129 $this->communicationFormat =
$settings[
"DATA_FORMAT"];
132 $this->logLevel =
$settings[
"LOG_LEVEL"];
135 $this->orderProps =
$settings[
"ORDER_PROPS"];
137 if(isset(
$settings[
"IS_ACCEPT_OLD_PRICE"]))
138 $this->isAcceptOldPrice =
$settings[
"IS_ACCEPT_OLD_PRICE"];
141 $this->defaultDeliveryPeriodFrom = intval(
$settings[
"PERIOD_FROM"]);
144 $this->defaultDeliveryPeriodTo = intval(
$settings[
"PERIOD_TO"]);
147 $this->deliveryToPaysystem =
$settings[
"DLV_PS"];
149 $this->active = static::isActive();
166 static::eventsStart();
168 static::eventsStop();
199 $rsSites = CSite::GetList(
'',
'', Array(
226 elseif(defined(
"SITE_ID"))
232 $rsSites = CSite::GetList(
'',
'', Array(
256 $settingsRes = Bitrix\Sale\TradingPlatformTable::getList(
array(
257 'filter'=>
array(
'=CODE' => static::TRADING_PLATFORM_CODE)
277 $settings = static::getSettings($cached);
288 if(!is_array($arSettings))
293 foreach ($arSettings as
$siteId => $siteSett)
295 if(isset($siteSett[
"OUTLETS_IDS"]) && is_array($siteSett[
"OUTLETS_IDS"]))
297 $newOutletsIds =
array();
299 foreach ($siteSett[
"OUTLETS_IDS"] as $outletId)
301 $newOutletsIds[] = $outletId;
303 $arSettings[
$siteId][
"OUTLETS_IDS"] = $newOutletsIds;
306 if(isset($arSettings[
$siteId][
"DELIVERIES"]) && is_array($arSettings[
$siteId][
"DELIVERIES"]))
308 foreach($arSettings[
$siteId][
"DELIVERIES"] as $id =>
$type)
312 unset($arSettings[
$siteId][
"DELIVERIES"][$id]);
313 unset($arSettings[
$siteId][
"DLV_PS"][$id]);
317 foreach(self::getExistPaymentMethods() as $methodIdx =>
$method)
318 if(!isset($arSettings[
$siteId][
"DLV_PS"][$id][$methodIdx]) || $arSettings[
$siteId][
"DLV_PS"][$id][$methodIdx] !=
'Y')
319 $arSettings[
$siteId][
"DLV_PS"][$id][$methodIdx] =
'N';
329 $result = Bitrix\Sale\TradingPlatformTable::update(
331 array(
"SETTINGS" => $arSettings)
354 $interval .= strval(intval($period));
361 return new DateInterval($interval);
371 $interval = $today->diff($nextDate);
372 return (intval($interval->format(
'%a')) <= 92);
383 $from = intval($from);
389 $today =
new DateTime(
'now',
new DateTimeZone(
'Europe/Moscow'));
390 $dateFrom =
new DateTime(
'now',
new DateTimeZone(
'Europe/Moscow'));
395 $arResult[
"fromDate"] = $dateFrom->format(self::DATE_FORMAT);
399 $arResult[
"toDate"] = $dateTo->format(self::DATE_FORMAT);
413 foreach ($this->mapPaySystems as $psType => $psId)
414 if(isset($psId) && intval($psId) > 0)
426 return isset($arPostData[
"cart"])
427 && isset($arPostData[
"cart"][
"items"])
428 && is_array($arPostData[
"cart"][
"items"])
429 && isset($arPostData[
"cart"][
"currency"])
430 && isset($arPostData[
"cart"][
"delivery"])
431 && is_array($arPostData[
"cart"][
"delivery"]);
441 protected function processCartRequest($arPostData)
449 "paymentMethods" =>
array(),
450 "deliveryOptions" =>
array()
456 if($this->orderProps[
"LOCATION"] <>
'')
458 $locationId = $this->locationMapper->getLocationId($arPostData[
"cart"][
"delivery"][
"region"]);
460 if(intval($locationId) <= 0)
463 self::LOG_LEVEL_INFO,
464 "YMARKET_LOCATION_MAPPING",
465 $arPostData[
"cart"][
"delivery"][
"region"][
"name"],
474 $arPostData[
"cart"][
"delivery"][
"address"],
481 $res = \Bitrix\Sale\TradingPlatform\YMarket\Order::create(
array(
482 'CURRENCY' => $arPostData[
'cart'][
'currency'],
483 'SITE_ID' => $this->siteId,
484 'PERSON_TYPE_ID' => $this->personTypeId,
485 'PROPERTIES' => $properties,
486 'CART_ITEMS' => $arPostData[
'cart'][
'items']
489 if(!
$res->isSuccess())
492 self::LOG_LEVEL_ERROR,
493 "YMARKET_ORDER_CREATE_ERROR",
494 'processCartRequest',
495 implode(
'; ',
$res->getErrorMessages())
504 $basket =
$order->getBasket();
505 $resultItems =
array();
506 $items = $arPostData[
'cart'][
'items'];
507 $itemKeyToBasketCode = array_flip(
$data[
'ITEMS_MAP']);
509 foreach(
$items as $itemKey => $item)
514 if(!empty($itemKeyToBasketCode[$itemKey]))
516 $basketCode = $itemKeyToBasketCode[$itemKey];
517 $basketItem = $basket->getItemByBasketCode($basketCode);
522 $price = round(floatval($basketItem->getPrice()), 2);
527 $count = $basketItem->getQuantity();
531 'feedId' => $item[
'feedId'],
532 'offerId' => $item[
'offerId'],
534 'delivery' =>
$count > 0 ? TRUE : FALSE
538 $resItem[
'price'] = $price;
540 $resultItems[] = $resItem;
543 $shipment = YMarket\Order::createShipment(
$order);
544 YMarket\Order::createPayment(
$order);
545 $deliveryObjs = Delivery\Services\Manager::getRestrictedObjectsList(
547 Delivery\Restrictions\Manager::MODE_CLIENT
550 $deliveryOptions =
array();
553 foreach($deliveryObjs as $delivery)
555 if(empty($this->mapDelivery[$delivery->getId()]))
558 $orderClone =
$order->createClone();
559 $clonedShipment =
null;
560 $orderClone->isStartField();
562 foreach ($orderClone->getShipmentCollection() as $shp)
567 $clonedShipment = $shp;
572 $clonedShipment->setDeliveryService($delivery);
573 $deliveryCalcRes = $orderClone->getShipmentCollection()->calculateDelivery();
575 if(!$deliveryCalcRes->isSuccess())
578 $orderClone->doFinalAction(
true);
579 $calcResult = $clonedShipment->calculateDelivery();
581 if(!$calcResult->isSuccess())
584 $dateFrom = $calcResult->getPeriodFrom();
585 $dateTo = $calcResult->getPeriodTo();
587 if($dateFrom ===
null)
593 $arDates = $this->
getDeliveryDates($dateFrom, $dateTo, $calcResult->getPeriodType());
597 $deliveryType = $this->mapDelivery[$delivery->getId()];
599 $arDeliveryTmp =
array(
600 "id" => $delivery->getId(),
601 "type" => $deliveryType,
602 "serviceName" => mb_substr($delivery->getNameWithParent(), 0, 50),
603 "price" => round(floatval($orderClone->getDeliveryPrice()), 2),
610 if(!empty($this->deliveryToPaysystem[$delivery->getId()]) && is_array($this->deliveryToPaysystem[$delivery->getId()]))
611 foreach($this->deliveryToPaysystem[$delivery->getId()] as $methodIdx => $value)
612 if($value ==
'Y' && !empty($payMethods[$methodIdx]))
613 $dlvToPs[] = $payMethods[$methodIdx];
616 $arDeliveryTmp[
"paymentMethods"] = $dlvToPs;
618 if($deliveryType ==
"PICKUP" && !empty($this->outlets))
619 foreach($this->outlets as $outlet)
620 $arDeliveryTmp[
"outlets"][] =
array(
"id" => intval($outlet));
622 $deliveryOptions[] = $arDeliveryTmp;
626 if(!empty($resultItems) && !empty($deliveryOptions))
628 $result[
'cart'][
'items'] = $resultItems;
629 $result[
'cart'][
'deliveryOptions'] = $deliveryOptions;
645 $resultList =
$event->getResults();
648 if (is_array($resultList) && !empty($resultList))
650 foreach ($resultList as &$eventResult)
652 if ($eventResult->getType() != EventResult::SUCCESS)
655 $params = $eventResult->getParameters();
671 return isset($arPostData[
"order"])
672 && isset($arPostData[
"order"][
"id"])
673 && isset($arPostData[
"order"][
"currency"])
674 && isset($arPostData[
"order"][
"fake"])
675 && isset($arPostData[
"order"][
"items"]) && is_array($arPostData[
"order"][
"items"])
676 && isset($arPostData[
"order"][
"delivery"]) && is_array($arPostData[
"order"][
"delivery"]);
687 $userRegister =
array(
688 "NAME" => $buyer[
"firstName"],
689 "PERSONAL_MOBILE" => $buyer[
"phone"]
692 if(isset($buyer[
"lastName"]))
693 $userRegister[
"LAST_NAME"] = $buyer[
"lastName"];
695 if(isset($buyer[
"middleName"]))
696 $userRegister[
"SECOND_NAME"] = $buyer[
"middleName"];
698 $arPersonal =
array();
700 if($buyer[
"phone"] <>
'')
701 $arPersonal =
array(
"PERSONAL_MOBILE" => $buyer[
"phone"]);
712 empty($arErrors) ? self::LOG_LEVEL_INFO : self::LOG_LEVEL_ERROR,
713 "YMARKET_USER_CREATE",
715 empty($arErrors) ?
GetMessage(
"SALE_YMH_USER_PROFILE_CREATED") : print_r($arErrors,
true)
731 $psId = intval($psId);
734 $arPropFilter =
array(
735 "PERSON_TYPE_ID" => $this->personTypeId,
741 $arPropFilter[
"RELATED"][
"PAYSYSTEM_ID"] = $psId;
742 $arPropFilter[
"RELATED"][
"TYPE"] =
"WITH_NOT_RELATED";
745 if ($deliveryId <>
'')
747 $arPropFilter[
"RELATED"][
"DELIVERY_ID"] = $deliveryId;
748 $arPropFilter[
"RELATED"][
"TYPE"] =
"WITH_NOT_RELATED";
759 while ($arOrderProps = $dbOrderProps->Fetch())
761 if($this->orderProps[
"FIO"] <>
'' && $arOrderProps[
"CODE"] == $this->orderProps[
"FIO"] && !empty($buyer))
763 $fio = $buyer[
"firstName"];
765 if(isset($buyer[
"middleName"]))
766 $fio .=
' '.$buyer[
"middleName"];
768 if(isset($buyer[
"lastName"]))
769 $fio .=
' '.$buyer[
"lastName"];
773 elseif($this->orderProps[
"EMAIL"] <>
'' && $arOrderProps[
"CODE"] == $this->orderProps[
"EMAIL"] && isset($buyer[
"email"]))
774 $arResult[$arOrderProps[
"ID"]] = $buyer[
"email"];
775 elseif($this->orderProps[
"PHONE"] <>
'' && $arOrderProps[
"CODE"] == $this->orderProps[
"PHONE"] && isset($buyer[
"phone"]))
776 $arResult[$arOrderProps[
"ID"]] = $buyer[
"phone"];
777 elseif($this->orderProps[
"ZIP"] <>
'' && $arOrderProps[
"CODE"] == $this->orderProps[
"ZIP"] && isset($address[
"postcode"]))
778 $arResult[$arOrderProps[
"ID"]] = $address[
"postcode"];
779 elseif($this->orderProps[
"CITY"] <>
'' && $arOrderProps[
"CODE"] == $this->orderProps[
"CITY"])
780 $arResult[$arOrderProps[
"ID"]] = $address[
"city"];
781 elseif($this->orderProps[
"LOCATION"] <>
'' && $arOrderProps[
"CODE"] == $this->orderProps[
"LOCATION"])
785 $dbRes = \Bitrix\Sale\Location\LocationTable::getById($locationId);
787 if($loc =
$dbRes->fetch())
788 $arResult[$arOrderProps[
"ID"]] = $loc[
'CODE'];
791 elseif($this->orderProps[
"ADDRESS"] <>
'' && $arOrderProps[
"CODE"] == $this->orderProps[
"ADDRESS"])
802 if(isset($address[
"postcode"]))
803 $strAddr .= $address[
"postcode"].
", ";
805 $strAddr .= $address[
"country"].
", ".$address[
"city"].
", ";
807 if(isset($address[
"street"]))
808 $strAddr .=
GetMessage(
"SALE_YMH_ADDRESS_STREET").
" ".$address[
"street"].
", ";
810 if(isset($address[
"subway"]))
811 $strAddr .=
GetMessage(
"SALE_YMH_ADDRESS_SUBWAY").
" ".$address[
"subway"].
", ";
813 $strAddr .=
GetMessage(
"SALE_YMH_ADDRESS_HOUSE").
" ".$address[
"house"];
815 if(isset($address[
"block"]))
816 $strAddr .=
", ".GetMessage(
"SALE_YMH_ADDRESS_BLOCK").
" ".$address[
"block"];
818 if(isset($address[
"entrance"]))
819 $strAddr .=
", ".GetMessage(
"SALE_YMH_ADDRESS_ENTRANCE").
" ".$address[
"entrance"];
821 if(isset($address[
"entryphone"]))
822 $strAddr .=
", ".GetMessage(
"SALE_YMH_ADDRESS_ENTRYPHONE").
" ".$address[
"entryphone"];
824 if(isset($address[
"floor"]))
825 $strAddr .=
", ".GetMessage(
"SALE_YMH_ADDRESS_FLOOR").
" ".$address[
"floor"];
827 if(isset($address[
"apartment"]))
828 $strAddr .=
", ".GetMessage(
"SALE_YMH_ADDRESS_APARTMENT").
" ".$address[
"apartment"];
830 if(isset($address[
"recipient"]))
831 $strAddr .=
", ".GetMessage(
"SALE_YMH_ADDRESS_RECIPIENT").
" ".$address[
"recipient"];
833 if(isset($address[
"phone"]))
834 $strAddr .=
", ".GetMessage(
"SALE_YMH_ADDRESS_PHONE").
" ".$address[
"phone"];
848 protected function processOrderAcceptRequest($arPostData)
853 $deliveryId = $arPostData[
"order"][
"delivery"][
"id"];
854 $paySystemId = $this->mapPaySystems[$arPostData[
"order"][
"paymentMethod"]];
859 'reason' =>
'OUT_OF_DATE'
863 if(!Loader::includeModule(
'iblock'))
866 if(!Loader::includeModule(
'catalog'))
869 $dbRes = \Bitrix\Sale\TradingPlatform\OrderTable::getList(
array(
872 "EXTERNAL_ORDER_ID" => $arPostData[
"order"][
"id"]
878 if($orderCorrespondence =
$dbRes->fetch())
879 $orderId = $orderCorrespondence[
"ORDER_ID"];
885 if($this->orderProps[
"LOCATION"] <>
'')
887 $locationId = $this->locationMapper->getLocationId($arPostData[
"order"][
"delivery"][
"region"]);
889 if(intval($locationId) <= 0)
892 self::LOG_LEVEL_INFO,
893 "YMARKET_LOCATION_MAPPING",
894 $arPostData[
"order"][
"delivery"][
"region"][
"name"],
903 $arPostData[
"order"][
"delivery"][
"address"],
910 $res = \Bitrix\Sale\TradingPlatform\YMarket\Order::create(
array(
911 'CURRENCY' => $arPostData[
'order'][
'currency'],
912 'SITE_ID' => $this->siteId,
913 'PERSON_TYPE_ID' => $this->personTypeId,
914 'PROPERTIES' => $properties,
915 'CART_ITEMS' => $arPostData[
'order'][
'items'],
916 'IS_ACCEPT_OLD_PRICE' => $this->isAcceptOldPrice
919 if(!
$res->isSuccess())
922 self::LOG_LEVEL_ERROR,
923 "YMARKET_ORDER_CREATE_ERROR",
924 'processOrderAcceptRequest',
925 implode(
'; ',
$res->getErrorMessages())
939 $this->setBasketOldPrice($arPostData[
'order'][
'items'],
$order);
942 GetMessage(
'SALE_YMARKET_ORDER_PRICE_CHANGED')
951 YMarket\Order::createShipment(
$order, $deliveryId, $arPostData[
"order"][
"delivery"][
"price"]);
952 YMarket\Order::createPayment(
$order, $paySystemId);
954 $order->setField(
"XML_ID", self::XML_ID_PREFIX.$arPostData[
"order"][
"id"]);
958 $productIds =
array();
960 foreach ($arPostData[
"order"][
"items"] as $item)
961 $productIds[] = $item[
'offerId'];
963 $dbRes = \Bitrix\Iblock\ElementTable::getList(
array(
969 'IBLOCK_EXTERNAL_ID' =>
'IBLOCK.XML_ID',
973 $parentsIds =
array();
975 while($iblockElement =
$dbRes->fetch())
977 $xmls[$iblockElement[
'ID']] =
array();
979 if($iblockElement[
"XML_ID"] <>
'')
980 $xmls[$iblockElement[
'ID']][
"PRODUCT_XML_ID"] = $iblockElement[
"XML_ID"];
982 if($iblockElement[
"IBLOCK_EXTERNAL_ID"] <>
'')
983 $xmls[$iblockElement[
'ID']][
"CATALOG_XML_ID"] = $iblockElement[
"IBLOCK_EXTERNAL_ID"];
985 if(mb_strpos($iblockElement[
"XML_ID"],
'#') ===
false && $parent = \CCatalogSku::GetProductInfo($iblockElement[
'ID']))
986 $parentsIds[$iblockElement[
'ID']] = $parent[
'ID'];
989 if(!empty($parentsIds))
991 $dbRes = \Bitrix\Iblock\ElementTable::getList(
array(
992 'filter' =>
array(
'=ID' => array_unique($parentsIds)),
993 'select' =>
array(
'ID',
'XML_ID')
996 while($parent =
$dbRes->fetch())
998 if($parent[
'XML_ID'] ==
'')
1001 foreach($parentsIds as $childId => $parentId)
1002 if($parentId == $parent[
'ID'])
1003 $xmls[$childId][
"PRODUCT_XML_ID"] = $parent[
'XML_ID'].
'#'.$xmls[$childId][
"PRODUCT_XML_ID"];
1008 $basket =
$order->getBasket();
1010 foreach($basket->getBasketItems() as $basketItem)
1014 if(!empty($xmls[$productId][
'PRODUCT_XML_ID']))
1015 $basketItem->setField(
"PRODUCT_XML_ID", $xmls[$productId][
'PRODUCT_XML_ID']);
1017 if(!empty($xmls[$productId][
'CATALOG_XML_ID']))
1018 $basketItem->setField(
"CATALOG_XML_ID", $xmls[$productId][
'CATALOG_XML_ID']);
1021 if(!empty($arPostData[
"order"][
"notes"]))
1022 $order->setField(
'USER_DESCRIPTION', $arPostData[
"order"][
"notes"]);
1025 $r = new \Bitrix\Sale\Result();
1026 $r->addWarning(
new \Bitrix\Main\
Error(
GetMessage(
'SALE_YMH_MARK_BUYER_WAITING'),
'YMARKET_BUYER_INFO_WAITING'));
1027 \Bitrix\Sale\EntityMarker::addMarker(
$order,
$order, $r);
1028 $order->setField(
'MARKED',
'Y');
1032 if(!
$res->isSuccess())
1035 self::LOG_LEVEL_ERROR,
1036 "YMARKET_PLATFORM_ORDER_ADD_ERROR",
1037 $arPostData[
"order"][
"id"],
1038 implode(
'; ',
$res->getErrorMessages())
1044 if (\Bitrix\Sale\Integration\Numerator\NumeratorOrder::isUsedNumeratorForOrder())
1053 $res = \Bitrix\Sale\TradingPlatform\OrderTable::add(
array(
1054 "ORDER_ID" =>
$res->getId(),
1056 "EXTERNAL_ORDER_ID" => $arPostData[
"order"][
"id"]
1059 if(!
$res->isSuccess())
1062 self::LOG_LEVEL_ERROR,
1063 "YMARKET_PLATFORM_ORDER_ADD_ERROR",
1064 $arPostData[
"order"][
"id"],
1065 implode(
'; ',
$res->getErrorMessages())
1072 $result[
"order"][
"accepted"] = TRUE;
1073 $result[
"order"][
"id"] =
'"'.$orderId.
'"';
1074 unset(
$result[
"order"][
"reason"]);
1077 self::LOG_LEVEL_INFO,
1078 "YMARKET_ORDER_CREATE",
1079 $arPostData[
"order"][
"id"],
1088 $yandexBasketPrice = 0;
1091 if(isset($item[
'price']))
1092 $yandexBasketPrice += $item[
'price']*$item[
'count'];
1094 return round(
$order->getBasket()->getPrice(), 2) == round($yandexBasketPrice, 2);
1099 $basket =
$order->getBasket();
1102 foreach($basket->getBasketItems() as $basketItem)
1106 if($item[
'offerId'] != $basketItem->getProductId())
1109 $basketItem->setField(
"CUSTOM_PRICE",
'Y');
1110 $basketItem->setField(
"PRICE", $item[
'price']);
1123 (isset($arPostData[
"order"])
1124 && isset($arPostData[
"order"][
"id"])
1125 && isset($arPostData[
"order"][
"currency"])
1126 && isset($arPostData[
"order"][
"creationDate"])
1127 && isset($arPostData[
"order"][
"itemsTotal"])
1128 && isset($arPostData[
"order"][
"total"])
1129 && isset($arPostData[
"order"][
"status"])
1130 && isset($arPostData[
"order"][
"fake"])
1131 && isset($arPostData[
"order"][
"buyer"])
1132 && isset($arPostData[
"order"][
"items"]) && is_array($arPostData[
"order"][
"items"])
1133 && isset($arPostData[
"order"][
"delivery"]) && is_array($arPostData[
"order"][
"delivery"])) ||
true;
1145 protected function processOrderStatusRequest($arPostData)
1153 $orderClass = $registry->getOrderClassName();
1155 $dbOrder = $orderClass::getList(
array(
1156 'filter' =>
array(
"XML_ID" => self::XML_ID_PREFIX.$arPostData[
"order"][
"id"]),
1157 'select' =>
array(
'ID',
'LID',
'XML_ID')
1160 if($arOrder = $dbOrder->fetch())
1162 $order = $orderClass::load($arOrder[
'ID']);
1165 switch ($arPostData[
"order"][
"status"])
1168 $locationId = $this->locationMapper->getLocationId($arPostData[
"order"][
"delivery"][
"region"]);
1170 if($locationId ===
false)
1173 self::LOG_LEVEL_INFO,
1174 "YMARKET_LOCATION_MAPPING",
1175 $arPostData[
"order"][
"delivery"][
"region"][
"name"],
1180 if(isset($arPostData[
"order"][
"paymentMethod"]) && $arPostData[
"order"][
"paymentMethod"] ==
"YANDEX")
1191 if(!
$res->isSuccess())
1194 self::LOG_LEVEL_INFO,
1195 "YMARKET_INCOMING_ORDER_STATUS",
1197 implode(
'; ',
$res->getErrorMessages())
1205 $arPostData[
"order"][
"delivery"][
"address"],
1206 $arPostData[
"order"][
"buyer"],
1207 isset($this->mapPaySystems[$arPostData[
"order"][
"paymentMethod"]]) ? $this->mapPaySystems[$arPostData[
"order"][
"paymentMethod"]] :
"",
1208 $arPostData[
"order"][
"delivery"][
"id"],
1212 if(!empty($arOrderPropsValues))
1214 $propCollection =
$order->getPropertyCollection();
1215 $res = $propCollection->setValuesFromPost(
array(
'PROPERTIES' => $arOrderPropsValues),
array());
1217 if(!
$res->isSuccess())
1220 self::LOG_LEVEL_INFO,
1221 "YMARKET_INCOMING_ORDER_STATUS",
1222 'Set order properties',
1223 implode(
'; ',
$res->getErrorMessages())
1236 EntityMarker::deleteByFilter(
array(
1237 '=ORDER_ID' =>
$order->getId(),
1238 '=ENTITY_TYPE' => EntityMarker::ENTITY_TYPE_ORDER,
1239 '=ENTITY_ID' =>
$order->getId(),
1240 '=CODE' =>
'YMARKET_BUYER_INFO_WAITING'
1243 $order->setField(
'MARKED',
'N');
1247 if(!empty($arPostData[
"order"][
"notes"]) &&
$order->getField(
'USER_DESCRIPTION') != $arPostData[
"order"][
"notes"])
1248 $order->setField(
'USER_DESCRIPTION',
$order->getField(
'USER_DESCRIPTION').
"\n".$arPostData[
"order"][
"notes"]);
1252 if(!
$res->isSuccess())
1255 self::LOG_LEVEL_INFO,
1256 "YMARKET_INCOMING_ORDER_STATUS",
1258 implode(
'; ',
$res->getErrorMessages())
1264 if(!empty($arErrors))
1267 self::LOG_LEVEL_ERROR,
1268 "YMARKET_INCOMING_ORDER_STATUS",
1269 $arPostData[
"order"][
"id"],
1270 print_r($arErrors,
true)
1276 self::LOG_LEVEL_INFO,
1277 "YMARKET_INCOMING_ORDER_STATUS",
1278 $arPostData[
"order"][
"id"],
1279 GetMessage(
"SALE_YMH_INCOMING_ORDER_STATUS_PROCESSING").
": ".$arOrder[
"ID"]
1293 if(isset($arPostData[
"order"][
"substatus"]))
1294 $reason = $arPostData[
"order"][
"substatus"];
1322 if($this->communicationFormat == self::JSON)
1339 if($this->communicationFormat == self::JSON)
1341 header(
'Content-Type: application/json');
1342 $result = json_encode($arData);
1355 $incomingToken =
"";
1357 if($this->authType ==
"HEADER")
1360 $incomingToken =
$_SERVER[
"REMOTE_USER"];
1362 $incomingToken =
$_SERVER[
"REDIRECT_REMOTE_USER"];
1364 $incomingToken =
$_SERVER[
"HTTP_AUTHORIZATION"];
1366 elseif($this->authType ==
"URL")
1369 $incomingToken =
$_REQUEST[
"auth-token"];
1372 if($incomingToken ==
"" && intval(
$_SERVER[
"argc"]) > 0)
1376 $e = explode(
"=", $arg);
1378 if(
count($e) == 2 && $e[0] ==
"auth-token")
1379 $incomingToken = $e[1];
1398 self::LOG_LEVEL_DEBUG,
1399 "YMARKET_INCOMING_REQUEST",
1401 print_r($arPostData,
true)
1414 self::$isYandexRequest =
true;
1420 $arResult = $this->processCartRequest($arPostData);
1426 $arResult = $this->processOrderAcceptRequest($arPostData);
1428 $arResult = $this->processOrderStatusRequest($arPostData);
1438 self::LOG_LEVEL_DEBUG,
1439 "YMARKET_INCOMING_REQUEST_RESULT",
1445 'OnSaleYandexMarketRequest_'.$reqObject.$method,
1447 "POST_DATA" => $arPostData,
1452 return $arPreparedResult;
1466 if(
$message && $this->logLevel >= self::LOG_LEVEL_ERROR)
1468 self::LOG_LEVEL_ERROR,
1469 "YMARKET_REQUEST_ERROR",
1487 $this->yandexApiUrl ==
''
1488 || $this->campaignId ==
''
1491 || $this->oAuthToken ==
''
1492 || $this->oAuthClientId ==
''
1493 || $this->oAuthLogin ==
''
1497 $format = $this->communicationFormat == self::JSON ?
'json' :
'xml';
1498 $url = $this->yandexApiUrl.
"campaigns/".$this->campaignId.
"/orders/".
$orderId.
"/status.".$format;
1500 $http = new \Bitrix\Main\Web\HttpClient(
array(
1502 "socketTimeout" => 30,
1503 "streamTimeout" => 30,
1515 $arQuery[
"order"][
"substatus"] = $substatus;
1518 if($this->communicationFormat == self::JSON)
1521 $http->setHeader(
"Content-Type",
"application/".$format);
1522 $http->setHeader(
"Authorization",
'OAuth oauth_token="'.$this->oAuthToken.
1523 '", oauth_client_id="'.$this->oAuthClientId.
1524 '", oauth_login="'.$this->oAuthLogin.
'"',
false);
1535 foreach(
$errors as $errorCode => $errMes)
1536 $message .= $errorCode.
": ".$errMes;
1540 $headerStatus = $http->getStatus();
1542 if ($headerStatus == 200)
1553 $res = $http->getResult();
1554 $message =
"HTTP error code: ".$headerStatus.
"(".
$res.
")";
1556 if($headerStatus == 403)
1559 if($headerStatus == 500)
1561 $intervalSeconds = 3600;
1562 $timeToStart = ConvertTimeStamp(strtotime(date(
'Y-m-d H:i:s', time() + $intervalSeconds)),
'FULL');
1564 '\CSaleYMHandler::sendStatusAgent("'.
$orderId.
'","'.
$status.
'", "'.$substatus.
'", "'.$this->siteId.
'");',
1579 $bResult ? self::LOG_LEVEL_INFO : self::LOG_LEVEL_ERROR,
1580 "YMARKET_STATUS_CHANGE",
1589 $r = new \Bitrix\Sale\Result();
1591 \Bitrix\Sale\EntityMarker::addMarker(
$order,
$order, $r);
1592 $order->setField(
'MARKED',
'Y');
1613 $YMHandler->sendStatus($yandexOrderId, $yandexStatus, $substatus);
1628 $res = \Bitrix\Sale\Internals\OrderTable::getList(
array(
1633 'select' =>
array(
"LID",
"XML_ID",
"YANDEX_ID" =>
"SOURCE.EXTERNAL_ORDER_ID"),
1636 'data_type' =>
'\Bitrix\Sale\TradingPlatform\OrderTable',
1637 'reference' =>
array(
1638 'ref.ORDER_ID' =>
'this.ID',
1640 'join_type' =>
'left'
1645 if($arOrder =
$res->fetch())
1658 return !empty($arOrder[
"YANDEX_ID"]);
1668 $value =
$params->getParameter(
"VALUE");
1669 $oldValue =
$params->getParameter(
"OLD_VALUE");
1671 if (!static::isOrderEntity(
$order))
1676 if($value == $oldValue)
1688 public static function onSaleOrderCanceled(Bitrix\Main\Event
$params)
1695 if (!static::isOrderEntity(
$order))
1703 if(!
$order->isCanceled())
1718 public static function onSaleShipmentDelivery(Bitrix\Main\Event
$params)
1721 $shipment =
$params->getParameter(
"ENTITY");
1723 if (!static::isOrderEntity($shipment))
1728 if($shipment->getId() <= 0)
1732 $collection = $shipment->getCollection();
1734 if(!$collection->isAllowDelivery())
1743 public static function onSaleOrderPaid(Bitrix\Main\Event
$params)
1748 if (!static::isOrderEntity(
$order))
1765 public static function onShipmentDeducted(Bitrix\Main\Event
$params)
1768 $shipment =
$params->getParameter(
"ENTITY");
1770 if (!static::isOrderEntity($shipment))
1775 if($shipment->getId() <= 0)
1779 $collection = $shipment->getCollection();
1781 if(!$collection->isShipped())
1797 if(self::$isYandexRequest)
1806 if(!empty($arOrder) && isset($arOrder[
"YANDEX_ID"]) && !self::$isYandexRequest)
1809 array(
"SITE_ID"=> $arOrder[
"LID"])
1818 $YMHandler->sendStatus($arOrder[
"YANDEX_ID"], $yandexStatus, $substatus);
1828 "USER_UNREACHABLE" =>
GetMessage(
"SALE_YMH_SUBSTATUS_USER_UNREACHABLE"),
1829 "USER_CHANGED_MIND" =>
GetMessage(
"SALE_YMH_SUBSTATUS_USER_CHANGED_MIND"),
1830 "USER_REFUSED_DELIVERY"=>
GetMessage(
"SALE_YMH_SUBSTATUS_USER_REFUSED_DELIVERY"),
1831 "USER_REFUSED_PRODUCT" =>
GetMessage(
"SALE_YMH_SUBSTATUS_USER_REFUSED_PRODUCT"),
1832 "SHOP_FAILED" =>
GetMessage(
"SALE_YMH_SUBSTATUS_SHOP_FAILED"),
1833 "REPLACING_ORDER" =>
GetMessage(
"SALE_YMH_SUBSTATUS_REPLACING_ORDER"),
1834 "PROCESSING_EXPIRED" =>
GetMessage(
"SALE_YMH_SUBSTATUS_PROCESSING_EXPIRED"),
1835 "RESERVATION_EXPIRED" =>
GetMessage(
"SALE_YMH_SUBSTATUS_RESERVATION_EXPIRED"),
1836 "USER_NOT_PAID" =>
GetMessage(
"SALE_YMH_SUBSTATUS_USER_NOT_PAID"),
1837 "USER_REFUSED_QUALITY" =>
GetMessage(
"SALE_YMH_SUBSTATUS_USER_REFUSED_QUALITY"),
1844 $result =
'<select width="100%" name="'.$name.
'"';
1852 $result .=
'<option value="'.$statusId.
'"';
1854 if(
$val == $statusId)
1857 $result .=
'>'.$statusName.
'</option>';
1872 $id =
"cancelreasonid_".rand();
1876 $tmpId = $id.
'_'.(
$start++);
1878 '<label for="'.$tmpId.
'">'.
1879 '<input id="'.$tmpId.
'" type="radio" name="'.
$name.
'_rb" value="'.$statusId.
'">'.
1880 '<span id="'.$tmpId.
'_lbl">'.$statusName.
'</span>'.
1883 'BX("'.$tmpId.
'").onchange=function(){if(this.checked == true) { BX("'.$id.
'").innerHTML = BX("'.$tmpId.
'_lbl").innerHTML; }};'.
1892 "YMARKET_STATUS_CHANGE" =>
"[YMARKET_STATUS_CHANGE] ".
GetMessage(
"SALE_YMH_LOG_TYPE_STATUS_CHANGE"),
1893 "YMARKET_INCOMING_ORDER_STATUS" =>
"[YMARKET_INCOMING_ORDER_STATUS] ".
GetMessage(
"SALE_YMH_LOG_TYPE_INCOMING_ORDER_STATUS"),
1894 "YMARKET_USER_CREATE" =>
"[YMARKET_USER_CREATE] ".
GetMessage(
"SALE_YMH_LOG_TYPE_USER_CREATE"),
1895 "YMARKET_ORDER_CREATE" =>
"[YMARKET_ORDER_CREATE] ".
GetMessage(
"SALE_YMH_LOG_TYPE_ORDER_CREATE"),
1896 "YMARKET_REQUEST_ERROR" =>
"[YMARKET_REQUEST_ERROR] ".
GetMessage(
"SALE_YMH_LOG_TYPE_REQUEST_ERROR"),
1897 "YMARKET_INCOMING_REQUEST" =>
"[YMARKET_INCOMING_REQUEST] ".
GetMessage(
"SALE_YMH_LOG_TYPE_INCOMING_REQUEST"),
1898 "YMARKET_INCOMING_REQUEST_RESULT" =>
"[YMARKET_INCOMING_REQUEST_RESULT] ".
GetMessage(
"SALE_YMH_LOG_TYPE_INCOMING_REQUEST_RESULT"),
1899 "YMARKET_LOCATION_MAPPING" =>
"[YMARKET_LOCATION_MAPPING] ".
GetMessage(
"SALE_YMH_LOG_TYPE_YMARKET_LOCATION_MAPPING"),
1900 "YMARKET_ORDER_STATUS_CHANGE" =>
"[YMARKET_ORDER_STATUS_CHANGE] ".
GetMessage(
"SALE_YMH_LOG_TYPE_ORDER_STATUS_CHANGE"),
1901 "YMARKET_ORDER_CREATE_ERROR" =>
"[YMARKET_ORDER_CREATE_ERROR] ".
GetMessage(
"SALE_YMH_LOG_TYPE_ORDER_CREATE_ERROR"),
1915 if($this->logLevel < $level)
1920 "AUDIT_TYPE_ID" =>
$type,
1921 "MODULE_ID" =>
"sale",
1922 "ITEM_ID" => $itemId,
1939 if(!is_array(
$order) || !isset(
$order[
"ID"]) || $yandexStatus ==
'')
1944 if(!isset(
$settings[
"STATUS_IN"][$yandexStatus]) ||
$settings[
"STATUS_IN"][$yandexStatus] ==
'')
1948 $bitrixStatus =
$settings[
"STATUS_IN"][$yandexStatus];
1950 switch($bitrixStatus)
1955 $errorMessageTmp =
"";
1962 if ($ex->GetID() !=
"ALREADY_FLAG")
1963 $errorMessageTmp .= $ex->GetString();
1966 $errorMessageTmp .=
GetMessage(
"ERROR_CANCEL_ORDER").
". ";
1969 if($errorMessageTmp !=
"")
1972 self::LOG_LEVEL_ERROR,
1973 "YMARKET_INCOMING_ORDER_STATUS",
1981 self::LOG_LEVEL_INFO,
1982 "YMARKET_INCOMING_ORDER_STATUS",
1990 case "ALLOW_DELIVERY":
2012 $result ? self::LOG_LEVEL_INFO : self::LOG_LEVEL_ERROR,
2013 "YMARKET_ORDER_STATUS_CHANGE",
2015 (
$result ?
GetMessage(
"SALE_YMH_LOG_TYPE_ORDER_STATUS_CHANGE_OK") :
GetMessage(
"SALE_YMH_LOG_TYPE_ORDER_STATUS_CHANGE_ERROR")).
" (".$bitrixStatus.
")"
2028 $eventManager->registerEventHandler(
'sale',
'OnSaleStatusOrderChange',
'sale',
'CSaleYMHandler',
'onSaleStatusOrderChange');
2029 $eventManager->registerEventHandler(
'sale',
'OnSaleOrderCanceled',
'sale',
'CSaleYMHandler',
'onSaleOrderCanceled');
2030 $eventManager->registerEventHandler(
'sale',
'OnSaleShipmentDelivery',
'sale',
'CSaleYMHandler',
'onSaleShipmentDelivery');
2031 $eventManager->registerEventHandler(
'sale',
'OnSaleOrderPaid',
'sale',
'CSaleYMHandler',
'onSaleOrderPaid');
2032 $eventManager->registerEventHandler(
'sale',
'OnShipmentDeducted',
'sale',
'CSaleYMHandler',
'onShipmentDeducted');
2044 $eventManager->unRegisterEventHandler(
'sale',
'OnSaleStatusOrderChange',
'sale',
'CSaleYMHandler',
'onSaleStatusOrderChange');
2045 $eventManager->unRegisterEventHandler(
'sale',
'OnSaleOrderCanceled',
'sale',
'CSaleYMHandler',
'onSaleOrderCanceled');
2046 $eventManager->unRegisterEventHandler(
'sale',
'OnSaleShipmentDelivery',
'sale',
'CSaleYMHandler',
'onSaleShipmentDelivery');
2047 $eventManager->unRegisterEventHandler(
'sale',
'OnSaleOrderPaid',
'sale',
'CSaleYMHandler',
'onSaleOrderPaid');
2048 $eventManager->unRegisterEventHandler(
'sale',
'OnShipmentDeducted',
'sale',
'CSaleYMHandler',
'onShipmentDeducted');
2063 $res = Bitrix\Sale\TradingPlatformTable::add(
array(
2064 "CODE" => static::TRADING_PLATFORM_CODE,
2067 "DESCRIPTION" =>
GetMessage(
"SALE_YMH_DESCRIPTION"),
2077 "CONDITION" =>
"#^/bitrix/services/ymarket/#",
2080 "PATH" =>
"/bitrix/services/ymarket/index.php",
2081 "SITE_ID" =>
$site[
"ID"]
2086 return $res->isSuccess();
2098 static::eventsStop();
2105 Bitrix\Sale\TradingPlatformTable::delete(static::TRADING_PLATFORM_CODE);
2107 static::setActivity(
false);
2112 "CONDITION" =>
"#^/bitrix/services/ymarket/#",
2113 "PATH" =>
"/bitrix/services/ymarket/index.php"
2128 $orderNew = CSaleOrder::GetByID($newOrderId);
2129 $orderNew[
"BASKET_ITEMS"] =
array();
2131 $userEmail = $buyer[
"email"];
2132 $fio = $buyer[
"last-name"].(isset($buyer[
"first-name"]) ? $buyer[
"first-name"] :
"");
2135 array(
"SET_PARENT_ID" =>
"DESC",
"TYPE" =>
"DESC",
"NAME" =>
"ASC"),
2136 array(
"ORDER_ID" => $newOrderId),
2140 "ID",
"PRICE",
"QUANTITY",
"NAME"
2144 while ($arBasketTmp = $dbBasketTmp->GetNext())
2146 $orderNew[
"BASKET_ITEMS"][] = $arBasketTmp;
2149 $orderNew[
"BASKET_ITEMS"] =
getMeasures($orderNew[
"BASKET_ITEMS"]);
2151 foreach ($orderNew[
"BASKET_ITEMS"] as
$val)
2156 $measure = (isset(
$val[
"MEASURE_TEXT"])) ?
$val[
"MEASURE_TEXT"] :
GetMessage(
"SALE_YMH_SHT");
2158 $strOrderList .=
"</br>";
2163 "ORDER_ID" => $orderNew[
"ACCOUNT_NUMBER"],
2164 "ORDER_DATE" =>
Date(
$DB->DateFormatToPHP(CLang::GetDateFormat(
"SHORT", $this->siteId))),
2165 "ORDER_USER" => $fio,
2167 "BCC" => COption::GetOptionString(
"sale",
"order_email",
"order@".
$_SERVER[
'SERVER_NAME']),
2168 "EMAIL" =>
array(
"PAYER_NAME" => $fio,
"USER_EMAIL" => $userEmail),
2169 "ORDER_LIST" => $strOrderList,
2170 "SALE_EMAIL" => COption::GetOptionString(
"sale",
"order_email",
"order@".
$_SERVER[
'SERVER_NAME']),
2171 "DELIVERY_PRICE" => $orderNew[
"DELIVERY_PRICE"],
2174 $eventName =
"SALE_NEW_ORDER";
2177 foreach(
GetModuleEvents(
"sale",
"OnOrderNewSendEmail",
true) as $arEvent)
2197 $tag =
"YANDEX_MARKET_".$code;
2198 $problemsCount = intval(
Option::get(
"sale", $tag, 0, $this->siteId));
2200 if($problemsCount < 3)
2202 Option::set(
"sale", $tag, $problemsCount+1, $this->siteId);
2212 "MESSAGE" =>
GetMessage(
"SALE_YMH_ADMIN_NOTIFY_".
$code,
array(
"##LANGUAGE_ID##" => LANGUAGE_ID)),
2213 "TAG" =>
"YANDEX_MARKET_".
$code,
2214 "MODULE_ID" =>
"SALE",
2215 "ENABLE_CLOSE" =>
"Y"
2229 return array(
'YANDEX',
'CASH_ON_DELIVERY',
'CARD_ON_DELIVERY');
2235 if($value !=
"Y" || self::$isYandexRequest)
2251 if($value !=
"Y" || self::$isYandexRequest)
2260 if($value !=
"Y" || self::$isYandexRequest)
2269 if($value !=
"Y" || self::$isYandexRequest)
2280 $locationId = $this->locationMapper->getLocationId($delivery[
'region']);
2284 foreach ($this->mapDelivery as $deliveryId => $deliveryType)
2286 if($deliveryType ==
"")
2290 "ID" => $deliveryId,
2291 "LID" => $this->siteId,
2293 "LOCATION" => $locationId,
2294 "+<=ORDER_PRICE_FROM" => $price,
2295 "+>=ORDER_PRICE_TO" => $price
2298 if(intval($weight) > 0)
2300 $filter[
"+<=WEIGHT_FROM"] = $weight;
2301 $filter[
"+>=WEIGHT_TO"] = $weight;
2305 array(
"SORT"=>
"ASC",
"NAME"=>
"ASC"),
2309 if($arDelivery = $dbDelivery->Fetch())
2312 $arDelivery[
"PERIOD_FROM"],
2313 $arDelivery[
"PERIOD_TO"],
2314 $arDelivery[
"PERIOD_TYPE"]
2317 if(!empty($arDates))
2319 $arDeliveryTmp =
array(
2320 "id" => $arDelivery[
"ID"],
2321 "type" =>$deliveryType,
2322 "serviceName" => mb_substr($arDelivery[
"NAME"], 0, 50),
2323 "price" => round(floatval($arDelivery[
"PRICE"]), 2),
2327 if($deliveryType ==
"PICKUP" && !empty($this->outlets))
2328 foreach($this->outlets as $outlet)
2329 $arDeliveryTmp[
"outlets"][] =
array(
"id" => intval($outlet));
2343 return $this->locationMapper->getLocationByCityName($cityName);
2368 while ($arSite =
$rsSites->Fetch())
2370 $serSiteSett = COption::GetOptionString(
"sale",
"yandex_market_purchase_settings",
"", $arSite[
"ID"],
true);
2371 $siteSett = unserialize($serSiteSett, [
'allowed_classes' =>
false]);
2373 if(is_array($siteSett) && !empty($siteSett))
2379 $serSiteSett = COption::GetOptionString(
"sale",
"yandex_market_purchase_settings",
"");
2380 $siteSett = unserialize($serSiteSett, [
'allowed_classes' =>
false]);
2382 if(is_array($siteSett) && !empty($siteSett))
2383 $settings[CSite::GetDefSite()] = $siteSett;
2418 if(intval($platformId) <= 0)
2422 $helper = $conn->getSqlHelper();
2424 $correspondence = $conn->query(
2427 WHERE '.$helper->quote(
'TRADING_PLATFORM_ID').
'='.$platformId
2431 if ($correspondence->fetch())
2434 if($conn->getType() ==
"mssql")
2437 $lenOpName =
"LENGTH";
2439 if($conn->getType() ==
"oracle")
2440 $right =
'SUBSTR(XML_ID, -('.$lenOpName.
'(XML_ID)-'.mb_strlen(self::XML_ID_PREFIX).
'))';
2442 $right =
'RIGHT(XML_ID, '.$lenOpName.
'(XML_ID)-'.mb_strlen(self::XML_ID_PREFIX).
')';
2445 $sql =
'INSERT INTO '.\Bitrix\Sale\TradingPlatform\OrderTable::getTableName().
' (ORDER_ID, EXTERNAL_ORDER_ID, TRADING_PLATFORM_ID)
2446 SELECT ID, '.
$right.
', '.$platformId.
'
2448 WHERE XML_ID LIKE '.
"'".self::XML_ID_PREFIX.
"%'";
2452 $conn->queryExecute($sql);
2457 "SEVERITY" =>
"ERROR",
2458 "AUDIT_TYPE_ID" =>
"YMARKET_XML_ID_CONVERT_INSERT_ERROR",
2459 "MODULE_ID" =>
"sale",
2460 "ITEM_ID" =>
"YMARKET",
2461 "DESCRIPTION" => __FILE__.
': '.$e->getMessage(),
2482 if(!empty($siteSettings[
'DELIVERIES']) && is_array($siteSettings[
'DELIVERIES']))
2484 $newDeliveries =
array();
2485 $message .=
'Deliveries ids converted: ';
2487 foreach($siteSettings[
'DELIVERIES'] as $oldId =>
$type)
2490 $message .= $oldId.
'->'.$newId.
', ';
2492 if(intval($newId) > 0)
2493 $newDeliveries[$newId] =
$type;
2503 "SEVERITY" =>
"INFO",
2504 "AUDIT_TYPE_ID" =>
"YANDEX_MARKET_DELIVERY_PS_IDS_CONVERTED",
2505 "MODULE_ID" =>
"sale",
2506 "ITEM_ID" =>
"YMARKET",
2510 $res = Bitrix\Sale\TradingPlatformTable::update(
2515 if(
$res->isSuccess())
2527 public function loadOrderByYandexOrderId($yandexOrderId)
2529 if ($yandexOrderId ==
'')
2535 $orderClass = $registry->getOrderClassName();
2539 '=SOURCE.EXTERNAL_ORDER_ID' => $yandexOrderId,
2542 'select' =>
array(
'*'),
2545 'data_type' =>
'\Bitrix\Sale\TradingPlatform\OrderTable',
2546 'reference' =>
array(
2547 'ref.ORDER_ID' =>
'this.ID',
2549 'join_type' =>
'left'
2554 $list = $orderClass::loadByFilter(
$filter);
2556 if (!empty($list) && is_array($list))
2557 return reset($list);
2568 return self::$isYandexRequest;
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static getConnection($name="")
static get($moduleId, $name, $default="", $siteId=false)
static set($moduleId, $name, $value="", $siteId="")
static getIdByCode($code)
static init($mode=self::MODE_CLIENT, $params=[], $clearStorage=false)
static getSiteCurrency($siteId)
static getInstance($type)
const REGISTRY_TYPE_ORDER
static GetList($arSort=[], $arFilter=[])
static GetList($arOrder=array("SORT"=> "ASC", "NAME"=> "ASC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array(' *'))
static CancelOrder($ID, $val, $description="")
static StatusOrder($ID, $val)
static DeductOrder($ID, $val, $description="", $bAutoDeduction=true, $arStoreBarcodeOrderFormData=array(), $recurringID=0)
static DoAutoRegisterUser($autoEmail, $payerName, $siteId, &$arErrors, $arOtherFields=null)
static GetAnonymousUserID()
static SetStatus($status)
static isSetItem($arItem)
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static send($eventId, $arParams)
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetByID($statusId, $languageId=LANGUAGE_ID, $type=null)
static getSettings($cached=true)
static saveSettings($arSettings)
static getOrderSubstatuses()
checkOrderAcceptStructure($arPostData)
static unInstall($deleteRecord=true)
getTimeInterval($period, $type)
mapYandexStatusToOrder($order, $yandexStatus, $cancelReason="")
static onSaleDeductOrder($orderId, $value)
static onSaleCancelOrder($orderId, $value, $description)
const NOT_ACCEPT_OLD_PRICE
static takeOutOrdersToCorrespondentTable()
createUser($buyer, $address, $region)
static getSettingsBySiteId($siteId, $cached=true)
processError($status="", $message="")
processRequest($reqObject, $method, $postData)
checkBasketPrice(array $items, \Bitrix\Sale\Order $order)
static setActivity($activity)
static getCancelReasonsAsRadio($name, $id=false, $val=false)
static OnEventLogGetAuditTypes()
makeAdditionalOrderProps($address, $buyer, $psId, $deliveryId, $locationId)
static settingsConverter()
static onSalePayOrder($orderId, $value)
static onSaleStatusOrder($orderId, $status, $substatus=false)
sendStatus($orderId, $status, $substatus=false)
sendEmailNewOrder($newOrderId, $buyer)
processCustomEvents($eventName, array $params)
getDeliveryOptions($delivery, $price, $weight=0)
extractPostData($postData)
const TRADING_PLATFORM_CODE
$defaultDeliveryPeriodFrom
checkOrderStatusRequest($arPostData)
static isOrderFromYandex($orderId)
__construct($arParams=array())
getDeliveryDates($from, $to, $type)
checkTimeInterval($today, $nextDate)
static convertDeliveryAndPSIds()
static getCancelReasonsAsSelect($name, $val=false, $id=false)
static sendStatusAgent($yandexOrderId, $yandexStatus, $substatus, $siteId)
static isOrderEntity(Sale\Internals\Entity $entity)
log($level, $type, $itemId, $description)
static getExistPaymentMethods()
createAddressString($address)
static getOrderInfo($orderId)
checkCartStructure($arPostData)
static onSaleDeliveryOrder($orderId, $value)
getLocationByCityName($cityName)
</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
$_SERVER["DOCUMENT_ROOT"]
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
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($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
SaleFormatCurrency($fSum, $strCurrency, $OnlyValue=false, $withoutFormat=false)
getMeasures($arBasketItems)
if($_SERVER $YMHandler['REQUEST_METHOD']=='POST' &&count($_POST)<=0)