function Compability($arOrder, $arConfig) { $arLocationFrom = CSaleHelper::getLocationByIdHitCached($arOrder["LOCATION_FROM"]); $arLocationTo = CDeliveryEMS::__GetLocation($arOrder["LOCATION_TO"]); if ($arConfig['category']['VALUE'] == 'doc' && $arOrder['WEIGHT'] > 2000) { return array(); } elseif (CDeliveryEMS::__IsRussian($arLocationFrom) && $arOrder['WEIGHT'] <= 31500 && $arLocationTo['EMS_ID']) { return array('delivery'); } else { return array(); } }
public static function Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false) { //echo '<pre style="text-align: left;">'; print_r($arOrder); print_r($arConfig); echo '</pre>'; if ($STEP >= 4) return array( "RESULT" => "ERROR", "TEXT" => GetMessage('SALE_DH_EMS_ERROR_CONNECT'), ); if ($arOrder["WEIGHT"] <= 0) $arOrder["WEIGHT"] = 1; $arLocationTo = CDeliveryEMS::__GetLocation($arOrder["LOCATION_TO"]); if ($arLocationTo['IS_RUSSIAN'] == 'Y') $arLocationFrom = CDeliveryEMS::__GetLocation($arOrder["LOCATION_FROM"]); if (isset($arLocationTo['EMS_CITIES_NOT_LOADED'])) { // get cities and proceed to next step $data = CDeliveryEMS::__EMSQuery('ems.get.locations', array('type' => 'cities', 'plain' => 'true')); if (!is_array($data) || $data['rsp']['stat'] != 'ok' || !is_array($data['rsp']['locations'])) { return array( "RESULT" => "ERROR", "TEXT" => GetMessage('SALE_DH_EMS_ERROR_CONNECT'), ); } $arCitiesList = array(); foreach ($data['rsp']['locations'] as $arLocation) { $arCitiesList[$arLocation['name']] = $arLocation['value']; } CheckDirPath(dirname(__FILE__)."/ems/"); if ($fp = fopen(dirname(__FILE__)."/ems/city.php", "w")) { fwrite($fp, '<'."?\r\n"); fwrite($fp, '$'."arEMSCityList = array();\r\n"); foreach ($arCitiesList as $key => $value) { fwrite($fp, '$'."arEMSCityList['".addslashes($key)."'] = '".htmlspecialcharsbx(trim($value))."';\r\n"); } fwrite($fp, '?'.'>'); fclose($fp); } return array( "RESULT" => "NEXT_STEP", "TEXT" => GetMessage('SALE_DH_EMS_CORRECT_CITIES'), ); } if (isset($arLocationTo['EMS_COUNTRIES_NOT_LOADED'])) { // get cities and proceed to next step $data = CDeliveryEMS::__EMSQuery('ems.get.locations', array('type' => 'countries', 'plain' => 'true')); if (!is_array($data) || $data['rsp']['stat'] != 'ok' || !is_array($data['rsp']['locations'])) { return array( "RESULT" => "ERROR", "TEXT" => GetMessage('SALE_DH_EMS_ERROR_CONNECT'), ); } $arCountriesList = array(); foreach ($data['rsp']['locations'] as $arLocation) { $arCountriesList[$arLocation['name']] = $arLocation['value']; } CheckDirPath(dirname(__FILE__)."/ems/"); if ($fp = fopen(dirname(__FILE__)."/ems/country.php", "w")) { fwrite($fp, '<'."?\r\n"); fwrite($fp, '$'."arEMSCountryList = array();\r\n"); foreach ($arCountriesList as $key => $value) { fwrite($fp, '$'."arEMSCountryList['".addslashes($key)."'] = '".htmlspecialcharsbx(trim($value))."';\r\n"); } fwrite($fp, '?'.'>'); fclose($fp); } return array( "RESULT" => "NEXT_STEP", "TEXT" => GetMessage('SALE_DH_EMS_CORRECT_COUNTRIES'), ); } // echo '<pre style="text-align: left">'; // print_r($arLocationFrom); // print_r($arLocationTo); // echo '</pre>'; if (!$arLocationTo['EMS_ID']) { if ($arLocationTo['IS_RUSSIAN'] == 'Y') $text = str_replace('#CITY#', $arLocationTo['CITY_NAME_ORIG'], GetMessage('SALE_DH_EMS_ERROR_NO_CITY_TO')); else $text = str_replace('#COUNTRY#', $arLocationTo['COUNTRY_NAME_ORIG'], GetMessage('SALE_DH_EMS_ERROR_NO_COUNTRY_TO')); return array( "RESULT" => "ERROR", "TEXT" => $text, ); } if ($arLocationTo['IS_RUSSIAN'] == 'Y' && !$arLocationFrom['EMS_ID']) { $text = str_replace('#CITY#', $arLocationFrom['CITY_NAME_ORIG'], GetMessage('SALE_DH_EMS_ERROR_NO_CITY_FROM')); return array( "RESULT" => "ERROR", "TEXT" => $text, ); } $cache_id = "sale|8.0.3|ems|".$profile."|".$arConfig["category"]["VALUE"]."|".$arOrder["LOCATION_FROM"]."|".$arOrder["LOCATION_TO"]; // 0-0.1,0.1-0.5,0.5-1,1-1.5,1.5-2,2-3....30-31,31-31.5 if ($arOrder['WEIGHT'] < 100) $cache_id .= '|weight_0'; elseif ($arOrder['WEIGHT'] < 2000) $cache_id .= '|weight_half_'.(ceil($arOrder['WEIGHT']/1000) * 2); elseif ($arOrder['WEIGHT'] < 31000) $cache_id .= '|weight_'.(ceil($arOrder['WEIGHT']/1000)); else $cache_id .= '|weight_max'; $obCache = new CPHPCache(); /*if ($obCache->InitCache(DELIVERY_EMS_CACHE_LIFETIME, $cache_id, "/")) { $vars = $obCache->GetVars(); $result = $vars["RESULT"]; $transit = $vars["TRANSIT"]; if ($arLocationTo['IS_RUSSIAN'] == 'Y') $result += $arOrder["PRICE"] * DELIVERY_EMS_PRICE_TARIFF; return array( "RESULT" => "OK", "VALUE" => $result, 'TRANSIT' => $transit, ); }*/ $arParams = array(); if ($arLocationTo['IS_RUSSIAN'] != 'Y') { $arParams['type'] = $arConfig["category"]["VALUE"]; } else { $arParams['from'] = $arLocationFrom['EMS_ID']; } $arParams['to'] = $arLocationTo['EMS_ID']; $arParams['weight'] = $arOrder['WEIGHT'] / 1000; $arParams['plain'] = 'true'; $data = CDeliveryEMS::__EMSQuery('ems.calculate', $arParams); //echo '<pre style="text-align: left;">answer: '; print_r($data); echo '</pre>'; if (is_array($data) && $data['rsp']['stat'] == 'ok') { $obCache->StartDataCache(); $result = doubleval($data['rsp']['price']); $transit = ''; if ($data['rsp']['term']) $transit = $data['rsp']['term']['min'].'-'.$data['rsp']['term']['max']; $obCache->EndDataCache( array( "RESULT" => $result, "TRANSIT" => $transit, ) ); if ($arLocationTo['IS_RUSSIAN'] == 'Y') $result += $arOrder["PRICE"] * DELIVERY_EMS_PRICE_TARIFF; return array( "RESULT" => "OK", "VALUE" => $data['rsp']['price'], 'TRANSIT' => $data['rsp']['term']['min'].'-'.$data['rsp']['term']['max'] ); } return array( "RESULT" => "ERROR", "TEXT" => GetMessage('SALE_DH_EMS_ERROR_RESPONSE').(is_array($data) ? ' ('.$data['rsp']['err']['msg'].')' : ''), ); }