3namespace Sale\Handlers\Delivery\Additional;
5use Bitrix\Main\Config\Option;
6use Bitrix\Main\Context;
8use Bitrix\Sale\Delivery\ExtraServices\Manager;
9use Bitrix\Sale\Delivery\Services\Table;
10use Bitrix\Sale\Location\Admin\LocationHelper;
11use Bitrix\Sale\Location\ExternalTable;
12use Bitrix\Sale\Location\Name\LocationTable;
13use Bitrix\Sale\Result;
14use Bitrix\Sale\ResultSerializable;
15use Bitrix\Sale\Shipment;
16use Bitrix\Main\Localization\Loc;
17use Bitrix\Sale\Delivery\CalculationResult;
18use Sale\Handlers\Delivery\AdditionalHandler;
20Loc::loadMessages(__FILE__);
28class RestClient
extends \Bitrix\Sale\Services\Base\RestClient
30 const WRONG_LICENSE_OPTION =
'handlers_dlv_add_rest_wrong_license';
35 public function getDeliveryList()
37 return $this->getItem(
'delivery.list', CacheManager::TYPE_DELIVERY_LIST);
45 public function getDeliveryProfilesList($serviceType)
47 return $this->getItem(
48 'delivery.profile.list',
49 CacheManager::TYPE_PROFILES_LIST,
50 array(
'serviceType' => $serviceType),
61 public function getDeliveryProfileFields($serviceType, $profileType)
63 return $this->getItem(
64 'delivery.profile.fields',
65 CacheManager::TYPE_PROFILE_FIELDS,
66 array(
'serviceType' => $serviceType,
'profileType' => $profileType),
67 array($serviceType, $profileType)
76 public function getDeliveryFields($serviceType)
78 return $this->getItem(
80 CacheManager::TYPE_DELIVERY_FIELDS,
81 array(
'serviceType' => $serviceType),
95 public function getDeliveryPrice($serviceType, $profileType,
array $serviceParams,
array $profileParams, Shipment $shipment)
98 'serviceType' => $serviceType,
99 'profileType' => $profileType,
100 'serviceParams' => $serviceParams,
101 'profileParams' => $profileParams,
102 'shipmentParams' => AdditionalHandler::getShipmentParams($shipment, $serviceType)
107 $answer = $this->getItem(
109 CacheManager::TYPE_DELIVERY_PRICE,
114 if($answer->isSuccess())
116 $data = $answer->getData();
117 $result = unserialize(rawurldecode(
$data[
'PRICE']), [
'allowed_classes' => [CalculationResult::class]]);
119 if(!(
$result instanceof CalculationResult))
121 $result =
new CalculationResult();
122 $result->addError(
new Error(
'Error. Incorrect answer about price!'));
126 if(!
$result->isSuccess() && defined(
'SALE_HANDLERS_DLV_ADD_LOG_PRICE_ERRORS'))
128 $eventLog = new \CEventLog();
129 $eventLog->Add(
array(
130 "SEVERITY" => $eventLog::SEVERITY_ERROR,
131 "AUDIT_TYPE_ID" =>
"SALE_HANDLERS_DLV_ADD_LOG_PRICE_ERRORS",
132 "MODULE_ID" =>
"sale",
133 "ITEM_ID" => $serviceType.
'_'.$profileType,
134 "DESCRIPTION" => implode(
', ',
$result->getErrorMessages()),
140 $result =
new CalculationResult();
141 $result->addErrors($answer->getErrors());
147 public function getProfileConfig($serviceType, $profileType)
149 return $this->getItem(
150 'delivery.profile.config',
151 CacheManager::TYPE_PROFILE_CONFIG,
152 array(
'serviceType' => $serviceType,
'profileType' => $profileType),
153 array($serviceType, $profileType)
157 public function getDeliveryExtraServices($serviceType)
159 return $this->getItem(
160 'delivery.extraservices',
161 CacheManager::TYPE_EXTRA_SERVICES,
162 array(
'serviceType' => $serviceType),
167 public function getProfileExtraServices($serviceType, $profileType,
array $profileParams)
169 return $this->getItem(
170 'delivery.profile.extraservices',
171 CacheManager::TYPE_EXTRA_SERVICES,
172 array(
'serviceType' => $serviceType,
'profileType' => $profileType,
'profileParams' => $profileParams),
173 array($serviceType, $profileType, $profileParams)
177 public function getTrackingStatuses($serviceType,
array $serviceParams,
array $trackingNumbers =
array())
179 return $this->getItem(
180 'delivery.tracking.statuses',
181 CacheManager::TYPE_NONE,
182 array(
'serviceType' => $serviceType,
'serviceParams' => $serviceParams,
'trackingNumbers' => $trackingNumbers)
186 protected function setCacheItem(
$result, $cacheType,
array $cacheIds)
188 $cache = CacheManager::getItem($cacheType);
189 $cache->set(serialize(
$result), $cacheIds);
192 protected function getItem($callMethod, $cacheType,
array $callParams =
array(),
array $cacheIds =
array())
194 $cache = CacheManager::getItem($cacheType);
195 $isLicenseWrong = Option::get(
'sale', self::WRONG_LICENSE_OPTION,
'N') ==
'Y';
196 $skipCache = defined(
'SALE_HANDLERS_DLV_ADD_SKIP_CACHE');
199 if(!$skipCache && !$isLicenseWrong && $cache &&
$result = $cache->get($cacheIds))
201 $result = unserialize(
$result, [
'allowed_classes' => [ResultSerializable::class]]);
204 if(!(
$result instanceof ResultSerializable))
206 if($isLicenseWrong && $cache)
209 $result = $this->
call(static::SCOPE.
'.'.$callMethod, $callParams);
215 if(!empty(
$data[
'ACTIONS']) && is_array(
$data[
'ACTIONS']))
217 $this->processActions(
$data[
'ACTIONS']);
218 unset(
$data[
'ACTIONS']);
223 $cache->set(serialize(
$result), $cacheIds);
229 if(
$error->getCode() == self::ERROR_WRONG_LICENSE)
231 Option::set(
'sale', self::WRONG_LICENSE_OPTION,
'Y');
232 $isLicenseWrong =
true;
236 if(defined(
'SALE_HANDLERS_DLV_ADD_LOG_REST_ERRORS'))
238 $eventLog = new \CEventLog();
239 $eventLog->Add(
array(
240 "SEVERITY" => $eventLog::SEVERITY_ERROR,
241 "AUDIT_TYPE_ID" =>
"SALE_HANDLERS_DLV_ADD_LOG_REST_ERRORS",
242 "MODULE_ID" =>
"sale",
243 "ITEM_ID" => $callMethod,
244 "DESCRIPTION" => implode(
', ',
$result->getErrorMessages()),
250 if(
$result->isSuccess() && $isLicenseWrong)
251 Option::delete(
'sale',
array(
'name' => self::WRONG_LICENSE_OPTION));
256 private function processActions(
array $actions)
258 foreach($actions as $actType => $actParams)
260 $res = Action::execute($actParams);
262 if(!
$res->isSuccess() && defined(
'SALE_HANDLERS_DLV_ADD_LOG_ACTIONS_ERRORS'))
264 $eventLog = new \CEventLog();
265 $eventLog->Add(
array(
266 "SEVERITY" => $eventLog::SEVERITY_ERROR,
267 "AUDIT_TYPE_ID" =>
"SALE_HANDLERS_DLV_ADD_LOG_ACTIONS_ERRORS",
268 "MODULE_ID" =>
"sale",
269 "ITEM_ID" => $actType,
270 "DESCRIPTION" => implode(
', ',
$res->getErrorMessages()),
call($methodName, $additionalParams=null, $licenseCheck=false, $clearAccessSettings=false)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']