From 87e04fab8b06de500da1ba9721427bcf0fd4e4af Mon Sep 17 00:00:00 2001 From: Alexey Portnov Date: Mon, 16 Feb 2026 16:51:49 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20Dat?= =?UTF-8?q?aTables:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BF=D0=BE=D0=BB=D0=B5=20recordsTotal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DataTables в режиме serverSide требует обязательное поле recordsTotal в ответе. Добавлено это поле в методы history() и outgoingEmployeeCalls() для устранения ошибки "Cannot read properties of undefined (reading 'length')". --- Lib/GetReport.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Lib/GetReport.php b/Lib/GetReport.php index 838b20b..fc1f183 100644 --- a/Lib/GetReport.php +++ b/Lib/GetReport.php @@ -217,6 +217,7 @@ public function history(string $searchPhrase = '', ?int $offset = null, ?int $li $recordsFilteredReq = ConnectorDB::invoke('getCountCdr', [$start, $end, $numbers, $additionalNumbers, $additionalFilter, $minBilSec, $ids]); $view->recordsFiltered = $recordsFilteredReq['cCalls'] ?? 0; + $view->recordsTotal = $recordsFilteredReq['cCalls'] ?? 0; $view->recordsInner = $recordsFilteredReq['cINNER'] ?? 0; $view->recordsOutgoing = $recordsFilteredReq['cOUTGOING'] ?? 0; $view->recordsIncoming = $recordsFilteredReq['cINCOMING'] ?? 0; @@ -734,6 +735,7 @@ public function outgoingEmployeeCalls(string $searchPhrase = '', ?int $offset = unset($resultsCdrData); $resultView->recordsFiltered = count($staffNumbers); + $resultView->recordsTotal = count($staffNumbers); if ($offset !== null) { $staffNumbers = array_slice($staffNumbers, $offset); From 13a718648b2992075eca1af8fb50223f61177216 Mon Sep 17 00:00:00 2001 From: Alexey Portnov Date: Mon, 16 Feb 2026 16:53:23 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D1=8F=20lastId=20=D0=B2=20update?= =?UTF-8?q?SyncState?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлена проверка существования response.stateData перед обращением к его свойствам. Это предотвращает ошибку "Cannot read properties of undefined (reading 'lastId')" когда кэш синхронизации пуст или не инициализирован. --- public/assets/js/module-export-records-index.js | 5 +++++ public/assets/js/module-export-records-index.js.map | 2 +- public/assets/js/src/module-export-records-index.js | 6 ++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/public/assets/js/module-export-records-index.js b/public/assets/js/module-export-records-index.js index 04b8c38..f4f1fa1 100644 --- a/public/assets/js/module-export-records-index.js +++ b/public/assets/js/module-export-records-index.js @@ -832,6 +832,11 @@ var ModuleExtendedCDRs = { url: "".concat(globalRootUrl).concat(idUrl, "/getState"), method: 'GET', success: function success(response) { + // Проверяем существование stateData и его свойств + if (!response.stateData || typeof response.stateData.lastId === 'undefined' || typeof response.stateData.nowId === 'undefined') { + divProgress.hide(); + return; + } if (response.stateData.lastId - response.stateData.nowId > 0) { divProgress.show(); } else { diff --git a/public/assets/js/module-export-records-index.js.map b/public/assets/js/module-export-records-index.js.map index 72ad3ca..1f1cbf7 100644 --- a/public/assets/js/module-export-records-index.js.map +++ b/public/assets/js/module-export-records-index.js.map @@ -1 +1 @@ -{"version":3,"file":"module-export-records-index.js","names":["idUrl","idForm","className","inputClassName","listenedIDs","ModuleExtendedCDRs","$formObj","$","$checkBoxes","$dropDowns","saveTableAJAXUrl","globalRootUrl","deleteRecordAJAXUrl","$disabilityFields","$statusToggle","$moduleStatus","$cdrTable","$outgoingEmployeeCalls","$cdrQueueTable","$globalSearch","$dateRangeSelector","dataTable","players","applyFilterTimer","applyFilterRunning","tablesInitialized","tableInitDataOutgoingEmployeeCalls","wasInit","id","data","search","serverSide","processing","info","columnDefs","defaultContent","targets","ajax","callback","settings","value","val","recordsTotal","recordsFiltered","url","concat","type","success","json","error","xhr","status","console","paging","sDom","deferRender","createdRow","row","eq","html","callerId","number","addClass","billHourCalls","billMinCalls","billSecCalls","countCalls","drawCallback","closest","removeClass","language","SemanticLocalization","dataTableLocalisation","ordering","tableInitDataCallDetails","recordsIncoming","recordsMissed","recordsMissedPercent","recordsOutgoing","typeCall","attr","stripeClasses","detailedIcon","DT_RowClass","indexOf","duration","ids","lineText","line","did","waitTime","stateCall","Extensions","updatePhonesRepresent","forEach","element","length","tableInitDataCdrQueue","queueId","date","dateForUrl","dateParts","split","dateHtml","detailUrl","encodeURIComponent","queueName","totalCalls","answered","missed","answeredQueue","avgWaitTime","avgMissed","avgWaitTimeQueue","validateRules","validateVariantRules","title","identifier","rules","prompt","globalTranslate","repModuleExtendedCDRs_Form_titleReportError","minBillSec","dateMonth","repModuleExtendedCDRs_Form_DateMonthError","day","repModuleExtendedCDRs_Form_DayError","time","repModuleExtendedCDRs_Form_TimeError","email","repModuleExtendedCDRs_Form_EmailError","processUrlParameters","urlParams","URLSearchParams","window","location","reportNameID","get","dateRangeSelector","queue","dates","startDate","moment","endDate","isValid","format","endOf","dropdown","currentFilter","filterArray","queueValue","includes","push","applyFilter","initialize","newUrl","pathname","history","replaceState","hide","remove","css","popup","inline","target","position","hoverable","delay","show","changeReportVariant","initializeDateRangeSelector","checkbox","initializeForm","tab","document","on","e","stopPropagation","parent","parents","children","reportId","form","find","text","trim","fields","variantId","sendingReport","contentDiv","saveSearchSettings","timestamp","Date","now","parentTitle","newItem","class","siblings","append","trigger","undefined","self","headers","response","startCreateExcelPDF","encodedSearch","getSearchText","origin","open","keyCode","currentVariantId","$button","$menu","contents","not","prepend","keydown","event","preventDefault","updateSettings","onChange","updateSyncState","setInterval","arguments","variantName","filter","nodeType","nodeValue","each","JSON","parse","decodeURIComponent","minBillSecComp","setDate","periods","getStandardPeriods","defPeriod","globalSearch","additionalFilter","divProgress","method","stateData","lastId","nowId","progress","total","active","repModuleExtendedCDRs_syncState","jqXHR","textStatus","errorThrown","showRecords","htmlPlayer","record","i","srcAudio","srcDownloadAudio","recordingfile","recordFileUri","fileNameFromPath","pop","extMatch","match","fileExt","toLowerCase","downloadFileName","prettyFilename","endsWith","recordFileName","start","src_num","dst_num","billsec","stateCallIndex","audioPlayHandler","detailRow","callIdDetail","callId","replace","allPositive","hasClass","_toConsumableArray","Set","calculatePageLength","rowHeight","first","outerHeight","windowHeight","innerHeight","headerFooterHeight","Math","max","floor","additionalExportFunctions","body","newRow","nameCell","usersCell","buttonsCell","headersCell","index","table","rows","rowData","name","dstUrl","users","log","key","ruleSaveResult","hasOwnProperty","syncRules","RegExp","showRuleOptions","modal","closable","removeRule","period","_period$split","_period$split2","_slicedToArray","startStr","endStr","options","ranges","_defineProperty","repModuleExtendedCDRs_cdr_cal_Today","repModuleExtendedCDRs_cdr_cal_Yesterday","subtract","repModuleExtendedCDRs_cdr_cal_LastWeek","repModuleExtendedCDRs_cdr_cal_Last30Days","repModuleExtendedCDRs_cdr_cal_ThisMonth","startOf","repModuleExtendedCDRs_cdr_cal_LastMonth","alwaysShowCalendars","autoUpdateInput","linkedCalendars","maxDate","locale","separator","applyLabel","cal_ApplyBtn","cancelLabel","cal_CancelBtn","fromLabel","cal_from","toLabel","cal_to","customRangeLabel","cal_CustomPeriod","daysOfWeek","calendarText","days","monthNames","months","firstDay","daterangepicker","cbDateRangeSelectorOnSelect","end","label","clearTimeout","setTimeout","applyFilterInternal","reportName","tr","DataTable","after","playerRow","CDRPlayer","page","len","draw","retStandardPeriod","disableGlobalSearch","minBilSec","minBilSecComp","stringify","sendingScheduledReport","getMaxWidth","maxLength","toString","startDownload","startTime","endTime","typeRec","numbers","startDownloadHistory","makeDropdownList","selectType","selected","values","obj","changeGroupInList","choice","tdInput","currentRowId","tableName","sendChangesToServer","applyConfigurationChanges","changeStatus","api","Config","pbxUrl","successTest","Object","keys","result","onSuccess","onFailure","cbBeforeSendForm","cbAfterSendForm","Form","module_export_recordsConnected","module_export_recordsDisconnected","module_export_recordsUpdateStatus","ready"],"sources":["src/module-export-records-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-extended-c-d-rs';\nconst idForm = 'module-extended-cdr-form';\nconst className = 'ModuleExtendedCDRs';\nconst inputClassName = 'mikopbx-module-input';\nlet listenedIDs = [];\n\n/* global globalRootUrl, globalTranslate, Form, Config, $ */\nconst ModuleExtendedCDRs = {\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tsaveTableAJAXUrl: globalRootUrl + idUrl + \"/saveTableData\",\n\tdeleteRecordAJAXUrl: globalRootUrl + idUrl + \"/delete\",\n\t$disabilityFields: $('#'+idForm+' .disability'),\n\t$statusToggle: $('#module-status-toggle'),\n\t$moduleStatus: $('#status'),\n\n\t/**\n\t * The call detail records table element.\n\t * @type {jQuery}\n\t */\n\t$cdrTable: $('#CallDetails-table'),\n\t$outgoingEmployeeCalls: $('#OutgoingEmployeeCalls-table'),\n\t$cdrQueueTable: $('#CdrQueue-table'),\n\n\t/**\n\t * The global search input element.\n\t * @type {jQuery}\n\t */\n\t$globalSearch: $('#globalsearch'),\n\n\t/**\n\t * The date range selector element.\n\t * @type {jQuery}\n\t */\n\t$dateRangeSelector: $('#date-range-selector'),\n\n\t/**\n\t * The data table object.\n\t * @type {Object}\n\t */\n\tdataTable: {},\n\n\t/**\n\t * An array of players.\n\t * @type {Array}\n\t */\n\tplayers: [],\n\n\t/**\n\t * Flag to prevent initial data loading\n\t * @type {boolean}\n\t */\n\tapplyFilterTimer: null,\n\tapplyFilterRunning: false,\n\n\ttablesInitialized: false,\n\n\ttableInitDataOutgoingEmployeeCalls: {\n\t\twasInit: false,\n\t\tid: 'OutgoingEmployeeCalls',\n\t\tdata: {\n\t\t\tsearch: {\n\t\t\t\tsearch: '',\n\t\t\t},\n\t\t\tserverSide: true,\n\t\t\tprocessing: true,\n\t\t\tinfo: false,\n\t\t\tcolumnDefs: [\n\t\t\t\t{ defaultContent: \"\", targets: \"_all\"},\n\t\t\t],\n\t\t\tajax: function(data, callback, settings) {\n\t\t\t\tif (data.search.value === '' ||\n\t\t\t\t\t!ModuleExtendedCDRs.tablesInitialized || $('#currentReportNameID').val() !== 'OutgoingEmployeeCalls') {\n\t\t\t\t\t// Skip initial load\n\t\t\t\t\tcallback({ data: [], recordsTotal: 0, recordsFiltered: 0 });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$.ajax({\n\t\t\t\t\turl: `${globalRootUrl}${idUrl}/getOutgoingEmployeeCalls`,\n\t\t\t\t\ttype: 'POST',\n\t\t\t\t\tdata: data,\n\t\t\t\t\tsuccess: function(json) {\n\t\t\t\t\t\tcallback(json);\n\t\t\t\t\t},\n\t\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\t\tconsole.error('getOutgoingEmployeeCalls error:', status, error);\n\t\t\t\t\t\tcallback({ data: [], recordsTotal: 0, recordsFiltered: 0 });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tpaging: false,\n\t\t\tsDom: 'rtip',\n\t\t\tdeferRender: true,\n\t\t\t// pageLength: ModuleExtendedCDRs.calculatePageLength(),\n\n\t\t\t/**\n\t\t\t * Constructs the CDR row.\n\t\t\t * @param {HTMLElement} row - The row element.\n\t\t\t * @param {Array} data - The row data.\n\t\t\t */\n\t\t\tcreatedRow(row, data) {\n\t\t\t\t$('td', row).eq(0).html(data.callerId);\n\t\t\t\t$('td', row).eq(1).html(data.number).addClass('active');\n\t\t\t\t$('td', row).eq(2).html(data.billHourCalls);\n\t\t\t\t$('td', row).eq(3).html(data.billMinCalls);\n\t\t\t\t$('td', row).eq(4).html(data.billSecCalls);\n\t\t\t\t$('td', row).eq(5).html(data.countCalls);\n\t\t\t},\n\t\t\tdrawCallback(settings) {\n\t\t\t\tModuleExtendedCDRs.$globalSearch.closest('div').removeClass('loading');\n\t\t\t\tModuleExtendedCDRs.applyFilterRunning = false;\n\t\t\t},\n\t\t\tlanguage: SemanticLocalization.dataTableLocalisation,\n\t\t\tordering: false,\n\t\t}\n\t},\n\ttableInitDataCallDetails: {\n\t\t wasInit: false,\n\t\t id: 'CallDetails',\n\t\t data: {\n\t\t\tsearch: {\n\t\t\t\tsearch: '',\n\t\t\t},\n\t\t\tserverSide: true,\n\t\t\tprocessing: true,\n\t\t\tinfo: false,\n\t\t\tcolumnDefs: [\n\t\t\t\t{defaultContent: \"-\", targets: \"_all\"},\n\t\t\t],\n\t\t\tajax: function(data, callback, settings) {\n\t\t\t\tif (data.search.value === '' ||\n\t\t\t\t\t!ModuleExtendedCDRs.tablesInitialized || $('#currentReportNameID').val() !== ModuleExtendedCDRs.tableInitDataCallDetails.id) {\n\t\t\t\t\t// Skip initial load\n\t\t\t\t\tcallback({ data: [], recordsTotal: 0, recordsFiltered: 0 });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$.ajax({\n\t\t\t\t\turl: `${globalRootUrl}${idUrl}/getHistory`,\n\t\t\t\t\ttype: 'POST',\n\t\t\t\t\tdata: data,\n\t\t\t\t\tsuccess: function(json) {\n\t\t\t\t\t\t$('a.item[data-tab=\"all-calls\"] b').html(': '+json.recordsFiltered)\n\t\t\t\t\t\t$('a.item[data-tab=\"incoming-calls\"] b').html(': '+json.recordsIncoming)\n\n\t\t\t\t\t\tlet recordsMissed = json.recordsMissed;\n\t\t\t\t\t\tif(json.recordsMissedPercent !== 0){\n\t\t\t\t\t\t\trecordsMissed = json.recordsMissed + ' (' +json.recordsMissedPercent+ '%)';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$('a.item[data-tab=\"missed-calls\"] b').html(': '+recordsMissed)\n\t\t\t\t\t\t$('a.item[data-tab=\"outgoing-calls\"] b').html(': '+json.recordsOutgoing)\n\n\t\t\t\t\t\tlet typeCall = $('#typeCall a.item.active').attr('data-tab');\n\t\t\t\t\t\tif(typeCall === 'incoming-calls'){\n\t\t\t\t\t\t\tjson.recordsFiltered = json.recordsIncoming;\n\t\t\t\t\t\t}else if(typeCall === 'missed-calls'){\n\t\t\t\t\t\t\tjson.recordsFiltered = json.recordsMissed;\n\t\t\t\t\t\t}else if(typeCall === 'outgoing-calls'){\n\t\t\t\t\t\t\tjson.recordsFiltered = json.recordsOutgoing;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallback(json);\n\t\t\t\t\t},\n\t\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\t\tconsole.error('getHistory error:', status, error);\n\t\t\t\t\t\tcallback({ data: [], recordsTotal: 0, recordsFiltered: 0 });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tpaging: true,\n\t\t\tsDom: 'rtip',\n\t\t\tdeferRender: true,\n\t\t\tstripeClasses: ['striped'],\n\t\t\t// pageLength: ModuleExtendedCDRs.calculatePageLength(),\n\n\t\t\t/**\n\t\t\t * Constructs the CDR row.\n\t\t\t * @param {HTMLElement} row - The row element.\n\t\t\t * @param {Array} data - The row data.\n\t\t\t */\n\t\t\tcreatedRow(row, data) {\n\t\t\t\tlet detailedIcon = '';\n\t\t\t\tif (data.DT_RowClass.indexOf(\"detailed\") >= 0) {\n\t\t\t\t\tdetailedIcon = '';\n\t\t\t\t}\n\t\t\t\tdata.typeCall = `${data.typeCall}`;\n\t\t\t\tif(data.typeCall === '1'){\n\t\t\t\t\t$('td', row).eq(0).html(''+detailedIcon);\n\t\t\t\t}else if(data.typeCall === '2'){\n\t\t\t\t\t$('td', row).eq(0).html(''+detailedIcon);\n\t\t\t\t}else if(data.typeCall === '3'){\n\t\t\t\t\t$('td', row).eq(0).html(''+detailedIcon);\n\t\t\t\t}else{\n\t\t\t\t\t$('td', row).eq(0).html(''+detailedIcon);\n\t\t\t\t}\n\n\t\t\t\t$('td', row).eq(1).html(data[0]).addClass('right aligned');\n\t\t\t\t$('td', row).eq(2)\n\t\t\t\t\t.html(data[1])\n\t\t\t\t\t.attr('data-phone',data[1])\n\t\t\t\t\t.addClass('need-update').addClass('right aligned');\n\t\t\t\t$('td', row).eq(3)\n\t\t\t\t\t.html(data[2])\n\t\t\t\t\t.attr('data-phone',data[2])\n\t\t\t\t\t.addClass('need-update');\n\n\t\t\t\tlet duration = data[3];\n\t\t\t\tif (data.ids !== '') {\n\t\t\t\t\tduration += '';\n\t\t\t\t}\n\n\t\t\t\tlet lineText = data.line;\n\t\t\t\tif(data.did !== \"\"){\n\t\t\t\t\tlineText = `${data.line} ${data.did}`;\n\t\t\t\t}\n\t\t\t\t$('td', row).eq(4).html(lineText).addClass('right aligned');\n\n\t\t\t\t$('td', row).eq(5).html(data.waitTime).addClass('right aligned');\n\t\t\t\t$('td', row).eq(6).html(duration).addClass('right aligned');\n\t\t\t\t$('td', row).eq(7).html(data.stateCall).addClass('right aligned');\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Draw event - fired once the table has completed a draw.\n\t\t\t */\n\t\t\tdrawCallback(settings) {\n\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\tlistenedIDs.forEach(function(id) {\n\t\t\t\t\tlet element = $(`[id=\"${id}\"]`);\n\t\t\t\t\tif (element.length) {\n\t\t\t\t\t\telement.removeClass('warning').addClass('positive');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tModuleExtendedCDRs.$globalSearch.closest('div').removeClass('loading');\n\t\t\t\tModuleExtendedCDRs.applyFilterRunning = false;\n\t\t\t},\n\t\t\tlanguage: SemanticLocalization.dataTableLocalisation,\n\t\t\tordering: false,\n\t\t}\n\t},\n\ttableInitDataCdrQueue: {\n\t\twasInit: false,\n\t\tid: 'CdrQueue',\n\t\tdata: {\n\t\t\tsearch: {\n\t\t\t\tsearch: '',\n\t\t\t},\n\t\t\tserverSide: true,\n\t\t\tprocessing: true,\n\t\t\tinfo: false,\n\t\t\tcolumnDefs: [\n\t\t\t\t{ defaultContent: \"\", targets: \"_all\"},\n\t\t\t],\n\t\t\tajax: function(data, callback, settings) {\n\t\t\t\tif (data.search.value === '' ||\n\t\t\t\t\t!ModuleExtendedCDRs.tablesInitialized || $('#currentReportNameID').val() !== 'CdrQueue') {\n\t\t\t\t\t// Skip initial load\n\t\t\t\t\tcallback({ data: [], recordsTotal: 0, recordsFiltered: 0 });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$.ajax({\n\t\t\t\t\turl: `${globalRootUrl}${idUrl}/getCdrQueue`,\n\t\t\t\t\ttype: 'POST',\n\t\t\t\t\tdata: data,\n\t\t\t\t\tsuccess: function(json) {\n\t\t\t\t\t\tcallback(json);\n\t\t\t\t\t},\n\t\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\t\tconsole.error('getCdrQueue error:', status, error);\n\t\t\t\t\t\tcallback({ data: [], recordsTotal: 0, recordsFiltered: 0 });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tpaging: false,\n\t\t\tsDom: 'rtip',\n\t\t\tdeferRender: true,\n\t\t\t// pageLength: ModuleExtendedCDRs.calculatePageLength(),\n\n\t\t/**\n\t\t * Constructs the CDR Queue row.\n\t\t * @param {HTMLElement} row - The row element.\n\t\t * @param {Array} data - The row data.\n\t\t */\n\t\tcreatedRow(row, data) {\n\t\t\t$(row).attr('data-queue', data.queueId);\n\t\t\t$(row).attr('data-date', data.date);\n\t\t\t\n\t\t\t// Format date for display and URL\n\t\t\tlet dateForUrl = '';\n\t\t\tif (data.date) {\n\t\t\t\tconst dateParts = data.date.split('-');\n\t\t\t\tif (dateParts.length === 3) {\n\t\t\t\t\tdateForUrl = `${dateParts[2]}/${dateParts[1]}/${dateParts[0]}`;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Create detail button\n\t\t\tlet dateHtml = data.date;\n\t\t\tif (dateForUrl && data.queueId) {\n\t\t\t\tconst detailUrl = `${globalRootUrl}module-extended-c-d-rs/index/?reportNameID=CallDetails&dateRangeSelector=${encodeURIComponent(dateForUrl + ' - ' + dateForUrl)}&queue=${encodeURIComponent(data.queueId)}`;\n\t\t\t\tdateHtml = `${data.date} `;\n\t\t\t}\n\t\t\t\n\t\t\t$('td', row).eq(0).html(dateHtml);\n\t\t\t$('td', row).eq(1).html(data.queueName || '-').addClass('center aligned');\n\t\t\t$('td', row).eq(2).html(data.totalCalls).addClass('center aligned');\n\t\t\t$('td', row).eq(3).html(data.answered).addClass('center aligned');\n\t\t\t$('td', row).eq(4).html(data.missed).addClass('center aligned');\n\t\t\t$('td', row).eq(5).html(data.answeredQueue).addClass('center aligned');\n\t\t\t$('td', row).eq(6).html(data.avgWaitTime).addClass('center aligned');\n\t\t\t$('td', row).eq(7).html(data.avgMissed + '%').addClass('center aligned');\n\t\t\t$('td', row).eq(8).html(data.avgWaitTimeQueue).addClass('center aligned');\n\t\t},\n\t\t\tdrawCallback(settings) {\n\t\t\t\tModuleExtendedCDRs.$globalSearch.closest('div').removeClass('loading');\n\t\t\t\tModuleExtendedCDRs.applyFilterRunning = false;\n\t\t\t},\n\t\t\tlanguage: SemanticLocalization.dataTableLocalisation,\n\t\t\tordering: false,\n\t\t}\n\t},\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {\n\t},\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateVariantRules: {\n\t\ttitle: {\n\t\t\tidentifier: 'title',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype : 'empty',\n\t\t\t\t\tprompt : globalTranslate.repModuleExtendedCDRs_Form_titleReportError\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tminBillSec: {\n\t\t\tidentifier: 'minBillSec',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype : 'integer[0..1000]',\n\t\t\t\t\tprompt : globalTranslate.repModuleExtendedCDRs_Form_titleReportError\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tdateMonth: {\n\t\t\tidentifier: 'dateMonth',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype : 'integer[1..31]',\n\t\t\t\t\tprompt : globalTranslate.repModuleExtendedCDRs_Form_DateMonthError\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tday: {\n\t\t\tidentifier: 'day',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype : 'regExp[/^((([1-7])(,[1-7])*)|(([1-7])-([1-7])(/([1-7]))?)|(\\\\*\\\\/[1-7]))$/]',\n\t\t\t\t\tprompt : globalTranslate.repModuleExtendedCDRs_Form_DayError\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\ttime: {\n\t\t\tidentifier: 'time',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype : 'regExp[/^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$/]',\n\t\t\t\t\tprompt : globalTranslate.repModuleExtendedCDRs_Form_TimeError\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\temail: {\n\t\t\tidentifier: 'email',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype : 'regExp[/^\\\\s*([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,})(\\\\s+[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,})*\\\\s*$/]',\n\t\t\t\t\tprompt : globalTranslate.repModuleExtendedCDRs_Form_EmailError\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t/**\n\t * Process URL parameters for filtering\n\t */\n\tprocessUrlParameters() {\n\t\tconst urlParams = new URLSearchParams(window.location.search);\n\t\tconst reportNameID = urlParams.get('reportNameID');\n\t\tconst dateRangeSelector = urlParams.get('dateRangeSelector');\n\t\tconst queue = urlParams.get('queue');\n\t\t\n\t\t// Set report type if specified\n\t\tif (reportNameID) {\n\t\t\t$('#currentReportNameID').val(reportNameID);\n\t\t}\n\t\t\n\t\t// Set date range if specified\n\t\tif (dateRangeSelector) {\n\t\t\tconst dates = dateRangeSelector.split(' - ');\n\t\t\tif (dates.length === 2) {\n\t\t\t\tconst startDate = moment(dates[0], 'DD/MM/YYYY');\n\t\t\t\tconst endDate = moment(dates[1], 'DD/MM/YYYY');\n\t\t\t\t\n\t\t\t\tif (startDate.isValid() && endDate.isValid()) {\n\t\t\t\t\tModuleExtendedCDRs.$dateRangeSelector.attr('data-start', startDate.format('YYYY/MM/DD'));\n\t\t\t\t\tModuleExtendedCDRs.$dateRangeSelector.attr('data-end', endDate.endOf('day').format('YYYY/MM/DD'));\n\t\t\t\t\tModuleExtendedCDRs.$dateRangeSelector.val(`${startDate.format('DD/MM/YYYY')} - ${endDate.format('DD/MM/YYYY')}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Set queue filter if specified\n\t\tif (queue) {\n\t\t\t// Temporarily disable onChange to avoid multiple applyFilter calls\n\t\t\t$('#additionalFilter').dropdown('setting', 'onChange', function() {});\n\t\t\t\n\t\t\t// Add queue to filter\n\t\t\tconst currentFilter = $('#additionalFilter').dropdown('get value');\n\t\t\tconst filterArray = currentFilter ? currentFilter.split(',') : [];\n\t\t\tconst queueValue = 'queue_' + queue;\n\t\t\t\n\t\t\tif (!filterArray.includes(queueValue)) {\n\t\t\t\tfilterArray.push(queueValue);\n\t\t\t}\n\t\t\t\n\t\t\t$('#additionalFilter').dropdown('set selected', filterArray);\n\t\t\t\n\t\t\t// Re-enable onChange\n\t\t\t$('#additionalFilter').dropdown('setting', 'onChange', ModuleExtendedCDRs.applyFilter);\n\t\t}\n\t},\n\t\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\tif (window.location.search) {\n\t\t\tconst newUrl = window.location.pathname;\n\t\t\twindow.history.replaceState(null, '', newUrl);\n\t\t}\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t$(\"h1.header i.puzzle.icon\")\n\t\t\t.removeClass('puzzle')\n\t\t\t.addClass('th')\n\t\t\t.css('cursor', 'pointer')\n\t\t\t.popup({\n\t\t\t\tinline : true,\n\t\t\t\tpopup: $('#menu-reports'),\n\t\t\t\ttarget : \"h1.ui.header\",\n\t\t\t\tposition: 'bottom left',\n\t\t\t\thoverable: true,\n\t\t\t\tdelay: {\n\t\t\t\t\tshow: 300,\n\t\t\t\t\thide: 800\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t\t$('#content-frame').css('display', 'none');\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\tModuleExtendedCDRs.changeReportVariant();\n\t\tModuleExtendedCDRs.initializeDateRangeSelector();\n\t\t\n\t\t// Process URL parameters\n\t\tModuleExtendedCDRs.processUrlParameters();\n\n\t\t// инициализируем чекбоксы и выподающие менюшки\n\t\twindow[className].$checkBoxes.checkbox();\n\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\n\t\t$(document).on('click', '#menu-reports i.edit', function(e) {\n\t\t\te.stopPropagation();\n\t\t\tlet parent =$(this).parent();\n\t\t\t$(e.target).parents('div.six.wide.column').children('h4').hide();\n\t\t\t$(e.target).parents('div.six.wide.column').children('div').hide();\n\n\t\t\tlet reportId = $(this).parent().attr('data-report-id');\n\t\t\tlet form = $(`form[data-report-id=\"${reportId}\"]`);\n\t\t\tform.show();\n\n\t\t\tform.form('set value', 'reportNameID', reportId);\n\t\t\tform.form('set value', 'variantId', parent.attr('data-variant-id'));\n\n\t\t\tform.form('set value', 'title', parent.find('div.content div.title').text().trim());\n\t\t\tform.form('set value', 'minBillSec', parent.attr('data-min-bill-sec'));\n\t\t\tform.form('set value', 'sendingScheduledReport', parent.attr('data-sending-scheduled-report') === '1');\n\t\t\tform.form('set value', 'dateMonth', parent.attr('data-date-month'));\n\t\t\tform.form('set value', 'day', parent.attr('data-day'));\n\t\t\tform.form('set value', 'time', parent.attr('data-time'));\n\t\t\tform.form('set value', 'email', parent.attr('data-email'));\n\t\t});\n\t\t$(document).on('click', '#menu-reports form button[data-action=\"save\"]', function(e) {\n\t\t\te.stopPropagation();\n\t\t\tlet form = $(this).parent();\n\t\t\tform.form({fields: ModuleExtendedCDRs.validateVariantRules});\n\n\t\t\tlet reportNameID = form.form('get value', 'reportNameID');\n\t\t\tlet variantId = form.form('get value', 'variantId');\n\t\t\tlet title = form.form('get value', 'title').trim();\n\t\t\tlet minBillSec = form.form('get value', 'minBillSec');\n\t\t\tlet sendingReport = form.form('get value', 'sendingScheduledReport') ? 1 : 0;\n\t\t\tlet dateMonth = form.form('get value', 'dateMonth');\n\t\t\tlet day = form.form('get value', 'day');\n\t\t\tlet time = form.form('get value', 'time');\n\t\t\tlet email = form.form('get value', 'email');\n\n\t\t\tif (!form.form('is valid', 'title')) {\n\t\t\t\tform.form('submit');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!form.form('is valid', 'minBillSec')) {\n\t\t\t\tform.form('submit');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (dateMonth && !form.form('is valid', 'dateMonth')) {\n\t\t\t\tform.form('submit');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (day && !form.form('is valid', 'day')) {\n\t\t\t\tform.form('submit');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (time && !form.form('is valid', 'time')) {\n\t\t\t\tform.form('submit');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (email && !form.form('is valid', 'email')) {\n\t\t\t\tform.form('submit');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet parent = $(`a[data-variant-id=\"${variantId}\"][data-report-id=\"${reportNameID}\"]`);\n\t\t\tparent.find('div.content div.title').text(title);\n\t\t\tparent.attr({\n\t\t\t\t'data-min-bill-sec': minBillSec,\n\t\t\t\t'data-sending-scheduled-report': sendingReport,\n\t\t\t\t'data-date-month': dateMonth,\n\t\t\t\t'data-day': day,\n\t\t\t\t'data-time': time,\n\t\t\t\t'data-email': email\n\t\t\t});\n\n\t\t\tlet contentDiv = parent.find('div.content');\n\t\t\tcontentDiv.find('div.input').hide();\n\t\t\tcontentDiv.find('div.title').show();\n\t\t\tparent.find('i.star').show();\n\t\t\tform.hide();\n\n\t\t\t$(e.target).parents('div.six.wide.column').children('h4').show();\n\t\t\t$(e.target).parents('div.six.wide.column').children('div').show();\n\n\t\t\tModuleExtendedCDRs.tablesInitialized = false;\n\t\t\tModuleExtendedCDRs.changeReportVariant(reportNameID, variantId);\n\t\t\tModuleExtendedCDRs.saveSearchSettings();\n\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t});\n\t\t$('#menu-reports i.copy').on('click', function (e) {\n\t\t\te.stopPropagation();\n\t\t\tlet reportId = $(this).parent().attr('id');\n\t\t\tlet timestamp = Date.now();\n\t\t\tlet parentTitle = $(this).parent().find('div.content').text().trim();\n\t\t\tlet html = `\n\n\n
\n\t
${parentTitle} (${timestamp})
\n\t
\n\t \n\t
\n
`;\n\t\t\tlet newItem = $('', {\n\t\t\t\tclass: 'item',\n\t\t\t\thtml: html,\n\t\t\t\t'data-report-id': reportId,\n\t\t\t\t'data-is-main': '0',\n\t\t\t\t'data-min-bill-sec': $(this).parent().attr('data-min-bill-sec'),\n\t\t\t\t'data-search-text': $(this).parent().attr('data-search-text'),\n\t\t\t\t'data-variant-id': timestamp\n\t\t\t});\n\t\t\t$(this).parent().siblings('.ui.link.list').append(newItem);\n\t\t\t$(`a[data-variant-id=\"${timestamp}\"][data-report-id=\"${reportId}\"] i.edit`).trigger('click');\n\t\t});\n\t\t$('#menu-reports i.star').on('click', function (e) {\n\t\t\te.stopPropagation();\n\t\t\tlet reportNameID = $(this).parent().attr('id');\n\t\t\tif(reportNameID === undefined){\n\t\t\t\treportNameID = $(this).parent().attr('data-report-id');\n\t\t\t}\n\t\t\tlet variantId = $(this).parent().attr('data-variant-id');\n\n\t\t\tlet self = $(this);\n\t\t\t$.ajax({\n\t\t\t\turl: `${globalRootUrl}${idUrl}/saveMainVariantReport`,\n\t\t\t\ttype: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n\t\t\t\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t\t\t},\n\t\t\t\tdata: {\n\t\t\t\t\t'reportNameID': reportNameID,\n\t\t\t\t\t'variantId': \tvariantId\n\t\t\t\t},\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\t$('#menu-reports i.star').addClass('outline');\n\t\t\t\t\tself.removeClass('outline');\n\t\t\t\t},\n\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t}\n\t\t\t});\n\n\t\t});\n\n\t\t$(document).on('click', '#menu-reports i.trash', function(e) {\n\t\t\te.stopPropagation();\n\t\t\tlet reportNameID = $(this).parent().attr('data-report-id');\n\t\t\tlet variantId \t = $(this).parent().attr('data-variant-id');\n\t\t\tlet self = $(this);\n\t\t\t$.ajax({\n\t\t\t\turl: `${globalRootUrl}${idUrl}/removeVariantReport`,\n\t\t\t\ttype: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n\t\t\t\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t\t\t},\n\t\t\t\tdata: {\n\t\t\t\t\t'reportNameID': reportNameID,\n\t\t\t\t\t'variantId': \tvariantId\n\t\t\t\t},\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\tself.parent().remove();\n\t\t\t\t},\n\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t}\n\t\t\t});\n\n\t\t});\n\t\t$('#typeCall.menu a.item').on('click', function (e) {\n\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t});\n\t\t$('#createExcelButton').on('click', function (e) {\n\t\t\tModuleExtendedCDRs.startCreateExcelPDF('xlsx');\n\t\t});\n\t\t$('#createPdfButton').on('click', function (e) {\n\t\t\tModuleExtendedCDRs.startCreateExcelPDF('pdf');\n\t\t});\n\t\t$('#downloadRecords').on('click', function (e) {\n\t\t\tconst encodedSearch = encodeURIComponent(ModuleExtendedCDRs.getSearchText());\n\t\t\tconst url = `${window.location.origin}/pbxcore/api/modules/${className}/downloads?search=${encodedSearch}`;\n\t\t\twindow.open(url, '_blank');\n\t\t});\n\t\t$('#saveSearchSettings').on('click', function (e) {\n\t\t\tModuleExtendedCDRs.saveSearchSettings();\n\t\t});\n\t\t$(\"div.column h4\").on('click', function (e) {\n\t\t\tlet reportId = $(this).attr('id');\n\t\t\t$(\"h1.header i.th.icon\").popup('hide');\n\t\t\tModuleExtendedCDRs.tablesInitialized = false;\n\t\t\tModuleExtendedCDRs.changeReportVariant(reportId);\n\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t});\n\t\t$(document).on('click', 'div.column div.link.list a.item div.title', function(e) {\n\t\t\tlet reportId = $(e.target).closest('a').attr('data-report-id');\n\t\t\tlet variantId = $(e.target).closest('a').attr('data-variant-id');\n\t\t\t$(\"h1.header i.th.icon\").popup('hide');\n\t\t\tModuleExtendedCDRs.tablesInitialized = false;\n\t\t\tModuleExtendedCDRs.changeReportVariant(reportId, variantId);\n\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t});\n\n\t\tModuleExtendedCDRs.$globalSearch.on('keyup', (e) => {\n\t\t\tif (e.keyCode === 13\n\t\t\t\t|| e.keyCode === 8\n\t\t\t\t|| ModuleExtendedCDRs.$globalSearch.val().length === 0) {\n\t\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t\t}\n\t\t});\n\n\t\t// Handle minBillSec field changes\n\t\t$('#currentMinBillSec').on('change', function() {\n\t\t\tconst value = $(this).val();\n\t\t\tconst reportNameID = $('#currentReportNameID').val();\n\t\t\tconst currentVariantId = $('#currentVariantId').val();\n\t\t\t\n\t\t\t// Update data attribute\n\t\t\tif (currentVariantId === '') {\n\t\t\t\t$(`h4#${reportNameID}`).attr('data-min-bill-sec', value);\n\t\t\t} else {\n\t\t\t\t$(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"]`).attr('data-min-bill-sec', value);\n\t\t\t}\n\t\t\t\n\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t});\n\n\t\t// Handle Enter key in minBillSec field\n\t\t$('#currentMinBillSec').on('keyup', function(e) {\n\t\t\tif (e.keyCode === 13) {\n\t\t\t\t$(this).trigger('change');\n\t\t\t}\n\t\t});\n\n\t\t// Initialize minBillSecComp dropdown\n\t\t$('#currentMinBillSecComp').dropdown();\n\t\t\n\t\t// Handle minBillSecComp dropdown changes via click on menu items\n\t\t$(document).on('click', '#currentMinBillSecComp .menu .item', function(e) {\n\t\t\tconst value = $(this).attr('data-value');\n\t\t\tconst text = $(this).html();\n\t\t\tconst reportNameID = $('#currentReportNameID').val();\n\t\t\tconst currentVariantId = $('#currentVariantId').val();\n\t\t\t\n\t\t\t// Update button text and data attribute\n\t\t\t$('#currentMinBillSecComp').attr('data-value', value);\n\t\t\t// Update button text content - remove menu and update text\n\t\t\tconst $button = $('#currentMinBillSecComp');\n\t\t\tconst $menu = $button.find('.menu');\n\t\t\t$button.contents().not($menu).remove();\n\t\t\t$button.prepend(text + ' ');\n\t\t\t$button.append($menu);\n\t\t\t\n\t\t\tif (currentVariantId === '') {\n\t\t\t\t$(`h4#${reportNameID}`).attr('data-min-bill-sec-comp', value);\n\t\t\t} else {\n\t\t\t\t$(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"]`).attr('data-min-bill-sec-comp', value);\n\t\t\t}\n\t\t\t\n\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t});\n\n\t\tModuleExtendedCDRs.$formObj.keydown(function(event){\n\t\t\tif(event.keyCode === 13) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tModuleExtendedCDRs.updateSettings();\n\t\tModuleExtendedCDRs.applyFilter();\n\n\t\t// Initialize dropdowns except #additionalFilter (it has its own handler)\n\t\twindow[className].$dropDowns.not('#additionalFilter').dropdown({onChange: ModuleExtendedCDRs.applyFilter});\n\t\twindow[className].updateSyncState();\n\t\tsetInterval(window[className].updateSyncState, 5000);\n\t},\n\tchangeReportVariant(reportNameID = '', currentVariantId=''){\n\t\tif(reportNameID === ''){\n\t\t\treportNameID = $('#currentReportNameID').val();\n\t\t\tcurrentVariantId = $('#currentVariantId').val();\n\t\t}\n\n\t\t$('[id$=\"-table-div\"]').hide();\n\t\t$(`#${reportNameID}-table-div`).show();\n\n\t\t$('#currentReportNameID').val(reportNameID);\n\t\t$('#currentVariantId').val(currentVariantId);\n\n\t\tif(reportNameID === 'CdrQueue'){\n\t\t\t$('#typeCall').closest('.ui.column').hide();\n\t\t\t$('#minBillSecContainer').hide();\n\t\t}else{\n\t\t\t$('#typeCall').closest('.ui.column').show();\n\t\t\t$('#minBillSecContainer').show();\n\t\t}\n\n\t\tlet variantName = '';\n\t\tif(currentVariantId !==''){\n\t\t\tvariantName = $(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"] div.title`).text().trim();\n\t\t}else{\n\t\t\tvariantName = $(`h4#${reportNameID} div.content`).text().trim();\n\t\t}\n\t\t$(\"h1.header div.content\").contents().filter(function() {\n\t\t\treturn this.nodeType === 3 && this.nodeValue.trim() !== '';\n\t\t}).each(function() {\n\t\t\tthis.nodeValue = variantName;\n\t\t});\n\n\t\tModuleExtendedCDRs.updateSettings();\n\t},\n\tupdateSettings(){\n\t\tModuleExtendedCDRs.tablesInitialized = false;\n\t\tlet currentVariantId = $('#currentVariantId').val();\n\t\tlet reportNameID = $('#currentReportNameID').val();\n\t\tlet settings = {};\n\t\tif(currentVariantId === ''){\n\t\t\tsettings = JSON.parse(decodeURIComponent($(`#${reportNameID}`).attr('data-search-text')));\n\t\t}else{\n\t\t\tsettings = JSON.parse(decodeURIComponent($(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"]`).attr('data-search-text')));\n\t\t}\n\t\t\n\t\t// Update minBillSec field\n\t\tlet minBillSec = 0;\n\t\tlet minBillSecComp = '>';\n\t\tif(currentVariantId === ''){\n\t\t\tminBillSec = $(`h4#${reportNameID}`).attr('data-min-bill-sec') || 0;\n\t\t\tminBillSecComp = $(`h4#${reportNameID}`).attr('data-min-bill-sec-comp') || '>';\n\t\t}else{\n\t\t\tminBillSec = $(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"]`).attr('data-min-bill-sec') || 0;\n\t\t\tminBillSecComp = $(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"]`).attr('data-min-bill-sec-comp') || '>';\n\t\t}\n\t\t$('#currentMinBillSec').val(minBillSec);\n\t\t$('#currentMinBillSecComp').dropdown('set selected', minBillSecComp);\n\t\t$('#currentMinBillSecComp').attr('data-value', minBillSecComp);\n\t\t// Update button text content\n\t\tconst $button = $('#currentMinBillSecComp');\n\t\tconst $menu = $button.find('.menu');\n\t\t$button.contents().not($menu).remove();\n\t\t$button.prepend(minBillSecComp + ' ');\n\t\t$button.append($menu);\n\n\t\tlet setDate = $('#pDateRangeSelector').val() === \"\";\n\t\tif(setDate){\n\t\t\t$('#pDateRangeSelector').val('');\n\t\t}\n\t\tif(setDate && settings.dateRangeSelector !== undefined && settings.dateRangeSelector !== ''){\n\t\t\tlet periods = ModuleExtendedCDRs.getStandardPeriods();\n\t\t\tlet defPeriod = [moment(),moment()];\n\t\t\tif(periods[settings.dateRangeSelector] !== undefined){\n\t\t\t\tdefPeriod = periods[settings.dateRangeSelector];\n\t\t\t}\n\t\t\tModuleExtendedCDRs.$dateRangeSelector.attr('data-start', defPeriod[0].format('YYYY/MM/DD'));\n\t\t\tModuleExtendedCDRs.$dateRangeSelector.attr('data-end', moment(defPeriod[1].format('YYYYMMDD')).endOf('day').format('YYYY/MM/DD'));\n\t\t\tModuleExtendedCDRs.$dateRangeSelector.val(`${defPeriod[0].format('DD/MM/YYYY')} - ${defPeriod[1].format('DD/MM/YYYY') }`);\n\t\t}\n\t\t// Temporarily disable onChange to avoid multiple applyFilter calls\n\t\t$('#additionalFilter').dropdown('setting', 'onChange', function() {});\n\t\t$('#additionalFilter').dropdown('clear');\n\n\t\tif($('#pAdditionalFilterString').val() !== '-'){\n\t\t\t$('#additionalFilter').dropdown('set selected', $('#pAdditionalFilterString').val().split(' '));\n\t\t\tsettings.typeCall = undefined;\n\t\t\tsettings.globalSearch = undefined;\n\t\t}else if(settings.additionalFilter !== undefined){\n\t\t\t$('#additionalFilter').dropdown('set selected', settings.additionalFilter.split(' '));\n\t\t}\n\t\t// Re-enable onChange\n\t\t$('#additionalFilter').dropdown('setting', 'onChange', ModuleExtendedCDRs.applyFilter);\n\n\t\tif(settings.globalSearch !== undefined) {\n\t\t\tModuleExtendedCDRs.$globalSearch.val(settings.globalSearch)\n\t\t}\n\n\t\tif(settings.typeCall !== undefined){\n\t\t\t$('#typeCall.menu a.item').tab('change tab', settings.typeCall)\n\t\t}else{\n\t\t\t$('#typeCall.menu a.item').tab('change tab', 'all-calls')\n\t\t}\n\t},\n\t/**\n\t *\n\t */\n\tupdateSyncState(){\n\t\t// Выполняем GET-запрос\n\t\tlet divProgress = $(\"#sync-progress\");\n\t\t$.ajax({\n\t\t\turl: `${globalRootUrl}${idUrl}/getState`,\n\t\t\tmethod: 'GET',\n\t\t\tsuccess: function(response) {\n\t\t\t\tif(response.stateData.lastId - response.stateData.nowId > 0){\n\t\t\t\t\tdivProgress.show();\n\t\t\t\t}else{\n\t\t\t\t\tdivProgress.hide();\n\t\t\t\t}\n\t\t\t\tdivProgress.progress({\n\t\t\t\t\ttotal: response.stateData.lastId, value: response.stateData.nowId,\n\t\t\t\t\ttext: {\n\t\t\t\t\t\tactive : globalTranslate.repModuleExtendedCDRs_syncState\n\t\t\t\t\t},\n\t\t\t\t\terror: function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\t\t// Обработка ошибки\n\t\t\t\t\t\tconsole.error('Ошибка запроса:', textStatus, errorThrown);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Shows a set of call records when a row is clicked.\n\t * @param {Array} data - The row data.\n\t * @returns {string} The HTML representation of the call records.\n\t */\n\tshowRecords(data, id) {\n\t\tlet htmlPlayer = '';\n\t\tdata[4].forEach((record, i) => {\n\t\t\tlet srcAudio = '';\n\t\t\tlet srcDownloadAudio = '';\n\t\t\tif (!(record.recordingfile === undefined || record.recordingfile === null || record.recordingfile.length === 0)) {\n\t\t\t\t// Use real file extension from the recording file path for download name.\n\t\t\t\tconst recordFileUri = encodeURIComponent(record.recordingfile);\n\t\t\t\tconst fileNameFromPath = (record.recordingfile.split(/[\\\\/]/).pop() || '').split('?')[0].split('#')[0];\n\t\t\t\tconst extMatch = fileNameFromPath.match(/\\.([a-zA-Z0-9]+)$/);\n\t\t\t\tconst fileExt = (extMatch && extMatch[1]) ? extMatch[1].toLowerCase() : 'mp3';\n\n\t\t\t\tlet downloadFileName = record.prettyFilename || 'record';\n\t\t\t\tif (!downloadFileName.toLowerCase().endsWith(`.${fileExt}`)) {\n\t\t\t\t\tdownloadFileName += `.${fileExt}`;\n\t\t\t\t}\n\t\t\t\tconst recordFileName = encodeURIComponent(downloadFileName);\n\t\t\t\tsrcAudio = `/pbxcore/api/cdr/v2/playback?view=${recordFileUri}`;\n\t\t\t\tsrcDownloadAudio = `/pbxcore/api/cdr/v2/playback?view=${recordFileUri}&download=1&filename=${recordFileName}`;\n\t\t\t}\n\n\t\t\thtmlPlayer +=`\n\t\t\t\n\t\t\t\t\n\t\t\t\t${record.start}\n\t\t\t\t${record.src_num}\n\t\t\t \t${record.dst_num}\n\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t${record.waitTime}\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t \n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t ${record.billsec}\n\t\t\t\t\t \n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t \n\t\t\t\t\n\t\t\t\t${record.stateCall}\n\t\t\t`\n\t\t});\n\t\treturn htmlPlayer;\n\t},\n\taudioPlayHandler(event) {\n\t\tlet detailRow = $(event.target).closest('tr');\n\t\tdetailRow.removeClass('warning');\n\t\tdetailRow.addClass('positive');\n\n\t\tlet callIdDetail = detailRow.attr('data-row-id');\n\t\tlistenedIDs.push(callIdDetail);\n\n\t\tlet callId = callIdDetail.replace('-detailed', '');\n\n\t\tlet allPositive = true;\n\t\t$('[data-row-id=\"' + callIdDetail + '\"]').each(function() {\n\t\t\tif (!$(this).hasClass('positive')) {\n\t\t\t\tallPositive = false;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\tif (allPositive) {\n\t\t\t$(`[id=\"${callId}\"]`).addClass('positive');\n\t\t\tlistenedIDs.push(callId);\n\t\t}\n\n\t\tlistenedIDs = [...new Set(listenedIDs)];\n\t},\n\tcalculatePageLength() {\n\t\t// Calculate row height\n\t\tlet rowHeight = ModuleExtendedCDRs.$cdrTable.find('tbody > tr').first().outerHeight();\n\n\t\t// Calculate window height and available space for table\n\t\tconst windowHeight = window.innerHeight;\n\t\tconst headerFooterHeight = 400 ; // Estimate height for header, footer, and other elements\n\n\t\t// Calculate new page length\n\t\treturn Math.max(Math.floor((windowHeight - headerFooterHeight) / rowHeight), 5);\n\t},\n\n\n\tadditionalExportFunctions(){\n\t\tlet body = $('body');\n\t\tbody.on('click', '#add-new-button', function (e) {\n\t\t\tlet id = 'none-'+Date.now();\n\t\t\tlet newRow \t= $('').attr('id', id);\n\t\t\tlet nameCell = $('').attr('data-label', 'name').addClass('right aligned').html('
');\n\t\t\tlet usersCell \t= $('').attr('data-label', 'users').html('
' + $('#users-selector').html() + '
');\n\t\t\tlet buttonsCell\t= $('').attr('data-label', 'buttons').html('
\\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t'
');\n\t\t\tlet headersCell = $('').attr('data-label', 'headers').addClass('right aligned').attr('style', 'display: none').html('
\\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t' Завершить редактирование\\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
');\n\t\t\tnewRow.append(nameCell, usersCell, headersCell, buttonsCell);\n\t\t\t$('#sync-rules').append(newRow);\n\t\t\t$('div.dropdown').dropdown();\n\t\t});\n\n\t\tbody.on('click', '#save-button', function (e) {\n\t\t\t// Обойдите элементы в цикле\n\t\t\t$(\"input\").each(function(index) {\n\t\t\t\t$(this).attr('value', $(this).val());\n\t\t\t});\n\n\t\t\tlet data = [];\n\t\t\tlet table = $('#sync-rules');\n\t\t\tlet rows = table.find('tbody tr');\n\t\t\trows.each(function() {\n\t\t\t\tlet row = $(this);\n\t\t\t\tlet rowData = {\n\t\t\t\t\tid: row.attr('id'),\n\t\t\t\t\tname: row.find('td[data-label=\"name\"] input').val(),\n\t\t\t\t\tdstUrl: $('.ui.modal[data-id=\"'+row.attr('id')+'\"] input[data-label=\"dstUrl\"]').val(),\n\t\t\t\t\tusers: row.find('td[data-label=\"users\"] div.dropdown').dropdown('get value'),\n\t\t\t\t\theaders: $('.ui.modal[data-id=\"'+row.attr('id')+'\"] textarea').val()\n\t\t\t\t};\n\t\t\t\tdata.push(rowData);\n\t\t\t});\n\t\t\t$.ajax({\n\t\t\t\ttype: \"POST\",\n\t\t\t\turl: globalRootUrl + idUrl + \"/save\",\n\t\t\t\tdata: {rules: data},\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\tconsole.log(\"Успешный запрос\", response);\n\t\t\t\t\tfor (let key in response.ruleSaveResult) {\n\t\t\t\t\t\tif (response.ruleSaveResult.hasOwnProperty(key)) {\n\t\t\t\t\t\t\tlet syncRules = $('#sync-rules tr#'+key);\n\t\t\t\t\t\t\tlet html = syncRules.html();\n\t\t\t\t\t\t\tsyncRules.html(html.replace((new RegExp(key, \"g\")), response.ruleSaveResult[key]));\n\t\t\t\t\t\t\tsyncRules.attr('id', response.ruleSaveResult[key]);\n\t\t\t\t\t\t\t$('.ui.modal[data-id=\"'+key+'\"]').attr('data-id', response.ruleSaveResult[key]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\tconsole.error(\"Ошибка запроса\", status, error);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\tshowRuleOptions(id) {\n\t\t$('.ui.modal[data-id=\"'+id+'\"]').modal({closable : true, }).modal('show');\n\t},\n\tremoveRule(id) {\n\t\t$.ajax({\n\t\t\ttype: \"POST\",\n\t\t\turl: globalRootUrl + idUrl + \"/delete\",\n\t\t\tdata: {\n\t\t\t\ttable: 'ExportRules',\n\t\t\t\tid: id\n\t\t\t},\n\t\t\tsuccess: function(response) {\n\t\t\t\tconsole.log(\"Успешный запрос\", response);\n\t\t\t\t$('#sync-rules tr#'+id).remove();\n\t\t\t},\n\t\t\terror: function(xhr, status, error) {\n\t\t\t\tconsole.error(\"Ошибка запроса\", status, error);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Initializes the date range selector.\n\t */\n\tinitializeDateRangeSelector() {\n\n\t\tconst period = ModuleExtendedCDRs.$dateRangeSelector.attr('data-def-value');\n\t\tlet defPeriod = [moment(),moment()];\n\t\tif(period !== '' && period !== undefined){\n\t\t\tif($('#pDateRangeSelector').val() === period){\n\t\t\t\tconst [startStr, endStr] = period.split(' - ');\n\t\t\t\tdefPeriod = [moment(startStr, 'DD/MM/YYYY'), moment(endStr, 'DD/MM/YYYY')];\n\t\t\t}else{\n\t\t\t\tlet periods = ModuleExtendedCDRs.getStandardPeriods();\n\t\t\t\tif(periods[period] !== undefined){\n\t\t\t\t\tdefPeriod = periods[period];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst options = {};\n\t\toptions.ranges = {\n\t\t\t[globalTranslate.repModuleExtendedCDRs_cdr_cal_Today]: [moment(), moment()],\n\t\t\t[globalTranslate.repModuleExtendedCDRs_cdr_cal_Yesterday]: [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n\t\t\t[globalTranslate.repModuleExtendedCDRs_cdr_cal_LastWeek]: [moment().subtract(6, 'days'), moment()],\n\t\t\t[globalTranslate.repModuleExtendedCDRs_cdr_cal_Last30Days]: [moment().subtract(29, 'days'), moment()],\n\t\t\t[globalTranslate.repModuleExtendedCDRs_cdr_cal_ThisMonth]: [moment().startOf('month'), moment().endOf('month')],\n\t\t\t[globalTranslate.repModuleExtendedCDRs_cdr_cal_LastMonth]: [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n\t\t};\n\t\toptions.alwaysShowCalendars = true;\n\t\toptions.autoUpdateInput = true;\n\t\toptions.linkedCalendars = true;\n\t\toptions.maxDate = moment().endOf('month');\n\t\toptions.locale = {\n\t\t\tformat: 'DD/MM/YYYY',\n\t\t\tseparator: ' - ',\n\t\t\tapplyLabel: globalTranslate.cal_ApplyBtn,\n\t\t\tcancelLabel: globalTranslate.cal_CancelBtn,\n\t\t\tfromLabel: globalTranslate.cal_from,\n\t\t\ttoLabel: globalTranslate.cal_to,\n\t\t\tcustomRangeLabel: globalTranslate.cal_CustomPeriod,\n\t\t\tdaysOfWeek: SemanticLocalization.calendarText.days,\n\t\t\tmonthNames: SemanticLocalization.calendarText.months,\n\t\t\tfirstDay: 1,\n\t\t};\n\t\toptions.startDate = defPeriod[0];\n\t\toptions.endDate = defPeriod[1];\n\t\tModuleExtendedCDRs.$dateRangeSelector.daterangepicker(\n\t\t\toptions,\n\t\t\tModuleExtendedCDRs.cbDateRangeSelectorOnSelect,\n\t\t);\n\t},\n\t/**\n\t * Handles the date range selector select event.\n\t * @param {moment.Moment} start - The start date.\n\t * @param {moment.Moment} end - The end date.\n\t * @param {string} label - The label.\n\t */\n\tcbDateRangeSelectorOnSelect(start, end, label) {\n\t\tModuleExtendedCDRs.$dateRangeSelector.attr('data-start', start.format('YYYY/MM/DD'));\n\t\tModuleExtendedCDRs.$dateRangeSelector.attr('data-end', moment(end.format('YYYYMMDD')).endOf('day').format('YYYY/MM/DD'));\n\t\tModuleExtendedCDRs.$dateRangeSelector.val(`${start.format('DD/MM/YYYY')} - ${end.format('DD/MM/YYYY') }`);\n\t\tModuleExtendedCDRs.applyFilter();\n\t},\n\n\t/**\n\t * Applies the filter to the data table (with debounce to prevent double calls).\n\t */\n\tapplyFilter()\n\t{\n\t\t// Debounce: cancel previous timer and set new one\n\t\tif (ModuleExtendedCDRs.applyFilterTimer) {\n\t\t\tclearTimeout(ModuleExtendedCDRs.applyFilterTimer);\n\t\t}\n\t\tModuleExtendedCDRs.applyFilterTimer = setTimeout(() => {\n\t\t\tModuleExtendedCDRs.applyFilterInternal();\n\t\t}, 100);\n\t},\n\n\t/**\n\t * Internal filter application (called after debounce).\n\t */\n\tapplyFilterInternal()\n\t{\n\t\t// Prevent concurrent execution\n\t\tif (ModuleExtendedCDRs.applyFilterRunning) {\n\t\t\treturn;\n\t\t}\n\t\tModuleExtendedCDRs.applyFilterRunning = true;\n\t\t// Flag will be reset in drawCallback after table is rendered\n\n\t\tconst text = ModuleExtendedCDRs.getSearchText();\n\t\tlistenedIDs = [];\n\t\t\n\t\t// Enable data loading for tables\n\t\tModuleExtendedCDRs.tablesInitialized = true;\n\t\tlet reportName = $('#currentReportNameID').val();\n\t\tif(reportName === ModuleExtendedCDRs.tableInitDataCallDetails.id){\n\t\t\tif(ModuleExtendedCDRs.tableInitDataCallDetails.wasInit === false){\n\t\t\t\tModuleExtendedCDRs.$cdrTable.dataTable(ModuleExtendedCDRs.tableInitDataCallDetails.data);\n\t\t\t\tModuleExtendedCDRs.tableInitDataCallDetails.wasInit = true;\n\n\t\t\t\tModuleExtendedCDRs.$cdrTable.on('click', 'tr.negative', (e) => {\n\t\t\t\t\tlet ids = $(e.target).attr('data-ids');\n\t\t\t\t\tif (ids !== undefined && ids !== '') {\n\t\t\t\t\t\twindow.location = `${globalRootUrl}system-diagnostic/index/?filename=asterisk/verbose&filter=${ids}`;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// Add event listener for opening and closing details\n\t\t\t\tModuleExtendedCDRs.$cdrTable.on('click', 'tr.detailed', (e) => {\n\t\t\t\t\tlet ids = $(e.target).attr('data-ids');\n\t\t\t\t\tif (ids !== undefined && ids !== '') {\n\t\t\t\t\t\twindow.location = `${globalRootUrl}system-diagnostic/index/?filename=asterisk/verbose&filter=${ids}`;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst tr = $(e.target).closest('tr');\n\t\t\t\t\tconst row = ModuleExtendedCDRs.$cdrTable.DataTable().row(tr);\n\t\t\t\t\tif(row.length === 0){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (tr.hasClass('shown')) {\n\t\t\t\t\t\t// This row is already open - close it\n\t\t\t\t\t\t$('tr[data-row-id=\"'+tr.attr('id')+'-detailed\"').remove();\n\t\t\t\t\t\ttr.removeClass('shown');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Open this row\n\t\t\t\t\t\ttr.after(ModuleExtendedCDRs.showRecords(row.data() , tr.attr('id')));\n\t\t\t\t\t\ttr.addClass('shown');\n\t\t\t\t\t\t$('tr[data-row-id=\"'+tr.attr('id')+'-detailed\"').each((index, playerRow) => {\n\t\t\t\t\t\t\tconst id = $(playerRow).attr('id');\n\t\t\t\t\t\t\treturn new CDRPlayer(id);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\n\t\t\t\t\t\tlistenedIDs.forEach(function(id) {\n\t\t\t\t\t\t\tlet element = $(`[id=\"${id}\"]`);\n\t\t\t\t\t\t\tif (element.length) {\n\t\t\t\t\t\t\t\telement.removeClass('warning').addClass('positive');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telement = $(`[data-row-id=\"${id}\"]`);\n\t\t\t\t\t\t\tif (element.length) {\n\t\t\t\t\t\t\t\telement.removeClass('warning').addClass('positive');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\t\t\tlet table = ModuleExtendedCDRs.$cdrTable.DataTable();\n\t\t\ttable.page.len(ModuleExtendedCDRs.calculatePageLength());\n\t\t\ttable.search(text).draw();\n\t\t}else if(reportName === ModuleExtendedCDRs.tableInitDataOutgoingEmployeeCalls.id){\n\t\t\tif(ModuleExtendedCDRs.tableInitDataOutgoingEmployeeCalls.wasInit === false) {\n\t\t\t\tModuleExtendedCDRs.$outgoingEmployeeCalls.dataTable(ModuleExtendedCDRs.tableInitDataOutgoingEmployeeCalls.data);\n\t\t\t\tModuleExtendedCDRs.tableInitDataOutgoingEmployeeCalls.wasInit = true;\n\t\t\t}\n\t\t\tlet table = ModuleExtendedCDRs.$outgoingEmployeeCalls.DataTable();\n\t\t\ttable.page.len(ModuleExtendedCDRs.calculatePageLength());\n\t\t\ttable.search(text).draw();\n\t\t}else if(reportName === ModuleExtendedCDRs.tableInitDataCdrQueue.id){\n\t\t\tif(ModuleExtendedCDRs.tableInitDataCdrQueue.wasInit === false) {\n\t\t\t\tModuleExtendedCDRs.$cdrQueueTable.dataTable(ModuleExtendedCDRs.tableInitDataCdrQueue.data);\n\t\t\t\tModuleExtendedCDRs.tableInitDataCdrQueue.wasInit = true;\n\t\t\t}\n\t\t\tlet table = ModuleExtendedCDRs.$cdrQueueTable.DataTable();\n\t\t\ttable.page.len(ModuleExtendedCDRs.calculatePageLength());\n\t\t\ttable.search(text).draw();\n\t\t}\n\t\tModuleExtendedCDRs.$globalSearch.closest('div').addClass('loading');\n\t},\n\n\tgetSearchText(retStandardPeriod = false, disableGlobalSearch = false) {\n\t\tlet dateRangeSelector = '';\n\t\tif(retStandardPeriod === true){\n\t\t\tlet periods = ModuleExtendedCDRs.getStandardPeriods();\n\t\t\t$.each(periods,function(index,value){\n\t\t\t\tif(ModuleExtendedCDRs.$dateRangeSelector.val() === `${value[0].format('DD/MM/YYYY')} - ${value[1].format('DD/MM/YYYY')}`){\n\t\t\t\t\tdateRangeSelector = index;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tdateRangeSelector = ModuleExtendedCDRs.$dateRangeSelector.val();\n\t\t}\n\n\t\tlet reportNameID = $('#currentReportNameID').val();\n\t\tlet currentVariantId = $('#currentVariantId').val();\n\t\tlet minBilSec = $('#currentMinBillSec').val() || 0;\n\t\tlet minBilSecComp = $('#currentMinBillSecComp').dropdown('get value') || $('#currentMinBillSecComp').attr('data-value') || '>';\n\t\tconst filter = {\n\t\t\tdateRangeSelector: dateRangeSelector,\n\t\t\tminBilSec: minBilSec,\n\t\t\tminBilSecComp: minBilSecComp,\n\t\t\tglobalSearch: ModuleExtendedCDRs.$globalSearch.val(),\n\t\t\ttypeCall: $('#typeCall a.item.active').attr('data-tab'),\n\t\t\tadditionalFilter: $('#additionalFilter').dropdown('get value').replace(/,/g,' '),\n\t\t};\n\t\tif(disableGlobalSearch === true){\n\t\t\tfilter.globalSearch = '';\n\t\t}\n\t\treturn JSON.stringify(filter);\n\t},\n\n\tgetStandardPeriods(){\n\t\treturn {\n\t\t\t'cal_Today': [moment(), moment()],\n\t\t\t'cal_Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n\t\t\t'cal_LastWeek': [moment().subtract(6, 'days'), moment()],\n\t\t\t'cal_Last30Days': [moment().subtract(29, 'days'), moment()],\n\t\t\t'cal_ThisMonth': [moment().startOf('month'), moment().endOf('month')],\n\t\t\t'cal_LastMonth': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n\t\t}\n\t},\n\n\tsaveSearchSettings() {\n\t\tlet search = ModuleExtendedCDRs.getSearchText(true, true);\n\t\tlet currentVariantId = $('#currentVariantId').val();\n\t\tlet reportId = $('#currentReportNameID').val();\n\t\tlet variantName = '';\n\t\tlet minBillSec = $('#currentMinBillSec').val() || 0;\n\t\tlet minBillSecComp = $('#currentMinBillSecComp').dropdown('get value') || $('#currentMinBillSecComp').attr('data-value') || '>';\n\t\t\n\t\tlet data = {\n\t\t\t'search[value]': search,\n\t\t\t'reportNameID': reportId,\n\t\t\t'variantId': \tcurrentVariantId,\n\t\t\t'variantName': \tvariantName,\n\t\t\t'minBillSec': \tminBillSec,\n\t\t\t'minBillSecComp': minBillSecComp\n\t\t};\n\t\tif(currentVariantId !== ''){\n\t\t\tlet parent = $(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportId}\"]`);\n\t\t\tdata.variantName = parent.find('div.title').text().trim();\n\n\t\t\tdata.sendingScheduledReport = parent.attr('data-sending-scheduled-report').trim();\n\t\t\tdata.dateMonth = parent.attr('data-date-month').trim();\n\t\t\tdata.day = parent.attr('data-day').trim();\n\t\t\tdata.time = parent.attr('data-time').trim();\n\t\t\tdata.email = parent.attr('data-email').trim();\n\t\t}\n\n\t\t$.ajax({\n\t\t\turl: `${globalRootUrl}${idUrl}/saveSearchSettings`,\n\t\t\ttype: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n\t\t\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t\t},\n\t\t\tdata: data,\n\t\t\tsuccess: function(response) {\n\t\t\t\tif(currentVariantId === ''){\n\t\t\t\t\t$(`#${$('#currentReportNameID').val()}`).attr('data-search-text', encodeURIComponent(search));\n\t\t\t\t\t$(`#${$('#currentReportNameID').val()}`).attr('data-min-bill-sec', minBillSec);\n\t\t\t\t\t$(`#${$('#currentReportNameID').val()}`).attr('data-min-bill-sec-comp', minBillSecComp);\n\t\t\t\t}else{\n\t\t\t\t\t$(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportId}\"]`).attr('data-search-text', encodeURIComponent(search));\n\t\t\t\t\t$(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportId}\"]`).attr('data-min-bill-sec', minBillSec);\n\t\t\t\t\t$(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportId}\"]`).attr('data-min-bill-sec-comp', minBillSecComp);\n\t\t\t\t}\n\t\t\t},\n\t\t\terror: function(xhr, status, error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t});\n\t},\n\n\tstartCreateExcelPDF(type) {\n\t\tconst reportNameID \t = $('#currentReportNameID').val();\n\t\tconst currentVariantId = $('#currentVariantId').val();\n\t\tlet title = '';\n\t\tif(currentVariantId === ''){\n\t\t\ttitle= $(`#${$('#currentReportNameID').val()} div.content`).text().trim();\n\t\t}else{\n\t\t\ttitle=$(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"] div.title`).text().trim();\n\t\t}\n\n\t\tconst encodedSearch = encodeURIComponent(ModuleExtendedCDRs.getSearchText());\n\t\tconst url = `${window.location.origin}/pbxcore/api/modules/${className}/exportHistory?reportNameID=${reportNameID}&type=${type}&search=${encodedSearch}&title=`+encodeURIComponent(title);\n\t\twindow.open(url, '_blank');\n\t},\n\n\tgetMaxWidth(data, key) {\n\t\t// Получаем максимальную длину содержимого в столбце\n\t\tlet maxLength = key.length; // начинаем с длины заголовка\n\t\tdata.forEach(row => {\n\t\t\tlet length = (row[key] || '').toString().length;\n\t\t\tif (length > maxLength) maxLength = length;\n\t\t});\n\t\treturn maxLength;\n\t},\n\n\tstartDownload(){\n\t\tlet startTime = ModuleExtendedCDRs.$dateRangeSelector.attr('data-start');\n\t\tlet endTime = ModuleExtendedCDRs.$dateRangeSelector.attr('data-end');\n\t\tif(startTime === undefined){\n\t\t\tstartTime = moment().format('YYYY-MM-DD');\n\t\t\tendTime = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')\n\t\t}\n\t\tlet typeRec = 'inner';\n\t\tif($('#allRecord').checkbox('is checked')){\n\t\t\ttypeRec = 'all';\n\t\t}else if($('#outRecord').checkbox('is checked')){\n\t\t\ttypeRec = 'out';\n\t\t}\n\t\tlet numbers = ModuleExtendedCDRs.$globalSearch.val();\n\t\twindow.open('/pbxcore/api/modules/'+className+'/downloads?start='+startTime+'&end='+endTime+\"&numbers=\"+encodeURIComponent(numbers)+\"&type=\"+typeRec, '_blank');\n\t},\n\n\tstartDownloadHistory(){\n\t\tlet startTime = ModuleExtendedCDRs.$dateRangeSelector.attr('data-start');\n\t\tlet endTime = ModuleExtendedCDRs.$dateRangeSelector.attr('data-end');\n\t\tif(startTime === undefined){\n\t\t\tstartTime = moment().format('YYYY-MM-DD');\n\t\t\tendTime = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')\n\t\t}\n\t\tlet typeRec = 'inner';\n\t\tif($('#allRecord').checkbox('is checked')){\n\t\t\ttypeRec = 'all';\n\t\t}else if($('#outRecord').checkbox('is checked')){\n\t\t\ttypeRec = 'out';\n\t\t}\n\t\tlet numbers = ModuleExtendedCDRs.$globalSearch.val();\n\t\twindow.open('/pbxcore/api/modules/'+className+'/downloads-history?start='+startTime+'&end='+endTime+\"&numbers=\"+encodeURIComponent(numbers)+\"&type=\"+typeRec, '_blank');\n\t},\n\n\t/**\n\t * Подготавливает список выбора\n\t * @param selected\n\t * @returns {[]}\n\t */\n\tmakeDropdownList(selectType, selected) {\n\t\tconst values = [\n\t\t\t{\n\t\t\t\tname: ' --- ',\n\t\t\t\tvalue: '',\n\t\t\t\tselected: ('' === selected),\n\t\t\t}\n\t\t];\n\t\t$('#'+selectType+' option').each((index, obj) => {\n\t\t\tvalues.push({\n\t\t\t\tname: obj.text,\n\t\t\t\tvalue: obj.value,\n\t\t\t\tselected: (selected === obj.value),\n\t\t\t});\n\t\t});\n\t\treturn values;\n\t},\n\n\t/**\n\t * Обработка изменения группы в списке\n\t */\n\tchangeGroupInList(value, text, choice) {\n\t\tlet tdInput = $(choice).closest('td').find('input');\n\t\ttdInput.attr('data-value', \tvalue);\n\t\ttdInput.attr('value', \t\tvalue);\n\t\tlet currentRowId = $(choice).closest('tr').attr('id');\n\t\tlet tableName = $(choice).closest('table').attr('id').replace('-table', '');\n\t\tif (currentRowId !== undefined && tableName !== undefined) {\n\t\t\twindow[className].sendChangesToServer(tableName, currentRowId);\n\t\t}\n\t},\n\n\t/**\n\t * Send command to restart module workers after data changes,\n\t * Also we can do it on TemplateConf->modelsEventChangeData method\n\t */\n\tapplyConfigurationChanges() {\n\t\twindow[className].changeStatus('Updating');\n\t\t$.api({\n\t\t\turl: `${Config.pbxUrl}/pbxcore/api/modules/`+className+`/reload`,\n\t\t\ton: 'now',\n\t\t\tsuccessTest(response) {\n\t\t\t\t// test whether a JSON response is valid\n\t\t\t\treturn Object.keys(response).length > 0 && response.result === true;\n\t\t\t},\n\t\t\tonSuccess() {\n\t\t\t\twindow[className].changeStatus('Connected');\n\t\t\t},\n\t\t\tonFailure() {\n\t\t\t\twindow[className].changeStatus('Disconnected');\n\t\t\t},\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\t\twindow[className].applyConfigurationChanges();\n\t},\n\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n\n\t/**\n\t * Update the module state on form label\n\t * @param status\n\t */\n\tchangeStatus(status) {\n\t\tswitch (status) {\n\t\t\tcase 'Connected':\n\t\t\t\twindow[className].$moduleStatus\n\t\t\t\t\t.removeClass('grey')\n\t\t\t\t\t.removeClass('red')\n\t\t\t\t\t.addClass('green');\n\t\t\t\twindow[className].$moduleStatus.html(globalTranslate.module_export_recordsConnected);\n\t\t\t\tbreak;\n\t\t\tcase 'Disconnected':\n\t\t\t\twindow[className].$moduleStatus\n\t\t\t\t\t.removeClass('green')\n\t\t\t\t\t.removeClass('red')\n\t\t\t\t\t.addClass('grey');\n\t\t\t\twindow[className].$moduleStatus.html(globalTranslate.module_export_recordsDisconnected);\n\t\t\t\tbreak;\n\t\t\tcase 'Updating':\n\t\t\t\twindow[className].$moduleStatus\n\t\t\t\t\t.removeClass('green')\n\t\t\t\t\t.removeClass('red')\n\t\t\t\t\t.addClass('grey');\n\t\t\t\twindow[className].$moduleStatus.html(`${globalTranslate.module_export_recordsUpdateStatus}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twindow[className].$moduleStatus\n\t\t\t\t\t.removeClass('green')\n\t\t\t\t\t.removeClass('red')\n\t\t\t\t\t.addClass('grey');\n\t\t\t\twindow[className].$moduleStatus.html(globalTranslate.module_export_recordsDisconnected);\n\t\t\t\tbreak;\n\t\t}\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"module-export-records-index.js","names":["idUrl","idForm","className","inputClassName","listenedIDs","ModuleExtendedCDRs","$formObj","$","$checkBoxes","$dropDowns","saveTableAJAXUrl","globalRootUrl","deleteRecordAJAXUrl","$disabilityFields","$statusToggle","$moduleStatus","$cdrTable","$outgoingEmployeeCalls","$cdrQueueTable","$globalSearch","$dateRangeSelector","dataTable","players","applyFilterTimer","applyFilterRunning","tablesInitialized","tableInitDataOutgoingEmployeeCalls","wasInit","id","data","search","serverSide","processing","info","columnDefs","defaultContent","targets","ajax","callback","settings","value","val","recordsTotal","recordsFiltered","url","concat","type","success","json","error","xhr","status","console","paging","sDom","deferRender","createdRow","row","eq","html","callerId","number","addClass","billHourCalls","billMinCalls","billSecCalls","countCalls","drawCallback","closest","removeClass","language","SemanticLocalization","dataTableLocalisation","ordering","tableInitDataCallDetails","recordsIncoming","recordsMissed","recordsMissedPercent","recordsOutgoing","typeCall","attr","stripeClasses","detailedIcon","DT_RowClass","indexOf","duration","ids","lineText","line","did","waitTime","stateCall","Extensions","updatePhonesRepresent","forEach","element","length","tableInitDataCdrQueue","queueId","date","dateForUrl","dateParts","split","dateHtml","detailUrl","encodeURIComponent","queueName","totalCalls","answered","missed","answeredQueue","avgWaitTime","avgMissed","avgWaitTimeQueue","validateRules","validateVariantRules","title","identifier","rules","prompt","globalTranslate","repModuleExtendedCDRs_Form_titleReportError","minBillSec","dateMonth","repModuleExtendedCDRs_Form_DateMonthError","day","repModuleExtendedCDRs_Form_DayError","time","repModuleExtendedCDRs_Form_TimeError","email","repModuleExtendedCDRs_Form_EmailError","processUrlParameters","urlParams","URLSearchParams","window","location","reportNameID","get","dateRangeSelector","queue","dates","startDate","moment","endDate","isValid","format","endOf","dropdown","currentFilter","filterArray","queueValue","includes","push","applyFilter","initialize","newUrl","pathname","history","replaceState","hide","remove","css","popup","inline","target","position","hoverable","delay","show","changeReportVariant","initializeDateRangeSelector","checkbox","initializeForm","tab","document","on","e","stopPropagation","parent","parents","children","reportId","form","find","text","trim","fields","variantId","sendingReport","contentDiv","saveSearchSettings","timestamp","Date","now","parentTitle","newItem","class","siblings","append","trigger","undefined","self","headers","response","startCreateExcelPDF","encodedSearch","getSearchText","origin","open","keyCode","currentVariantId","$button","$menu","contents","not","prepend","keydown","event","preventDefault","updateSettings","onChange","updateSyncState","setInterval","arguments","variantName","filter","nodeType","nodeValue","each","JSON","parse","decodeURIComponent","minBillSecComp","setDate","periods","getStandardPeriods","defPeriod","globalSearch","additionalFilter","divProgress","method","stateData","lastId","nowId","progress","total","active","repModuleExtendedCDRs_syncState","jqXHR","textStatus","errorThrown","showRecords","htmlPlayer","record","i","srcAudio","srcDownloadAudio","recordingfile","recordFileUri","fileNameFromPath","pop","extMatch","match","fileExt","toLowerCase","downloadFileName","prettyFilename","endsWith","recordFileName","start","src_num","dst_num","billsec","stateCallIndex","audioPlayHandler","detailRow","callIdDetail","callId","replace","allPositive","hasClass","_toConsumableArray","Set","calculatePageLength","rowHeight","first","outerHeight","windowHeight","innerHeight","headerFooterHeight","Math","max","floor","additionalExportFunctions","body","newRow","nameCell","usersCell","buttonsCell","headersCell","index","table","rows","rowData","name","dstUrl","users","log","key","ruleSaveResult","hasOwnProperty","syncRules","RegExp","showRuleOptions","modal","closable","removeRule","period","_period$split","_period$split2","_slicedToArray","startStr","endStr","options","ranges","_defineProperty","repModuleExtendedCDRs_cdr_cal_Today","repModuleExtendedCDRs_cdr_cal_Yesterday","subtract","repModuleExtendedCDRs_cdr_cal_LastWeek","repModuleExtendedCDRs_cdr_cal_Last30Days","repModuleExtendedCDRs_cdr_cal_ThisMonth","startOf","repModuleExtendedCDRs_cdr_cal_LastMonth","alwaysShowCalendars","autoUpdateInput","linkedCalendars","maxDate","locale","separator","applyLabel","cal_ApplyBtn","cancelLabel","cal_CancelBtn","fromLabel","cal_from","toLabel","cal_to","customRangeLabel","cal_CustomPeriod","daysOfWeek","calendarText","days","monthNames","months","firstDay","daterangepicker","cbDateRangeSelectorOnSelect","end","label","clearTimeout","setTimeout","applyFilterInternal","reportName","tr","DataTable","after","playerRow","CDRPlayer","page","len","draw","retStandardPeriod","disableGlobalSearch","minBilSec","minBilSecComp","stringify","sendingScheduledReport","getMaxWidth","maxLength","toString","startDownload","startTime","endTime","typeRec","numbers","startDownloadHistory","makeDropdownList","selectType","selected","values","obj","changeGroupInList","choice","tdInput","currentRowId","tableName","sendChangesToServer","applyConfigurationChanges","changeStatus","api","Config","pbxUrl","successTest","Object","keys","result","onSuccess","onFailure","cbBeforeSendForm","cbAfterSendForm","Form","module_export_recordsConnected","module_export_recordsDisconnected","module_export_recordsUpdateStatus","ready"],"sources":["src/module-export-records-index.js"],"sourcesContent":["/*\n * Copyright (C) MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Nikolay Beketov, 11 2018\n *\n */\nconst idUrl = 'module-extended-c-d-rs';\nconst idForm = 'module-extended-cdr-form';\nconst className = 'ModuleExtendedCDRs';\nconst inputClassName = 'mikopbx-module-input';\nlet listenedIDs = [];\n\n/* global globalRootUrl, globalTranslate, Form, Config, $ */\nconst ModuleExtendedCDRs = {\n\t$formObj: $('#'+idForm),\n\t$checkBoxes: $('#'+idForm+' .ui.checkbox'),\n\t$dropDowns: $('#'+idForm+' .ui.dropdown'),\n\tsaveTableAJAXUrl: globalRootUrl + idUrl + \"/saveTableData\",\n\tdeleteRecordAJAXUrl: globalRootUrl + idUrl + \"/delete\",\n\t$disabilityFields: $('#'+idForm+' .disability'),\n\t$statusToggle: $('#module-status-toggle'),\n\t$moduleStatus: $('#status'),\n\n\t/**\n\t * The call detail records table element.\n\t * @type {jQuery}\n\t */\n\t$cdrTable: $('#CallDetails-table'),\n\t$outgoingEmployeeCalls: $('#OutgoingEmployeeCalls-table'),\n\t$cdrQueueTable: $('#CdrQueue-table'),\n\n\t/**\n\t * The global search input element.\n\t * @type {jQuery}\n\t */\n\t$globalSearch: $('#globalsearch'),\n\n\t/**\n\t * The date range selector element.\n\t * @type {jQuery}\n\t */\n\t$dateRangeSelector: $('#date-range-selector'),\n\n\t/**\n\t * The data table object.\n\t * @type {Object}\n\t */\n\tdataTable: {},\n\n\t/**\n\t * An array of players.\n\t * @type {Array}\n\t */\n\tplayers: [],\n\n\t/**\n\t * Flag to prevent initial data loading\n\t * @type {boolean}\n\t */\n\tapplyFilterTimer: null,\n\tapplyFilterRunning: false,\n\n\ttablesInitialized: false,\n\n\ttableInitDataOutgoingEmployeeCalls: {\n\t\twasInit: false,\n\t\tid: 'OutgoingEmployeeCalls',\n\t\tdata: {\n\t\t\tsearch: {\n\t\t\t\tsearch: '',\n\t\t\t},\n\t\t\tserverSide: true,\n\t\t\tprocessing: true,\n\t\t\tinfo: false,\n\t\t\tcolumnDefs: [\n\t\t\t\t{ defaultContent: \"\", targets: \"_all\"},\n\t\t\t],\n\t\t\tajax: function(data, callback, settings) {\n\t\t\t\tif (data.search.value === '' ||\n\t\t\t\t\t!ModuleExtendedCDRs.tablesInitialized || $('#currentReportNameID').val() !== 'OutgoingEmployeeCalls') {\n\t\t\t\t\t// Skip initial load\n\t\t\t\t\tcallback({ data: [], recordsTotal: 0, recordsFiltered: 0 });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$.ajax({\n\t\t\t\t\turl: `${globalRootUrl}${idUrl}/getOutgoingEmployeeCalls`,\n\t\t\t\t\ttype: 'POST',\n\t\t\t\t\tdata: data,\n\t\t\t\t\tsuccess: function(json) {\n\t\t\t\t\t\tcallback(json);\n\t\t\t\t\t},\n\t\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\t\tconsole.error('getOutgoingEmployeeCalls error:', status, error);\n\t\t\t\t\t\tcallback({ data: [], recordsTotal: 0, recordsFiltered: 0 });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tpaging: false,\n\t\t\tsDom: 'rtip',\n\t\t\tdeferRender: true,\n\t\t\t// pageLength: ModuleExtendedCDRs.calculatePageLength(),\n\n\t\t\t/**\n\t\t\t * Constructs the CDR row.\n\t\t\t * @param {HTMLElement} row - The row element.\n\t\t\t * @param {Array} data - The row data.\n\t\t\t */\n\t\t\tcreatedRow(row, data) {\n\t\t\t\t$('td', row).eq(0).html(data.callerId);\n\t\t\t\t$('td', row).eq(1).html(data.number).addClass('active');\n\t\t\t\t$('td', row).eq(2).html(data.billHourCalls);\n\t\t\t\t$('td', row).eq(3).html(data.billMinCalls);\n\t\t\t\t$('td', row).eq(4).html(data.billSecCalls);\n\t\t\t\t$('td', row).eq(5).html(data.countCalls);\n\t\t\t},\n\t\t\tdrawCallback(settings) {\n\t\t\t\tModuleExtendedCDRs.$globalSearch.closest('div').removeClass('loading');\n\t\t\t\tModuleExtendedCDRs.applyFilterRunning = false;\n\t\t\t},\n\t\t\tlanguage: SemanticLocalization.dataTableLocalisation,\n\t\t\tordering: false,\n\t\t}\n\t},\n\ttableInitDataCallDetails: {\n\t\t wasInit: false,\n\t\t id: 'CallDetails',\n\t\t data: {\n\t\t\tsearch: {\n\t\t\t\tsearch: '',\n\t\t\t},\n\t\t\tserverSide: true,\n\t\t\tprocessing: true,\n\t\t\tinfo: false,\n\t\t\tcolumnDefs: [\n\t\t\t\t{defaultContent: \"-\", targets: \"_all\"},\n\t\t\t],\n\t\t\tajax: function(data, callback, settings) {\n\t\t\t\tif (data.search.value === '' ||\n\t\t\t\t\t!ModuleExtendedCDRs.tablesInitialized || $('#currentReportNameID').val() !== ModuleExtendedCDRs.tableInitDataCallDetails.id) {\n\t\t\t\t\t// Skip initial load\n\t\t\t\t\tcallback({ data: [], recordsTotal: 0, recordsFiltered: 0 });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$.ajax({\n\t\t\t\t\turl: `${globalRootUrl}${idUrl}/getHistory`,\n\t\t\t\t\ttype: 'POST',\n\t\t\t\t\tdata: data,\n\t\t\t\t\tsuccess: function(json) {\n\t\t\t\t\t\t$('a.item[data-tab=\"all-calls\"] b').html(': '+json.recordsFiltered)\n\t\t\t\t\t\t$('a.item[data-tab=\"incoming-calls\"] b').html(': '+json.recordsIncoming)\n\n\t\t\t\t\t\tlet recordsMissed = json.recordsMissed;\n\t\t\t\t\t\tif(json.recordsMissedPercent !== 0){\n\t\t\t\t\t\t\trecordsMissed = json.recordsMissed + ' (' +json.recordsMissedPercent+ '%)';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$('a.item[data-tab=\"missed-calls\"] b').html(': '+recordsMissed)\n\t\t\t\t\t\t$('a.item[data-tab=\"outgoing-calls\"] b').html(': '+json.recordsOutgoing)\n\n\t\t\t\t\t\tlet typeCall = $('#typeCall a.item.active').attr('data-tab');\n\t\t\t\t\t\tif(typeCall === 'incoming-calls'){\n\t\t\t\t\t\t\tjson.recordsFiltered = json.recordsIncoming;\n\t\t\t\t\t\t}else if(typeCall === 'missed-calls'){\n\t\t\t\t\t\t\tjson.recordsFiltered = json.recordsMissed;\n\t\t\t\t\t\t}else if(typeCall === 'outgoing-calls'){\n\t\t\t\t\t\t\tjson.recordsFiltered = json.recordsOutgoing;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallback(json);\n\t\t\t\t\t},\n\t\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\t\tconsole.error('getHistory error:', status, error);\n\t\t\t\t\t\tcallback({ data: [], recordsTotal: 0, recordsFiltered: 0 });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tpaging: true,\n\t\t\tsDom: 'rtip',\n\t\t\tdeferRender: true,\n\t\t\tstripeClasses: ['striped'],\n\t\t\t// pageLength: ModuleExtendedCDRs.calculatePageLength(),\n\n\t\t\t/**\n\t\t\t * Constructs the CDR row.\n\t\t\t * @param {HTMLElement} row - The row element.\n\t\t\t * @param {Array} data - The row data.\n\t\t\t */\n\t\t\tcreatedRow(row, data) {\n\t\t\t\tlet detailedIcon = '';\n\t\t\t\tif (data.DT_RowClass.indexOf(\"detailed\") >= 0) {\n\t\t\t\t\tdetailedIcon = '';\n\t\t\t\t}\n\t\t\t\tdata.typeCall = `${data.typeCall}`;\n\t\t\t\tif(data.typeCall === '1'){\n\t\t\t\t\t$('td', row).eq(0).html(''+detailedIcon);\n\t\t\t\t}else if(data.typeCall === '2'){\n\t\t\t\t\t$('td', row).eq(0).html(''+detailedIcon);\n\t\t\t\t}else if(data.typeCall === '3'){\n\t\t\t\t\t$('td', row).eq(0).html(''+detailedIcon);\n\t\t\t\t}else{\n\t\t\t\t\t$('td', row).eq(0).html(''+detailedIcon);\n\t\t\t\t}\n\n\t\t\t\t$('td', row).eq(1).html(data[0]).addClass('right aligned');\n\t\t\t\t$('td', row).eq(2)\n\t\t\t\t\t.html(data[1])\n\t\t\t\t\t.attr('data-phone',data[1])\n\t\t\t\t\t.addClass('need-update').addClass('right aligned');\n\t\t\t\t$('td', row).eq(3)\n\t\t\t\t\t.html(data[2])\n\t\t\t\t\t.attr('data-phone',data[2])\n\t\t\t\t\t.addClass('need-update');\n\n\t\t\t\tlet duration = data[3];\n\t\t\t\tif (data.ids !== '') {\n\t\t\t\t\tduration += '';\n\t\t\t\t}\n\n\t\t\t\tlet lineText = data.line;\n\t\t\t\tif(data.did !== \"\"){\n\t\t\t\t\tlineText = `${data.line}
${data.did}`;\n\t\t\t\t}\n\t\t\t\t$('td', row).eq(4).html(lineText).addClass('right aligned');\n\n\t\t\t\t$('td', row).eq(5).html(data.waitTime).addClass('right aligned');\n\t\t\t\t$('td', row).eq(6).html(duration).addClass('right aligned');\n\t\t\t\t$('td', row).eq(7).html(data.stateCall).addClass('right aligned');\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Draw event - fired once the table has completed a draw.\n\t\t\t */\n\t\t\tdrawCallback(settings) {\n\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\t\t\t\tlistenedIDs.forEach(function(id) {\n\t\t\t\t\tlet element = $(`[id=\"${id}\"]`);\n\t\t\t\t\tif (element.length) {\n\t\t\t\t\t\telement.removeClass('warning').addClass('positive');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tModuleExtendedCDRs.$globalSearch.closest('div').removeClass('loading');\n\t\t\t\tModuleExtendedCDRs.applyFilterRunning = false;\n\t\t\t},\n\t\t\tlanguage: SemanticLocalization.dataTableLocalisation,\n\t\t\tordering: false,\n\t\t}\n\t},\n\ttableInitDataCdrQueue: {\n\t\twasInit: false,\n\t\tid: 'CdrQueue',\n\t\tdata: {\n\t\t\tsearch: {\n\t\t\t\tsearch: '',\n\t\t\t},\n\t\t\tserverSide: true,\n\t\t\tprocessing: true,\n\t\t\tinfo: false,\n\t\t\tcolumnDefs: [\n\t\t\t\t{ defaultContent: \"\", targets: \"_all\"},\n\t\t\t],\n\t\t\tajax: function(data, callback, settings) {\n\t\t\t\tif (data.search.value === '' ||\n\t\t\t\t\t!ModuleExtendedCDRs.tablesInitialized || $('#currentReportNameID').val() !== 'CdrQueue') {\n\t\t\t\t\t// Skip initial load\n\t\t\t\t\tcallback({ data: [], recordsTotal: 0, recordsFiltered: 0 });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$.ajax({\n\t\t\t\t\turl: `${globalRootUrl}${idUrl}/getCdrQueue`,\n\t\t\t\t\ttype: 'POST',\n\t\t\t\t\tdata: data,\n\t\t\t\t\tsuccess: function(json) {\n\t\t\t\t\t\tcallback(json);\n\t\t\t\t\t},\n\t\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\t\tconsole.error('getCdrQueue error:', status, error);\n\t\t\t\t\t\tcallback({ data: [], recordsTotal: 0, recordsFiltered: 0 });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tpaging: false,\n\t\t\tsDom: 'rtip',\n\t\t\tdeferRender: true,\n\t\t\t// pageLength: ModuleExtendedCDRs.calculatePageLength(),\n\n\t\t/**\n\t\t * Constructs the CDR Queue row.\n\t\t * @param {HTMLElement} row - The row element.\n\t\t * @param {Array} data - The row data.\n\t\t */\n\t\tcreatedRow(row, data) {\n\t\t\t$(row).attr('data-queue', data.queueId);\n\t\t\t$(row).attr('data-date', data.date);\n\t\t\t\n\t\t\t// Format date for display and URL\n\t\t\tlet dateForUrl = '';\n\t\t\tif (data.date) {\n\t\t\t\tconst dateParts = data.date.split('-');\n\t\t\t\tif (dateParts.length === 3) {\n\t\t\t\t\tdateForUrl = `${dateParts[2]}/${dateParts[1]}/${dateParts[0]}`;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Create detail button\n\t\t\tlet dateHtml = data.date;\n\t\t\tif (dateForUrl && data.queueId) {\n\t\t\t\tconst detailUrl = `${globalRootUrl}module-extended-c-d-rs/index/?reportNameID=CallDetails&dateRangeSelector=${encodeURIComponent(dateForUrl + ' - ' + dateForUrl)}&queue=${encodeURIComponent(data.queueId)}`;\n\t\t\t\tdateHtml = `${data.date} `;\n\t\t\t}\n\t\t\t\n\t\t\t$('td', row).eq(0).html(dateHtml);\n\t\t\t$('td', row).eq(1).html(data.queueName || '-').addClass('center aligned');\n\t\t\t$('td', row).eq(2).html(data.totalCalls).addClass('center aligned');\n\t\t\t$('td', row).eq(3).html(data.answered).addClass('center aligned');\n\t\t\t$('td', row).eq(4).html(data.missed).addClass('center aligned');\n\t\t\t$('td', row).eq(5).html(data.answeredQueue).addClass('center aligned');\n\t\t\t$('td', row).eq(6).html(data.avgWaitTime).addClass('center aligned');\n\t\t\t$('td', row).eq(7).html(data.avgMissed + '%').addClass('center aligned');\n\t\t\t$('td', row).eq(8).html(data.avgWaitTimeQueue).addClass('center aligned');\n\t\t},\n\t\t\tdrawCallback(settings) {\n\t\t\t\tModuleExtendedCDRs.$globalSearch.closest('div').removeClass('loading');\n\t\t\t\tModuleExtendedCDRs.applyFilterRunning = false;\n\t\t\t},\n\t\t\tlanguage: SemanticLocalization.dataTableLocalisation,\n\t\t\tordering: false,\n\t\t}\n\t},\n\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateRules: {\n\t},\n\t/**\n\t * Field validation rules\n\t * https://semantic-ui.com/behaviors/form.html\n\t */\n\tvalidateVariantRules: {\n\t\ttitle: {\n\t\t\tidentifier: 'title',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype : 'empty',\n\t\t\t\t\tprompt : globalTranslate.repModuleExtendedCDRs_Form_titleReportError\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tminBillSec: {\n\t\t\tidentifier: 'minBillSec',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype : 'integer[0..1000]',\n\t\t\t\t\tprompt : globalTranslate.repModuleExtendedCDRs_Form_titleReportError\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tdateMonth: {\n\t\t\tidentifier: 'dateMonth',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype : 'integer[1..31]',\n\t\t\t\t\tprompt : globalTranslate.repModuleExtendedCDRs_Form_DateMonthError\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tday: {\n\t\t\tidentifier: 'day',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype : 'regExp[/^((([1-7])(,[1-7])*)|(([1-7])-([1-7])(/([1-7]))?)|(\\\\*\\\\/[1-7]))$/]',\n\t\t\t\t\tprompt : globalTranslate.repModuleExtendedCDRs_Form_DayError\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\ttime: {\n\t\t\tidentifier: 'time',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype : 'regExp[/^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$/]',\n\t\t\t\t\tprompt : globalTranslate.repModuleExtendedCDRs_Form_TimeError\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\temail: {\n\t\t\tidentifier: 'email',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype : 'regExp[/^\\\\s*([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,})(\\\\s+[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,})*\\\\s*$/]',\n\t\t\t\t\tprompt : globalTranslate.repModuleExtendedCDRs_Form_EmailError\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t/**\n\t * Process URL parameters for filtering\n\t */\n\tprocessUrlParameters() {\n\t\tconst urlParams = new URLSearchParams(window.location.search);\n\t\tconst reportNameID = urlParams.get('reportNameID');\n\t\tconst dateRangeSelector = urlParams.get('dateRangeSelector');\n\t\tconst queue = urlParams.get('queue');\n\t\t\n\t\t// Set report type if specified\n\t\tif (reportNameID) {\n\t\t\t$('#currentReportNameID').val(reportNameID);\n\t\t}\n\t\t\n\t\t// Set date range if specified\n\t\tif (dateRangeSelector) {\n\t\t\tconst dates = dateRangeSelector.split(' - ');\n\t\t\tif (dates.length === 2) {\n\t\t\t\tconst startDate = moment(dates[0], 'DD/MM/YYYY');\n\t\t\t\tconst endDate = moment(dates[1], 'DD/MM/YYYY');\n\t\t\t\t\n\t\t\t\tif (startDate.isValid() && endDate.isValid()) {\n\t\t\t\t\tModuleExtendedCDRs.$dateRangeSelector.attr('data-start', startDate.format('YYYY/MM/DD'));\n\t\t\t\t\tModuleExtendedCDRs.$dateRangeSelector.attr('data-end', endDate.endOf('day').format('YYYY/MM/DD'));\n\t\t\t\t\tModuleExtendedCDRs.$dateRangeSelector.val(`${startDate.format('DD/MM/YYYY')} - ${endDate.format('DD/MM/YYYY')}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Set queue filter if specified\n\t\tif (queue) {\n\t\t\t// Temporarily disable onChange to avoid multiple applyFilter calls\n\t\t\t$('#additionalFilter').dropdown('setting', 'onChange', function() {});\n\t\t\t\n\t\t\t// Add queue to filter\n\t\t\tconst currentFilter = $('#additionalFilter').dropdown('get value');\n\t\t\tconst filterArray = currentFilter ? currentFilter.split(',') : [];\n\t\t\tconst queueValue = 'queue_' + queue;\n\t\t\t\n\t\t\tif (!filterArray.includes(queueValue)) {\n\t\t\t\tfilterArray.push(queueValue);\n\t\t\t}\n\t\t\t\n\t\t\t$('#additionalFilter').dropdown('set selected', filterArray);\n\t\t\t\n\t\t\t// Re-enable onChange\n\t\t\t$('#additionalFilter').dropdown('setting', 'onChange', ModuleExtendedCDRs.applyFilter);\n\t\t}\n\t},\n\t\n\t/**\n\t * On page load we init some Semantic UI library\n\t */\n\tinitialize() {\n\t\tif (window.location.search) {\n\t\t\tconst newUrl = window.location.pathname;\n\t\t\twindow.history.replaceState(null, '', newUrl);\n\t\t}\n\t\t//////\n\t\t// Удаляем отступы контейнера.\n\t\t$('#main-content-container').removeClass('container');\n\t\t$('#module-status-toggle-segment').hide();\n\t\t$('.ui.clearing.hidden.divider').remove();\n\t\t$(\"h1.header i.puzzle.icon\")\n\t\t\t.removeClass('puzzle')\n\t\t\t.addClass('th')\n\t\t\t.css('cursor', 'pointer')\n\t\t\t.popup({\n\t\t\t\tinline : true,\n\t\t\t\tpopup: $('#menu-reports'),\n\t\t\t\ttarget : \"h1.ui.header\",\n\t\t\t\tposition: 'bottom left',\n\t\t\t\thoverable: true,\n\t\t\t\tdelay: {\n\t\t\t\t\tshow: 300,\n\t\t\t\t\thide: 800\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t\t$('#content-frame').css('display', 'none');\n\t\t// Окончание форматирования базовой страницы\n\t\t//////\n\t\tModuleExtendedCDRs.changeReportVariant();\n\t\tModuleExtendedCDRs.initializeDateRangeSelector();\n\t\t\n\t\t// Process URL parameters\n\t\tModuleExtendedCDRs.processUrlParameters();\n\n\t\t// инициализируем чекбоксы и выподающие менюшки\n\t\twindow[className].$checkBoxes.checkbox();\n\n\t\twindow[className].initializeForm();\n\t\t$('.menu .item').tab();\n\n\t\t$(document).on('click', '#menu-reports i.edit', function(e) {\n\t\t\te.stopPropagation();\n\t\t\tlet parent =$(this).parent();\n\t\t\t$(e.target).parents('div.six.wide.column').children('h4').hide();\n\t\t\t$(e.target).parents('div.six.wide.column').children('div').hide();\n\n\t\t\tlet reportId = $(this).parent().attr('data-report-id');\n\t\t\tlet form = $(`form[data-report-id=\"${reportId}\"]`);\n\t\t\tform.show();\n\n\t\t\tform.form('set value', 'reportNameID', reportId);\n\t\t\tform.form('set value', 'variantId', parent.attr('data-variant-id'));\n\n\t\t\tform.form('set value', 'title', parent.find('div.content div.title').text().trim());\n\t\t\tform.form('set value', 'minBillSec', parent.attr('data-min-bill-sec'));\n\t\t\tform.form('set value', 'sendingScheduledReport', parent.attr('data-sending-scheduled-report') === '1');\n\t\t\tform.form('set value', 'dateMonth', parent.attr('data-date-month'));\n\t\t\tform.form('set value', 'day', parent.attr('data-day'));\n\t\t\tform.form('set value', 'time', parent.attr('data-time'));\n\t\t\tform.form('set value', 'email', parent.attr('data-email'));\n\t\t});\n\t\t$(document).on('click', '#menu-reports form button[data-action=\"save\"]', function(e) {\n\t\t\te.stopPropagation();\n\t\t\tlet form = $(this).parent();\n\t\t\tform.form({fields: ModuleExtendedCDRs.validateVariantRules});\n\n\t\t\tlet reportNameID = form.form('get value', 'reportNameID');\n\t\t\tlet variantId = form.form('get value', 'variantId');\n\t\t\tlet title = form.form('get value', 'title').trim();\n\t\t\tlet minBillSec = form.form('get value', 'minBillSec');\n\t\t\tlet sendingReport = form.form('get value', 'sendingScheduledReport') ? 1 : 0;\n\t\t\tlet dateMonth = form.form('get value', 'dateMonth');\n\t\t\tlet day = form.form('get value', 'day');\n\t\t\tlet time = form.form('get value', 'time');\n\t\t\tlet email = form.form('get value', 'email');\n\n\t\t\tif (!form.form('is valid', 'title')) {\n\t\t\t\tform.form('submit');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!form.form('is valid', 'minBillSec')) {\n\t\t\t\tform.form('submit');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (dateMonth && !form.form('is valid', 'dateMonth')) {\n\t\t\t\tform.form('submit');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (day && !form.form('is valid', 'day')) {\n\t\t\t\tform.form('submit');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (time && !form.form('is valid', 'time')) {\n\t\t\t\tform.form('submit');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (email && !form.form('is valid', 'email')) {\n\t\t\t\tform.form('submit');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet parent = $(`a[data-variant-id=\"${variantId}\"][data-report-id=\"${reportNameID}\"]`);\n\t\t\tparent.find('div.content div.title').text(title);\n\t\t\tparent.attr({\n\t\t\t\t'data-min-bill-sec': minBillSec,\n\t\t\t\t'data-sending-scheduled-report': sendingReport,\n\t\t\t\t'data-date-month': dateMonth,\n\t\t\t\t'data-day': day,\n\t\t\t\t'data-time': time,\n\t\t\t\t'data-email': email\n\t\t\t});\n\n\t\t\tlet contentDiv = parent.find('div.content');\n\t\t\tcontentDiv.find('div.input').hide();\n\t\t\tcontentDiv.find('div.title').show();\n\t\t\tparent.find('i.star').show();\n\t\t\tform.hide();\n\n\t\t\t$(e.target).parents('div.six.wide.column').children('h4').show();\n\t\t\t$(e.target).parents('div.six.wide.column').children('div').show();\n\n\t\t\tModuleExtendedCDRs.tablesInitialized = false;\n\t\t\tModuleExtendedCDRs.changeReportVariant(reportNameID, variantId);\n\t\t\tModuleExtendedCDRs.saveSearchSettings();\n\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t});\n\t\t$('#menu-reports i.copy').on('click', function (e) {\n\t\t\te.stopPropagation();\n\t\t\tlet reportId = $(this).parent().attr('id');\n\t\t\tlet timestamp = Date.now();\n\t\t\tlet parentTitle = $(this).parent().find('div.content').text().trim();\n\t\t\tlet html = `\n\n\n
\n\t
${parentTitle} (${timestamp})
\n\t
\n\t \n\t
\n
`;\n\t\t\tlet newItem = $('', {\n\t\t\t\tclass: 'item',\n\t\t\t\thtml: html,\n\t\t\t\t'data-report-id': reportId,\n\t\t\t\t'data-is-main': '0',\n\t\t\t\t'data-min-bill-sec': $(this).parent().attr('data-min-bill-sec'),\n\t\t\t\t'data-search-text': $(this).parent().attr('data-search-text'),\n\t\t\t\t'data-variant-id': timestamp\n\t\t\t});\n\t\t\t$(this).parent().siblings('.ui.link.list').append(newItem);\n\t\t\t$(`a[data-variant-id=\"${timestamp}\"][data-report-id=\"${reportId}\"] i.edit`).trigger('click');\n\t\t});\n\t\t$('#menu-reports i.star').on('click', function (e) {\n\t\t\te.stopPropagation();\n\t\t\tlet reportNameID = $(this).parent().attr('id');\n\t\t\tif(reportNameID === undefined){\n\t\t\t\treportNameID = $(this).parent().attr('data-report-id');\n\t\t\t}\n\t\t\tlet variantId = $(this).parent().attr('data-variant-id');\n\n\t\t\tlet self = $(this);\n\t\t\t$.ajax({\n\t\t\t\turl: `${globalRootUrl}${idUrl}/saveMainVariantReport`,\n\t\t\t\ttype: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n\t\t\t\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t\t\t},\n\t\t\t\tdata: {\n\t\t\t\t\t'reportNameID': reportNameID,\n\t\t\t\t\t'variantId': \tvariantId\n\t\t\t\t},\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\t$('#menu-reports i.star').addClass('outline');\n\t\t\t\t\tself.removeClass('outline');\n\t\t\t\t},\n\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t}\n\t\t\t});\n\n\t\t});\n\n\t\t$(document).on('click', '#menu-reports i.trash', function(e) {\n\t\t\te.stopPropagation();\n\t\t\tlet reportNameID = $(this).parent().attr('data-report-id');\n\t\t\tlet variantId \t = $(this).parent().attr('data-variant-id');\n\t\t\tlet self = $(this);\n\t\t\t$.ajax({\n\t\t\t\turl: `${globalRootUrl}${idUrl}/removeVariantReport`,\n\t\t\t\ttype: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n\t\t\t\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t\t\t},\n\t\t\t\tdata: {\n\t\t\t\t\t'reportNameID': reportNameID,\n\t\t\t\t\t'variantId': \tvariantId\n\t\t\t\t},\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\tself.parent().remove();\n\t\t\t\t},\n\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t}\n\t\t\t});\n\n\t\t});\n\t\t$('#typeCall.menu a.item').on('click', function (e) {\n\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t});\n\t\t$('#createExcelButton').on('click', function (e) {\n\t\t\tModuleExtendedCDRs.startCreateExcelPDF('xlsx');\n\t\t});\n\t\t$('#createPdfButton').on('click', function (e) {\n\t\t\tModuleExtendedCDRs.startCreateExcelPDF('pdf');\n\t\t});\n\t\t$('#downloadRecords').on('click', function (e) {\n\t\t\tconst encodedSearch = encodeURIComponent(ModuleExtendedCDRs.getSearchText());\n\t\t\tconst url = `${window.location.origin}/pbxcore/api/modules/${className}/downloads?search=${encodedSearch}`;\n\t\t\twindow.open(url, '_blank');\n\t\t});\n\t\t$('#saveSearchSettings').on('click', function (e) {\n\t\t\tModuleExtendedCDRs.saveSearchSettings();\n\t\t});\n\t\t$(\"div.column h4\").on('click', function (e) {\n\t\t\tlet reportId = $(this).attr('id');\n\t\t\t$(\"h1.header i.th.icon\").popup('hide');\n\t\t\tModuleExtendedCDRs.tablesInitialized = false;\n\t\t\tModuleExtendedCDRs.changeReportVariant(reportId);\n\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t});\n\t\t$(document).on('click', 'div.column div.link.list a.item div.title', function(e) {\n\t\t\tlet reportId = $(e.target).closest('a').attr('data-report-id');\n\t\t\tlet variantId = $(e.target).closest('a').attr('data-variant-id');\n\t\t\t$(\"h1.header i.th.icon\").popup('hide');\n\t\t\tModuleExtendedCDRs.tablesInitialized = false;\n\t\t\tModuleExtendedCDRs.changeReportVariant(reportId, variantId);\n\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t});\n\n\t\tModuleExtendedCDRs.$globalSearch.on('keyup', (e) => {\n\t\t\tif (e.keyCode === 13\n\t\t\t\t|| e.keyCode === 8\n\t\t\t\t|| ModuleExtendedCDRs.$globalSearch.val().length === 0) {\n\t\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t\t}\n\t\t});\n\n\t\t// Handle minBillSec field changes\n\t\t$('#currentMinBillSec').on('change', function() {\n\t\t\tconst value = $(this).val();\n\t\t\tconst reportNameID = $('#currentReportNameID').val();\n\t\t\tconst currentVariantId = $('#currentVariantId').val();\n\t\t\t\n\t\t\t// Update data attribute\n\t\t\tif (currentVariantId === '') {\n\t\t\t\t$(`h4#${reportNameID}`).attr('data-min-bill-sec', value);\n\t\t\t} else {\n\t\t\t\t$(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"]`).attr('data-min-bill-sec', value);\n\t\t\t}\n\t\t\t\n\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t});\n\n\t\t// Handle Enter key in minBillSec field\n\t\t$('#currentMinBillSec').on('keyup', function(e) {\n\t\t\tif (e.keyCode === 13) {\n\t\t\t\t$(this).trigger('change');\n\t\t\t}\n\t\t});\n\n\t\t// Initialize minBillSecComp dropdown\n\t\t$('#currentMinBillSecComp').dropdown();\n\t\t\n\t\t// Handle minBillSecComp dropdown changes via click on menu items\n\t\t$(document).on('click', '#currentMinBillSecComp .menu .item', function(e) {\n\t\t\tconst value = $(this).attr('data-value');\n\t\t\tconst text = $(this).html();\n\t\t\tconst reportNameID = $('#currentReportNameID').val();\n\t\t\tconst currentVariantId = $('#currentVariantId').val();\n\t\t\t\n\t\t\t// Update button text and data attribute\n\t\t\t$('#currentMinBillSecComp').attr('data-value', value);\n\t\t\t// Update button text content - remove menu and update text\n\t\t\tconst $button = $('#currentMinBillSecComp');\n\t\t\tconst $menu = $button.find('.menu');\n\t\t\t$button.contents().not($menu).remove();\n\t\t\t$button.prepend(text + ' ');\n\t\t\t$button.append($menu);\n\t\t\t\n\t\t\tif (currentVariantId === '') {\n\t\t\t\t$(`h4#${reportNameID}`).attr('data-min-bill-sec-comp', value);\n\t\t\t} else {\n\t\t\t\t$(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"]`).attr('data-min-bill-sec-comp', value);\n\t\t\t}\n\t\t\t\n\t\t\tModuleExtendedCDRs.applyFilter();\n\t\t});\n\n\t\tModuleExtendedCDRs.$formObj.keydown(function(event){\n\t\t\tif(event.keyCode === 13) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tModuleExtendedCDRs.updateSettings();\n\t\tModuleExtendedCDRs.applyFilter();\n\n\t\t// Initialize dropdowns except #additionalFilter (it has its own handler)\n\t\twindow[className].$dropDowns.not('#additionalFilter').dropdown({onChange: ModuleExtendedCDRs.applyFilter});\n\t\twindow[className].updateSyncState();\n\t\tsetInterval(window[className].updateSyncState, 5000);\n\t},\n\tchangeReportVariant(reportNameID = '', currentVariantId=''){\n\t\tif(reportNameID === ''){\n\t\t\treportNameID = $('#currentReportNameID').val();\n\t\t\tcurrentVariantId = $('#currentVariantId').val();\n\t\t}\n\n\t\t$('[id$=\"-table-div\"]').hide();\n\t\t$(`#${reportNameID}-table-div`).show();\n\n\t\t$('#currentReportNameID').val(reportNameID);\n\t\t$('#currentVariantId').val(currentVariantId);\n\n\t\tif(reportNameID === 'CdrQueue'){\n\t\t\t$('#typeCall').closest('.ui.column').hide();\n\t\t\t$('#minBillSecContainer').hide();\n\t\t}else{\n\t\t\t$('#typeCall').closest('.ui.column').show();\n\t\t\t$('#minBillSecContainer').show();\n\t\t}\n\n\t\tlet variantName = '';\n\t\tif(currentVariantId !==''){\n\t\t\tvariantName = $(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"] div.title`).text().trim();\n\t\t}else{\n\t\t\tvariantName = $(`h4#${reportNameID} div.content`).text().trim();\n\t\t}\n\t\t$(\"h1.header div.content\").contents().filter(function() {\n\t\t\treturn this.nodeType === 3 && this.nodeValue.trim() !== '';\n\t\t}).each(function() {\n\t\t\tthis.nodeValue = variantName;\n\t\t});\n\n\t\tModuleExtendedCDRs.updateSettings();\n\t},\n\tupdateSettings(){\n\t\tModuleExtendedCDRs.tablesInitialized = false;\n\t\tlet currentVariantId = $('#currentVariantId').val();\n\t\tlet reportNameID = $('#currentReportNameID').val();\n\t\tlet settings = {};\n\t\tif(currentVariantId === ''){\n\t\t\tsettings = JSON.parse(decodeURIComponent($(`#${reportNameID}`).attr('data-search-text')));\n\t\t}else{\n\t\t\tsettings = JSON.parse(decodeURIComponent($(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"]`).attr('data-search-text')));\n\t\t}\n\t\t\n\t\t// Update minBillSec field\n\t\tlet minBillSec = 0;\n\t\tlet minBillSecComp = '>';\n\t\tif(currentVariantId === ''){\n\t\t\tminBillSec = $(`h4#${reportNameID}`).attr('data-min-bill-sec') || 0;\n\t\t\tminBillSecComp = $(`h4#${reportNameID}`).attr('data-min-bill-sec-comp') || '>';\n\t\t}else{\n\t\t\tminBillSec = $(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"]`).attr('data-min-bill-sec') || 0;\n\t\t\tminBillSecComp = $(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"]`).attr('data-min-bill-sec-comp') || '>';\n\t\t}\n\t\t$('#currentMinBillSec').val(minBillSec);\n\t\t$('#currentMinBillSecComp').dropdown('set selected', minBillSecComp);\n\t\t$('#currentMinBillSecComp').attr('data-value', minBillSecComp);\n\t\t// Update button text content\n\t\tconst $button = $('#currentMinBillSecComp');\n\t\tconst $menu = $button.find('.menu');\n\t\t$button.contents().not($menu).remove();\n\t\t$button.prepend(minBillSecComp + ' ');\n\t\t$button.append($menu);\n\n\t\tlet setDate = $('#pDateRangeSelector').val() === \"\";\n\t\tif(setDate){\n\t\t\t$('#pDateRangeSelector').val('');\n\t\t}\n\t\tif(setDate && settings.dateRangeSelector !== undefined && settings.dateRangeSelector !== ''){\n\t\t\tlet periods = ModuleExtendedCDRs.getStandardPeriods();\n\t\t\tlet defPeriod = [moment(),moment()];\n\t\t\tif(periods[settings.dateRangeSelector] !== undefined){\n\t\t\t\tdefPeriod = periods[settings.dateRangeSelector];\n\t\t\t}\n\t\t\tModuleExtendedCDRs.$dateRangeSelector.attr('data-start', defPeriod[0].format('YYYY/MM/DD'));\n\t\t\tModuleExtendedCDRs.$dateRangeSelector.attr('data-end', moment(defPeriod[1].format('YYYYMMDD')).endOf('day').format('YYYY/MM/DD'));\n\t\t\tModuleExtendedCDRs.$dateRangeSelector.val(`${defPeriod[0].format('DD/MM/YYYY')} - ${defPeriod[1].format('DD/MM/YYYY') }`);\n\t\t}\n\t\t// Temporarily disable onChange to avoid multiple applyFilter calls\n\t\t$('#additionalFilter').dropdown('setting', 'onChange', function() {});\n\t\t$('#additionalFilter').dropdown('clear');\n\n\t\tif($('#pAdditionalFilterString').val() !== '-'){\n\t\t\t$('#additionalFilter').dropdown('set selected', $('#pAdditionalFilterString').val().split(' '));\n\t\t\tsettings.typeCall = undefined;\n\t\t\tsettings.globalSearch = undefined;\n\t\t}else if(settings.additionalFilter !== undefined){\n\t\t\t$('#additionalFilter').dropdown('set selected', settings.additionalFilter.split(' '));\n\t\t}\n\t\t// Re-enable onChange\n\t\t$('#additionalFilter').dropdown('setting', 'onChange', ModuleExtendedCDRs.applyFilter);\n\n\t\tif(settings.globalSearch !== undefined) {\n\t\t\tModuleExtendedCDRs.$globalSearch.val(settings.globalSearch)\n\t\t}\n\n\t\tif(settings.typeCall !== undefined){\n\t\t\t$('#typeCall.menu a.item').tab('change tab', settings.typeCall)\n\t\t}else{\n\t\t\t$('#typeCall.menu a.item').tab('change tab', 'all-calls')\n\t\t}\n\t},\n\t/**\n\t *\n\t */\n\tupdateSyncState(){\n\t\t// Выполняем GET-запрос\n\t\tlet divProgress = $(\"#sync-progress\");\n\t\t$.ajax({\n\t\t\turl: `${globalRootUrl}${idUrl}/getState`,\n\t\t\tmethod: 'GET',\n\t\t\tsuccess: function(response) {\n\t\t\t\t// Проверяем существование stateData и его свойств\n\t\t\t\tif (!response.stateData || typeof response.stateData.lastId === 'undefined' || typeof response.stateData.nowId === 'undefined') {\n\t\t\t\t\tdivProgress.hide();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif(response.stateData.lastId - response.stateData.nowId > 0){\n\t\t\t\t\tdivProgress.show();\n\t\t\t\t}else{\n\t\t\t\t\tdivProgress.hide();\n\t\t\t\t}\n\t\t\t\tdivProgress.progress({\n\t\t\t\t\ttotal: response.stateData.lastId, value: response.stateData.nowId,\n\t\t\t\t\ttext: {\n\t\t\t\t\t\tactive : globalTranslate.repModuleExtendedCDRs_syncState\n\t\t\t\t\t},\n\t\t\t\t\terror: function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\t\t// Обработка ошибки\n\t\t\t\t\t\tconsole.error('Ошибка запроса:', textStatus, errorThrown);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Shows a set of call records when a row is clicked.\n\t * @param {Array} data - The row data.\n\t * @returns {string} The HTML representation of the call records.\n\t */\n\tshowRecords(data, id) {\n\t\tlet htmlPlayer = '';\n\t\tdata[4].forEach((record, i) => {\n\t\t\tlet srcAudio = '';\n\t\t\tlet srcDownloadAudio = '';\n\t\t\tif (!(record.recordingfile === undefined || record.recordingfile === null || record.recordingfile.length === 0)) {\n\t\t\t\t// Use real file extension from the recording file path for download name.\n\t\t\t\tconst recordFileUri = encodeURIComponent(record.recordingfile);\n\t\t\t\tconst fileNameFromPath = (record.recordingfile.split(/[\\\\/]/).pop() || '').split('?')[0].split('#')[0];\n\t\t\t\tconst extMatch = fileNameFromPath.match(/\\.([a-zA-Z0-9]+)$/);\n\t\t\t\tconst fileExt = (extMatch && extMatch[1]) ? extMatch[1].toLowerCase() : 'mp3';\n\n\t\t\t\tlet downloadFileName = record.prettyFilename || 'record';\n\t\t\t\tif (!downloadFileName.toLowerCase().endsWith(`.${fileExt}`)) {\n\t\t\t\t\tdownloadFileName += `.${fileExt}`;\n\t\t\t\t}\n\t\t\t\tconst recordFileName = encodeURIComponent(downloadFileName);\n\t\t\t\tsrcAudio = `/pbxcore/api/cdr/v2/playback?view=${recordFileUri}`;\n\t\t\t\tsrcDownloadAudio = `/pbxcore/api/cdr/v2/playback?view=${recordFileUri}&download=1&filename=${recordFileName}`;\n\t\t\t}\n\n\t\t\thtmlPlayer +=`\n\t\t\t\n\t\t\t\t\n\t\t\t\t${record.start}\n\t\t\t\t${record.src_num}\n\t\t\t \t${record.dst_num}\n\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t${record.waitTime}\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t \n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t ${record.billsec}\n\t\t\t\t\t \n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t \n\t\t\t\t\n\t\t\t\t${record.stateCall}\n\t\t\t`\n\t\t});\n\t\treturn htmlPlayer;\n\t},\n\taudioPlayHandler(event) {\n\t\tlet detailRow = $(event.target).closest('tr');\n\t\tdetailRow.removeClass('warning');\n\t\tdetailRow.addClass('positive');\n\n\t\tlet callIdDetail = detailRow.attr('data-row-id');\n\t\tlistenedIDs.push(callIdDetail);\n\n\t\tlet callId = callIdDetail.replace('-detailed', '');\n\n\t\tlet allPositive = true;\n\t\t$('[data-row-id=\"' + callIdDetail + '\"]').each(function() {\n\t\t\tif (!$(this).hasClass('positive')) {\n\t\t\t\tallPositive = false;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\tif (allPositive) {\n\t\t\t$(`[id=\"${callId}\"]`).addClass('positive');\n\t\t\tlistenedIDs.push(callId);\n\t\t}\n\n\t\tlistenedIDs = [...new Set(listenedIDs)];\n\t},\n\tcalculatePageLength() {\n\t\t// Calculate row height\n\t\tlet rowHeight = ModuleExtendedCDRs.$cdrTable.find('tbody > tr').first().outerHeight();\n\n\t\t// Calculate window height and available space for table\n\t\tconst windowHeight = window.innerHeight;\n\t\tconst headerFooterHeight = 400 ; // Estimate height for header, footer, and other elements\n\n\t\t// Calculate new page length\n\t\treturn Math.max(Math.floor((windowHeight - headerFooterHeight) / rowHeight), 5);\n\t},\n\n\n\tadditionalExportFunctions(){\n\t\tlet body = $('body');\n\t\tbody.on('click', '#add-new-button', function (e) {\n\t\t\tlet id = 'none-'+Date.now();\n\t\t\tlet newRow \t= $('').attr('id', id);\n\t\t\tlet nameCell = $('').attr('data-label', 'name').addClass('right aligned').html('
');\n\t\t\tlet usersCell \t= $('').attr('data-label', 'users').html('
' + $('#users-selector').html() + '
');\n\t\t\tlet buttonsCell\t= $('').attr('data-label', 'buttons').html('
\\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t'
');\n\t\t\tlet headersCell = $('').attr('data-label', 'headers').addClass('right aligned').attr('style', 'display: none').html('
\\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t' Завершить редактирование\\n' +\n\t\t\t\t' \\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
\\n' +\n\t\t\t\t'
');\n\t\t\tnewRow.append(nameCell, usersCell, headersCell, buttonsCell);\n\t\t\t$('#sync-rules').append(newRow);\n\t\t\t$('div.dropdown').dropdown();\n\t\t});\n\n\t\tbody.on('click', '#save-button', function (e) {\n\t\t\t// Обойдите элементы в цикле\n\t\t\t$(\"input\").each(function(index) {\n\t\t\t\t$(this).attr('value', $(this).val());\n\t\t\t});\n\n\t\t\tlet data = [];\n\t\t\tlet table = $('#sync-rules');\n\t\t\tlet rows = table.find('tbody tr');\n\t\t\trows.each(function() {\n\t\t\t\tlet row = $(this);\n\t\t\t\tlet rowData = {\n\t\t\t\t\tid: row.attr('id'),\n\t\t\t\t\tname: row.find('td[data-label=\"name\"] input').val(),\n\t\t\t\t\tdstUrl: $('.ui.modal[data-id=\"'+row.attr('id')+'\"] input[data-label=\"dstUrl\"]').val(),\n\t\t\t\t\tusers: row.find('td[data-label=\"users\"] div.dropdown').dropdown('get value'),\n\t\t\t\t\theaders: $('.ui.modal[data-id=\"'+row.attr('id')+'\"] textarea').val()\n\t\t\t\t};\n\t\t\t\tdata.push(rowData);\n\t\t\t});\n\t\t\t$.ajax({\n\t\t\t\ttype: \"POST\",\n\t\t\t\turl: globalRootUrl + idUrl + \"/save\",\n\t\t\t\tdata: {rules: data},\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\tconsole.log(\"Успешный запрос\", response);\n\t\t\t\t\tfor (let key in response.ruleSaveResult) {\n\t\t\t\t\t\tif (response.ruleSaveResult.hasOwnProperty(key)) {\n\t\t\t\t\t\t\tlet syncRules = $('#sync-rules tr#'+key);\n\t\t\t\t\t\t\tlet html = syncRules.html();\n\t\t\t\t\t\t\tsyncRules.html(html.replace((new RegExp(key, \"g\")), response.ruleSaveResult[key]));\n\t\t\t\t\t\t\tsyncRules.attr('id', response.ruleSaveResult[key]);\n\t\t\t\t\t\t\t$('.ui.modal[data-id=\"'+key+'\"]').attr('data-id', response.ruleSaveResult[key]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\tconsole.error(\"Ошибка запроса\", status, error);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\tshowRuleOptions(id) {\n\t\t$('.ui.modal[data-id=\"'+id+'\"]').modal({closable : true, }).modal('show');\n\t},\n\tremoveRule(id) {\n\t\t$.ajax({\n\t\t\ttype: \"POST\",\n\t\t\turl: globalRootUrl + idUrl + \"/delete\",\n\t\t\tdata: {\n\t\t\t\ttable: 'ExportRules',\n\t\t\t\tid: id\n\t\t\t},\n\t\t\tsuccess: function(response) {\n\t\t\t\tconsole.log(\"Успешный запрос\", response);\n\t\t\t\t$('#sync-rules tr#'+id).remove();\n\t\t\t},\n\t\t\terror: function(xhr, status, error) {\n\t\t\t\tconsole.error(\"Ошибка запроса\", status, error);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Initializes the date range selector.\n\t */\n\tinitializeDateRangeSelector() {\n\n\t\tconst period = ModuleExtendedCDRs.$dateRangeSelector.attr('data-def-value');\n\t\tlet defPeriod = [moment(),moment()];\n\t\tif(period !== '' && period !== undefined){\n\t\t\tif($('#pDateRangeSelector').val() === period){\n\t\t\t\tconst [startStr, endStr] = period.split(' - ');\n\t\t\t\tdefPeriod = [moment(startStr, 'DD/MM/YYYY'), moment(endStr, 'DD/MM/YYYY')];\n\t\t\t}else{\n\t\t\t\tlet periods = ModuleExtendedCDRs.getStandardPeriods();\n\t\t\t\tif(periods[period] !== undefined){\n\t\t\t\t\tdefPeriod = periods[period];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst options = {};\n\t\toptions.ranges = {\n\t\t\t[globalTranslate.repModuleExtendedCDRs_cdr_cal_Today]: [moment(), moment()],\n\t\t\t[globalTranslate.repModuleExtendedCDRs_cdr_cal_Yesterday]: [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n\t\t\t[globalTranslate.repModuleExtendedCDRs_cdr_cal_LastWeek]: [moment().subtract(6, 'days'), moment()],\n\t\t\t[globalTranslate.repModuleExtendedCDRs_cdr_cal_Last30Days]: [moment().subtract(29, 'days'), moment()],\n\t\t\t[globalTranslate.repModuleExtendedCDRs_cdr_cal_ThisMonth]: [moment().startOf('month'), moment().endOf('month')],\n\t\t\t[globalTranslate.repModuleExtendedCDRs_cdr_cal_LastMonth]: [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n\t\t};\n\t\toptions.alwaysShowCalendars = true;\n\t\toptions.autoUpdateInput = true;\n\t\toptions.linkedCalendars = true;\n\t\toptions.maxDate = moment().endOf('month');\n\t\toptions.locale = {\n\t\t\tformat: 'DD/MM/YYYY',\n\t\t\tseparator: ' - ',\n\t\t\tapplyLabel: globalTranslate.cal_ApplyBtn,\n\t\t\tcancelLabel: globalTranslate.cal_CancelBtn,\n\t\t\tfromLabel: globalTranslate.cal_from,\n\t\t\ttoLabel: globalTranslate.cal_to,\n\t\t\tcustomRangeLabel: globalTranslate.cal_CustomPeriod,\n\t\t\tdaysOfWeek: SemanticLocalization.calendarText.days,\n\t\t\tmonthNames: SemanticLocalization.calendarText.months,\n\t\t\tfirstDay: 1,\n\t\t};\n\t\toptions.startDate = defPeriod[0];\n\t\toptions.endDate = defPeriod[1];\n\t\tModuleExtendedCDRs.$dateRangeSelector.daterangepicker(\n\t\t\toptions,\n\t\t\tModuleExtendedCDRs.cbDateRangeSelectorOnSelect,\n\t\t);\n\t},\n\t/**\n\t * Handles the date range selector select event.\n\t * @param {moment.Moment} start - The start date.\n\t * @param {moment.Moment} end - The end date.\n\t * @param {string} label - The label.\n\t */\n\tcbDateRangeSelectorOnSelect(start, end, label) {\n\t\tModuleExtendedCDRs.$dateRangeSelector.attr('data-start', start.format('YYYY/MM/DD'));\n\t\tModuleExtendedCDRs.$dateRangeSelector.attr('data-end', moment(end.format('YYYYMMDD')).endOf('day').format('YYYY/MM/DD'));\n\t\tModuleExtendedCDRs.$dateRangeSelector.val(`${start.format('DD/MM/YYYY')} - ${end.format('DD/MM/YYYY') }`);\n\t\tModuleExtendedCDRs.applyFilter();\n\t},\n\n\t/**\n\t * Applies the filter to the data table (with debounce to prevent double calls).\n\t */\n\tapplyFilter()\n\t{\n\t\t// Debounce: cancel previous timer and set new one\n\t\tif (ModuleExtendedCDRs.applyFilterTimer) {\n\t\t\tclearTimeout(ModuleExtendedCDRs.applyFilterTimer);\n\t\t}\n\t\tModuleExtendedCDRs.applyFilterTimer = setTimeout(() => {\n\t\t\tModuleExtendedCDRs.applyFilterInternal();\n\t\t}, 100);\n\t},\n\n\t/**\n\t * Internal filter application (called after debounce).\n\t */\n\tapplyFilterInternal()\n\t{\n\t\t// Prevent concurrent execution\n\t\tif (ModuleExtendedCDRs.applyFilterRunning) {\n\t\t\treturn;\n\t\t}\n\t\tModuleExtendedCDRs.applyFilterRunning = true;\n\t\t// Flag will be reset in drawCallback after table is rendered\n\n\t\tconst text = ModuleExtendedCDRs.getSearchText();\n\t\tlistenedIDs = [];\n\t\t\n\t\t// Enable data loading for tables\n\t\tModuleExtendedCDRs.tablesInitialized = true;\n\t\tlet reportName = $('#currentReportNameID').val();\n\t\tif(reportName === ModuleExtendedCDRs.tableInitDataCallDetails.id){\n\t\t\tif(ModuleExtendedCDRs.tableInitDataCallDetails.wasInit === false){\n\t\t\t\tModuleExtendedCDRs.$cdrTable.dataTable(ModuleExtendedCDRs.tableInitDataCallDetails.data);\n\t\t\t\tModuleExtendedCDRs.tableInitDataCallDetails.wasInit = true;\n\n\t\t\t\tModuleExtendedCDRs.$cdrTable.on('click', 'tr.negative', (e) => {\n\t\t\t\t\tlet ids = $(e.target).attr('data-ids');\n\t\t\t\t\tif (ids !== undefined && ids !== '') {\n\t\t\t\t\t\twindow.location = `${globalRootUrl}system-diagnostic/index/?filename=asterisk/verbose&filter=${ids}`;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// Add event listener for opening and closing details\n\t\t\t\tModuleExtendedCDRs.$cdrTable.on('click', 'tr.detailed', (e) => {\n\t\t\t\t\tlet ids = $(e.target).attr('data-ids');\n\t\t\t\t\tif (ids !== undefined && ids !== '') {\n\t\t\t\t\t\twindow.location = `${globalRootUrl}system-diagnostic/index/?filename=asterisk/verbose&filter=${ids}`;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst tr = $(e.target).closest('tr');\n\t\t\t\t\tconst row = ModuleExtendedCDRs.$cdrTable.DataTable().row(tr);\n\t\t\t\t\tif(row.length === 0){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (tr.hasClass('shown')) {\n\t\t\t\t\t\t// This row is already open - close it\n\t\t\t\t\t\t$('tr[data-row-id=\"'+tr.attr('id')+'-detailed\"').remove();\n\t\t\t\t\t\ttr.removeClass('shown');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Open this row\n\t\t\t\t\t\ttr.after(ModuleExtendedCDRs.showRecords(row.data() , tr.attr('id')));\n\t\t\t\t\t\ttr.addClass('shown');\n\t\t\t\t\t\t$('tr[data-row-id=\"'+tr.attr('id')+'-detailed\"').each((index, playerRow) => {\n\t\t\t\t\t\t\tconst id = $(playerRow).attr('id');\n\t\t\t\t\t\t\treturn new CDRPlayer(id);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tExtensions.updatePhonesRepresent('need-update');\n\n\t\t\t\t\t\tlistenedIDs.forEach(function(id) {\n\t\t\t\t\t\t\tlet element = $(`[id=\"${id}\"]`);\n\t\t\t\t\t\t\tif (element.length) {\n\t\t\t\t\t\t\t\telement.removeClass('warning').addClass('positive');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telement = $(`[data-row-id=\"${id}\"]`);\n\t\t\t\t\t\t\tif (element.length) {\n\t\t\t\t\t\t\t\telement.removeClass('warning').addClass('positive');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\t\t\tlet table = ModuleExtendedCDRs.$cdrTable.DataTable();\n\t\t\ttable.page.len(ModuleExtendedCDRs.calculatePageLength());\n\t\t\ttable.search(text).draw();\n\t\t}else if(reportName === ModuleExtendedCDRs.tableInitDataOutgoingEmployeeCalls.id){\n\t\t\tif(ModuleExtendedCDRs.tableInitDataOutgoingEmployeeCalls.wasInit === false) {\n\t\t\t\tModuleExtendedCDRs.$outgoingEmployeeCalls.dataTable(ModuleExtendedCDRs.tableInitDataOutgoingEmployeeCalls.data);\n\t\t\t\tModuleExtendedCDRs.tableInitDataOutgoingEmployeeCalls.wasInit = true;\n\t\t\t}\n\t\t\tlet table = ModuleExtendedCDRs.$outgoingEmployeeCalls.DataTable();\n\t\t\ttable.page.len(ModuleExtendedCDRs.calculatePageLength());\n\t\t\ttable.search(text).draw();\n\t\t}else if(reportName === ModuleExtendedCDRs.tableInitDataCdrQueue.id){\n\t\t\tif(ModuleExtendedCDRs.tableInitDataCdrQueue.wasInit === false) {\n\t\t\t\tModuleExtendedCDRs.$cdrQueueTable.dataTable(ModuleExtendedCDRs.tableInitDataCdrQueue.data);\n\t\t\t\tModuleExtendedCDRs.tableInitDataCdrQueue.wasInit = true;\n\t\t\t}\n\t\t\tlet table = ModuleExtendedCDRs.$cdrQueueTable.DataTable();\n\t\t\ttable.page.len(ModuleExtendedCDRs.calculatePageLength());\n\t\t\ttable.search(text).draw();\n\t\t}\n\t\tModuleExtendedCDRs.$globalSearch.closest('div').addClass('loading');\n\t},\n\n\tgetSearchText(retStandardPeriod = false, disableGlobalSearch = false) {\n\t\tlet dateRangeSelector = '';\n\t\tif(retStandardPeriod === true){\n\t\t\tlet periods = ModuleExtendedCDRs.getStandardPeriods();\n\t\t\t$.each(periods,function(index,value){\n\t\t\t\tif(ModuleExtendedCDRs.$dateRangeSelector.val() === `${value[0].format('DD/MM/YYYY')} - ${value[1].format('DD/MM/YYYY')}`){\n\t\t\t\t\tdateRangeSelector = index;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tdateRangeSelector = ModuleExtendedCDRs.$dateRangeSelector.val();\n\t\t}\n\n\t\tlet reportNameID = $('#currentReportNameID').val();\n\t\tlet currentVariantId = $('#currentVariantId').val();\n\t\tlet minBilSec = $('#currentMinBillSec').val() || 0;\n\t\tlet minBilSecComp = $('#currentMinBillSecComp').dropdown('get value') || $('#currentMinBillSecComp').attr('data-value') || '>';\n\t\tconst filter = {\n\t\t\tdateRangeSelector: dateRangeSelector,\n\t\t\tminBilSec: minBilSec,\n\t\t\tminBilSecComp: minBilSecComp,\n\t\t\tglobalSearch: ModuleExtendedCDRs.$globalSearch.val(),\n\t\t\ttypeCall: $('#typeCall a.item.active').attr('data-tab'),\n\t\t\tadditionalFilter: $('#additionalFilter').dropdown('get value').replace(/,/g,' '),\n\t\t};\n\t\tif(disableGlobalSearch === true){\n\t\t\tfilter.globalSearch = '';\n\t\t}\n\t\treturn JSON.stringify(filter);\n\t},\n\n\tgetStandardPeriods(){\n\t\treturn {\n\t\t\t'cal_Today': [moment(), moment()],\n\t\t\t'cal_Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n\t\t\t'cal_LastWeek': [moment().subtract(6, 'days'), moment()],\n\t\t\t'cal_Last30Days': [moment().subtract(29, 'days'), moment()],\n\t\t\t'cal_ThisMonth': [moment().startOf('month'), moment().endOf('month')],\n\t\t\t'cal_LastMonth': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n\t\t}\n\t},\n\n\tsaveSearchSettings() {\n\t\tlet search = ModuleExtendedCDRs.getSearchText(true, true);\n\t\tlet currentVariantId = $('#currentVariantId').val();\n\t\tlet reportId = $('#currentReportNameID').val();\n\t\tlet variantName = '';\n\t\tlet minBillSec = $('#currentMinBillSec').val() || 0;\n\t\tlet minBillSecComp = $('#currentMinBillSecComp').dropdown('get value') || $('#currentMinBillSecComp').attr('data-value') || '>';\n\t\t\n\t\tlet data = {\n\t\t\t'search[value]': search,\n\t\t\t'reportNameID': reportId,\n\t\t\t'variantId': \tcurrentVariantId,\n\t\t\t'variantName': \tvariantName,\n\t\t\t'minBillSec': \tminBillSec,\n\t\t\t'minBillSecComp': minBillSecComp\n\t\t};\n\t\tif(currentVariantId !== ''){\n\t\t\tlet parent = $(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportId}\"]`);\n\t\t\tdata.variantName = parent.find('div.title').text().trim();\n\n\t\t\tdata.sendingScheduledReport = parent.attr('data-sending-scheduled-report').trim();\n\t\t\tdata.dateMonth = parent.attr('data-date-month').trim();\n\t\t\tdata.day = parent.attr('data-day').trim();\n\t\t\tdata.time = parent.attr('data-time').trim();\n\t\t\tdata.email = parent.attr('data-email').trim();\n\t\t}\n\n\t\t$.ajax({\n\t\t\turl: `${globalRootUrl}${idUrl}/saveSearchSettings`,\n\t\t\ttype: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n\t\t\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t\t},\n\t\t\tdata: data,\n\t\t\tsuccess: function(response) {\n\t\t\t\tif(currentVariantId === ''){\n\t\t\t\t\t$(`#${$('#currentReportNameID').val()}`).attr('data-search-text', encodeURIComponent(search));\n\t\t\t\t\t$(`#${$('#currentReportNameID').val()}`).attr('data-min-bill-sec', minBillSec);\n\t\t\t\t\t$(`#${$('#currentReportNameID').val()}`).attr('data-min-bill-sec-comp', minBillSecComp);\n\t\t\t\t}else{\n\t\t\t\t\t$(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportId}\"]`).attr('data-search-text', encodeURIComponent(search));\n\t\t\t\t\t$(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportId}\"]`).attr('data-min-bill-sec', minBillSec);\n\t\t\t\t\t$(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportId}\"]`).attr('data-min-bill-sec-comp', minBillSecComp);\n\t\t\t\t}\n\t\t\t},\n\t\t\terror: function(xhr, status, error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t});\n\t},\n\n\tstartCreateExcelPDF(type) {\n\t\tconst reportNameID \t = $('#currentReportNameID').val();\n\t\tconst currentVariantId = $('#currentVariantId').val();\n\t\tlet title = '';\n\t\tif(currentVariantId === ''){\n\t\t\ttitle= $(`#${$('#currentReportNameID').val()} div.content`).text().trim();\n\t\t}else{\n\t\t\ttitle=$(`a[data-variant-id=\"${currentVariantId}\"][data-report-id=\"${reportNameID}\"] div.title`).text().trim();\n\t\t}\n\n\t\tconst encodedSearch = encodeURIComponent(ModuleExtendedCDRs.getSearchText());\n\t\tconst url = `${window.location.origin}/pbxcore/api/modules/${className}/exportHistory?reportNameID=${reportNameID}&type=${type}&search=${encodedSearch}&title=`+encodeURIComponent(title);\n\t\twindow.open(url, '_blank');\n\t},\n\n\tgetMaxWidth(data, key) {\n\t\t// Получаем максимальную длину содержимого в столбце\n\t\tlet maxLength = key.length; // начинаем с длины заголовка\n\t\tdata.forEach(row => {\n\t\t\tlet length = (row[key] || '').toString().length;\n\t\t\tif (length > maxLength) maxLength = length;\n\t\t});\n\t\treturn maxLength;\n\t},\n\n\tstartDownload(){\n\t\tlet startTime = ModuleExtendedCDRs.$dateRangeSelector.attr('data-start');\n\t\tlet endTime = ModuleExtendedCDRs.$dateRangeSelector.attr('data-end');\n\t\tif(startTime === undefined){\n\t\t\tstartTime = moment().format('YYYY-MM-DD');\n\t\t\tendTime = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')\n\t\t}\n\t\tlet typeRec = 'inner';\n\t\tif($('#allRecord').checkbox('is checked')){\n\t\t\ttypeRec = 'all';\n\t\t}else if($('#outRecord').checkbox('is checked')){\n\t\t\ttypeRec = 'out';\n\t\t}\n\t\tlet numbers = ModuleExtendedCDRs.$globalSearch.val();\n\t\twindow.open('/pbxcore/api/modules/'+className+'/downloads?start='+startTime+'&end='+endTime+\"&numbers=\"+encodeURIComponent(numbers)+\"&type=\"+typeRec, '_blank');\n\t},\n\n\tstartDownloadHistory(){\n\t\tlet startTime = ModuleExtendedCDRs.$dateRangeSelector.attr('data-start');\n\t\tlet endTime = ModuleExtendedCDRs.$dateRangeSelector.attr('data-end');\n\t\tif(startTime === undefined){\n\t\t\tstartTime = moment().format('YYYY-MM-DD');\n\t\t\tendTime = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')\n\t\t}\n\t\tlet typeRec = 'inner';\n\t\tif($('#allRecord').checkbox('is checked')){\n\t\t\ttypeRec = 'all';\n\t\t}else if($('#outRecord').checkbox('is checked')){\n\t\t\ttypeRec = 'out';\n\t\t}\n\t\tlet numbers = ModuleExtendedCDRs.$globalSearch.val();\n\t\twindow.open('/pbxcore/api/modules/'+className+'/downloads-history?start='+startTime+'&end='+endTime+\"&numbers=\"+encodeURIComponent(numbers)+\"&type=\"+typeRec, '_blank');\n\t},\n\n\t/**\n\t * Подготавливает список выбора\n\t * @param selected\n\t * @returns {[]}\n\t */\n\tmakeDropdownList(selectType, selected) {\n\t\tconst values = [\n\t\t\t{\n\t\t\t\tname: ' --- ',\n\t\t\t\tvalue: '',\n\t\t\t\tselected: ('' === selected),\n\t\t\t}\n\t\t];\n\t\t$('#'+selectType+' option').each((index, obj) => {\n\t\t\tvalues.push({\n\t\t\t\tname: obj.text,\n\t\t\t\tvalue: obj.value,\n\t\t\t\tselected: (selected === obj.value),\n\t\t\t});\n\t\t});\n\t\treturn values;\n\t},\n\n\t/**\n\t * Обработка изменения группы в списке\n\t */\n\tchangeGroupInList(value, text, choice) {\n\t\tlet tdInput = $(choice).closest('td').find('input');\n\t\ttdInput.attr('data-value', \tvalue);\n\t\ttdInput.attr('value', \t\tvalue);\n\t\tlet currentRowId = $(choice).closest('tr').attr('id');\n\t\tlet tableName = $(choice).closest('table').attr('id').replace('-table', '');\n\t\tif (currentRowId !== undefined && tableName !== undefined) {\n\t\t\twindow[className].sendChangesToServer(tableName, currentRowId);\n\t\t}\n\t},\n\n\t/**\n\t * Send command to restart module workers after data changes,\n\t * Also we can do it on TemplateConf->modelsEventChangeData method\n\t */\n\tapplyConfigurationChanges() {\n\t\twindow[className].changeStatus('Updating');\n\t\t$.api({\n\t\t\turl: `${Config.pbxUrl}/pbxcore/api/modules/`+className+`/reload`,\n\t\t\ton: 'now',\n\t\t\tsuccessTest(response) {\n\t\t\t\t// test whether a JSON response is valid\n\t\t\t\treturn Object.keys(response).length > 0 && response.result === true;\n\t\t\t},\n\t\t\tonSuccess() {\n\t\t\t\twindow[className].changeStatus('Connected');\n\t\t\t},\n\t\t\tonFailure() {\n\t\t\t\twindow[className].changeStatus('Disconnected');\n\t\t\t},\n\t\t});\n\t},\n\n\t/**\n\t * We can modify some data before form send\n\t * @param settings\n\t * @returns {*}\n\t */\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = window[className].$formObj.form('get values');\n\t\treturn result;\n\t},\n\n\t/**\n\t * Some actions after forms send\n\t */\n\tcbAfterSendForm() {\n\t\twindow[className].applyConfigurationChanges();\n\t},\n\n\t/**\n\t * Initialize form parameters\n\t */\n\tinitializeForm() {\n\t\tForm.$formObj = window[className].$formObj;\n\t\tForm.url = `${globalRootUrl}${idUrl}/save`;\n\t\tForm.validateRules = window[className].validateRules;\n\t\tForm.cbBeforeSendForm = window[className].cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = window[className].cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n\n\t/**\n\t * Update the module state on form label\n\t * @param status\n\t */\n\tchangeStatus(status) {\n\t\tswitch (status) {\n\t\t\tcase 'Connected':\n\t\t\t\twindow[className].$moduleStatus\n\t\t\t\t\t.removeClass('grey')\n\t\t\t\t\t.removeClass('red')\n\t\t\t\t\t.addClass('green');\n\t\t\t\twindow[className].$moduleStatus.html(globalTranslate.module_export_recordsConnected);\n\t\t\t\tbreak;\n\t\t\tcase 'Disconnected':\n\t\t\t\twindow[className].$moduleStatus\n\t\t\t\t\t.removeClass('green')\n\t\t\t\t\t.removeClass('red')\n\t\t\t\t\t.addClass('grey');\n\t\t\t\twindow[className].$moduleStatus.html(globalTranslate.module_export_recordsDisconnected);\n\t\t\t\tbreak;\n\t\t\tcase 'Updating':\n\t\t\t\twindow[className].$moduleStatus\n\t\t\t\t\t.removeClass('green')\n\t\t\t\t\t.removeClass('red')\n\t\t\t\t\t.addClass('grey');\n\t\t\t\twindow[className].$moduleStatus.html(`${globalTranslate.module_export_recordsUpdateStatus}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twindow[className].$moduleStatus\n\t\t\t\t\t.removeClass('green')\n\t\t\t\t\t.removeClass('red')\n\t\t\t\t\t.addClass('grey');\n\t\t\t\twindow[className].$moduleStatus.html(globalTranslate.module_export_recordsDisconnected);\n\t\t\t\tbreak;\n\t\t}\n\t},\n};\n\n$(document).ready(() => {\n\twindow[className].initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/public/assets/js/src/module-export-records-index.js b/public/assets/js/src/module-export-records-index.js index 0fcf6f2..da1fd19 100644 --- a/public/assets/js/src/module-export-records-index.js +++ b/public/assets/js/src/module-export-records-index.js @@ -874,6 +874,12 @@ const ModuleExtendedCDRs = { url: `${globalRootUrl}${idUrl}/getState`, method: 'GET', success: function(response) { + // Проверяем существование stateData и его свойств + if (!response.stateData || typeof response.stateData.lastId === 'undefined' || typeof response.stateData.nowId === 'undefined') { + divProgress.hide(); + return; + } + if(response.stateData.lastId - response.stateData.nowId > 0){ divProgress.show(); }else{ From 4c1293aa8e28baa3c796e45cdf27463c54cc935e Mon Sep 17 00:00:00 2001 From: Everton Massen Goncalves Date: Fri, 8 May 2026 18:17:04 +0000 Subject: [PATCH 3/5] Translated using Weblate (Portuguese (Brazil)) Currently translated at 81.8% (54 of 66 strings) Translation: MIKOPBX/ModuleExtendedCDRs Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleextendedcdrs/pt_BR/ --- Messages/pt_BR.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Messages/pt_BR.php b/Messages/pt_BR.php index fa9803e..c49ccde 100644 --- a/Messages/pt_BR.php +++ b/Messages/pt_BR.php @@ -43,7 +43,7 @@ 'repModuleExtendedCDRs_syncState' => 'Progresso do download do histórico de chamadas: {valor} de {total} registros', 'repModuleExtendedCDRs_outgoingEmployeeCalls_countCalls' => 'Quantidade', 'repModuleExtendedCDRs_CallDetails' => 'Registro de chamadas', - 'repModuleExtendedCDRs_OutgoingEmployeeCalls' => 'Funcionários cessantes', + 'repModuleExtendedCDRs_OutgoingEmployeeCalls' => 'Chamadas de saída de ramais', 'repModuleExtendedCDRs_Form_titleReportError' => 'O nome não pode estar vazio!', 'repModuleExtendedCDRs_Form_minBillSecError' => 'O valor mínimo de duração deve estar entre 0 e 1000.', 'repModuleExtendedCDRs_Form_minBillSec_s' => 'Com.', From ed5d13956f240c940289a434c40eebf74372bc3d Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Tue, 30 Jun 2026 16:38:29 +0300 Subject: [PATCH 4/5] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=BE=D1=80=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D1=82=D0=BD=D0=BE=D0=B5=20=D1=81=D0=BE=D0=BF=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20DID=20=D1=81?= =?UTF-8?q?=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BD=D0=BE=D0=BC=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=B9=D0=B4=D0=B5=D1=80=D0=B0=20=D0=B2=20?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D0=BE=D1=80=D0=B8=D0=B8=20=D0=B7=D0=B2=D0=BE?= =?UTF-8?q?=D0=BD=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Несколько учёток одного провайдера приходят на одну линию и различаются только по DID (ограничение Asterisk). Теперь имя линии в отчёте подбирается по совпадению DID входящего звонка с username учётки провайдера, с откатом на прежнее сопоставление по uniqid линии. Учтены краевые случаи: липкость имени между плечами звонка, защита от обнуления lineId, только входящие звонки, пустой description, коллизии одинаковых логинов. --- Lib/GetReport.php | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/Lib/GetReport.php b/Lib/GetReport.php index fc1f183..80046b4 100644 --- a/Lib/GetReport.php +++ b/Lib/GetReport.php @@ -303,8 +303,24 @@ private function prepareCdrData($selectedRecords):array $providers = Sip::find("type='friend'"); $providerName = []; + $providerNameByLogin = []; foreach ($providers as $provider) { $providerName[$provider->uniqid] = $provider->description; + // Несколько учёток одного провайдера приходят на одну линию и различаются только по DID. + // Строим карту "логин провайдера (username) => название" для приоритетного сопоставления по DID. + $login = (string)$provider->username; + if ($login === '') { + continue; + } + if (array_key_exists($login, $providerNameByLogin)) { + // Один и тот же логин у нескольких учёток — сопоставление по DID неоднозначно, + // отключаем его для этого логина (null), чтобы не показать чужого провайдера. + if ($providerNameByLogin[$login] !== $provider->description) { + $providerNameByLogin[$login] = null; + } + } else { + $providerNameByLogin[$login] = $provider->description; + } } unset($providers); @@ -336,6 +352,9 @@ private function prepareCdrData($selectedRecords):array CallHistory::CALL_TYPE_MISSED => Util::translate('repModuleExtendedCDRs_cdr_CALL_TYPE_MISSED', false), ]; + // Запоминаем linkedid, у которых имя линии уже определено по DID, чтобы поздние плечи его не затирали. + $lineFixedByDid = []; + foreach ($selectedRecords as $arrRecord) { $record = (object)$arrRecord; if (!array_key_exists($record->linkedid, $arrCdr)) { @@ -352,10 +371,27 @@ private function prepareCdrData($selectedRecords):array $linkedRecord->typeCallDesc = $typeCallNames[$record->typeCall]; $linkedRecord->waitTime = intval($record->waitTime); - $newLine = $providerName[$record->line] ?? $record->line; - if(!empty($newLine)){ - $linkedRecord->line = $providerName[$record->line] ?? $record->line; - $linkedRecord->lineId = $record->line; + // Приоритет: если DID входящего звонка совпадает с логином (username) учётки провайдера — + // показываем именно её. Так различаются несколько учёток одного провайдера на одной линии + // (ограничение Asterisk: плечи приходят на один peer и отличаются только по DID). + $didName = ''; + if ($record->typeCall === CallHistory::CALL_TYPE_INCOMING + && !empty($record->did) + && !empty($providerNameByLogin[$record->did])) { + $didName = $providerNameByLogin[$record->did]; + } + if ($didName !== '') { + $linkedRecord->line = $didName; + if (!empty($record->line)) { + $linkedRecord->lineId = $record->line; + } + $lineFixedByDid[$record->linkedid] = true; + } elseif (empty($lineFixedByDid[$record->linkedid])) { + $newLine = $providerName[$record->line] ?? $record->line; + if(!empty($newLine)){ + $linkedRecord->line = $newLine; + $linkedRecord->lineId = $record->line; + } } $linkedRecord->disposition = $linkedRecord->disposition !== 'ANSWERED' ? $disposition : 'ANSWERED'; $linkedRecord->start = $linkedRecord->start === '' ? $record->start : $linkedRecord->start; From 40d2d3bdc4ff37055b114bfcba360c7a9a6cbdc6 Mon Sep 17 00:00:00 2001 From: boffart <5922739+boffart@users.noreply.github.com> Date: Wed, 1 Jul 2026 13:59:44 +0300 Subject: [PATCH 5/5] =?UTF-8?q?=D0=9A=D0=B0=D1=80=D0=B0=D0=BD=D1=82=D0=B8?= =?UTF-8?q?=D0=BD=20=D1=80=D0=B0=D0=B7=D0=B4=D1=83=D1=82=D1=8B=D1=85=20lin?= =?UTF-8?q?kedid=20=D0=B4=D0=BB=D1=8F=20=D1=83=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE?= =?UTF-8?q?=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20CDR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Синхронизация вставала навсегда, когда один linkedid (зависший канал: конференция, парковка, MOH) накапливал >= 5000 CDR-строк и упирался в потолок выборки ядра (SelectCDR MAX_QUERY_LIMIT). Обрезка отдавала самые старые 5000 строк, offset не мог продвинуться за такой звонок. Решение — служебная таблица oversized_linkedids: звонки, достигшие потолка 5000 строк, детектируются, их первые 5000 строк сохраняются один раз, а сам linkedid исключается из последующих выборок (NOT IN). offset удерживается на цикл детекта, чтобы не потерять вытесненные обычные звонки. - Models/OversizedLinkedIds: новая модель + статическое создание таблицы - HistoryParser: MAX_LINKEDID_ROWS, параметр исключений в getHistoryData, getActiveLinkedIds (с сигналом успеха запроса) - ConnectorDB: детект/фиксация oversized, удержание offset, часовая очистка завершённых звонков, session-only набор при сбое записи - SyncRecords: проброс списка исключений, чтобы webhook-воркер не застревал --- Lib/HistoryParser.php | 58 +++++++++++- Models/OversizedLinkedIds.php | 101 +++++++++++++++++++++ bin/ConnectorDB.php | 160 +++++++++++++++++++++++++++++++++- bin/SyncRecords.php | 29 +++++- 4 files changed, 344 insertions(+), 4 deletions(-) create mode 100644 Models/OversizedLinkedIds.php diff --git a/Lib/HistoryParser.php b/Lib/HistoryParser.php index d055a9d..5248e37 100644 --- a/Lib/HistoryParser.php +++ b/Lib/HistoryParser.php @@ -32,6 +32,15 @@ class HistoryParser { public const LIMIT_CDR = 100; + + /** + * Потолок числа строк на один linkedid. + * ВАЖНО: должен совпадать с MikoPBX\...\WorkerCallEvents\SelectCDR::MAX_QUERY_LIMIT (5000). + * Если ядро изменит лимит выборки — синхронизировать это значение. + * linkedid, достигший этого числа строк, считается "раздутым" (зависший канал) + * и исключается из синхронизации, см. Models\OversizedLinkedIds. + */ + public const MAX_LINKEDID_ROWS = 5000; public const CDR_SYNC_PROGRESS_KEY = "cdrSyncProgress"; /** @@ -39,8 +48,9 @@ class HistoryParser * @param array $filter An array of filter parameters. * @return array An array of CDR data. */ - public static function getCdr(array $filter = []): array + public static function getCdr(array $filter = [], ?bool &$requestOk = null): array { + $requestOk = false; if (empty($filter)) { $filter = [ 'work_completed<>1 AND endtime<>""', @@ -61,6 +71,7 @@ public static function getCdr(array $filter = []): array try { [$result, $message] = $client->sendRequest(json_encode($filter), 30); if ($result!==false){ + $requestOk = true; $filename = json_decode($message, true, 512, JSON_THROW_ON_ERROR); } } catch (\Throwable $e) { @@ -105,7 +116,7 @@ public static function getQueues():array * @param int $offset * @return void */ - public static function getHistoryData(int $offset = 1):array + public static function getHistoryData(int $offset = 1, array $excludeLinkedIds = []):array { $filter = [ "type = :extType:", @@ -137,6 +148,13 @@ public static function getHistoryData(int $offset = 1):array 'add_pack_query' => $add_query, ]; + // Исключаем "раздутые" linkedid (зависшие каналы >= MAX_LINKEDID_ROWS строк), + // иначе они съедают потолок выборки ядра (5000 строк) и блокируют offset. + if (!empty($excludeLinkedIds)) { + $filter[0] .= ' AND linkedid NOT IN ({exclude:array})'; + $filter['bind']['exclude'] = array_values($excludeLinkedIds); + } + $cdrData = self::getCdr($filter); $resultRows = []; if(count($cdrData)>0){ @@ -270,6 +288,42 @@ public static function getHistoryData(int $offset = 1):array return ['data' => $resultRows, 'newOffset' => $calculatedOffset ?? $offset]; } + /** + * Из переданного списка linkedid возвращает те, у которых ещё есть CDR-строки + * с id больше offset (т.е. звонок всё ещё активен/не пройден синхронизацией). + * Используется для очистки списка "раздутых" linkedid: завершённые звонки, + * оставшиеся позади offset, можно удалить из исключений. + * + * @param string[] $linkedIds + * @param int $offset + * @return string[]|null Список активных linkedid, либо null если запрос к ядру не выполнился. + */ + public static function getActiveLinkedIds(array $linkedIds, int $offset):?array + { + if (empty($linkedIds)) { + return []; + } + $filter = [ + 'id>:id: AND linkedid IN ({linkedid:array})', + 'bind' => [ + 'id' => $offset, + 'linkedid' => array_values($linkedIds), + ], + 'order' => 'linkedid', + 'group' => 'linkedid', + 'columns' => 'linkedid', + 'limit' => count($linkedIds), + ]; + $requestOk = false; + $rows = self::getCdr($filter, $requestOk); + if (!$requestOk) { + // Запрос к ядру не выполнился — сигнализируем вызывающему, чтобы он + // не принял пустой результат за "нет активных" и не удалил исключения. + return null; + } + return array_values(array_filter(array_column($rows, 'linkedid'))); + } + /** * Возвращает данные последней CDR ID и START. * @return array diff --git a/Models/OversizedLinkedIds.php b/Models/OversizedLinkedIds.php new file mode 100644 index 0000000..82cbc85 --- /dev/null +++ b/Models/OversizedLinkedIds.php @@ -0,0 +1,101 @@ +has(CdrDbProvider::SERVICE_NAME)) { + $di->register(new CdrDbProvider()); + } + $db = $di->getShared(CdrDbProvider::SERVICE_NAME); + $db->execute("CREATE TABLE IF NOT EXISTS oversized_linkedids ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + linkedid TEXT NOT NULL UNIQUE, + rowCount INTEGER DEFAULT 0, + maxId INTEGER DEFAULT 0, + detectedAt TEXT DEFAULT '' + )"); + } + + /** + * Initialize model. + */ + public function initialize(): void + { + $this->setSource('oversized_linkedids'); + parent::initialize(); + $this->useDynamicUpdate(true); + if (!$this->di->has(CdrDbProvider::SERVICE_NAME)) { + $this->di->register(new CdrDbProvider()); + } + $this->setConnectionService(CdrDbProvider::SERVICE_NAME); + } +} diff --git a/bin/ConnectorDB.php b/bin/ConnectorDB.php index 202b45d..c236ea3 100644 --- a/bin/ConnectorDB.php +++ b/bin/ConnectorDB.php @@ -35,6 +35,7 @@ use Modules\ModuleExtendedCDRs\Models\CallQueuesHistory; use Modules\ModuleExtendedCDRs\Models\DailyCallStats; use Modules\ModuleExtendedCDRs\Models\ModuleExtendedCDRs; +use Modules\ModuleExtendedCDRs\Models\OversizedLinkedIds; use Phalcon\Db\Enum; use DateTime; use Throwable; @@ -52,6 +53,13 @@ class ConnectorDB extends WorkerBase private int $lastSyncTime = 0; private Mp3TagService $mp3TagService; + /** @var string[] Кэш списка "раздутых" linkedid, исключённых из синхронизации. */ + private array $oversizedCache = []; + /** @var string[] linkedid, добавленные в память при неуспешной записи в БД (session-only). */ + private array $oversizedPending = []; + private int $oversizedCacheTime = 0; + private int $oversizedPruneTime = 0; + /** * Белый список методов, разрешённых для вызова через onEvents/invoke. */ @@ -92,6 +100,7 @@ public function start($argv):void $this->mp3TagService = new Mp3TagService(dirname(__DIR__)); $this->logger->writeInfo('Starting...'); $this->ensureDailyStatsTableExists(); + $this->ensureOversizedTableExists(); $this->updateSettings(); $beanstalk = new BeanstalkClient(self::class); $beanstalk->subscribe(self::class, [$this, 'onEvents']); @@ -99,6 +108,7 @@ public function start($argv):void while ($this->needRestart === false) { try { $this->syncCdrData(); + $this->pruneOversizedLinkedIds(); }catch (Throwable $exception){ $this->logger->writeError("Throwable:".$exception->getMessage(). ' Line: '.$exception->getLine()); } @@ -296,7 +306,7 @@ public function syncCdrData(bool $force = false):void $oldOffset = $this->cdrOffset; $this->logger->writeInfo('...Start sync with offset...'. $oldOffset); - $historyResult = HistoryParser::getHistoryData($this->cdrOffset); + $historyResult = HistoryParser::getHistoryData($this->cdrOffset, $this->loadOversizedLinkedIds()); $cdrData = $historyResult['data']; $parsedOffset = $historyResult['newOffset']; $totalRows = array_sum(array_map(fn($cdr) => count($cdr['rows'] ?? []), $cdrData)); @@ -312,6 +322,7 @@ public function syncCdrData(bool $force = false):void $incomingLinkedIds = []; $normalLinkedIds = []; $heavyLinkedIds = []; + $newOversizedLinkedIds = []; // linkedid, достигшие потолка 5000 строк (зависшие каналы) $normalUniqueIds = []; $allRowIds = []; // Все id для расчёта offset @@ -320,6 +331,11 @@ public function syncCdrData(bool $force = false):void $incomingLinkedIds[] = $linkedId; } $rowCount = count($cdr['rows'] ?? []); + if ($rowCount >= HistoryParser::MAX_LINKEDID_ROWS) { + // Раздутый linkedid: сохраним его первые 5000 строк этим циклом, + // занесём в служебную таблицу и исключим из последующих выборок. + $newOversizedLinkedIds[] = $linkedId; + } if ($rowCount > 100) { $heavyLinkedIds[] = $linkedId; } else { @@ -342,6 +358,11 @@ public function syncCdrData(bool $force = false):void $this->logger->writeInfo("Heavy linkedIds (>100 rows): " . count($heavyLinkedIds)); } + // Фиксируем "раздутые" linkedid, чтобы исключить их из следующих выборок. + if (!empty($newOversizedLinkedIds)) { + $this->persistOversizedLinkedIds($newOversizedLinkedIds, $cdrData); + } + // Batch загрузка CallQueuesHistory (1 запрос вместо N) $start = microtime(true); $existingQueues = []; @@ -469,6 +490,17 @@ public function syncCdrData(bool $force = false):void $this->updateRecallTransferStates($rowsToSave); $recallTransferTime = microtime(true) - $start; + // Если в этом цикле обнаружены новые "раздутые" linkedid — удерживаем offset. + // Потолок в 5000 строк был съеден зависшим звонком, поэтому обычные linkedid + // могли быть вытеснены из выборки. На следующем цикле запрос уже исключит + // oversized и продвинется без потери обычных звонков. + if (!empty($newOversizedLinkedIds)) { + $this->cdrOffset = $oldOffset; + $this->logger->writeInfo("Holding offset at $oldOffset: detected " . count($newOversizedLinkedIds) . " new oversized linkedId(s)"); + $this->logger->writeInfo("End sync with offset {$this->cdrOffset} (+0)"); + return; + } + // Применяем offset от getHistoryData после успешного сохранения $this->cdrOffset = $parsedOffset; @@ -946,6 +978,132 @@ private function ensureDailyStatsTableExists(): void $this->logger->writeInfo('Ensured daily_call_stats table exists'); } + /** + * Создаёт служебную таблицу oversized_linkedids если она не существует. + * @return void + */ + private function ensureOversizedTableExists(): void + { + OversizedLinkedIds::ensureTableExists(); + $this->logger->writeInfo('Ensured oversized_linkedids table exists'); + } + + /** + * Возвращает список "раздутых" linkedid (кэш обновляется не чаще раза в минуту). + * @return string[] + */ + private function loadOversizedLinkedIds(): array + { + if (time() - $this->oversizedCacheTime > 60) { + try { + $rows = OversizedLinkedIds::find(['columns' => 'linkedid']); + $dbList = array_column($rows->toArray(), 'linkedid'); + // Кэш = записи из БД ∪ session-only (не потерянные при неуспешном save()). + $this->oversizedCache = array_values(array_unique(array_merge($dbList, $this->oversizedPending))); + // Стамп времени только при успешной загрузке — иначе повторим на след. цикле. + $this->oversizedCacheTime = time(); + } catch (Throwable $e) { + $this->logger->writeError("loadOversizedLinkedIds: " . $e->getMessage()); + } + } + return $this->oversizedCache; + } + + /** + * Фиксирует новые "раздутые" linkedid в служебной таблице и в кэше. + * @param string[] $linkedIds + * @param array $cdrData Данные текущей выборки (для rowCount/maxId). + * @return void + */ + private function persistOversizedLinkedIds(array $linkedIds, array $cdrData): void + { + foreach ($linkedIds as $linkedId) { + if (in_array($linkedId, $this->oversizedCache, true)) { + continue; + } + $rows = $cdrData[$linkedId]['rows'] ?? []; + $rowCount = count($rows); + $maxId = 0; + foreach ($rows as $row) { + $maxId = max($maxId, (int)($row['id'] ?? 0)); + } + + $record = new OversizedLinkedIds(); + $record->linkedid = $linkedId; + $record->rowCount = $rowCount; + $record->maxId = $maxId; + $record->detectedAt = date('Y-m-d H:i:s'); + $saved = $record->save(); + + // В любом случае исключаем linkedid в пределах текущей сессии воркера, + // иначе сбой save() (блокировка БД, UNIQUE-коллизия) приведёт к бесконечному + // повторному детекту и вечному удержанию offset. + if (!in_array($linkedId, $this->oversizedCache, true)) { + $this->oversizedCache[] = $linkedId; + } + if ($saved) { + // Успешно записан — убираем из session-only набора, если был там. + $this->oversizedPending = array_values(array_diff($this->oversizedPending, [$linkedId])); + $this->logger->writeInfo("Oversized linkedId excluded from sync: $linkedId (rows=$rowCount, maxId=$maxId)"); + } else { + // Запись не удалась — держим в session-only наборе, чтобы кэш не потерял + // его при обновлении из БД (иначе трэшинг offset). Повторная запись — + // после перезапуска воркера через повторный детект. + if (!in_array($linkedId, $this->oversizedPending, true)) { + $this->oversizedPending[] = $linkedId; + } + $this->logger->writeError("Failed to persist oversized linkedId (excluded in-memory only): $linkedId (" . implode('; ', $record->getMessages()) . ")"); + } + } + } + + /** + * Периодически (не чаще раза в час) удаляет из списка исключений те linkedid, + * у которых больше нет CDR-строк с id > offset — т.е. завершённые звонки, + * оставшиеся позади текущей позиции синхронизации. Это ограничивает размер + * списка NOT IN активными "зависшими" звонками и не даёт ему расти бесконечно. + * @return void + */ + private function pruneOversizedLinkedIds(): void + { + if (time() - $this->oversizedPruneTime < 3600) { + return; + } + $this->oversizedPruneTime = time(); + + $stored = array_column(OversizedLinkedIds::find(['columns' => 'linkedid'])->toArray(), 'linkedid'); + if (empty($stored)) { + return; + } + + // Активные — те, у кого ещё есть строки за текущим offset. + // null означает сбой запроса к ядру (Beanstalk timeout) — в этом случае НЕ удаляем + // ничего, чтобы не разкарантинить активные зависшие звонки и не вызвать повторный стопор. + // Пустой массив [] означает, что запрос выполнился и активных действительно нет — + // тогда все устаревшие записи можно удалить. + $active = HistoryParser::getActiveLinkedIds($stored, $this->cdrOffset); + if ($active === null) { + return; + } + $toDelete = array_diff($stored, $active); + if (empty($toDelete)) { + return; + } + + $records = OversizedLinkedIds::find([ + 'linkedid IN ({ids:array})', + 'bind' => ['ids' => array_values($toDelete)], + ]); + foreach ($records as $record) { + $record->delete(); + } + + // Кэш = активные из БД ∪ session-only записи (последние в БД отсутствуют). + $this->oversizedCache = array_values(array_unique(array_merge($active, $this->oversizedPending))); + $this->oversizedCacheTime = time(); + $this->logger->writeInfo("Pruned oversized linkedIds: removed " . count($toDelete) . ", kept " . count($active)); + } + /** * Вычисляет статистику звонков за один день. * @param string $date Дата в формате 'YYYY-MM-DD' diff --git a/bin/SyncRecords.php b/bin/SyncRecords.php index d0cbac0..72f4195 100644 --- a/bin/SyncRecords.php +++ b/bin/SyncRecords.php @@ -31,6 +31,8 @@ use Modules\ModuleExtendedCDRs\Models\ExportResults; use Modules\ModuleExtendedCDRs\Models\ExportRules; use Modules\ModuleExtendedCDRs\Models\ModuleExtendedCDRs; +use Modules\ModuleExtendedCDRs\Models\OversizedLinkedIds; +use Throwable; use GuzzleHttp\Client; use GuzzleHttp\HandlerStack; @@ -47,6 +49,10 @@ class SyncRecords extends WorkerBase private array $rulesData = []; private array $rulesHeaders = []; + /** @var string[] Кэш "раздутых" linkedid (заполняется воркером ConnectorDB). */ + private array $oversizedCache = []; + private int $oversizedCacheTime = 0; + /** * Старт работы листнера. * @@ -57,6 +63,7 @@ public function start($argv):void $this->logger = new Logger('ConnectorDB', 'ModuleExtendedCDRs'); $this->logger->writeInfo('Starting...'); + OversizedLinkedIds::ensureTableExists(); $this->updateSettings(); $beanstalk = new BeanstalkClient(self::class); $beanstalk->subscribe(self::class, [$this, 'onEvents']); @@ -221,7 +228,7 @@ public function syncCdrData():void $oldOffset = max(HistoryParser::getMinCdrId(), $oldOffset); $this->logger->writeInfo('New offset...'. $oldOffset); - $historyResult = HistoryParser::getHistoryData($this->cdrOffset); + $historyResult = HistoryParser::getHistoryData($this->cdrOffset, $this->loadOversizedLinkedIds()); $cdrData = $historyResult['data']; @@ -258,6 +265,26 @@ public function syncCdrData():void } } + /** + * Возвращает список "раздутых" linkedid для исключения из выборки + * (таблицу oversized_linkedids наполняет воркер ConnectorDB). + * Кэш обновляется не чаще раза в минуту. + * @return string[] + */ + private function loadOversizedLinkedIds(): array + { + if (time() - $this->oversizedCacheTime > 60) { + try { + $rows = OversizedLinkedIds::find(['columns' => 'linkedid']); + $this->oversizedCache = array_column($rows->toArray(), 'linkedid'); + } catch (Throwable $e) { + $this->logger->writeError("loadOversizedLinkedIds: " . $e->getMessage()); + } + $this->oversizedCacheTime = time(); + } + return $this->oversizedCache; + } + /** * Повторная синхронизация неудачных * @return void