1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
delivery_kaz_post.php
См. документацию.
1<?
2/********************************************************************************
3Delivery services for Kazakhstan's Post Service (http://www.kazpost.kz/)
4http://www.kazpost.kz/downloads/urlic/%D0%A2%D0%B0%D1%80%D0%B8%D1%84%D1%8B%20%D0%BD%D0%B0%20%D1%83%D1%81%D0%BB%D1%83%D0%B3%D1%83%20%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%20%D0%BF%D0%BE%D1%81%D1%8B%D0%BB%D0%BE%D0%BA%20%D0%B2%20%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B0%D1%85%20%D0%A0%D0%9A%20%D0%B4%D0%BB%D1%8F%20%D0%B4%D0%B8%D1%81%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D1%85%20%D0%BA%D0%BE%D0%BC%D0%BF%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%B8%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%20%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE%D0%B2.xlsx
5********************************************************************************/
7
8IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/delivery/delivery_kaz_post.php');
9
11{
12 private static $MAX_WEIGHT = 10000; // (g)
13 private static $MAX_DIMENSIONS = array("800", "800", "500"); //milimeters
14
15 private static $BASE_WEIGHT = 1000; // Base weight gramm
16
17 private static $TARIFS = array();
18 private static $TARIF_IDX = 0;
19 private static $TARIF_DEFAULT = 1;
20 private static $TARIF_DESCR = 2;
21
22 public static function Init()
23 {
24 self::$TARIFS = array(
25 "BASE" => array(
26 'WEIGHT_LESS_1000' => array(1, 550, GetMessage('SALE_DH_KP_LESS_1')),
27 'WEIGHT_MORE_1000' => array(2, 50, GetMessage('SALE_DH_KP_MORE_1'))
28 ),
29
30 "CAPITAL" => array(
31 'WEIGHT_LESS_1000' => array(3, 450, GetMessage('SALE_DH_KP_LESS_1')),
32 'WEIGHT_MORE_1000' => array(4, 50, GetMessage('SALE_DH_KP_MORE_1')),
33 )
34 );
35
36 return array(
37 /* Basic description */
38 'SID' => 'kaz_post',
39 'NAME' => GetMessage('SALE_DH_KP_NAME'),
40 'DESCRIPTION' => GetMessage('SALE_DH_KP_DESCR').' <a href="http://www.kazpost.kz">http://www.kazpost.kz</a>',
41 'DESCRIPTION_INNER' => GetMessage('SALE_DH_KP_DESCR').' <a href="http://www.kazpost.kz">http://www.kazpost.kz</a>',
42 'BASE_CURRENCY' => 'KZT',
43 'HANDLER' => __FILE__,
44 /* Handler methods */
45 'DBGETSETTINGS' => array('CDeliveryKazPost', 'GetSettings'),
46 'DBSETSETTINGS' => array('CDeliveryKazPost', 'SetSettings'),
47 'GETCONFIG' => array('CDeliveryKazPost', 'GetConfig'),
48 'COMPABILITY' => array('CDeliveryKazPost', 'Compability'),
49 'CALCULATOR' => array('CDeliveryKazPost', 'Calculate'),
50
51 /* List of delivery profiles */
52 'PROFILES' => array(
53 'distant_inner' => array(
54 'TITLE' => GetMessage('SALE_DH_KP_DI_TITLE'),
55 'DESCRIPTION' => GetMessage('SALE_DH_KP_DI_DESCR'),
56 'RESTRICTIONS_WEIGHT' => array(0, self::$MAX_WEIGHT),
57 'RESTRICTIONS_SUM' => array(0),
58 'TAX_RATE' => 0,
59 'RESTRICTIONS_MAX_SIZE' => 0,
60 'RESTRICTIONS_DIMENSIONS_SUM' => 0,
61 'RESTRICTIONS_DIMENSIONS' => self::$MAX_DIMENSIONS
62 )
63 )
64 );
65 }
66
67 public static function GetConfig()
68 {
69 $arConfig = array(
70 'CONFIG_GROUPS' => array(
71 'distant_inner' => GetMessage('SALE_DH_KP_DI_TITLE'),
72 ),
73 );
74
75 $aviableBoxes = self::getAviableBoxes();
76
77 foreach ($aviableBoxes as $boxId => $arBox)
78 CSaleDeliveryHelper::makeBoxConfig($boxId, $arBox, 'distant_inner', $arConfig);
79
80 $arConfig['CONFIG']['tarif_section_1'] = array(
81 'TYPE' => 'SECTION',
82 'TITLE' => GetMessage('SALE_DH_KP_TARIF_TITLE'),
83 'GROUP' => 'distant_inner',
84 );
85
86 foreach (self::$TARIFS["BASE"] as $arTarif)
87 {
88 $tarifId = $arTarif[self::$TARIF_IDX];
89 $arConfig['CONFIG']['TARIF_'.$tarifId] = array(
90 'TYPE' => 'STRING',
91 'DEFAULT' => $arTarif[self::$TARIF_DEFAULT],
92 'TITLE' => $arTarif[self::$TARIF_DESCR],
93 'GROUP' => 'distant_inner',
94 );
95 }
96
97 $arConfig['CONFIG']['tarif_section_2'] = array(
98 'TYPE' => 'SECTION',
99 'TITLE' => GetMessage('SALE_DH_KP_TARIF_IREG'),
100 'GROUP' => 'distant_inner',
101 );
102
103 foreach (self::$TARIFS["CAPITAL"] as $arTarif)
104 {
105 $tarifId = $arTarif[self::$TARIF_IDX];
106 $arConfig['CONFIG']['TARIF_'.$tarifId] = array(
107 'TYPE' => 'STRING',
108 'DEFAULT' => $arTarif[self::$TARIF_DEFAULT],
109 'TITLE' => $arTarif[self::$TARIF_DESCR],
110 'GROUP' => 'distant_inner',
111 );
112 }
113
114 return $arConfig;
115 }
116
117 public static function GetSettings($strSettings)
118 {
119 return unserialize($strSettings, ['allowed_classes' => false]);
120 }
121
122 public static function SetSettings($arSettings)
123 {
124 foreach ($arSettings as $key => $value)
125 {
126 if ($value <> '')
127 $arSettings[$key] = $value;
128 else
129 unset($arSettings[$key]);
130 }
131
132 return serialize($arSettings);
133 }
134
135 public static function Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false)
136 {
137 $arPacks = CSaleDeliveryHelper::getBoxesFromConfig($profile, $arConfig);
138
139 $arPackagesParams = CSaleDeliveryHelper::getRequiredPacks(
140 $arOrder["ITEMS"],
141 $arPacks,
142 self::$MAX_WEIGHT
143 );
144
145 $packageCount = count($arPackagesParams);
146
147 if ($packageCount <= 0)
148 {
149 return [
150 "RESULT" => "ERROR",
151 "TEXT" => GetMessage("SALE_DH_KP_OVERLOAD"),
152 ];
153 }
154
155 $totalPrice = 0;
156
157 $shopLocationId = CSaleHelper::getShopLocationId(SITE_ID);
158 $arShopLocation = CSaleHelper::getLocationByIdHitCached($shopLocationId);
159 $arLocationTo = CSaleHelper::getLocationByIdHitCached($arOrder['LOCATION_TO']);
160
161 foreach ($arPackagesParams as $arPackage)
162 {
163 $totalPrice += self::calculatePackPrice(
164 $arPackage,
165 $profile,
166 $arConfig,
167 $arShopLocation['REGION_ID'] ?? 0,
168 $arLocationTo['REGION_ID'] ?? 0
169 );
170 }
171
172 return [
173 'RESULT' => 'OK',
174 'VALUE' => $totalPrice,
175 'PACKS_COUNT' => $packageCount,
176 ];
177 }
178
179 public static function Compability($arOrder, $arConfig)
180 {
181 $result = array();
182
183 $aviableBoxes = CSaleDeliveryHelper::getBoxesFromConfig('distant_inner', $arConfig);
184
185 foreach ($aviableBoxes as $arBox)
186 {
187 if (CSaleDeliveryHandler::checkDimensions($arOrder["MAX_DIMENSIONS"], $arBox["DIMENSIONS"]))
188 {
189 $result = array('distant_inner');
190 break;
191 }
192 }
193
194 return $result;
195 }
196
197 private static function getConfValue(&$arConfig, $key)
198 {
199 return CSaleDeliveryHelper::getConfValue($arConfig[$key]);
200 }
201
202 private static function getAviableBoxes()
203 {
204 return array(
205 array(
206 "NAME" => GetMessage("SALE_DH_KP_STNDRD_BOX"),
207 "DIMENSIONS" => array("800", "800", "500")
208 )
209 );
210 }
211
212 private static function calculatePackPrice($arPackage, $profile, $arConfig, $regionIdFrom, $regionIdTo)
213 {
214 $arDebug = array();
215 $basePrice = $totalPrice = 0;
216
217 if($regionIdFrom == $regionIdTo)
218 $tarifGroup = 'CAPITAL';
219 else
220 $tarifGroup = 'BASE';
221
222 $basePrice = floatval(self::getConfValue($arConfig, 'TARIF_'.self::$TARIFS[$tarifGroup]['WEIGHT_LESS_1000'][self::$TARIF_IDX]));
223 $arDebug[] = 'Base Price less 1000 g: '.$basePrice;
224
225 if($arPackage['WEIGHT'] > self::$BASE_WEIGHT)
226 {
227 $addWeight = ceil(($arPackage['WEIGHT'] - self::$BASE_WEIGHT)/500);
228 $addPrice = floatval(self::getConfValue($arConfig, 'TARIF_'.self::$TARIFS[$tarifGroup]['WEIGHT_MORE_1000'][self::$TARIF_IDX]));
229 $arDebug[] = 'Price for additional weight more than 1000 g: '.$addWeight * $addPrice;
230 $basePrice += $addWeight * $addPrice;
231 }
232
233 $totalPrice = $basePrice;
234 $arDebug[] = 'Total value: '.$totalPrice;
235 return $totalPrice;
236 }
237}
238
239AddEventHandler('sale', 'onSaleDeliveryHandlersBuildList', array('CDeliveryKazPost', 'Init'));
240
241?>
static checkDimensions($arOrderDimensions, $arRestrictDimensions)
Определения delivery_handler.php:1360
Определения delivery_kaz_post.php:11
static Compability($arOrder, $arConfig)
Определения delivery_kaz_post.php:179
static Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP=false)
Определения delivery_kaz_post.php:135
static SetSettings($arSettings)
Определения delivery_kaz_post.php:122
static GetConfig()
Определения delivery_kaz_post.php:67
static GetSettings($strSettings)
Определения delivery_kaz_post.php:117
static Init()
Определения delivery_kaz_post.php:22
static IncludeModule($module_name)
Определения module.php:151
static makeBoxConfig($boxId, $arBox, $group, &$arConfig)
Определения delivery_helper.php:390
static getRequiredPacks(&$arItems, $arPacks, $maxWeight, $reservedSpace=0.15)
Определения delivery_helper.php:204
static getConfValue($arField)
Определения delivery_helper.php:148
static getBoxesFromConfig($profile, &$arConfig)
Определения delivery_helper.php:447
static getLocationByIdHitCached($id)
Определения helper.php:462
static getShopLocationId($siteId)
Определения helper.php:334
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
$STEP
Определения csv_new_setup.php:23
AddEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $SORT=100, $FULL_PATH=false)
Определения tools.php:5165
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
if(empty($signedUserToken)) $key
Определения quickway.php:257
</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."%"
Определения waybill.php:936
const SITE_ID
Определения sonet_set_content_view.php:12