3namespace Sale\Handlers\Delivery;
9 Bitrix\Main\Page\Asset,
10 Bitrix\Main\Config\Option,
11 Bitrix\Main\SystemException,
12 Bitrix\Main\Localization\Loc,
13 Bitrix\Main\ArgumentNullException,
14 Bitrix\Sale\Delivery\Services\Base,
15 Bitrix\Sale\Delivery\ExtraServices,
16 Bitrix\Sale\Location\ExternalTable,
17 Bitrix\Sale\Location\LocationTable,
18 Bitrix\Sale\Delivery\Services\Manager,
19 Bitrix\Sale\Delivery\ExtraServices\Table,
20 Bitrix\Sale\Location\Admin\LocationHelper,
21 Sale\Handlers\Delivery\Additional\Location,
22 Sale\Handlers\Delivery\Additional\RestClient,
23 Bitrix\Sale\Internals\ServiceRestrictionTable,
24 Sale\Handlers\Delivery\Additional\DeliveryRequests\RusPost,
25 Sale\Handlers\Delivery\Additional\RusPost\Reliability;
27Loc::loadMessages(__FILE__);
29Loader::registerAutoLoadClasses(
32 __NAMESPACE__.
'\Additional\Action' =>
'handlers/delivery/additional/action.php',
33 __NAMESPACE__.
'\AdditionalProfile' =>
'handlers/delivery/additional/profile.php',
34 __NAMESPACE__.
'\Additional\Location' =>
'handlers/delivery/additional/location.php',
35 __NAMESPACE__.
'\Additional\CacheManager' =>
'handlers/delivery/additional/cache.php',
36 __NAMESPACE__.
'\Additional\RestClient' =>
'handlers/delivery/additional/restclient.php',
37 __NAMESPACE__.
'\Additional\RusPost\Helper' =>
'handlers/delivery/additional/ruspost/helper.php',
38 __NAMESPACE__.
'\Additional\DeliveryRequests\RusPost\Handler' =>
'handlers/delivery/additional/deliveryrequests/ruspost/handler.php',
47class AdditionalHandler
extends Base
50 protected $serviceType =
"";
51 protected static $canHasProfiles =
true;
52 protected static $whetherAdminExtraServicesShow =
true;
53 protected $trackingClass =
'\Sale\Handlers\Delivery\AdditionalTracking';
54 protected $trackingTitle =
'';
55 protected $trackingDescription =
'';
56 protected $profilesListFull =
null;
57 protected $extraServicesList =
null;
59 const LOGO_FILE_ID_OPTION =
'handlers_dlv_add_lgotip';
67 public function __construct(
array $initParams)
69 parent::__construct($initParams);
71 if(isset($initParams[
'SERVICE_TYPE']) && $initParams[
'SERVICE_TYPE'] <>
'')
72 $this->serviceType = $initParams[
'SERVICE_TYPE'];
73 elseif(isset($this->config[
"MAIN"][
"SERVICE_TYPE"]))
74 $this->serviceType = $this->config[
"MAIN"][
"SERVICE_TYPE"];
76 if($this->serviceType ==
'')
77 throw new ArgumentNullException(
'initParams[SERVICE_TYPE]');
80 isset($initParams[
'CONFIG'][
'MAIN'][
'SERVICE_TYPE'])
81 && $initParams[
'CONFIG'][
'MAIN'][
'SERVICE_TYPE'] ===
"RUSPOST"
84 $this->setTrackingClass(
'\Bitrix\Sale\Delivery\Tracking\RusPost');
86 elseif(empty($this->config[
'MAIN'][
'TRACKING_TITLE']))
88 $this->trackingClass =
'';
91 if(intval($this->
id) <= 0)
93 $srvParams = $this->getServiceParams();
95 if(!empty($srvParams[
'NAME']))
96 $this->name = $srvParams[
'NAME'];
98 if(!empty($srvParams[
'DESCRIPTION']))
99 $this->description = $srvParams[
'DESCRIPTION'];
101 if(!empty($srvParams[
'LOGOTIP']))
102 $this->logotip = $srvParams[
'LOGOTIP'];
105 $this->deliveryRequestHandler = $this->getDeliveryRequestHandler();
111 public function getHandlerCode(): string
113 return 'BITRIX_ADDITIONAL_' . (string)$this->serviceType;
116 public function getDeliveryRequestHandler()
120 if($this->serviceType ==
"RUSPOST")
121 if(!empty($this->config[
"MAIN"][
"OTPRAVKA_AUTH_TOKEN"]) && !empty($this->config[
"MAIN"][
"OTPRAVKA_AUTH_KEY"]))
122 $result =
new RusPost\Handler($this);
130 public static function getClassTitle()
132 return Loc::getMessage(
"SALE_DLVRS_ADD_NAME");
138 public static function getClassDescription()
140 return Loc::getMessage(
"SALE_DLVRS_ADD_DESCRIPTION");
148 protected function getConfigStructure()
150 $fields = $this->getServiceParams();
153 throw new SystemException(Loc::getMessage(
'SALE_DLVRS_ADD_CONFIG_RECEIVE_ERROR'));
157 "TITLE" => Loc::getMessage(
"SALE_DLVRS_ADD_MAIN_TITLE"),
158 "DESCRIPTION" => Loc::getMessage(
"SALE_DLVRS_ADD_MAIN_DESCRIPTION"),
160 "SERVICE_TYPE_NAME" =>
array(
162 "NAME" => Loc::getMessage(
"SALE_DLVRS_ADD_SERVICE_TYPE"),
166 "SERVICE_TYPE" =>
array(
168 "NAME" =>
"SERVICE_TYPE",
170 "DEFAULT" => $this->serviceType
180 if($this->serviceType ==
"RUSPOST" && $this->
id <= 0 &&
$key ==
'SHIPPING_POINT')
190 "TYPE" =>
"DELIVERY_SECTION",
191 "NAME" =>Loc::getMessage(
'SALE_DLVRS_ADD_MAIN_DEFAULT_VALUES'),
195 "NAME" =>Loc::getMessage(
'SALE_DLVRS_ADD_MAIN_LENGTH_DEFAULT'),
200 "NAME" =>Loc::getMessage(
'SALE_DLVRS_ADD_MAIN_WIDTH_DEFAULT'),
205 "NAME" =>Loc::getMessage(
'SALE_DLVRS_ADD_MAIN_HEIGHT_DEFAULT'),
210 "NAME" =>Loc::getMessage(
'SALE_DLVRS_ADD_MAIN_WEIGHT_DEFAULT'),
220 public static function getSupportedServicesList()
226 $client =
new RestClient();
227 $res = $client->getDeliveryList();
229 if(
$res->isSuccess())
237 $nothingFound =
false;
242 if(
$error->getCode() === \Bitrix\Sale\Services\Base\RestClient::ERROR_NOTHING_FOUND)
244 $nothingFound =
true;
250 if(
$message ==
'verification_needed. License check failed.')
251 $notes[
$error->getCode()] = Loc::getMessage(
'SALE_DLVRS_ADD_LIST_LICENSE_WRONG');
262 if(empty(
$errors) && empty($notes))
264 if($nothingFound ===
false ||
$res->getErrorCollection()->count() !== 1)
266 $errors[] = Loc::getMessage(
'SALE_DLVRS_ADD_LIST_RECEIVE_ERROR');
278 protected function getServiceParams()
281 $client =
new RestClient();
282 $res = $client->getDeliveryFields($this->serviceType);
284 if(
$res->isSuccess())
287 $logoId = intval($this->getLogoFileId());
291 $logo = \CFile::GetByID($logoId)->Fetch();
296 if(($logoId <= 0 || !$logo) && !empty(
$result[
'LOGOTIP'][
'CONTENT']) && !empty(
$result[
'LOGOTIP'][
'NAME']))
298 $tmpDir = \CTempFile::GetDirectoryName();
300 $filePath = $tmpDir.
"/".
$result[
'LOGOTIP'][
'NAME'];
302 $res = File::putFileContents(
304 base64_decode(
$result[
'LOGOTIP'][
'CONTENT'])
309 $file = \CFile::MakeFileArray($tmpDir.
"/".
$result[
'LOGOTIP'][
'NAME']);
310 $file[
'MODULE_ID'] =
"sale";
311 $logoId = intval(\CFile::SaveFile($file,
"sale/delivery/logotip"));
312 $this->setLogoFileId($logoId);
316 $result[
'LOGOTIP'] = $logoId > 0 ? $logoId : 0;
322 protected function getLogoFileId()
324 return intval(Option::get(
'sale', self::LOGO_FILE_ID_OPTION.
'_'.$this->serviceType,
''));
327 protected function setLogoFileId($logoId)
329 if(intval($logoId) > 0)
330 Option::set(
'sale', self::LOGO_FILE_ID_OPTION.
'_'.$this->serviceType, $logoId);
336 public static function getChildrenClassNames()
339 '\Sale\Handlers\Delivery\AdditionalProfile'
346 public function getProfilesList()
350 $profiles = $this->getProfilesListFull();
352 foreach($profiles as $profileType => $profile)
353 $result[$profileType] = $profile[
'NAME'];
358 public function getTrackingStatuses(
array $trackingNumbers =
array())
361 $client =
new RestClient();
362 $res = $client->getTrackingStatuses(
364 AdditionalProfile::extractConfigValues($this->getConfig()),
368 if(
$res->isSuccess())
372 if(!empty(
$data[
'STATUSES']) && is_array(
$data[
'STATUSES']))
379 public function getTrackingClassTitle()
381 return !empty($this->config[
'MAIN'][
'TRACKING_TITLE']) ? $this->config[
'MAIN'][
'TRACKING_TITLE'] :
'';
384 public function getTrackingClassDescription()
386 return !empty($this->config[
'MAIN'][
'TRACKING_DESCRIPTION']) ? $this->config[
'MAIN'][
'TRACKING_DESCRIPTION'] :
'';
392 public function getProfilesListFull()
394 if($this->profilesListFull ===
null)
396 $this->profilesListFull =
array();
397 $client =
new RestClient();
398 $res = $client->getDeliveryProfilesList($this->serviceType);
400 if(
$res->isSuccess())
401 $this->profilesListFull =
$res->getData();
404 return $this->profilesListFull;
410 public static function whetherAdminExtraServicesShow()
412 return self::$whetherAdminExtraServicesShow;
418 public function getServiceType()
420 return $this->serviceType;
427 public function getCompatibleProfiles($shipment)
429 return $this->getProfilesList();
435 public static function canHasProfiles()
437 return self::$canHasProfiles;
445 if (
$service->getServiceType() ==
'RUSPOST')
448 $doInstall = isset(
$config[
'MAIN'][
'RELIABILITY']) &&
$config[
'MAIN'][
'RELIABILITY'] ==
'Y';
449 self::installReliability($serviceId, $doInstall);
468 $profiles = $srv->getProfilesListFull();
470 if(is_array($profiles) && !empty($profiles))
472 foreach($profiles as $profileType => $pFields)
474 if(isset($pFields[
'DEFAULT_INSTALL_SKIP']) && $pFields[
'DEFAULT_INSTALL_SKIP'] ==
'Y')
477 $profile = $srv->getProfileDefaultParams($profileType, $pFields);
478 $res = Manager::add($profile);
480 if(
$res->isSuccess() && !empty($pFields[
"RESTRICTIONS"]) && is_array($pFields[
"RESTRICTIONS"]))
482 $profileId =
$res->getId();
484 foreach($pFields[
"RESTRICTIONS"] as $restrictionType =>
$params)
486 $srv->addRestriction($restrictionType, $profileId,
$params);
494 $extraservices = $srv->getEmbeddedExtraServicesList();
496 if(!empty($extraservices))
499 foreach($extraservices as
$code => $esFields)
501 $esFields[
'DELIVERY_ID'] = $serviceId;
502 $esFields[
'CODE'] =
$code;
503 $res = Table::add($esFields);
508 if ($srv->getServiceType() ==
'RUSPOST')
510 $config = $srv->getConfigValues();
511 $doInstall = isset(
$config[
'MAIN'][
'RELIABILITY']) &&
$config[
'MAIN'][
'RELIABILITY'] ==
'Y';
512 self::installReliability($serviceId, $doInstall);
518 protected static function installReliability(
int $serviceId,
bool $doInstall)
522 Reliability\Service::install($serviceId);
526 Reliability\Service::unInstall($serviceId);
544 $className = \Bitrix\Sale\Delivery\Restrictions\ByWeight::class;
553 "SERVICE_ID" => $profileId,
554 "SERVICE_TYPE" => \Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
562 $className = \Bitrix\Sale\Delivery\Restrictions\ByDimensions::class;
572 "SERVICE_ID" => $profileId,
573 "SERVICE_TYPE" => \Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
582 $className = \Bitrix\Sale\Delivery\Restrictions\ByMaxSize::class;
590 "SERVICE_ID" => $profileId,
591 "SERVICE_TYPE" => \Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
599 case 'EXCLUDE_LOCATION':
601 $className = (
$type ===
'BY_LOCATION')
602 ? \Bitrix\Sale\Delivery\Restrictions\ByLocation::class
603 : \Bitrix\Sale\Delivery\Restrictions\ExcludeLocation::class;
605 if (isset(
$params[
'LOCATION']))
613 'SERVICE_ID' => $profileId,
614 'SERVICE_TYPE' => \Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT,
622 if($className && !empty(
$fields))
638 $active = $this->active ?
"Y" :
"N";
647 "PARENT_ID" => $this->
id,
651 "DESCRIPTION" =>
$fields[
"DESCRIPTION"],
652 "CLASS_NAME" =>
'\Sale\Handlers\Delivery\AdditionalProfile',
653 "CURRENCY" => $this->currency,
656 "PROFILE_TYPE" =>
$type,
658 "DESCRIPTION" =>
$fields[
"DESCRIPTION"]
666 if(!empty(
$fields[
'DEFAULT'][
'MAIN']))
672 public function getAdminMessage()
677 if($this->isLicenseWrong())
678 $message = Loc::getMessage(
'SALE_DLVRS_ADD_LICENSE_WRONG');
680 $message = Loc::getMessage(
'SALE_DLVRS_ADD_LOC_INSTALL');
694 protected function isLicenseWrong()
696 return Option::get(
'sale', RestClient::WRONG_LICENSE_OPTION,
'N') ==
'Y';
699 public function execAdminAction()
701 $result = new \Bitrix\Sale\Result();
702 \Bitrix\Main\UI\Extension::load(
"main.core");
703 Asset::getInstance()->addJs(
"/bitrix/js/sale/additional_delivery.js");
704 Asset::getInstance()->addString(
'<link rel="stylesheet" type="text/css" href="/bitrix/css/sale/additional_delivery.css">');
705 Asset::getInstance()->addString(
'<script>
709 \'onSaleDeliveryRusPostShippingPointSelect\',
710 BX.Sale.Handler.Delivery.Additional.onRusPostShippingPointsSelect
717 public function getAdminAdditionalTabs()
722 require_once(__DIR__.
'/location/admin_tab.php');
728 "TAB" => Loc::getMessage(
'SALE_DLVRS_ADD_LOC_TAB'),
729 "TITLE" => Loc::getMessage(
'SALE_DLVRS_ADD_LOC_TAB_TITLE'),
735 public static function install()
739 if(!file_exists(
$_SERVER[
"DOCUMENT_ROOT"].
'/bitrix/css/sale/additional_delivery.css'))
742 $_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/sale/handlers/delivery/additional/install/css",
743 $_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/css/sale",
true,
true
746 $_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/sale/handlers/delivery/additional/install/js",
747 $_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/js/sale",
true,
true
750 $_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/sale/handlers/delivery/additional/install/tools",
751 $_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/tools/sale",
true,
true
755 $con = \Bitrix\Main\Application::getConnection();
757 if(!
$con->isTableExists(
'b_sale_hdale'))
759 $DB->RunSQLBatch(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/sale/handlers/delivery/additional/install/db/".
$con->getType().
"/install.sql");
763 $eventManager->registerEventHandler(
'sale',
'onSaleDeliveryExtraServicesClassNamesBuildList' ,
'sale',
'\Sale\Handlers\Delivery\AdditionalHandler',
'onSaleDeliveryExtraServicesClassNamesBuildList');
764 $eventManager->registerEventHandler(
'sale',
'onSaleDeliveryTrackingClassNamesBuildList',
'sale',
'\Sale\Handlers\Delivery\AdditionalHandler',
'onSaleDeliveryTrackingClassNamesBuildList');
766 return parent::install();
769 public static function unInstall()
773 if(file_exists(
$_SERVER[
"DOCUMENT_ROOT"].
'/bitrix/css/sale/additional_delivery.css'))
776 $_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/sale/handlers/delivery/additional/install/css",
777 $_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/css/sale"
780 $_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/sale/handlers/delivery/additional/install/js",
781 $_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/js/sale"
784 $_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/sale/handlers/delivery/additional/install/tools",
785 $_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/tools/sale"
789 $con = \Bitrix\Main\Application::getConnection();
791 if(!
$con->isTableExists(
'b_sale_hdale'))
793 $DB->RunSQLBatch(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/sale/handlers/delivery/additional/install/db/".
$con->getType().
"/uninstall.sql");
797 $eventManager->unRegisterEventHandler(
'sale',
'onSaleDeliveryExtraServicesClassNamesBuildList' ,
'sale',
'\Sale\Handlers\Delivery\AdditionalHandler',
'onSaleDeliveryExtraServicesClassNamesBuildList');
798 $eventManager->unRegisterEventHandler(
'sale',
'onSaleDeliveryTrackingClassNamesBuildList' ,
'sale',
'\Sale\Handlers\Delivery\AdditionalHandler',
'onSaleDeliveryTrackingClassNamesBuildList');
800 return parent::install();
803 public static function onSaleDeliveryTrackingClassNamesBuildList()
805 return new \Bitrix\Main\EventResult(
806 \Bitrix\Main\EventResult::SUCCESS,
808 '\Sale\Handlers\Delivery\AdditionalTracking' =>
'/bitrix/modules/sale/handlers/delivery/additional/tracking.php'
814 public function getEmbeddedExtraServicesList()
816 if($this->extraServicesList ===
null)
818 $this->extraServicesList =
array();
819 $client =
new RestClient();
820 $res = $client->getDeliveryExtraServices($this->serviceType);
822 if(
$res->isSuccess())
823 $this->extraServicesList =
$res->getData();
826 return $this->extraServicesList;
829 public static function onSaleDeliveryExtraServicesClassNamesBuildList()
831 return new \Bitrix\Main\EventResult(
832 \Bitrix\Main\EventResult::SUCCESS,
834 '\Sale\Handlers\Delivery\Additional\ExtraServices\Insurance' =>
'/bitrix/modules/sale/handlers/delivery/additional/extra_services/insurance.php',
835 '\Sale\Handlers\Delivery\Additional\ExtraServices\Lift' =>
'/bitrix/modules/sale/handlers/delivery/additional/extra_services/lift.php'
841 public function isCompatible(Shipment $shipment)
843 $client =
new RestClient();
844 return $client->isServerAlive();
847 public function getTrackingUrlTempl()
849 $config = \Sale\Handlers\Delivery\AdditionalProfile::extractConfigValues($this->getConfig());
850 return !empty(
$config[
"MAIN"][
"TRACKING_URL_TEMPL"]) ?
$config[
"MAIN"][
"TRACKING_URL_TEMPL"] :
'';
858 public static function getShipmentParams(Shipment $shipment, $serviceType)
861 $shipmentCollection = $shipment->getCollection();
863 $order = $shipmentCollection->getOrder();
865 $loc =
$props->getDeliveryLocation();
866 $locToInternalCode = !!$loc ? $loc->getValue() :
"";
867 $locFromRequest =
array();
868 $locToRequest =
array();
870 if(!empty($locToInternalCode))
871 $locToRequest = self::getLocationForRequest($locToInternalCode);
873 $shopLocation = \CSaleHelper::getShopLocation();
875 if(!empty($shopLocation[
'CODE']))
876 $locFromRequest = self::getLocationForRequest($shopLocation[
'CODE']);
880 "LOCATION_FROM" => $locFromRequest[
'EXTERNAL_ID'] ??
null,
881 "LOCATION_FROM_NAME" => $locFromRequest[
'NAME'] ??
null,
882 "LOCATION_FROM_CODE" => (!empty($shopLocation[
'CODE'])) ? $shopLocation[
'CODE'] :
'',
883 "LOCATION_TO" => $locToRequest[
'EXTERNAL_ID'] ??
null,
884 "LOCATION_TO_NAME" => $locToRequest[
'NAME'] ??
null,
885 "LOCATION_TO_CODE" => $locToInternalCode,
886 "LOCATION_TO_TYPES" => self::getLocationChainByTypes($locToInternalCode, LANGUAGE_ID)
889 if($address =
$props->getAddress())
890 $result[
"ADDRESS"] = $address->getValue();
892 if($phone =
$props->getPhone())
893 $result[
"PHONE"] = $phone->getValue();
895 if($payerName =
$props->getPayerName())
896 $result[
"PAYER_NAME"] = $payerName->getValue();
898 if($serviceType ==
"RUSPOST" )
900 $zipFrom = \CSaleHelper::getShopLocationZIP();
904 $result[
"ZIP_FROM"] = $zipFrom;
906 elseif(!empty($shopLocation[
'CODE']))
908 $extLoc = LocationHelper::getZipByLocation($shopLocation[
'CODE'],
array(
'limit' => 1))->fetch();
910 if(!empty($extLoc[
'XML_ID']))
911 $result[
"ZIP_FROM"] = $extLoc[
'XML_ID'];
914 $zipTo =
$props->getDeliveryLocationZip();
915 $zipTo = !!$zipTo ? $zipTo->getValue() :
"";
921 elseif(!empty($locToInternalCode))
923 $extLoc = LocationHelper::getZipByLocation($locToInternalCode,
array(
'limit' => 1))->fetch();
925 if(!empty($extLoc[
'XML_ID']))
926 $result[
"ZIP_TO"] = $extLoc[
'XML_ID'];
934 foreach($shipment->getShipmentItemCollection()->getShippableItems() as $shipmentItem)
936 $basketItem = $shipmentItem->getBasketItem();
942 $itemFieldValues =
array(
943 "PRICE" => $basketItem->getPrice(),
944 "WEIGHT" => $basketItem->getWeight(),
945 "CURRENCY" => $basketItem->getCurrency(),
946 "QUANTITY" => $shipmentItem->getQuantity(),
947 "DIMENSIONS" => $basketItem->getField(
"DIMENSIONS")
950 $price += $itemFieldValues[
"PRICE"] * $itemFieldValues[
"QUANTITY"];
952 if(!empty($itemFieldValues[
"DIMENSIONS"]) && is_string($itemFieldValues[
"DIMENSIONS"]))
953 $itemFieldValues[
"DIMENSIONS"] = unserialize($itemFieldValues[
"DIMENSIONS"], [
'allowed_classes' =>
false]);
955 $result[
"ITEMS"][] = $itemFieldValues;
959 $esList = \Bitrix\Sale\Delivery\ExtraServices\Manager::getExtraServicesList($shipment->getDeliveryId(),
false);
965 foreach($shipment->getExtraServices() as $esId => $esVal)
967 if(empty($esList[$esId][
'CODE']))
970 if($esList[$esId][
'CLASS_NAME'] ==
'\Bitrix\Sale\Delivery\ExtraServices\Checkbox' && $esVal !=
'Y')
973 $result[
'EXTRA_SERVICES'][$esList[$esId][
'CODE']] = $esVal;
977 $delivery= Manager::getObjectById($shipment->getDeliveryId());
978 $result[
'DELIVERY_SERVICE_CONFIG'] = $delivery ? $delivery->getConfigValues() : [];
979 $result[
'WEIGHT'] = $shipment->getWeight();
981 $result[
'SHIPMENT_ID'] = $shipment->getId();
982 $result[
'PRICE_DELIVERY'] = $shipment->getField(
'PRICE_DELIVERY');
992 protected static function getLocationForRequest($locationCode)
994 if($locationCode ==
'')
999 if(!isset(
$result[$locationCode]))
1001 $externalId = Location::getExternalId($locationCode);
1004 if($externalId <>
'')
1008 'XML_ID' => $externalId,
1009 'SERVICE_ID' => Location::getExternalServiceId(),
1010 'LOCATION.NAME.LANGUAGE_ID' =>
'ru'
1012 'select' =>
array(
'NAME' =>
'LOCATION.NAME.NAME')
1015 if($rec =
$dbRes->fetch())
1016 $name = $rec[
'NAME'];
1020 'EXTERNAL_ID' => $externalId,
1025 return $result[$locationCode];
1033 protected static function getLocationChainByTypes($locationCode,
$lang = LANGUAGE_ID)
1035 if ($locationCode ==
'')
1040 $res = LocationTable::getList([
1042 '=CODE' => $locationCode,
1052 if (!$loc =
$res->fetch())
1061 '<=LEFT_MARGIN' => $loc[
'LEFT_MARGIN'],
1062 '>=RIGHT_MARGIN' => $loc[
'RIGHT_MARGIN'],
1063 'NAME.LANGUAGE_ID' =>
$lang,
1064 'TYPE.NAME.LANGUAGE_ID' =>
$lang,
1069 'LOCATION_NAME' =>
'NAME.NAME',
1070 'TYPE_NAME' =>
'TYPE.NAME.NAME',
1071 'TYPE_CODE' =>
'TYPE.CODE',
1075 while ($locParent =
$res->fetch())
1077 if (!isset(
$result[$locParent[
'TYPE_CODE']]))
1079 $result[$locParent[
'TYPE_CODE']] = [];
1082 $result[$locParent[
'TYPE_CODE']][] = $locParent[
'LOCATION_NAME'];
1090 if(isset(
$fields[
'CONFIG'][
'MAIN'][
'SHIPPING_POINT'][
'NAME']))
1093 if(isset(
$fields[
'CONFIG'][
'MAIN'][
'SHIPPING_POINT'][
'VALUE']))
1096 if(isset(
$fields[
'CONFIG'][
'MAIN'][
'SHIPPING_POINT'][
'ADDITIONAL']))
1099 return parent::prepareFieldsForSaving(
$fields);
1103 public static function isHandlerCompatible()
1105 if(!parent::isHandlerCompatible())
1111 \Bitrix\Sale\Delivery\Helper::getPortalZone(),
1112 [
'',
'ru',
'kz',
'by'],
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
if(!defined('SITE_ID')) $lang
htmlspecialcharsback($str)
DeleteDirFiles($frDir, $toDir, $arExept=[])
CopyDirFiles($path_from, $path_to, $ReWrite=true, $Recursive=false, $bDeleteAfterCopy=false, $strExclude="")
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']