Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/boxberry.delivery/ |
Upload File : |
let bbOrder = {}; function setBbOrder() { return { ajaxUrl: '/bitrix/services/main/ajax.php?sessid=' + BX.bitrix_sessid() + '&action=boxberry:delivery.api.order.', id: document.getElementById('ID'), formLayout: document.getElementById('order_form_layout'), orderFormTable: document.getElementById('order_form_edit_table'), orderFormTable2: document.getElementById('order_form2_edit_table'), deliveryId: document.getElementsByName('DELIVERY_ID_LIST')[0], parentDeliveryId: document.getElementsByName('PARENT_DELIVERY_ID')[0], openWidgetButton: document.getElementById('bbOpenWidget'), saveButton: document.getElementById('bbSaveButton'), deleteButton: document.getElementById('bbDeleteButton'), cancelButton: document.getElementById('bbCancelButton'), recalculateButton: document.getElementById('bbRecalculateButton'), updateStatusButton: document.getElementById('bbUpdateStatusButton'), changeOrderStorageDateButton: document.getElementById('bbChangeOrderStorageDate'), status: document.getElementById('bb_status'), toolbar: document.querySelector('.adm-detail-toolbar-right'), placesForm: document.querySelector('#tab_cont_order_form3'), userForm: document.querySelector('#tab_cont_order_form2'), placesTable: document.querySelector('#bb_places'), statusMessage: document.getElementById('ajax_status_message'), pointForParcel: document.getElementsByName('POINT_FOR_PARCEL')[0], issueType: document.getElementsByName('ISSUE_TYPE')[0], paymentAmount: document.getElementsByName('PAYMENT_AMOUNT')[0], declaredCost: document.getElementsByName('DECLARED_COST')[0], deliveryCost: document.getElementsByName('DELIVERY_COST')[0], pickupPointCode: document.getElementsByName('PICKUP_POINT_CODE')[0], address: document.getElementsByName('ADDRESS')[0], postcode: document.getElementsByName('POSTCODE')[0], siteId: document.getElementsByName('SITE_ID')[0], cityName: document.getElementsByName('CITY_NAME')[0], city: document.getElementsByName('CITY')[0], bbCityCode: document.getElementsByName('BB_CITY_CODE')[0], widgetKey: document.getElementsByName('WIDGET_KEY')[0], infoBlock: document.querySelectorAll('.adm-bus-orderinfoblock-content-customer-info span'), fullName: document.getElementsByName('FULL_NAME')[0], phone: document.getElementsByName('PHONE')[0], email: document.getElementsByName('EMAIL')[0], contactPerson: document.getElementsByName('CONTACT_PERSON')[0], company: document.getElementsByName('COMPANY')[0], accountNumber: document.getElementsByName('ACCOUNT_NUMBER')[0], deliverType: document.getElementsByName('DELIVERY_TYPE')[0], bitrixStatusId: document.getElementsByName('BITRIX_STATUS_ID')[0], consoleLogEnabled: document.getElementsByName('CONSOLE_LOG_ENABLED')[0].value === 'Y', currentStorageDate: document.querySelector("#tr_STORAGE_DATE > td.adm-detail-content-cell-r"), newStorageDateIcon: document.querySelector("#tr_NEW_STORAGE_DATE > td.adm-detail-content-cell-r > div"), newStorageDateInput: document.querySelector("#tr_NEW_STORAGE_DATE > td.adm-detail-content-cell-r > div > input"), track: null }; } document.addEventListener("DOMContentLoaded", function (event) { bbOrder = setBbOrder(); ['declaredCost', 'paymentAmount', 'deliveryCost'].forEach(function(key) { if (bbOrder[key]) { bbOrder[key].addEventListener('input', function(e) { e.target.value = e.target.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1'); if (key === 'paymentAmount' && parseFloat(e.target.value) > 300000) { e.target.value = '300000'; alert(BX.message('ORDER_PAYSUM_LIMIT')); } }); } }); const tabs = ['order_form2', 'order_form3', 'order_form4'] if (bbOrder.postcode) { bbOrder.postcode.addEventListener('input', function(e) { e.target.value = e.target.value.replace(/[^0-9]/g, ''); }); } for (let key in bbOrder) { if (bbOrder[key] instanceof HTMLInputElement || bbOrder[key] instanceof HTMLSelectElement) { bbOrder[key].addEventListener('change', function(event) { bbOrder[key].value = event.target.value; }); } } bbOrder.formLayout.style.display = 'none'; handleDeliveryIdChange(bbOrder.deliveryId.value, tabs) bbOrder.deliveryId.addEventListener('change', function(event) { bbOrder.deliveryId.value = event.target.value; handleDeliveryIdChange(event.target.value, tabs); }); bbOrder.pickupPointCode.parentElement.appendChild(bbOrder.openWidgetButton); bbOrder.openWidgetButton.onclick = function (e) { e.preventDefault(); bbWidget.open(bbWidgetAdminCallback, bbOrder.widgetKey.value, bbOrder.cityName.value); } createToolbarButton(); handleDatalist(bbOrder.pointForParcel); handleOrderBlockInfo(); bbOrder.placesForm.onclick = function (e) { e.preventDefault(); if (order_form.aTabsDisabled.order_form3) { return; } if (!bbOrder.placesTable) { bbGetPlaces() .then(data => { const tableContainer = document.querySelector('#tableContainer'); tableContainer.innerHTML = ` <p id="table-description">${BX.message('ORDER_PLACES_DESCR_1')} <br>${BX.message('ORDER_PLACES_DESCR_2')}</a></p> <table class="adm-detail-content-table edit-table" id="order_products"> <thead><tr><td>${BX.message('ORDER_PLACE_NUMBER')}</td><td>${BX.message('ORDER_PLACE_WEIGHT')}</td><td>${BX.message('ORDER_PLACE_LENGTH')}</td><td>${BX.message('ORDER_PLACE_WIDTH')}</td><td>${BX.message('ORDER_PLACE_HEIGHT')}</td></tr></thead> <tbody id="bb_places"></tbody> </table> `; bbOrder.placesTable = document.querySelector('#bb_places'); const rows = data.data.places.map((place, index) => { return ` <tr id="place-${index + 1}"> <td>${index + 1}</td> <td><input type="text" id="weight-${index + 1}" value="${place.Weight}" style="width: 50px;"></td> <td><input type="text" id="length-${index + 1}" value="${place.Depth}" style="width: 50px;"></td> <td><input type="text" id="width-${index + 1}" value="${place.Width}" style="width: 50px;"></td> <td><input type="text" id="height-${index + 1}" value="${place.Height}" style="width: 50px;"></td> </tr> `; }); bbOrder.placesTable.innerHTML = rows.join(''); Array.from(bbOrder.placesTable.rows).forEach(row => { const weightInput = row.querySelector('input[id^="weight-"]'); const lengthInput = row.querySelector('input[id^="length-"]'); const widthInput = row.querySelector('input[id^="width-"]'); const heightInput = row.querySelector('input[id^="height-"]'); [weightInput, lengthInput, widthInput, heightInput].forEach(input => { input.addEventListener('input', function(e) { e.target.value = e.target.value.replace(/[^0-9]/g, ''); }); }); }); order_form.SelectTab('order_form3'); }) .catch((error) => { console.error(BX.message('ORDER_ERROR_TEXT'), error); order_form.SelectTab('order_form3'); }); } else { order_form.SelectTab('order_form3'); } } bbOrder.saveButton.onclick = function (e) { e.preventDefault(); bbCreateOrder(e) } const cancelType = '2'; const deleteType = '1'; bbOrder.cancelButton.onclick = function (e) { bbCancelOrder(e, cancelType) } bbOrder.deleteButton.onclick = function (e) { bbCancelOrder(e, deleteType) } bbOrder.changeOrderStorageDateButton.onclick = function (e) { bbChangeStorageDate(e); } bbOrder.recalculateButton.onclick = function (e) { e.preventDefault(); bbCalc().then(data => { bbOrderFormStatusMessage(data.status, isDataError(data) ? data.errors[0].message : data.data.message); if (data.status === 'error') { return; } bbOrder.deliveryCost.value = data.data.price; }); } bbOrder.updateStatusButton.onclick = function (e) { e.preventDefault(); e.target.disabled = true; getTrackingData().then(data => { bbOrderFormStatusMessage(data.status, isDataError(data) ? data.errors[0].message : data.data.message); if (data.status === 'success') { e.target.disabled = false; handleOrderBlockInfo(data.data); bbCancelEventsHandler(data.data.cancelAvailable, data.data.deleteAvailable) handleChangeStorageDateFromTracking(data.data.bb_storage_date, data.data.changeStorageDateAvailable) } else { e.target.disabled = false; hideAndResetInfoBlockContent() bbCancelEventsHandler(data.errors[0].customData.cancelAvailable, data.errors[0].customData.deleteAvailable) handleChangeStorageDateFromTracking(null, false) } }); } }); BX.bind(bbOrder.newStorageDateIcon, 'click', function() { BX.calendar({ node: this, field: bbOrder.newStorageDateInput, bTime: false, bSetFocus: false, callback_after: function(oDate) { let currentDate = new Date(); currentDate.setHours(0, 0, 0, 0); if (oDate > currentDate) { bbOrder.newStorageDateInput.value = oDate.toLocaleDateString('ru-RU', { day: '2-digit', month: '2-digit', year: 'numeric' }); } else { alert(BX.message('DATE_MUST_BE_GREATER_THAN_CURRENT')); } } }); }); function bbDisableButtonsDiv (disabled = true) { let buttonsDiv = document.getElementById('order_form_buttons_div'); if (!disabled) { buttonsDiv.style.pointerEvents = 'auto'; buttonsDiv.style.opacity = '1'; } else { buttonsDiv.style.pointerEvents = 'none'; buttonsDiv.style.opacity = '0.5'; } } function bbGetPlaces() { return fetch(bbOrder.ajaxUrl + 'getPlaces&orderId=' + bbOrder.id.value + '&deliveryId=' + bbOrder.deliveryId.value, { method: 'GET', headers: { 'Content-Type': 'application/json', }, }) .then(response => response.json()) .then(data => { return data; }) .catch((error) => { console.error(BX.message('ORDER_ERROR_TEXT'), error); return error; }); } function bbCancelOrder(e, requestType) { e.preventDefault(); const userConfirmation = confirm(BX.message('ORDER_CANCEL_CONFIRM_TEXT_1') + getCancelTypeProcedureName(requestType) + BX.message('ORDER_CANCEL_CONFIRM_TEXT_2')); if (!userConfirmation) { return; } e.target.disabled = true; if (bbOrder.id.value) { fetch(bbOrder.ajaxUrl + 'cancel&orderId=' + bbOrder.id.value + '&cancelType=' + requestType) .then(response => response.json()) .then(data => { bbOrderFormStatusMessage(data.status, isDataError(data) ? data.errors[0].message : data.data.message); getTrackingData().then(data => { if (data.status === 'success') { handleOrderBlockInfo(data.data); bbCancelEventsHandler(data.data.cancelAvailable, data.data.deleteAvailable) } else { hideAndResetInfoBlockContent() bbCancelEventsHandler(data.errors[0].customData.cancelAvailable, data.errors[0].customData.deleteAvailable) } }); if (data.status === 'error') { e.target.disabled = false; handleOrderBlockInfo(); } }) .catch(error => { console.error(error); e.target.disabled = false; }); } } function handleDeliveryIdChange(value, tabs) { if (value !== '0') { fillOrderData(); bbDisableButtonsDiv(false); tabs.forEach(tab => { if (tab === 'order_form4' && order_form.aTabsDisabled.order_form4) { return; } order_form.EnableTab(tab); }); } else { tabs.forEach(tab => { order_form.DisableTab(tab); }); bbDisableButtonsDiv(); } } function bbWidgetAdminCallback(result) { if (result === undefined || result === null) { alert(BX.message('ORDER_WIDGET_RESULT_ERROR')); return; } bbOrder.pickupPointCode.value = result.id; bbOrder.address.value = result.address; } function handleChangeStorageDateFromTracking(date, isAvailable) { bbOrder.currentStorageDate.innerHTML = date ? date : BX.message('NOT_SET'); if (isAvailable) { order_form.EnableTab('order_form4'); } else { order_form.DisableTab('order_form4'); } } function getTrackingData() { return fetch(bbOrder.ajaxUrl + 'getOrderTrackingData&orderId=' + bbOrder.id.value) .then(response => response.json()) .then(data => { if (data.status === 'success') { bbOrder.track = data.data.bb_track; } else { bbOrder.track = null; } return data; }) .catch((error) => { console.error(BX.message('ORDER_ERROR_TEXT'), error); return error; }); } function bbChangeStorageDate(e) { e.preventDefault(); fetch(bbOrder.ajaxUrl + 'changeStorageDate', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams({ date: bbOrder.newStorageDateInput.value, trackNumber: bbOrder.track, deliveryId: bbOrder.deliveryId.value, }).toString() }) .then(response => response.json()) .then(data => { bbOrderFormStatusMessage(data.status, isDataError(data) ? data.errors[0].message : data.data.message); getTrackingData().then(data => { if (data.status === 'success') { handleChangeStorageDateFromTracking(data.data.bb_storage_date, data.data.changeStorageDateAvailable) bbCancelEventsHandler(data.data.cancelAvailable, data.data.deleteAvailable) } else { bbCancelEventsHandler(data.errors[0].customData.cancelAvailable, data.errors[0].customData.deleteAvailable) handleChangeStorageDateFromTracking(null, false) } }); }) .catch((error) => { console.error(BX.message('ORDER_ERROR_TEXT'), error); }); } function getBoxes() { if (!bbOrder.placesTable) { return []; } return Array.from(bbOrder.placesTable.rows).map(row => { const cells = row.cells; return { Weight: parseInt(cells[1].querySelector('input').value, 10), Depth: parseInt(cells[2].querySelector('input').value, 10), Width: parseInt(cells[3].querySelector('input').value, 10), Height: parseInt(cells[4].querySelector('input').value, 10), }; }); } function bbCalc() { let boxes = getBoxes(); let calculateParams = { orderSum: bbOrder.declaredCost.value, paySum: bbOrder.paymentAmount.value != 0 ? bbOrder.declaredCost.value : bbOrder.paymentAmount.value, targetStart: bbOrder.pointForParcel.value, }; if (boxes.length > 0) { calculateParams['boxSizes'] = boxes; } return fetch(bbOrder.ajaxUrl + 'calculate', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams({ orderId: bbOrder.id.value, deliveryId: bbOrder.deliveryId.value, data: JSON.stringify(calculateParams) }).toString() }) .then(response => response.json()) .then(data => { return data; }) .catch((error) => { console.error(BX.message('ORDER_ERROR_TEXT'), error); return error; }); } function getOrderData() { return fetch(bbOrder.ajaxUrl + 'getOrderData&orderId=' + bbOrder.id.value + '&deliveryId=' + bbOrder.deliveryId.value) .then(response => response.json()) .then(data => { return data; }) .catch((error) => { console.error(BX.message('ORDER_ERROR_TEXT'), error); return error; }); } function fillOrderData() { getOrderData().then(data => { if (data.status === 'error') { throw new Error(data.errors[0].message); } const editTable = bbOrder.orderFormTable.querySelectorAll('input, select'); const editTable2 = bbOrder.orderFormTable2.querySelectorAll('input, select'); for (let i = 0; i < editTable.length; i++) { let element = editTable[i]; if (data.data.hasOwnProperty(element.name)) { element.value = data.data[element.name]; } } for (let i = 0; i < editTable2.length; i++) { let element = editTable2[i]; if (data.data.hasOwnProperty(element.name)) { element.value = data.data[element.name]; } } }) .then(() => { return bbCalc(); }) .then(data => { bbOrderFormStatusMessage(data.status, isDataError(data) ? data.errors[0].message : data.data.message); if (data.status === 'error') { bbDisableButtonsDiv(); throw new Error(data.errors[0].message); } bbDisableButtonsDiv(false); bbOrder.deliveryCost.value = data.data.price; }) .then(() => { return getTrackingData(); }) .then(data => { if (data.status === 'success') { bbCancelEventsHandler(data.data.cancelAvailable, data.data.deleteAvailable); handleChangeStorageDateFromTracking(data.data.bb_storage_date, data.data.changeStorageDateAvailable) } else { bbCancelEventsHandler(data.errors[0].customData.cancelAvailable, data.errors[0].customData.deleteAvailable); handleChangeStorageDateFromTracking(null, false) } }) .catch((error) => { console.log(error) bbOrderFormStatusMessage('error', error.message); }); } function updateOrderData() { let boxes = getBoxes(); let data = { pointForParcel: bbOrder.pointForParcel.value, issueType: bbOrder.issueType.value, paymentAmount: bbOrder.paymentAmount.value, declaredCost: bbOrder.declaredCost.value, deliveryCost: bbOrder.deliveryCost.value, pickupPointCode: bbOrder.pickupPointCode.value, address: bbOrder.address.value, postcode: bbOrder.postcode.value, fullName: bbOrder.fullName ? bbOrder.fullName.value : null, phone: bbOrder.phone.value, email: bbOrder.email.value, contactPerson: bbOrder.contactPerson ? bbOrder.contactPerson.value : null, company: bbOrder.company ? bbOrder.company.value : null, deliveryId: bbOrder.deliveryId.value, parentDeliveryId: bbOrder.parentDeliveryId.value, accountNumber: bbOrder.accountNumber.value, deliveryType: bbOrder.deliverType.value, siteId: bbOrder.siteId.value, bitrixStatusId: bbOrder.bitrixStatusId.value, city: bbOrder.city.value, bbCityCode: bbOrder.bbCityCode.value }; if (boxes.length > 0) { data.places = JSON.stringify(boxes); } let body = { orderId: bbOrder.id.value, data: JSON.stringify(data), }; return fetch(bbOrder.ajaxUrl + 'update', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams(body).toString() }) .then(response => response.json()) .then(data => { return data; }) .catch((error) => { console.error(BX.message('ORDER_ERROR_TEXT'), error); return error; }); } function bbParselAction(action) { const url = bbOrder.ajaxUrl + action; const params = new URLSearchParams({ orderId: bbOrder.id.value, }); return fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: params.toString() }) .then(response => response.json()) .then(data => { return data; }) .catch((error) => { console.error(BX.message('ORDER_ERROR_TEXT'), error); return error; }); } function bbHandleError(data) { if (data.status === 'error') { throw new Error(data.errors[0].message); } return data; } async function bbCreateOrder() { try { bbOrder.saveButton.disabled = true; let data = await updateOrderData(); bbHandleError(data); data = await bbParselAction('parselCreate'); data.status === 'error' ? bbHandleError(data) : bbOrderFormStatusMessage('success', data.data.message); if (data.status === 'success') { getTrackingData().then(data => { handleOrderBlockInfo(data.data); }); } } catch (error) { bbOrderFormStatusMessage('error', error.message); } finally { bbOrder.saveButton.disabled = false; } } function handleOrderBlockInfo(data) { if (bbOrder.infoBlock) { if (!data) { hideEmptyInfo(); } else { updateInfoBlock(data); } } } function hideEmptyInfo() { for (var i = 0; i < bbOrder.infoBlock.length; i++) { if (bbOrder.infoBlock[i].id.indexOf('bb_') !== -1) { if (bbOrder.infoBlock[i].innerHTML === '' || bbOrder.infoBlock[i].innerHTML === ' ' || (bbOrder.infoBlock[i].id.indexOf('url') !== -1 && bbOrder.infoBlock[i].innerHTML.indexOf('api.boxberry.ru') <=0)) { BX.hide(BX(bbOrder.infoBlock[i].id).parentNode); } } } } function hideAndResetInfoBlockContent() { if (bbOrder.infoBlock) { for (var i = 0; i < bbOrder.infoBlock.length; i++) { if (bbOrder.infoBlock[i].id.indexOf('bb_') !== -1) { bbOrder.infoBlock[i].innerHTML = ''; BX.hide(BX(bbOrder.infoBlock[i].id).parentNode); } } } } function updateInfoBlock(data) { Object.entries(data).forEach(([key, value]) => { for (let i = 0; i < bbOrder.infoBlock.length; i++) { if (bbOrder.infoBlock[i].id === key && (value !== '' && value !== null)) { if (bbOrder.infoBlock[i].id.indexOf('error') !== -1) { BX.show(BX(bbOrder.infoBlock[i].id).parentNode); bbOrder.infoBlock[i].innerHTML = '<b>' + value + '</b>'; } else if (bbOrder.infoBlock[i].id.indexOf('url') !== -1) { BX.show(BX(bbOrder.infoBlock[i].id).parentNode); bbOrder.infoBlock[i].innerHTML = '<a href="' + value + '" target="_blank">Скачать</a>'; } else { BX.show(BX(bbOrder.infoBlock[i].id).parentNode); bbOrder.infoBlock[i].innerText = value; } } } }); bbCancelEventsHandler(data.cancelAvailable, data.deleteAvailable); } function bbSetButtonState(button, state) { button.disabled = !state; } function bbSetSaveButtonText(text) { bbOrder.saveButton.text = text; bbOrder.saveButton.value = text; } function bbCancelEventsHandler(cancelEvent, deleteEvent) { bbSetButtonState(bbOrder.cancelButton, cancelEvent); bbSetButtonState(bbOrder.deleteButton, deleteEvent); if (bbOrder.track) { if ((cancelEvent && deleteEvent) || (cancelEvent && !deleteEvent) || (!cancelEvent && deleteEvent)) { bbSetSaveButtonText(BX.message('ORDER_UPDATE_IN_LK')); } else if (!cancelEvent && !deleteEvent) { bbSetSaveButtonText(BX.message('ORDER_IN_DELIVERY_PROCESS')); bbOrder.saveButton.disabled = true; } } else if (!cancelEvent && !deleteEvent) { bbSetSaveButtonText(BX.message('ORDER_CREATE')); } } function getCancelTypeProcedureName(cancelType) { switch (cancelType) { case '1': return BX.message('ORDER_DELETE'); case '2': return BX.message('ORDER_CANCEL'); } } function getStatusColor(status) { switch (status) { case 'success': return 'green'; case 'error': return 'red'; } } function bbOrderFormStatusMessage(status, message) { if (bbOrder.formLayout && bbOrder.formLayout.style.display === 'none') { return; } const statusColor = getStatusColor(status); if (bbOrder.statusMessage) { bbOrder.statusMessage.style.display = 'block'; bbOrder.statusMessage.innerHTML = '<div class="adm-info-message-wrap adm-info-message-' + statusColor + '"><div class="adm-info-message"><div class="adm-info-message-title">Сохранение данных</div><div class="adm-info-message-icon"></div><div class="adm-info-message-text">' + message + '</div></div></div>'; setTimeout(function () { bbOrder.statusMessage.style.display = 'none'; bbOrder.statusMessage.innerHTML = ''; }, 5000); } } function addButtonToToolbar(button) { const fixedToolbar = document.querySelector('.adm-detail-toolbar-right.bx-fixed-right'); const defaultToolbar = document.querySelector('.adm-detail-toolbar-right:not(.bx-fixed-right)'); if (button.parentElement) { button.parentElement.removeChild(button); } const targetToolbar = fixedToolbar || defaultToolbar; if (targetToolbar) { targetToolbar.prepend(button); } } function createToolbarButton() { const bbToolbarButton = document.createElement('input'); bbToolbarButton.type = 'button'; bbToolbarButton.value = BX.message('ORDER_TOOLBAR_BUTTON_TEXT'); bbToolbarButton.className = 'adm-btn'; bbToolbarButton.onclick = function () { bbOrder.formLayout.style.display = bbOrder.formLayout.style.display === 'none' ? 'block' : 'none'; }; setTimeout(function () { addButtonToToolbar(bbToolbarButton); }, 20); window.addEventListener('resize', function () { addButtonToToolbar(bbToolbarButton); }); } function isDataError(data) { return data.status === 'error'; } function showConsoleLog(...logs) { if (bbOrder.consoleLogEnabled) { console.log(...logs); } }