3namespace Sale\Handlers\Delivery;
6use Bitrix\Main\ArgumentNullException;
7use Bitrix\Main\Localization\Loc;
9use Bitrix\Sale\Delivery\CalculationResult;
10use Bitrix\Sale\Delivery\Services\Base;
11use Bitrix\Sale\Delivery\Services\Manager;
12use Sale\Handlers\Delivery\Rest\DataProviders;
13use Sale\Handlers\Delivery\Rest\RequestHandler;
15Loc::loadMessages(__FILE__);
21class RestProfile
extends Base
23 private const HANDLER_CODE_PREFIX =
'BITRIX_REST_';
26 protected $restHandler;
29 protected $profileType =
'';
32 protected static $whetherAdminExtraServicesShow =
true;
35 protected static $isProfile =
true;
42 public function __construct(
array $initParams)
44 if (empty($initParams[
'PARENT_ID']))
46 throw new ArgumentNullException(
'initParams[PARENT_ID]');
49 parent::__construct($initParams);
50 $this->restHandler = Manager::getObjectById($this->parentId);
52 if (!($this->restHandler instanceof RestHandler))
54 throw new ArgumentNullException(
'this->restHandler is not instance of RestHandler');
57 if (!empty($initParams[
'PROFILE_ID']))
59 $this->profileType = $initParams[
'PROFILE_ID'];
61 elseif (!empty($this->config[
'MAIN'][
'PROFILE_TYPE']))
63 $this->profileType = $this->config[
'MAIN'][
'PROFILE_TYPE'];
66 if ($this->profileType)
68 $profileParams = $this->getProfileParams();
69 if (!empty($profileParams) && $this->
id <= 0)
71 $this->name = $profileParams[
'NAME'];
72 $this->description = $profileParams[
'DESCRIPTION'];
80 public static function getClassTitle(): string
82 return Loc::getMessage(
'SALE_DELIVERY_REST_PROFILE_NAME');
88 public static function getClassDescription(): string
90 return Loc::getMessage(
'SALE_DELIVERY_REST_PROFILE_DESCRIPTION');
97 protected function calculateConcrete(Sale\Shipment $shipment): CalculationResult
99 $result =
new CalculationResult;
101 $handlerParams = $this->getHandlerParams();
103 !isset($handlerParams[
'SETTINGS'][
'CALCULATE_URL'])
104 || !is_string($handlerParams[
'SETTINGS'][
'CALCULATE_URL'])
105 || empty($handlerParams[
'SETTINGS'][
'CALCULATE_URL'])
108 return $result->addError(
new Main\
Error(
'Calculate URL is not specified'));
111 $sendRequestResult = Sale\Helpers\Rest\Http::sendRequest(
112 $handlerParams[
'SETTINGS'][
'CALCULATE_URL'],
114 'SHIPMENT' => DataProviders\Shipment::getData($shipment),
117 'JSON_REQUEST' =>
true,
120 if ($sendRequestResult->isSuccess())
122 $calculatedData = $sendRequestResult->getData();
124 if (!(isset($calculatedData[
'SUCCESS']) && $calculatedData[
'SUCCESS'] ===
'Y'))
127 isset($calculatedData[
'REASON'][
'TEXT'])
128 && is_string($calculatedData[
'REASON'][
'TEXT'])
129 && !empty($calculatedData[
'REASON'][
'TEXT'])
131 ? $calculatedData[
'REASON'][
'TEXT']
132 : Loc::getMessage(
'SALE_DELIVERY_REST_PROFILE_PRICE_CALCULATION_ERROR');
134 $result->addError(
new Main\
Error($errorText,
'DELIVERY_CALCULATION'));
137 if (!empty($calculatedData[
'PRICE']))
139 $result->setDeliveryPrice($calculatedData[
'PRICE']);
142 if (!empty($calculatedData[
'PERIOD_DESCRIPTION']))
144 $result->setPeriodDescription($calculatedData[
'PERIOD_DESCRIPTION']);
147 if (!empty($calculatedData[
'PERIOD_FROM']))
149 $result->setPeriodFrom($calculatedData[
'PERIOD_FROM']);
152 if (!empty($calculatedData[
'PERIOD_TO']))
154 $result->setPeriodTo($calculatedData[
'PERIOD_TO']);
157 if (!empty($calculatedData[
'PERIOD_TYPE']))
159 $result->setPeriodType($calculatedData[
'PERIOD_TYPE']);
162 if (!empty($calculatedData[
'DESCRIPTION']))
164 $result->setDescription($calculatedData[
'DESCRIPTION']);
174 protected function getProfileType(): string
176 return (
string)$this->profileType;
182 private function getProfileParams()
184 $handlerParams = $this->getHandlerParams();
185 $type = $this->getProfileType();
187 return $handlerParams[
'PROFILES'][
$type];
193 private function getHandlerParams()
195 $handlerList = Manager::getRestHandlerList();
196 $code = str_replace(self::HANDLER_CODE_PREFIX,
'', $this->restHandler->getHandlerCode());
198 return $handlerList[
$code];
204 protected function getConfigStructure():
array
208 $configParams = $this->getProfileParams();
210 if (!empty($configParams[
'CONFIG']))
213 'TITLE' => $configParams[
'CONFIG'][
'TITLE'],
214 'DESCRIPTION' => $configParams[
'CONFIG'][
'DESCRIPTION'],
215 'ITEMS' => $configParams[
'CONFIG'][
'ITEMS'],
221 'TITLE' => Loc::getMessage(
'SALE_DELIVERY_REST_PROFILE_SETTING_TITLE'),
222 'DESCRIPTION' => Loc::getMessage(
'SALE_DELIVERY_REST_PROFILE_SETTING_DESCRIPTION'),
226 $result[
'MAIN'][
'ITEMS'][
'PROFILE_TYPE'] = [
228 'NAME' =>
'PROFILE_TYPE',
230 'DEFAULT' => $this->getProfileType(),
236 public function getParentService()
238 return $this->restHandler;
244 public static function isProfile(): bool
246 return self::$isProfile;
252 public static function whetherAdminExtraServicesShow(): bool
254 return self::$whetherAdminExtraServicesShow;
260 public function getDeliveryRequestHandler()
262 $handlerParams = $this->getHandlerParams();
265 !isset($handlerParams[
'SETTINGS'][
'CREATE_DELIVERY_REQUEST_URL'])
266 || !is_string($handlerParams[
'SETTINGS'][
'CREATE_DELIVERY_REQUEST_URL'])
267 || empty($handlerParams[
'SETTINGS'][
'CREATE_DELIVERY_REQUEST_URL'])
273 $handler = (
new RequestHandler($this))
274 ->setCreateRequestUrl($handlerParams[
'SETTINGS'][
'CREATE_DELIVERY_REQUEST_URL']);
277 isset($handlerParams[
'SETTINGS'][
'CANCEL_DELIVERY_REQUEST_URL'])
278 && is_string($handlerParams[
'SETTINGS'][
'CANCEL_DELIVERY_REQUEST_URL'])
279 && !empty($handlerParams[
'SETTINGS'][
'CANCEL_DELIVERY_REQUEST_URL'])
282 $handler->setCancelRequestUrl($handlerParams[
'SETTINGS'][
'CANCEL_DELIVERY_REQUEST_URL']);
286 isset($handlerParams[
'SETTINGS'][
'CANCEL_ACTION_NAME'])
287 && is_string($handlerParams[
'SETTINGS'][
'CANCEL_ACTION_NAME'])
288 && !empty($handlerParams[
'SETTINGS'][
'CANCEL_ACTION_NAME'])
291 $handler->setCancelActionName($handlerParams[
'SETTINGS'][
'CANCEL_ACTION_NAME']);
295 isset($handlerParams[
'SETTINGS'][
'DELETE_DELIVERY_REQUEST_URL'])
296 && is_string($handlerParams[
'SETTINGS'][
'DELETE_DELIVERY_REQUEST_URL'])
297 && !empty($handlerParams[
'SETTINGS'][
'DELETE_DELIVERY_REQUEST_URL'])
300 $handler->setDeleteRequestUrl($handlerParams[
'SETTINGS'][
'DELETE_DELIVERY_REQUEST_URL']);
304 isset($handlerParams[
'SETTINGS'][
'HAS_CALLBACK_TRACKING_SUPPORT'])
305 && $handlerParams[
'SETTINGS'][
'HAS_CALLBACK_TRACKING_SUPPORT'] ===
'Y'
308 $handler->setHasCallbackTrackingSupport(
true);
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)