12define(
'DELIVERY_RPF_CSV_PATH',
$_SERVER[
'DOCUMENT_ROOT'].
BX_ROOT.
'/modules/sale/ru/delivery/rus_post_first');
16 private static $MAX_WEIGHT = 2500;
17 private static $MAX_SUMM = 20000;
18 private static $MAX_SIZE = 360;
19 private static $MAX_DIMENSIONS_SUMM = 700;
20 private static $MAX_DIMENSIONS =
array(
"165",
"100",
"190");
22 private static $BASE_WEIGHT = 100;
24 private static $TARIFS =
array();
25 private static $SERVICES =
array();
27 private static $TARIF_IDX = 0;
28 private static $TARIF_DESCR = 1;
31 public static function Init()
33 self::$TARIFS =
array(
35 'WEIGHT_LESS_100_DECLARED_VALUE' =>
array(11,
GetMessage(
'SALE_DH_RPF_WRP_LESS_100_DECLARED_VALUE')),
39 self::$SERVICES =
array(
47 'SID' =>
'rus_post_first',
49 'DESCRIPTION' =>
GetMessage(
'SALE_DH_RPF_DESCR').
' <a href="http://www.russianpost.ru/rp/servise/ru/home/postuslug/1class">http://www.russianpost.ru/rp/servise/ru/home/postuslug/1class</a>',
50 'DESCRIPTION_INNER' =>
GetMessage(
'SALE_DH_RPF_DESCR').
' <a href="http://www.russianpost.ru/rp/servise/ru/home/postuslug/1class">http://www.russianpost.ru/rp/servise/ru/home/postuslug/1class</a>',
51 'BASE_CURRENCY' =>
'RUB',
52 'HANDLER' => __FILE__,
55 'DBGETSETTINGS' =>
array(
'CDeliveryRusPostFirst',
'GetSettings'),
56 'DBSETSETTINGS' =>
array(
'CDeliveryRusPostFirst',
'SetSettings'),
57 'GETCONFIG' =>
array(
'CDeliveryRusPostFirst',
'GetConfig'),
58 'GETFEATURES' =>
array(
'CDeliveryRusPostFirst',
'GetFeatures'),
59 'COMPABILITY' =>
array(
'CDeliveryRusPostFirst',
'Compability'),
60 'CALCULATOR' =>
array(
'CDeliveryRusPostFirst',
'Calculate'),
62 "GET_ADMIN_MESSAGE" =>
array(
"CDeliveryRUSSIANPOST",
"getAdminMessage"),
63 "TRACKING_CLASS_NAME" =>
'\Bitrix\Sale\Delivery\Tracking\RusPost',
68 'TITLE' =>
GetMessage(
'SALE_DH_RPF_WRP_TITLE'),
69 'DESCRIPTION' =>
GetMessage(
'SALE_DH_RPF_WRP_DESCR'),
70 'RESTRICTIONS_WEIGHT' =>
array(0, self::$MAX_WEIGHT),
71 'RESTRICTIONS_SUM' =>
array(0, self::$MAX_SUMM),
73 'RESTRICTIONS_MAX_SIZE' => self::$MAX_SIZE,
74 'RESTRICTIONS_DIMENSIONS_SUM' => self::$MAX_DIMENSIONS_SUMM,
75 'RESTRICTIONS_DIMENSIONS' => self::$MAX_DIMENSIONS
87 $arShopLocation =
array();
89 $shopPrevLocationId = COption::GetOptionString(
'sale',
'delivery_rus_post_first_prev_loc', 0);
92 if($shopPrevLocationId != $shopLocationId)
94 COption::SetOptionString(
'sale',
'delivery_rus_post_first_prev_loc', $shopLocationId);
95 COption::RemoveOption(
'sale',
'delivery_rus_post_first_tarifs');
99 'CONFIG_GROUPS' =>
array(
100 'wrapper' =>
GetMessage(
'SALE_DH_RPF_WRP_TITLE'),
104 $aviableBoxes = self::getAviableBoxes();
106 foreach ($aviableBoxes as $boxId => $arBox)
109 $arConfig[
'CONFIG'][
'tarif_section_1'] =
array(
112 'GROUP' =>
'wrapper',
115 $arConfig[
'CONFIG'][
'RESET_TARIF_SETTINGS'] =
array(
117 'TITLE' =>
GetMessage(
'SALE_DH_RPF_SET_DEFAULT_TARIF'),
118 'GROUP' =>
'wrapper',
119 'DEFAULT' =>
'<a href="javascript:void(0);" onclick="BX.Sale.Delivery.resetRusPostTarifSettings();">'.
GetMessage(
'SALE_DH_RPF_SET_DEFAULT_TARIF_SET').
'</a>'
123 'delivery_rus_post_first_tarifs',
124 array(
'CDeliveryRusPostFirst',
'getTarifsByRegionFromCsv'),
125 array($arShopLocation)
128 foreach (self::$TARIFS as $arTarif)
130 $tarifId = $arTarif[self::$TARIF_IDX];
132 $arConfig[
'CONFIG'][
'TARIF_'.$tarifId] =
array(
134 'DEFAULT' => isset($arTarifs[$tarifId]) ? $arTarifs[$tarifId] :
'0',
135 'TITLE' => $arTarif[self::$TARIF_DESCR],
136 'GROUP' =>
'wrapper',
141 foreach (self::$SERVICES as $serviceId => $arService)
143 $tarifId = $arService[self::$TARIF_IDX];
145 $arConfig[
'CONFIG'][
'service_'.$tarifId.
'_section'] =
array(
147 'TITLE' => $arService[self::$TARIF_DESCR],
148 'GROUP' =>
'wrapper',
151 $arConfig[
'CONFIG'][
'service_'.$tarifId.
'_enabled'] =
array(
152 'TYPE' =>
'CHECKBOX',
153 'TITLE' =>
GetMessage(
'SALE_DH_RPF_SRV_ALLOW'),
154 'GROUP' =>
'wrapper',
155 'DEFAULT' => $serviceId ==
'NOTIFICATION_REG' ?
'N' :
'Y',
156 'HIDE_BY_NAMES' =>
array(
'service_'.$tarifId.
'_value')
159 $arConfig[
'CONFIG'][
'service_'.$tarifId.
'_value'] =
array(
161 'TITLE' =>
GetMessage(
'SALE_DH_RPF_SRV_PRICE'),
162 'GROUP' =>
'wrapper',
163 'DEFAULT' => isset($arTarifs[$tarifId]) ? $arTarifs[$tarifId] :
'0',
172 $result = unserialize($strSettings, [
'allowed_classes' =>
false]);
174 if(isset(
$result[
'RESET_TARIF_SETTINGS']))
175 unset(
$result[
'RESET_TARIF_SETTINGS']);
179 COption::RemoveOption(
'sale',
'delivery_rus_post_first_tarifs');
182 if(mb_substr(
$key, 0, 6) ==
'TARIF_' || mb_substr(
$key, 0, 8) ==
'service_')
191 if(isset($arSettings[
'RESET_TARIF_SETTINGS']))
192 unset($arSettings[
'RESET_TARIF_SETTINGS']);
194 foreach ($arSettings as
$key => $value)
197 $arSettings[
$key] = $value;
199 unset($arSettings[
$key]);
202 return serialize($arSettings);
209 if ($arConfig[
"service_".array_shift(array_values(self::$SERVICES[
"NOTIFICATION_SIMPLE"])).
"_enabled"][
"VALUE"] ==
"Y")
212 if ($arConfig[
"service_".array_shift(array_values(self::$SERVICES[
"NOTIFICATION_REG"])).
"_enabled"][
"VALUE"] ==
"Y")
215 if ($arConfig[
"service_".array_shift(array_values(self::$SERVICES[
"DECLARED_VALUE"])).
"_enabled"][
"VALUE"] ==
"Y")
221 public static function Calculate($profile, $arConfig, $arOrder,
$STEP, $TEMP =
false)
230 $packageCount =
count($arPackagesParams);
232 if(intval($packageCount) <= 0)
243 foreach ($arPackagesParams as $arPackage)
244 $totalPrice += self::calculatePackPrice($arPackage, $profile, $arConfig, $arLocationTo);
248 'VALUE' => $totalPrice,
249 'PACKS_COUNT' => $packageCount
260 foreach ($aviableBoxes as $arBox)
276 if(empty($arShopLocation) || !isset($arShopLocation[
"REGION_ID"]) || !isset($arShopLocation[
'REGION_NAME_LANG']))
279 $regionCodeFromCode = $regionCodeFromName =
"";
281 $dbRes = \Bitrix\Sale\Location\LocationTable::getById($arShopLocation[
"REGION_ID"]);
283 if($locReg =
$dbRes->fetch())
284 $regionCodeFromCode = $locReg[
"CODE"];
289 $tarifNumber =
false;
292 while (
$arRes = $csvFile->Fetch())
295 ($regionCodeFromCode <>
'' && in_array($regionCodeFromCode,
$arRes))
296 || ($regionCodeFromName <>
'' && in_array($regionCodeFromName,
$arRes))
299 $tarifNumber =
$arRes[$COL_TARIF_NUM];
308 if(empty($arShopLocation))
313 if($tarifNumber ===
false)
317 $COL_TARIF_ITEMS = 0;
319 $arRes = $csvFile->Fetch();
321 while (
$arRes = $csvFile->Fetch())
323 if(!isset(
$arRes[$tarifNumber]))
326 $arTarifs[
$arRes[$COL_TARIF_ITEMS]] =
$arRes[$tarifNumber];
332 private static function getConfValue(&$arConfig,
$key)
337 private static function isConfCheckedVal(&$arConfig,
$key)
339 return $arConfig[
$key][
'VALUE'] ==
'Y'
341 !isset($arConfig[
$key][
'VALUE'])
342 && $arConfig[
$key][
'DEFAULT'] ==
'Y'
346 private static function getAviableBoxes()
350 "NAME" =>
GetMessage(
"SALE_DH_RPF_STNRD_BOX"),
351 "DIMENSIONS" =>
array(
"165",
"100",
"190")
356 private static function calculatePackPrice($arPackage, $profile, $arConfig, $arLocationTo)
360 $declaredValue = self::isConfCheckedVal($arConfig,
'service_'.self::$SERVICES[
'DECLARED_VALUE'][self::$TARIF_IDX].
'_enabled');
365 if($declaredValue && floatval($arConfig[
'TARIF_'.self::$TARIFS[
'WEIGHT_LESS_100_DECLARED_VALUE'][self::$TARIF_IDX]][
'VALUE']) > 0)
366 $basePrice = floatval(self::getConfValue($arConfig,
'TARIF_'.self::$TARIFS[
'WEIGHT_LESS_100_DECLARED_VALUE'][self::$TARIF_IDX]));
368 $basePrice = floatval(self::getConfValue($arConfig,
'TARIF_'.self::$TARIFS[
'WEIGHT_LESS_100'][self::$TARIF_IDX]));
370 $arDebug[] =
'Base Price less 100 g: '.$basePrice;
373 if($arPackage[
'WEIGHT'] > self::$BASE_WEIGHT)
375 $addWeight = ceil($arPackage[
'WEIGHT'] / self::$BASE_WEIGHT - 1);
376 $addPrice = floatval(self::getConfValue($arConfig,
'TARIF_'.self::$TARIFS[
'WEIGHT_MORE_100'][self::$TARIF_IDX]));
377 $arDebug[] =
'Price for additional weight more than 100 g: '.$addPrice;
378 $basePrice += $addWeight * $addPrice;
381 $totalPrice = $basePrice;
385 if(self::isConfCheckedVal($arConfig,
'service_'.self::$SERVICES[
'NOTIFICATION_SIMPLE'][self::$TARIF_IDX].
'_enabled'))
387 $snPrice = floatval(self::getConfValue($arConfig,
'service_'.self::$SERVICES[
'NOTIFICATION_SIMPLE'][self::$TARIF_IDX].
'_value'));
388 $arDebug[] =
'Simple notification: '.$snPrice;
389 $totalPrice += $snPrice;
394 if(self::isConfCheckedVal($arConfig,
'service_'.self::$SERVICES[
'NOTIFICATION_REG'][self::$TARIF_IDX].
'_enabled'))
396 $rnPrice = floatval(self::getConfValue($arConfig,
'service_'.self::$SERVICES[
'NOTIFICATION_REG'][self::$TARIF_IDX].
'_value'));
397 $arDebug[] =
'Registered notification: '.$rnPrice;
398 $totalPrice += $rnPrice;
405 $dvTarif = floatval(self::getConfValue($arConfig,
'service_'.self::$SERVICES[
'DECLARED_VALUE'][self::$TARIF_IDX].
'_value'));
406 $dvPrice += ($arPackage[
'PRICE'])*$dvTarif;
407 $arDebug[] =
'Declared value: '.$dvPrice;
408 $totalPrice += $dvPrice;
411 $arDebug[] =
'Total value: '.$totalPrice;
417 if($regionLangName ==
'')
424 require_once(__DIR__.
'/rus_post/old_loc_to_codes.php');
428 return isset(
$data[$regionLangName]) ?
$data[$regionLangName] :
"";
435 'SALE_DH_RPF_DEPRECATED_MESSAGE',
437 '#A1#' =>
'<a href="/bitrix/admin/sale_delivery_service_edit.php?lang='.LANGUAGE_ID.
'&PARENT_ID=0&CLASS_NAME=%5CSale%5CHandlers%5CDelivery%5CAdditionalHandler&SERVICE_TYPE=RUSPOST">',
447AddEventHandler(
'sale',
'onSaleDeliveryHandlersBuildList',
array(
'CDeliveryRusPostFirst',
'Init'));
static checkDimensions($arOrderDimensions, $arRestrictDimensions)
static Compability($arOrder, $arConfig)
static GetConfig($siteId=false)
static Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP=false)
static SetSettings($arSettings)
static getTarifsByRegionFromCsv(array $arShopLocation)
static getRegionCodeByOldName($regionLangName)
static GetSettings($strSettings)
static getTarifNumFromCsv(array $arShopLocation)
static GetFeatures($arConfig)
static IncludeModule($module_name)
static makeBoxConfig($boxId, $arBox, $group, &$arConfig)
static getRequiredPacks(&$arItems, $arPacks, $maxWeight, $reservedSpace=0.15)
static getConfValue($arField)
static getBoxesFromConfig($profile, &$arConfig)
static getCsvObject($filePath)
static getLocationByIdHitCached($id)
static getShopLocationId($siteId)
static getOptionOrImportValues($optName, $importFuncName=false, $arFuncParams=array(), $siteId="")
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
AddEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $SORT=100, $FULL_PATH=false)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if(empty($signedUserToken)) $key
const DELIVERY_RP_CSV_PATH
const DELIVERY_RPF_CSV_PATH
</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."%"