5 "\\Bitrix\\Sale\\Delivery\\Services\\Automatic" =>
"lib/delivery/services/automatic.php",
6 "\\Bitrix\\Sale\\Delivery\\Services\\NewToAutomatic" =>
"lib/delivery/services/new_to_automatic.php",
33 return \Bitrix\Sale\Delivery\Services\Automatic::getRegisteredHandlers(
"SID");
48 if(preg_replace(
'/[^A-Z_]/',
'',
$key) == $fieldName)
56 foreach(
$filter as $fName => $fValue)
57 if(preg_replace(
'/[^A-Z_]/',
'', $fName) == $fieldName)
65 return preg_match(
'/^new(\d+)(:profile)?/', $sid) == 1;
70 if(!self::isSidNew($sid))
74 preg_match(
'/^new(\d+)(:profile)?/', $sid,
$matches);
81 $result = array_intersect_key($oldFilter,
Bitrix\Sale\Delivery\Services\Table::getMap());
85 '=CLASS_NAME' =>
array(
86 '\\Bitrix\\Sale\\Delivery\\Services\\Automatic',
87 '\\Bitrix\\Sale\\Delivery\\Services\\AutomaticProfile'
92 '!=CLASS_NAME' =>
array(
93 '\\Bitrix\\Sale\\Delivery\\Services\\Group',
94 '\\Bitrix\\Sale\\Delivery\\Services\\Configurable',
95 '\\Bitrix\\Sale\\Delivery\\Services\\EmptyDeliveryService'
101 if(empty($oldFilter))
106 if(self::isFieldInFilter(
"SID", $oldFilter))
110 elseif(self::isFieldInFilter(
"ID", $oldFilter))
118 if(self::isSidNew($sid))
128 if(self::isFieldInFilter(
"ACTIVE", $oldFilter))
132 if(
$result[
"=ACTIVE"] ==
"ALL")
138 if(self::isFieldInFilter(
"HANDLER", $oldFilter))
144 if(self::isFieldInFilter(
"PATH", $oldFilter))
159 if(preg_replace(
'/[^A-Z_]/',
'',
$key) == $fieldName)
168 switch($restriction[
"CLASS_NAME"])
170 case '\Bitrix\Sale\Delivery\Restrictions\BySite':
171 $intersect = array_intersect(self::getFilterValue(
"SITE_ID",
$filter), $restriction[
"PARAMS"][
"SITE_ID"]);
175 case '\Bitrix\Sale\Delivery\Restrictions\ByWeight':
178 floatval(
$filter[
"COMPABILITY"][
"WEIGHT"]) < floatval($restriction[
"PARAMS"][
"MIN_WEIGHT"])
180 floatval(
$filter[
"COMPABILITY"][
"WEIGHT"]) > floatval($restriction[
"PARAMS"][
"MAX_WEIGHT"])
185 case '\Bitrix\Sale\Delivery\Restrictions\ByPrice':
188 floatval(
$filter[
"COMPABILITY"][
"PRICE"]) < floatval($restriction[
"PARAMS"][
"MIN_PRICE"])
190 floatval(
$filter[
"COMPABILITY"][
"PRICE"]) > floatval($restriction[
"PARAMS"][
"MAX_PRICE"])
195 case '\Bitrix\Sale\Delivery\Restrictions\ByLocation':
196 case '\Bitrix\Sale\Delivery\Restrictions\ByPaySystem':
210 if(self::isFieldInFilter2(
"SITE",
$arFilter))
239 'order' => array_intersect_key($arSort,
Bitrix\Sale\Delivery\Services\Table::getMap()),
240 'filter' => self::convertFilterOldToNew(
$arFilter));
244 $dbRes = \Bitrix\Sale\Delivery\Services\Table::getList(
$params);
248 $dbRstrRes = \Bitrix\Sale\Internals\ServiceRestrictionTable::getList(
array(
251 "=SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
255 while($restr = $dbRstrRes->fetch())
257 if(!self::checkRestrictionFilter($restr,
$arFilter))
260 if($restr[
"CLASS_NAME"] ==
'\Bitrix\Sale\Delivery\Restrictions\BySite' && !empty($restr[
"PARAMS"][
"SITE_ID"]))
262 if(is_array($restr[
"PARAMS"][
"SITE_ID"]))
264 reset($restr[
"PARAMS"][
"SITE_ID"]);
265 $service[
"LID"] = current($restr[
"PARAMS"][
"SITE_ID"]);
267 elseif(is_string($restr[
"PARAMS"][
"SITE_ID"]))
269 $service[
"LID"] = $restr[
"PARAMS"][
"SITE_ID"];
286 if(get_parent_class(
$service[
'CLASS_NAME']) ==
'Bitrix\Sale\Delivery\Services\Base')
287 if(
$service[
'CLASS_NAME']::canHasProfiles())
300 if (!is_array($arProfiles) ||
count($arProfiles) <= 0)
303 $srv[
"PROFILES"] = $arProfiles;
311 $result->InitFromArray($services);
322 if (!defined(
'SALE_DH_INITIALIZED'))
327 if (
$currency != $arHandler[
"BASE_CURRENCY"])
330 if (is_array($arHandler[
"PROFILES"]))
332 $arProfilesList = $arHandler[
"PROFILES"];
333 foreach ($arProfilesList as
$profile_id => $arProfile)
335 if (is_array($arProfile[
"RESTRICTIONS_WEIGHT"]) &&
count($arProfile[
"RESTRICTIONS_WEIGHT"]) > 0)
338 $arOrder[
"WEIGHT"] = doubleval($arOrder[
"WEIGHT"]);
340 if ($arOrder[
"WEIGHT"] < $arProfile[
"RESTRICTIONS_WEIGHT"][0])
348 is_set($arProfile[
"RESTRICTIONS_WEIGHT"], 1)
350 Doubleval($arProfile[
"RESTRICTIONS_WEIGHT"][1]) > 0
352 $arOrder[
"WEIGHT"] > $arProfile[
"RESTRICTIONS_WEIGHT"][1]
363 if (is_array($arProfile[
"RESTRICTIONS_SUM"]) &&
count($arProfile[
"RESTRICTIONS_SUM"]) > 0)
366 $arOrder[
"PRICE"] < $arProfile[
"RESTRICTIONS_SUM"][0]
369 is_set($arProfile[
"RESTRICTIONS_SUM"], 1)
371 Doubleval($arProfile[
"RESTRICTIONS_SUM"][1]) > 0
373 $arOrder[
"PRICE"] > $arProfile[
"RESTRICTIONS_SUM"][1]
382 if (is_array($arProfile[
"RESTRICTIONS_DIMENSIONS"]) &&
count($arProfile[
"RESTRICTIONS_DIMENSIONS"]) > 0)
384 if (!self::checkDimensions($arOrder[
"MAX_DIMENSIONS"], $arProfile[
"RESTRICTIONS_DIMENSIONS"]))
392 if (intval($arProfile[
"RESTRICTIONS_DIMENSIONS_SUM"]) > 0)
394 if (!self::checkDimensionsSum($arOrder[
"ITEMS"], intval($arProfile[
"RESTRICTIONS_DIMENSIONS_SUM"])))
401 if (intval($arProfile[
"RESTRICTIONS_MAX_SIZE"]) > 0)
403 if (!self::checkMaxSize($arOrder[
"ITEMS"], intval($arProfile[
"RESTRICTIONS_MAX_SIZE"])))
411 if (is_callable($arHandler[
"COMPABILITY"]))
413 $arHandlerProfilesList = call_user_func($arHandler[
"COMPABILITY"], $arOrder, $arHandler[
"CONFIG"][
"CONFIG"]);
415 if (is_array($arHandlerProfilesList))
417 foreach ($arProfilesList as
$profile_id => $arHandler)
419 if (!in_array(
$profile_id, $arHandlerProfilesList))
426 return $arProfilesList;
443 if (!defined(
'SALE_DH_INITIALIZED'))
450 if ($arHandler = $rsDeliveryHandler->Fetch())
452 if (isset($arHandler[
"GETEXTRAINFOPARAMS"]) && is_callable($arHandler[
"GETEXTRAINFOPARAMS"]))
454 $result = call_user_func($arHandler[
"GETEXTRAINFOPARAMS"], $arOrder, $arHandler[
"CONFIG"][
"CONFIG"], $profileId,
$siteId);
470 if (!defined(
'SALE_DH_INITIALIZED'))
476 if ($arHandler = $rsDeliveryHandler->Fetch())
478 if (isset($arHandler[
"GETORDERSACTIONSLIST"]) && is_callable($arHandler[
"GETORDERSACTIONSLIST"]))
480 $result = call_user_func($arHandler[
"GETORDERSACTIONSLIST"]);
499 if (!defined(
'SALE_DH_INITIALIZED'))
504 if ($arHandler = $rsDeliveryHandler->Fetch())
506 if (isset($arHandler[
"EXECUTEACTION"]) && is_callable($arHandler[
"EXECUTEACTION"]))
508 $result = call_user_func($arHandler[
"EXECUTEACTION"], $actionId, $arDId[
"PROFILE"], $arOrder, $arHandler[
"CONFIG"][
"CONFIG"]);
521 static $cache =
array();
530 while($handler =
$dbRes->Fetch())
531 $cache[
$SITE_ID][$SID][] = $handler;
545 $numberFieldsProf =
array(
"RESTRICTIONS_WEIGHT",
"RESTRICTIONS_SUM",
"TAX_RATE",
"RESTRICTIONS_MAX_SIZE",
"RESTRICTIONS_DIMENSIONS_SUM");
547 if(isset($arData[
"PROFILES"]) && is_array($arData[
"PROFILES"]))
549 foreach ($arData[
"PROFILES"] as $profileId => $arProfile)
551 foreach ($numberFieldsProf as $fName)
553 if (isset($arProfile[$fName]))
555 if(!is_array($arProfile[$fName]))
556 $arProfile[$fName] =
array($arProfile[$fName]);
558 foreach ($arProfile[$fName] as $fValue)
594 $res = \Bitrix\Sale\Delivery\Services\Table::getList(
array(
597 '=CLASS_NAME' =>
'\Bitrix\Sale\Delivery\Services\Automatic'
601 while($handler =
$res->fetch())
603 $rstrRes = \Bitrix\Sale\Internals\ServiceRestrictionTable::getList(
array(
605 "=SERVICE_ID" => $handler[
"ID"],
606 "=CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\BySite',
607 "=SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
611 $restrict = $rstrRes->fetch();
613 if(!is_array($restrict) && !
$siteId)
616 if(in_array(
$siteId, $restrict[
"PARAMS"][
"SITE_ID"]))
634 "SERVICE_ID" => $deliveryId,
635 "CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\BySite',
636 "SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
644 $rstrRes = \Bitrix\Sale\Internals\ServiceRestrictionTable::getList(
array(
646 "=SERVICE_ID" => $deliveryId,
647 "=CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\BySite',
648 "=SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
652 if($restrict = $rstrRes->fetch())
653 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::update($restrict[
"ID"], $rfields);
655 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::add($rfields);
659 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::add($rfields);
662 return $rres->isSuccess();
676 "SERVICE_ID" => $deliveryId,
677 "CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\ByWeight',
678 "SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
680 "MIN_WEIGHT" => $weightParams[0],
681 "MAX_WEIGHT" => $weightParams[1]
687 $rstrRes = \Bitrix\Sale\Internals\ServiceRestrictionTable::getList(
array(
689 "=SERVICE_ID" => $deliveryId,
690 "=SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
691 "=CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\ByWeight'
695 if($restrict = $rstrRes->fetch())
696 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::update($restrict[
"ID"], $rfields);
698 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::add($rfields);
702 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::add($rfields);
705 return $rres->isSuccess();
711 "SERVICE_ID" => $deliveryId,
712 "CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\ByPublicMode',
713 "SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
715 "PUBLIC_SHOW" => ($publicShow) ?
'Y' :
'N'
721 $rstrRes = \Bitrix\Sale\Internals\ServiceRestrictionTable::getList(
array(
723 "=SERVICE_ID" => $deliveryId,
724 "=SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
725 "=CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\ByPublicMode'
729 if($restrict = $rstrRes->fetch())
730 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::update($restrict[
"ID"], $rfields);
732 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::add($rfields);
736 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::add($rfields);
739 return $rres->isSuccess();
754 "SERVICE_ID" => $deliveryId,
755 "SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
756 "CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\ByPrice',
758 "MIN_PRICE" => $priceParams[0],
759 "MAX_PRICE" => $priceParams[1],
766 $rstrRes = \Bitrix\Sale\Internals\ServiceRestrictionTable::getList(
array(
768 "=SERVICE_ID" => $deliveryId,
769 "=SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
770 "=CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\ByPrice'
774 if($restrict = $rstrRes->fetch())
775 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::update($restrict[
"ID"], $rfields);
777 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::add($rfields);
781 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::add($rfields);
784 return $rres->isSuccess();
798 "SERVICE_ID" => $deliveryId,
799 "SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
800 "CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\ByDimensions',
810 $rstrRes = \Bitrix\Sale\Internals\ServiceRestrictionTable::getList(
array(
812 "=SERVICE_ID" => $deliveryId,
813 "=SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
814 "=CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\ByDimensions'
818 if($restrict = $rstrRes->fetch())
819 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::update($restrict[
"ID"], $rfields);
821 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::add($rfields);
825 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::add($rfields);
828 return $rres->isSuccess();
842 "SERVICE_ID" => $deliveryId,
843 "SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
844 "CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\ByMaxSize',
846 "MAX_SIZE" => $maxSize,
852 $rstrRes = \Bitrix\Sale\Internals\ServiceRestrictionTable::getList(
array(
854 "=SERVICE_ID" => $deliveryId,
855 "=SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
856 "=CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\ByMaxSize'
860 if($restrict = $rstrRes->fetch())
861 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::update($restrict[
"ID"], $rfields);
863 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::add($rfields);
867 $rres = \Bitrix\Sale\Internals\ServiceRestrictionTable::add($rfields);
870 return $rres->isSuccess();
879 $id = isset($serviceParams[
"ID"]) ? $serviceParams[
"ID"] :
false;
881 $update = intval($id) > 0;
882 $fields = array_intersect_key($arData,
Bitrix\Sale\Delivery\Services\Table::getMap());
888 if(!isset($arData[
"CLASS_NAME"]))
889 $fields[
"CLASS_NAME"] =
'\Bitrix\Sale\Delivery\Services\Automatic';
891 $fields[
"CLASS_NAME"] = $arData[
"CLASS_NAME"];
894 if(isset($arData[
"PARENT_ID"]))
895 $fields[
"PARENT_ID"] = $arData[
"PARENT_ID"];
899 if (!defined(
'SALE_DH_INITIALIZED'))
904 if(isset($serviceParams[
"CONFIG"]))
905 $fields[
"CONFIG"] = $serviceParams[
"CONFIG"];
909 if (isset($arData[
"CONFIG"]))
911 if (isset($handlers[
$code][
"DBSETSETTINGS"]) && is_callable($handlers[
$code][
"DBSETSETTINGS"]))
913 if (!$strOldSettings = call_user_func($handlers[
$code][
"DBSETSETTINGS"], $arData[
"CONFIG"]))
915 $APPLICATION->ThrowException(
"Can't save delivery services's old settings");
921 $strOldSettings = $arData[
"CONFIG"];
924 $strOldSettings = serialize($strOldSettings);
925 $fields[
"CONFIG"][
"MAIN"][
"OLD_SETTINGS"] = $strOldSettings;
928 if(!empty($arData[
"BASE_CURRENCY"]))
929 $fields[
"CURRENCY"] = $arData[
"BASE_CURRENCY"];
930 elseif(!empty($serviceParams[
"CURRENCY"]))
931 $fields[
"CURRENCY"] = $serviceParams[
"CURRENCY"];
933 $fields[
"CURRENCY"] = $handlers[
$code][
"BASE_CURRENCY"];
935 $fields[
"CURRENCY"] = COption::GetOptionString(
'sale',
'default_currency',
'RUB');
937 if (!empty($arData[
"SID"]))
939 $fields[
"CONFIG"][
"MAIN"][
"SID"] = $arData[
"SID"];
942 if(isset($arData[
"TAX_RATE"]) && floatval($arData[
"TAX_RATE"]) > 0)
944 $fields[
"CONFIG"][
"MAIN"][
"MARGIN_VALUE"] = $arData[
"TAX_RATE"];
945 $fields[
"CONFIG"][
"MAIN"][
"MARGIN_TYPE"] =
"%";
949 $fields[
"CONFIG"][
"MAIN"][
"MARGIN"] = 0;
951 if (!empty($arData[
"PROFILE_ID"]))
952 $fields[
"CONFIG"][
"MAIN"][
"PROFILE_ID"] = $arData[
"PROFILE_ID"];
954 if (isset($arData[
"LOGOTIP"]) && is_array($arData[
"LOGOTIP"]))
956 $fields[
"LOGOTIP"] = $arData[
"LOGOTIP"];
957 $fields[
"LOGOTIP"][
"MODULE_ID"] =
"sale";
958 CFile::SaveForDB(
$fields,
"LOGOTIP",
"sale/delivery/logotip");
964 $res = \Bitrix\Sale\Delivery\Services\Manager::add(
$fields);
966 if(!
$res->isSuccess())
968 throw new \Bitrix\Main\SystemException(implode(
"\n",
$res->getErrorMessages()));
974 if (is_array($arData[
"PROFILES"]))
976 foreach($arData[
"PROFILES"] as $profileCode => $profileData)
978 if($profileData[
"TITLE"] <>
'')
979 $name = $profileData[
"TITLE"];
980 elseif($handlers[
$code][
'PROFILES'][$profileCode][
'TITLE'] <>
'')
981 $name = $handlers[
$code][
'PROFILES'][$profileCode][
'TITLE'];
988 "DESCRIPTION" => isset($profileData[
"DESCRIPTION"]) ? $profileData[
"DESCRIPTION"] :
'',
989 "ACTIVE" => isset($profileData[
"ACTIVE"]) ? $profileData[
"ACTIVE"] :
"N",
990 "TAX_RATE" => isset($profileData[
"TAX_RATE"]) ? $profileData[
"TAX_RATE"] : 0,
991 "PARENT_ID" => isset($profileData[
"PARENT_ID"]) ? $profileData[
"PARENT_ID"] : $id,
992 "SORT" => isset($arData[
"SORT"]) ? $arData[
"SORT"] : 100,
993 "RESTRICTIONS_WEIGHT" => isset($profileData[
"RESTRICTIONS_WEIGHT"]) ? $profileData[
"RESTRICTIONS_WEIGHT"] :
false,
994 "RESTRICTIONS_SUM" => isset($profileData[
"RESTRICTIONS_SUM"]) ? $profileData[
"RESTRICTIONS_SUM"] :
false,
995 "RESTRICTIONS_DIMENSIONS" => isset($profileData[
"RESTRICTIONS_DIMENSIONS"]) ? $profileData[
"RESTRICTIONS_DIMENSIONS"] :
false,
996 "RESTRICTIONS_MAX_SIZE" => isset($profileData[
"RESTRICTIONS_MAX_SIZE"]) ? $profileData[
"RESTRICTIONS_MAX_SIZE"] : 0,
997 "RESTRICTIONS_DIMENSIONS_SUM" => isset($profileData[
"RESTRICTIONS_DIMENSIONS_SUM"]) ? $profileData[
"RESTRICTIONS_DIMENSIONS_SUM"] : 0,
998 "CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Services\AutomaticProfile',
999 "PROFILE_ID" => $profileCode
1008 if(!self::saveRestrictionBySiteId($id,
$siteId, $update))
1010 $APPLICATION->ThrowException(
"Can't save delivery restriction by site",
"SITE_ID");
1019 if(is_array($arData[
"RESTRICTIONS_WEIGHT"]) && (floatval($arData[
"RESTRICTIONS_WEIGHT"][0]) > 0 || floatval($arData[
"RESTRICTIONS_WEIGHT"][1]) > 0))
1021 if(!self::saveRestrictionByWeight($id, $arData[
"RESTRICTIONS_WEIGHT"], $update))
1023 $APPLICATION->ThrowException(
"Can't save delivery restriction by weight",
"RESTRICTIONS_WEIGHT");
1032 if(is_array($arData[
"RESTRICTIONS_SUM"]) && (floatval($arData[
"RESTRICTIONS_SUM"][0]) > 0 || floatval($arData[
"RESTRICTIONS_SUM"][1]) > 0))
1034 if(!self::saveRestrictionByPrice($id, $arData[
"RESTRICTIONS_SUM"],
$fields[
"CURRENCY"], $update))
1036 $APPLICATION->ThrowException(
"Can't save delivery restriction by sum",
"RESTRICTIONS_SUM");
1046 (is_array($arData[
"RESTRICTIONS_DIMENSIONS"])
1047 && (floatval($arData[
"RESTRICTIONS_DIMENSIONS"][0]) > 0
1048 || floatval($arData[
"RESTRICTIONS_DIMENSIONS"][1]) > 0
1049 || floatval($arData[
"RESTRICTIONS_DIMENSIONS"][3]) > 0
1054 if(!self::saveRestrictionByDimensions(
1057 "LENGTH" =>
count($arData[
"RESTRICTIONS_DIMENSIONS"][0]) > 0 ? $arData[
"RESTRICTIONS_DIMENSIONS"][0] : 0,
1058 "WIDTH" => isset($arData[
"RESTRICTIONS_DIMENSIONS"][1]) ? $arData[
"RESTRICTIONS_DIMENSIONS"][1] : 0,
1059 "HEIGHT" => isset($arData[
"RESTRICTIONS_DIMENSIONS"][2]) ? $arData[
"RESTRICTIONS_DIMENSIONS"][2] : 0
1065 $APPLICATION->ThrowException(
"Can't save delivery restriction by dimensions");
1074 if(floatval($arData[
"RESTRICTIONS_MAX_SIZE"]) > 0)
1076 if(!self::saveRestrictionByMaxSize($id, $arData[
"RESTRICTIONS_MAX_SIZE"], $update))
1078 $APPLICATION->ThrowException(
"Can't save delivery restriction by maxx size",
"RESTRICTIONS_MAX_SIZE");
1093 $dbRes = \Bitrix\Sale\Delivery\Services\Table::getList(
array(
1109 catch(\
Bitrix\Main\SystemException $e)
1111 $GLOBALS[
"APPLICATION"]->ThrowException($e->getMessage());
1121 $serviceRes = \Bitrix\Sale\Delivery\Services\Table::getList(
1123 'filter' =>
array(
"=CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Services\Automatic'),
1124 'select' =>
array(
"CODE")
1127 while(
$service = $serviceRes->fetch())
1136 $arEventsList =
array(
1137 "onSaleDeliveryHandlerCalculate",
1138 "onSaleDeliveryHandlerCalculate_".$SID,
1141 foreach ($arEventsList as
$event)
1147 if (is_array($arReturnTmp))
1148 $arReturn = $arReturnTmp;
1155 public static function execOldEventWithNewParams(
Bitrix\Main\Event
$params)
1158 if(!$shipment =
$params->getParameter(
"SHIPMENT"))
1159 return new \Bitrix\Main\EventResult(\
Bitrix\Main\EventResult::ERROR,
null,
'sale');
1161 $deliveryId = $shipment->getDeliveryId();
1163 if(intval($deliveryId) <= 0 && intval(
$params->getParameter(
"DELIVERY_ID")) > 0)
1164 $deliveryId = intval(
$params->getParameter(
"DELIVERY_ID"));
1166 if(intval($deliveryId) <= 0)
1167 return new \Bitrix\Main\EventResult(\
Bitrix\Main\EventResult::ERROR,
null,
'sale');
1170 if(!$deliverySrv = \
Bitrix\Sale\Delivery\Services\Manager::getObjectById($deliveryId))
1171 return new \Bitrix\Main\EventResult(\
Bitrix\Main\EventResult::ERROR,
null,
'sale');
1173 if(get_class($deliverySrv) !=
'Bitrix\Sale\Delivery\Services\AutomaticProfile')
1174 return new \Bitrix\Main\EventResult(\
Bitrix\Main\EventResult::ERROR,
null,
'sale');
1176 if(!
$code = $deliverySrv->getCode())
1177 return new \Bitrix\Main\EventResult(\
Bitrix\Main\EventResult::ERROR,
null,
'sale');
1183 throw new \Bitrix\Main\ArgumentNullException(
"params[RESULT]");
1185 if(!$collection = $shipment->getCollection())
1186 return new \Bitrix\Main\EventResult(\
Bitrix\Main\EventResult::ERROR,
null,
'sale');
1189 if(!
$order = $collection->getOrder())
1190 return new \Bitrix\Main\EventResult(\
Bitrix\Main\EventResult::ERROR,
null,
'sale');
1192 $oldOrder = \Bitrix\Sale\Compatible\OrderCompatibility::convertOrderToArray(
$order);
1196 "VALUE" =>
$result->getPrice(),
1197 "TRANSIT" =>
$result->getPeriodDescription(),
1199 "RESULT" =>
$result->isSuccess() ?
"OK" :
"ERROR"
1203 $oldResult[
"RESULT"] =
"NEXT_STEP";
1206 $oldResult[
"RESULT"] =
"NOTE";
1208 if(intval(
$result->getPacksCount()) > 0)
1209 $oldResult[
"PACKS_COUNT"] =
$result->getPacksCount();
1212 $oldResult[
"TEMP"] = CUtil::JSEscape(
$result->getTmpData());
1216 $result->setDeliveryPrice($oldResult[
"VALUE"]);
1218 if($oldResult[
"RESULT"] ==
"ERROR")
1221 $result->addError(
new \
Bitrix\Main\Entity\EntityError($oldResult[
"TEXT"]));
1223 elseif($oldResult[
"RESULT"] ==
"NEXT_STEP")
1228 if(isset($oldResult[
"TRANSIT"]))
$result->setPeriodDescription($oldResult[
"TRANSIT"]);
1229 if(isset($oldResult[
"TEXT"]))
$result->setDescription($oldResult[
"TEXT"]);
1230 if(isset($oldResult[
"PACKS_COUNT"]))
$result->setPacksCount($oldResult[
"PACKS_COUNT"]);
1231 if(isset($oldResult[
"TEMP"]))
$result->setTmpData($oldResult[
"TEMP"]);
1271 if (!defined(
'SALE_DH_INITIALIZED'))
1277 if (!$arHandler = $rsDeliveryHandler->Fetch())
1280 "RESULT" =>
"ERROR",
1281 "TEXT" =>
GetMessage(
"SALE_DH_ERROR_HANDLER_NOT_INSTALLED")
1285 if (is_callable($arHandler[
"CALCULATOR"]))
1287 $arConfig = $arHandler[
"CONFIG"][
"CONFIG"];
1292 $arHandler[
"BASE_CURRENCY"]
1295 if (
$res = call_user_func($arHandler[
"CALCULATOR"], $profile, $arConfig, $arOrder,
$STEP, $TMP))
1302 "VALUE" => doubleval(
$res)
1309 "RESULT" =>
"ERROR",
1310 "TEXT" => $ex->GetString(),
1322 $arReturn[
"RESULT"] ==
"OK"
1324 $currency != $arHandler[
"BASE_CURRENCY"]
1326 CModule::IncludeModule(
'currency')
1331 $arHandler[
"BASE_CURRENCY"],
1336 $arReturn[
"VALUE"] *= 1 + ($arHandler[
"TAX_RATE"]/100);
1338 if(isset($arHandler[
'PROFILES'][$profile][
'TAX_RATE']))
1339 $arReturn[
"VALUE"] *= 1 + (floatval($arHandler[
'PROFILES'][$profile][
'TAX_RATE'])/100);
1348 "RESULT" =>
"ERROR",
1349 "TEXT" =>
GetMessage(
"SALE_DH_ERROR_WRONG_HANDLER_FILE")
1364 !is_array($arOrderDimensions)
1366 !is_array($arRestrictDimensions)
1368 empty($arOrderDimensions)
1370 empty($arRestrictDimensions)
1372 count($arOrderDimensions) != $dimCount
1374 count($arRestrictDimensions) != $dimCount
1380 rsort($arOrderDimensions, SORT_NUMERIC);
1381 rsort($arRestrictDimensions, SORT_NUMERIC);
1383 for (
$i=0;
$i < $dimCount;
$i++)
1386 floatval($arRestrictDimensions[
$i]) <= 0
1388 $arOrderDimensions[
$i] <=0
1394 if($arOrderDimensions[
$i] > $arRestrictDimensions[
$i])
1413 $maxDimensionSum = floatval($maxDimensionSum);
1415 if(is_array($arItems) && $maxDimensionSum > 0)
1417 foreach ($arItems as $arItem)
1419 if(!self::isDimensionsExist($arItem))
1422 $itemDimSumm = floatval($arItem[
"WIDTH"])+floatval($arItem[
"HEIGHT"])+floatval($arItem[
"LENGTH"]);
1424 if($itemDimSumm > $maxDimensionSum)
1444 $maxSize = floatval($maxSize);
1446 if(is_array($arItems) && $maxSize > 0)
1449 foreach ($arItems as $arItem)
1451 if(!self::isDimensionsExist($arItem))
1455 floatval($arItem[
"WIDTH"]) > $maxSize
1457 floatval($arItem[
"HEIGHT"]) > $maxSize
1459 floatval($arItem[
"LENGTH"]) > $maxSize
1476 private static function isDimensionsExist($arItem)
1479 isset($arItem[
"WIDTH"]) && floatval($arItem[
"WIDTH"]) > 0
1481 isset($arItem[
"HEIGHT"]) && floatval($arItem[
"HEIGHT"]) > 0
1483 isset($arItem[
"LENGTH"]) && floatval($arItem[
"LENGTH"]) > 0
1494 "REQUEST_SELF" =>
GetMessage(
"SALE_DH_ACTION_REQUEST_SELF"),
1495 "REQUEST_TAKE" =>
GetMessage(
"SALE_DH_ACTION_REQUEST_TAKE")
1506 $result = new \Bitrix\Sale\Result();
1509 if(!
$con->isTableExists(
"b_sale_delivery_handler"))
1512 $sqlHelper =
$con->getSqlHelper();
1513 $deliveryRes =
$con->query(
'SELECT * FROM b_sale_delivery_handler WHERE CONVERTED != \'Y\'');
1514 $tablesToUpdate =
array(
1516 'b_sale_order_history',
1522 while($delivery = $deliveryRes->fetch())
1524 if($delivery[
"HID"] ==
'')
1530 if(!isset($handlers[$delivery[
"HID"]]))
1533 "SEVERITY" =>
"ERROR",
1534 "AUDIT_TYPE_ID" =>
"SALE_CONVERTER_ERROR",
1535 "MODULE_ID" =>
"sale",
1536 "ITEM_ID" =>
"CAllSaleDeliveryHandler::convertToNew()",
1537 "DESCRIPTION" =>
"Can't find delivery handler for registered HID: \"".$delivery[
"HID"].
"\"",
1544 if($delivery[
"PROFILES"] <>
'')
1545 $delivery[
"PROFILES"] = unserialize($delivery[
"PROFILES"], [
'allowed_classes' =>
false]);
1547 $delivery[
"PROFILES"] = $handlers[$delivery[
"HID"]][
"PROFILES"];
1550 if($delivery[
"PROFILES"] ==
false || !is_array($delivery[
"PROFILES"]) || empty($delivery[
"PROFILES"] ))
1555 "SEVERITY" =>
"ERROR",
1556 "AUDIT_TYPE_ID" =>
"SALE_CONVERTER_ERROR",
1557 "MODULE_ID" =>
"sale",
1558 "ITEM_ID" =>
"CAllSaleDeliveryHandler::convertToNew()",
1559 "DESCRIPTION" =>
"Can't receive info about profiles. Delivery HID: \"".$delivery[
"HID"].
"\"",
1566 foreach($delivery[
"PROFILES"] as $id =>
$params)
1567 if(!isset($delivery[
"PROFILES"][$id][
"ACTIVE"]) || $delivery[
"ACTIVE"] ==
"N")
1568 $delivery[
"PROFILES"][$id][
"ACTIVE"] = $delivery[
"ACTIVE"];
1570 unset($delivery[
"ID"]);
1571 $delivery[
"CONFIG"] =
array();
1573 if ($delivery[
"SETTINGS"] <>
'')
1575 if(isset($handlers[$delivery[
"HID"]][
"DBGETSETTINGS"]) && is_callable($handlers[$delivery[
"HID"]][
"DBGETSETTINGS"]))
1576 $delivery[
"CONFIG"] = call_user_func($handlers[$delivery[
"HID"]][
"DBGETSETTINGS"], $delivery[
"SETTINGS"]);
1578 $delivery[
"CONFIG"] = $delivery[
"SETTINGS"];
1580 elseif(isset($handlers[$delivery[
"HID"]][
"GETCONFIG"]) && is_callable($handlers[$delivery[
"HID"]][
"GETCONFIG"]))
1583 $handlers[$delivery[
"HID"]][
"GETCONFIG"],
1584 $delivery[
"LID"] <>
'' ? $delivery[
"LID"] :
false
1589 if(!empty($arConfig[
"DEFAULT"]))
1591 $delivery[
"CONFIG"][
$key] = $arConfig[
"DEFAULT"];
1596 if(empty($delivery[
"NAME"]))
1598 if(!empty($handlers[$delivery[
"HID"]][
"NAME"]))
1599 $delivery[
"NAME"] = $handlers[$delivery[
"HID"]][
"NAME"];
1601 $delivery[
"NAME"] =
"-";
1604 $delivery[
"SID"] = $handlers[$delivery[
"HID"]][
"SID"];
1609 $delivery[
"LID"] <>
'' ? $delivery[
"LID"] :
false
1612 if(intval($id) <= 0)
1615 new \
Bitrix\Main\Entity\EntityError(
1616 "Can't convert delivery handler with hid: ".
1618 ($delivery[
"LID"] <>
'' ?
" for site: ".$delivery[
"LID"] :
"")
1625 $con->queryExecute(
"UPDATE b_sale_delivery_handler SET CONVERTED='Y' WHERE HID LIKE '".$sqlHelper->forSql($delivery[
"HID"]).
"'");
1628 foreach($delivery[
"PROFILES"] as $profileName => $profileData)
1630 $fullSid = $delivery[
"HID"].
":".$profileName;
1632 $ids[] = $profileId;
1634 if(intval($profileId) > 0)
1636 foreach($tablesToUpdate as $table)
1637 $con->queryExecute(
"UPDATE ".$table.
" SET DELIVERY_ID='".$sqlHelper->forSql($profileId).
"' WHERE DELIVERY_ID = '".$sqlHelper->forSql($fullSid).
"'");
1639 $con->queryExecute(
"UPDATE b_sale_delivery2paysystem SET DELIVERY_ID='".$sqlHelper->forSql($profileId).
"', DELIVERY_PROFILE_ID='##CONVERTED##' WHERE DELIVERY_ID = '".$sqlHelper->forSql($delivery[
"HID"]).
"' AND DELIVERY_PROFILE_ID='".$profileName.
"'");
1643 $result->addError(
new \
Bitrix\Main\Entity\EntityError(
"Cant determine id for profile code: ".$fullSid));
1647 $con->queryExecute(
"UPDATE b_sale_delivery2paysystem SET DELIVERY_ID='".$sqlHelper->forSql($id).
"', DELIVERY_PROFILE_ID='##CONVERTED##' WHERE DELIVERY_ID = '".$sqlHelper->forSql($delivery[
"HID"]).
"' AND (DELIVERY_PROFILE_ID='' OR DELIVERY_PROFILE_ID IS NULL)");
1649 $d2pRes = \Bitrix\Sale\Internals\DeliveryPaySystemTable::getList(
array(
1651 'DELIVERY_ID' => $ids
1653 'select' =>
array(
"DELIVERY_ID"),
1654 'group' =>
array(
"DELIVERY_ID")
1657 while($d2p = $d2pRes->fetch())
1659 $res = \Bitrix\Sale\Internals\ServiceRestrictionTable::add(
array(
1660 "SERVICE_ID" => $d2p[
"DELIVERY_ID"],
1661 "SERVICE_TYPE" => \
Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
1662 "CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Restrictions\ByPaySystem',
1666 if(!
$res->isSuccess())
1671 if($renameTable &&
$result->isSuccess())
1672 $con->renameTable(
'b_sale_delivery_handler',
'b_sale_delivery_handler_old');
1688 $filter =
array(
'=CLASS_NAME' =>
'\Bitrix\Sale\Delivery\Services\Automatic');
1690 $res = Bitrix\Sale\Delivery\Services\Table::getList(
array(
1692 'select' =>
array(
"ID",
"CODE",
"CONFIG")
1697 if(!empty(
$params[
"CONFIG"][
"MAIN"][
"SID"]))
1702 if(!empty($initedHandlersH[
$config[
"MAIN"][
"HANDLER"]][
"SID"]))
1703 $config[
"MAIN"][
"SID"] = $initedHandlersH[
$config[
"MAIN"][
"HANDLER"]][
"SID"];
1709 unset(
$config[
"MAIN"][
"HANDLER"]);
static getConnection($name="")
static registerAutoLoadClasses($moduleName, array $classes)
static deleteByDeliveryIdClassName($deliveryId, $className)
static getRegisteredHandlers($indexBy="")
static convertNewServiceToOld($service, $sid=false)
static delete($id, bool $checkServiceUsage=true)
static update($id, array $fields)
static convertNewServiceToOld($service)
static ConvertCurrency($valSum, $curFrom, $curTo, $valDate="")
static isFieldInFilter2($fieldName, $filter)
static GetHandlerExtraParams($SID, $profileId, $arOrder, $siteId=false)
static isFieldInFilter($fieldName, $filter)
static getActionsList($deliveryId)
static GetHandlerCompability($arOrder, $arHandler, $SITE_ID=SITE_ID)
static Calculate($STEP, $SID, $profile, $arOrder, $currency, $TMP=false, $SITE_ID=false)
static getIdFromNewSid($sid)
static CalculateFull($SID, $profile, $arOrder, $currency, $SITE_ID=false)
static saveRestrictionByWeight($deliveryId, array $weightParams, $update)
static checkMaxSize($arItems, $maxSize)
static convertToNewAgent($renameTable=false)
static convertFilterOldToNew(array $oldFilter)
static GetAdminList($arSort=array("SORT"=> "ASC"))
static convertConfigHandlerToSidAgent()
static checkDimensions($arOrderDimensions, $arRestrictDimensions)
static CheckFields($arData)
static saveRestrictionByPrice($deliveryId, array $priceParams, $currency, $update)
static saveRestrictionByDimensions($deliveryId, array $params, $update)
static saveRestrictionByPublicShow($deliveryId, $publicShow, $update)
static getServiceParams($sid, $siteId=false)
static GetBySID($SID, $SITE_ID=false)
static __getRegisteredHandlers()
static getFilterValue($fieldName, $filter)
static Set($code, $arData, $siteId=false)
static executeAction($deliveryId, $actionId, $arOrder)
static checkRestrictionFilter(array $restriction, array $filter)
static GetList($arSort=array("SORT"=> "ASC"), $arFilter=array())
static __executeCalculateEvents($SID, $profile, $arOrder, $arReturn)
static saveRestrictionBySiteId($deliveryId, $siteId, $update)
static checkDimensionsSum($arItems, $maxDimensionSum)
static saveRestrictionByMaxSize($deliveryId, $maxSize, $update)
static convertToNew($renameTable=false)
static getIdByCode($code)
static getDeliverySIDAndProfile($deliveryId)
static getFormatError($value, $formatName, $name)
static GetLangCurrency($siteId)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
while($arParentIBlockProperty=$dbParentIBlockProperty->Fetch()) $errorMessage
if(!\Bitrix\Main\Loader::includeModule('catalog')) $profile_id
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']
$GLOBALS['_____370096793']