{"version":3,"file":"FluxView.min.js","sources":["EncompassWebServices/Reporting_ECP/FluxView.js"],"sourcesContent":["\"use strict\";\n\nclass EC_FluxView {\n constructor({ el, ReportID }) {\n this.Container = el;\n this.ReportID = ReportID;\n\n this._QueryStringMap = new Map();\n this._ParameterMap = new Map();\n }\n\n SetQueryString(name, value) {\n this._QueryStringMap.set(name, value);\n }\n\n SetParameter(name, value) {\n this._ParameterMap.set(name, value);\n }\n\n SetPinnedPeriod(selectAs, value) {\n this.SetParameter(selectAs, value);\n }\n\n SetPinnedFilter(selectAs, value) {\n this.SetParameter(selectAs, value);\n }\n\n SetPinnedVariable(selectAs, value) {\n this.SetParameter(selectAs, value);\n }\n\n _GetRequest() {\n const myRequest = new ECP.EC_Request(\"FusionView\");\n myRequest.SetReturnType(ECP.EC_ReturnType.Text);\n myRequest.AddRequestVariable(\"ReportID\", this.ReportID);\n\n this._QueryStringMap.forEach((value, key) => {\n myRequest.AddRequestVariable(key, value);\n });\n\n this._ParameterMap.forEach((value, key) => {\n myRequest.AddParameter(key, value);\n });\n\n return myRequest;\n }\n\n GetResult() {\n return this._GetRequest().Submit();\n }\n\n GetHtml() {\n this.SetQueryString(\"Format\", \"HTML\");\n this.SetQueryString(\"LoadData\", \"True\");\n\n return this._GetRequest().Submit();\n }\n\n GetJson() {\n this.SetQueryString(\"Format\", \"JSON\");\n return this._GetRequest().SetReturnType(ECP.EC_ReturnType.Json).Submit();\n }\n\n static FillToElements({ el, ReportID }) {\n return new Promise((resolve, reject) => {\n const myFluxView = new EC_FluxView({ el, ReportID });\n\n myFluxView.GetHtml().then((reportHtml) => {\n myFluxView.Container.innerHTML = reportHtml;\n\n resolve();\n }).catch(reject);\n });\n }\n}\n\nclass FluxDisplay {\n constructor({ el, ReportID, BaseReportID }) {\n this.Container = el;\n this.ReportID = ReportID;\n this.BaseReportID = BaseReportID;\n this.ParametersStr = null;\n this.Guid = EC_Fmt.Guid();\n this.DrillDownFilterCallBack = null;\n\n if (el) {\n el.setAttribute(\"guid\", this.Guid);\n this.table = el.querySelector(\"table.FusionTable\") || el;\n this.pinnedFiltersForm = el.querySelector(\".ecp-fusion-pinned-override\") || el;\n this.postToDashboardForm = el.querySelector(\".ecp-fusion-post-dashboard\") || el;\n }\n }\n\n Init() {\n const me = this;\n\n me.FixHeader();\n me.InitCharts();\n me.InitOrder();\n me.InitDrillDown();\n me.InitPostToDashboard();\n }\n\n SetDrillDownFilterCallBack(callback) {\n this.DrillDownFilterCallBack = callback;\n }\n\n FixHeader() {\n if (this.table) {\n const me = this;\n let headerHeight = -2;\n const headerRows = me.table.querySelectorAll(\"thead tr:not([rowtype=ReportHeader]\");\n for (let i = 0; i < headerRows.length; i++) {\n const headerCells = headerRows[i].querySelectorAll(\"th\");\n for (let j = 0; j < headerCells.length; j++) {\n const th = headerCells[j];\n // Task 957070: Allow user to freeze columns in Fusion so they always display on the left side while scrolling\n if (th.hasAttribute(\"sort-desc\")) {\n th.innerHTML = `
${th.innerHTML}
`;\n } else if (th.hasAttribute(\"sort-asc\")) {\n th.innerHTML = `
${th.innerHTML}
`;\n }\n th.classList.add(\"sticky\");\n th.style.top = `${headerHeight < 0 ? 0 : headerHeight}px`;\n\n const offsetHeight = th.offsetHeight;\n th.style.maxWidth = `${th.offsetWidth}px`;\n th.style.minHeight = `${offsetHeight}px`;\n // Task 998009: Fusion Report Header Cutting Off Column Names\n th.style.height = \"100%\";\n th.style.border = \"0px\";\n\n if (th.querySelector(\"input[type=checkbox]\")) {\n th.style.width = \"30px\";\n } else {\n th.style.width = `${th.offsetWidth}px`;\n th.style.overflow = \"hidden\";\n }\n }\n headerHeight += headerRows[i].offsetHeight;\n }\n\n const resizeReportHeader = () => {\n headerHeight = -2;\n for (let i = 0; i < headerRows.length; i++) {\n headerHeight += headerRows[i].offsetHeight;\n }\n\n headerHeight = Math.max(0, headerHeight);\n\n const styleName = `stickyHeaderStyle_${me.ReportID}`;\n\n let stickyHeaderStyle = me.Container.querySelector(`#${styleName}`);\n if (!stickyHeaderStyle) {\n stickyHeaderStyle = document.createElement(\"style\");\n stickyHeaderStyle.id = styleName;\n me.Container.appendChild(stickyHeaderStyle);\n }\n\n stickyHeaderStyle.innerHTML = `[guid='${me.Guid}'] .FusionTable .parentHeader{box-sizing:border-box} [guid='${me.Guid}'] .FusionTable .childHeader{box-sizing:border-box}`;\n\n let maxParentHeight = 0;\n const parentRows = me.table.querySelectorAll(\"tr[rowtype=Parent]\");\n for (let i = 0; i < parentRows.length; i++) {\n const parentCells = parentRows[i].querySelectorAll(\"td\");\n for (let j = 0; j < parentCells.length; j++) {\n parentCells[j].classList.add(\"sticky\", \"parentHeader\");\n }\n maxParentHeight = Math.max(parentRows[i].offsetHeight, maxParentHeight);\n }\n\n let maxChildHeight = 0;\n const childRows = me.table.querySelectorAll(\"tr[rowtype=Child]\");\n for (let i = 0; i < childRows.length; i++) {\n const childCells = childRows[i].querySelectorAll(\"td\");\n for (let j = 0; j < childCells.length; j++) {\n childCells[j].classList.add(\"sticky\", \"childHeader\");\n }\n maxChildHeight = Math.max(childRows[i].offsetHeight, maxChildHeight);\n }\n\n stickyHeaderStyle.innerHTML = `[guid='${me.Guid}'] .FusionTable .parentHeader{top:${headerHeight}px; height:${maxParentHeight}px; box-sizing:border-box} [guid='${me.Guid}'] .FusionTable .childHeader{top:${headerHeight + maxParentHeight}px; height:${maxChildHeight}px; box-sizing:border-box}`;\n };\n\n resizeReportHeader();\n\n // Task 699556: Fusion: Parent header collapses and hides text when scrolling\n let resizeReportHeaderTimer;\n window.addEventListener(\"resize\", () => {\n clearTimeout(resizeReportHeaderTimer);\n resizeReportHeaderTimer = setTimeout(() => {\n resizeReportHeader();\n }, 100);\n });\n\n // Task 753638: Allow users to sync the data warehouse on demand from the fusion 'Details' tab\n // Task 1012737: Move the 'Sync Now$' button in Fusion Edit to HTML.cs so that other developers can use it\n ECP.Tools.EventBus.On(\"DataWarehouseSynced\", async ({ _feature, tables }) => {\n const SyncTable = tables;\n const SyncTableArr = tables.split(\"^\");\n const target = document.querySelector(`.SyncedButton[SyncTable='${SyncTable}']`);\n let targetArr = document.querySelectorAll(\".SyncedButton[SyncTable]\");\n if (SyncTableArr.length > 1 || targetArr.length === 1) {\n if (document.getElementById(\"TabCacheAge\")) {\n EC_Fmt.TriggerEvent(document.getElementById(\"TabCacheAge\"), \"click\");\n }\n return;\n }\n if (target) {\n const GetTableSyncInfoAPI = new ECP.EC_Request(\"FusionView_GetTableSyncInfo\");\n GetTableSyncInfoAPI.SetReturnType(ECP.EC_ReturnType.Json);\n GetTableSyncInfoAPI.AddRequestVariable(\"TableName\", SyncTable, ECP.EC_Verb.Get);\n // Task 1049949: Auto clear the Report Cache if Sync Now is clicked via the ManualDatawarehouseSync permission.\n GetTableSyncInfoAPI.AddRequestVariable(\"ReportID\", EC_Fmt.GetPageParameter(\"ReportID\"), ECP.EC_Verb.Get);\n const TableSyncInfo = await GetTableSyncInfoAPI.Submit();\n document.querySelector(`.${SyncTable}State`).innerHTML = TableSyncInfo.SyncState;\n document.querySelector(`.${SyncTable}LastSyncTime`).innerHTML = TableSyncInfo.LastSyncTime;\n document.querySelector(`.${SyncTable}NextSyncTime`).innerHTML = TableSyncInfo.NextSyncTime;\n if (TableSyncInfo.SyncState !== \"Pending\") {\n target.remove();\n targetArr = document.querySelectorAll(\".SyncedButton[SyncTable]\");\n }\n if (targetArr.length === 2) {\n for (let i = 0; i < targetArr.length; i++) {\n const Targethtml = targetArr[i];\n if (EC_Fmt.Null2EmptyStr(Targethtml.getAttribute(\"SyncTable\")).includes(\"^\")) {\n Targethtml.remove();\n }\n }\n }\n }\n });\n }\n }\n\n InitCharts() {\n const me = this;\n const charts = me.Container.querySelectorAll(\"svg.ews-chart\");\n for (let i = 0; i < charts.length; i++) {\n const chartElement = charts[i];\n const graph = chartElement.closest(\".NoHover\");\n // Task 1161510: Javascript error 'Cannot read properties of null (reading 'getBoundingClientRect')' when drilling down on a fusion report on a dashboard\n const ReportContent = document.getElementById(\"ReportContent\");\n if (graph && ReportContent) {\n // Task 1124295: Default width of a graph on FusionView should be the width of the screen\n const width = ReportContent.getBoundingClientRect().width - 12 - 15; // 12px = padding on the graph, 15px = size of scroll bar\n let panelWidth = document.body.offsetWidth / 5;\n if (panelWidth < 345) {\n panelWidth = 345;\n }\n graph.style.width = `${width - (EC_Fmt.isMobile ? 0 : panelWidth)}px`;\n }\n EC_FluxGraph.initChart(chartElement);\n }\n const NoHover = me.Container.querySelector(\".NoHover\");\n if (NoHover) {\n const chartResize = EC_Fmt.HtmlStrToElement(\"
\");\n NoHover.appendChild(chartResize);\n chartResize.addEventListener(\"mousedown\", (event) => { ChartMousedown(event, NoHover); });\n NoHover.addEventListener(\"mouseenter\", (e) => {\n if (e.target && e.target.querySelector(\"svg.ews-chart\")) {\n chartResize.style.display = \"unset\";\n }\n });\n NoHover.addEventListener(\"mouseleave\", () => {\n chartResize.style.display = \"none\";\n });\n }\n\n function ChartMousedown(event, chart) {\n event.stopPropagation();\n event.preventDefault();\n\n const marginWidth = event.x - chart.offsetWidth;\n const marginHeight = event.y - chart.offsetHeight;\n let mousedownX;\n let mousedownY;\n const mousemoveHandle = (mouseEvent) => {\n mousedownX = mouseEvent.x - marginWidth;\n chart.style.width = `${mousedownX}px`;\n mousedownY = mouseEvent.y - marginHeight;\n chart.style.height = `${mousedownY}px`;\n };\n\n const mouseupHandle = () => {\n document.removeEventListener(\"mousemove\", mousemoveHandle);\n document.removeEventListener(\"mouseup\", mouseupHandle);\n chart.style.width = `${mousedownX}px`;\n chart.style.height = `${mousedownY}px`;\n const chartElement = chart.querySelector(\".draft-ecp-fusion-graph svg\") || chart.querySelector(\".ecp-fusion-graph svg\");\n chartElement.innerHTML = \"\";\n EC_FluxGraph.initChart(chartElement);\n };\n document.addEventListener(\"mousemove\", mousemoveHandle);\n document.addEventListener(\"mouseup\", mouseupHandle);\n }\n }\n\n InitOrder(onAfterSort) {\n const me = this;\n\n if (me.table) {\n const orderContainer = me.table.querySelectorAll(\"[rowtype=ColumnHeader] th\");\n for (let i = 0; i < orderContainer.length; i++) {\n if (EC_Fmt.isMobile) {\n orderContainer[i].addEventListener(\"click\", OrderEvent);\n } else {\n orderContainer[i].addEventListener(\"click\", OrderEvent);\n }\n }\n }\n\n function OrderEvent(e) {\n if (!e.target.classList.contains(\"ews-icon-insertsheet\")) {\n me.OrderReport(e.currentTarget, onAfterSort);\n }\n }\n }\n\n OrderReport(trigger, onAfterSort) {\n // Task 740331: Fusion View: Can not change Sort Order by clicking on Column Header\n const me = this;\n const field = trigger.getAttribute(\"field\");\n const dataTypeStr = trigger.getAttribute(\"dataType\");\n const elementtd = trigger.closest(\"th\");\n const ColumnIndex = Array.from(elementtd.parentElement.children).indexOf(elementtd); // get Column Index\n const goals = trigger.getAttribute(\"fusiongoals\") + trigger.getAttribute(\"fusionofgoals\");\n // Task 1132965: Fusion in Dashboard is not removed after sorting\n const HasSort = (trigger.hasAttribute(\"sort-desc\") || trigger.hasAttribute(\"sort-asc\")) ? \"HasSort\" : \"\"; // need Dashboard Fusion\n const FieldName = EC_Fmt.CssEscape(`OrderMenu_${me.ReportID}_${field}_${ColumnIndex}_${goals}_${HasSort}`);\n let OrderMenu = document.getElementById(FieldName);\n\n const AlreadyOpen = (OrderMenu && OrderMenu?.style.display !== \"none\");\n\n HideAllDivs();\n AllowHideAllDivs = false;\n const SortState = !trigger.matches(\"[sort]\");\n if (!OrderMenu) {\n const IsOrder = trigger.hasAttribute(\"order-trigger\");\n OrderMenu = document.createElement(\"div\");\n OrderMenu.id = `${FieldName}`;\n OrderMenu.classList.add(\"ColumnMenu\", \"OrderMenu\", \"Hideable\");\n let OrderMenuHtml = (IsOrder ? `${GetMenuItemHtml(EC_Fmt.DataTypeParse(dataTypeStr), SortState)}
` : \"\");\n OrderMenuHtml += GetMenuFreezeItemHtml();\n\n const ReportAuthentication = document.getElementById(\"report-OwnerAuthenticationID\");\n const GoalsTypeArr = [\"_Currency\", \"_Integer\", \"_Decimal\"];\n // Task 1116609: Freeze Pane on Dashboard with Multiple Fusion Reports\n if (!trigger.classList.contains(\"FusionOfGoals\")\n && (field.toLowerCase().indexOf(\"value\") > -1 || field.toLowerCase().indexOf(\"Column\") > -1)\n && GoalsTypeArr.includes(dataTypeStr)\n && ReportAuthentication\n && ReportAuthentication.value === AuthenticationID.toString()) {\n OrderMenuHtml += GetMenuGoalsItemHtml(trigger);\n }\n OrderMenu.innerHTML = OrderMenuHtml;\n document.body.appendChild(OrderMenu);\n if (IsOrder) {\n OrderMenu.querySelector(\".FusionSortAsc\").addEventListener(\"click\", () => {\n ExecuteSort(me.ReportID, me.BaseReportID, \"Asc\", onAfterSort);\n });\n OrderMenu.querySelector(\".FusionSortDesc\").addEventListener(\"click\", () => {\n ExecuteSort(me.ReportID, me.BaseReportID, \"Desc\", onAfterSort);\n });\n }\n // Task 742642: Fusion Edit: Design Order By Add new Field type for Order By Fields\n if (SortState && IsOrder) {\n OrderMenu.querySelector(\".FusionSortRemove\").addEventListener(\"click\", () => {\n ExecuteSort(me.ReportID, me.BaseReportID, \"\", onAfterSort);\n });\n }\n const FusionUnfreezeColumn = OrderMenu.querySelector(\".FusionUnfreezeColumn\") || OrderMenu.querySelector(\".FusionFreezeColumn\");\n const CurrentFusionTable = trigger.closest(\".FusionTable\");\n if (FusionUnfreezeColumn) {\n FusionUnfreezeColumn.addEventListener(\"click\", () => {\n ExecuteFloatColumn(FusionUnfreezeColumn, CurrentFusionTable);\n });\n }\n // Task 1091677: Fusion Goals: Allowing users to type-in and save goals for each row on a fusion report\n const FusionGoals = OrderMenu.querySelector(\"[FusionGoals=add]\");\n if (FusionGoals) {\n FusionGoals.addEventListener(\"click\", ExecuteGoals);\n }\n const HigherLower = OrderMenu.querySelectorAll(\"[FusionOfGoals]\");\n for (let i = 0; i < HigherLower.length; i++) {\n HigherLower[i].addEventListener(\"click\", HigherLowerclick);\n }\n const GoalsSaveDom = OrderMenu.querySelector(\"[FusionGoals=save]\");\n if (GoalsSaveDom) {\n GoalsSaveDom.addEventListener(\"click\", GoalsSave);\n }\n const GoalsEditDom = OrderMenu.querySelector(\"[FusionGoals=edit]\");\n if (GoalsEditDom) {\n GoalsEditDom.addEventListener(\"click\", GoalsEdit);\n }\n const GoalsRemoveDom = OrderMenu.querySelector(\"[FusionGoals=remove]\");\n if (GoalsRemoveDom) {\n GoalsRemoveDom.addEventListener(\"click\", GoalsRemove);\n }\n }\n\n if (!AlreadyOpen) {\n FluxDisplay.ShowPopMenu(trigger, OrderMenu);\n }\n\n function GetMenuItemHtml(dataType, ExistingSortState) {\n let htmlB = \"\";\n if (EC_Fmt.IsNumericDataType(dataType)) {\n htmlB += `
`\n + `
`;\n } else if (EC_Fmt.IsDateDataType(dataType)) {\n htmlB += `
`\n + `
`;\n } else {\n htmlB += `
`\n + `
`;\n }\n if (ExistingSortState) {\n htmlB += `
`;\n }\n return htmlB;\n }\n\n function GetMenuFreezeItemHtml(FreezeState) {\n let htmlB = \"\";\n if (FreezeState) {\n htmlB += `
`;\n } else {\n htmlB += `
`;\n }\n return htmlB;\n }\n\n // Task 957070: OCloud Fusion: similar to floating headers, allow frozen columns\n function ExecuteFloatColumn(el, FusionTable) {\n const ColumnI = EC_Fmt.Null2ZeroInt(el.getAttribute(\"columnindex\"));\n const RowArr = FusionTable.querySelectorAll(\"tr [rowtype=ColumnHeader],tr [rowtype=Detail],tr [rowtype=Parent],tr [rowtype=Child]\");\n // Task 1116609: Freeze Pane on Dashboard with Multiple Fusion Reports\n const ReportID = EC_Fmt.Null2ZeroInt(FusionTable.getAttribute(\"reportid\"));\n\n if (el.classList.contains(\"FusionUnfreezeColumn\")) {\n el.classList.remove(\"FusionUnfreezeColumn\");\n el.classList.add(\"FusionFreezeColumn\");\n el.innerHTML = \"\";\n const RemoveRowArr = FusionTable.querySelectorAll(`th.stickyleft[freezecolumn='${ColumnI}'], td.stickyleft[freezecolumn='${ColumnI}']`);\n for (let i = 0; i < RemoveRowArr.length; i++) {\n RemoveRowArr[i].classList.remove(\"stickyleft\");\n }\n } else {\n el.classList.remove(\"FusionFreezeColumn\");\n el.classList.add(\"FusionUnfreezeColumn\");\n el.innerHTML = \"\";\n\n for (let i = 0; i < RowArr.length; i++) {\n const rowType = RowArr[i].getAttribute(\"rowtype\");\n if ([\"ColumnHeader\", \"Parent\", \"Child\"].includes(rowType)) {\n RowArr[i].classList.add(\"FreezeColumn\");\n }\n const RowCell = RowArr[i].querySelectorAll(\"td,th\");\n RowCell[ColumnIndex].classList.add(\"stickyleft\");\n RowCell[ColumnIndex].classList.add(`stickyleft${ColumnIndex}`);\n RowCell[ColumnIndex].setAttribute(\"freezecolumn\", ColumnIndex);\n // Task 1083137: Scrolling down on a fusion report with a frozen column causes the header on the frozen column to be covered on iOS Safari\n if (EC_Fmt.Browser === ECP.Browser.Safari && rowType === \"ColumnHeader\") {\n RowCell[ColumnIndex].style.zIndex = 3;\n }\n }\n }\n if (RowArr[0]) {\n const stickyleftArr = RowArr[0].querySelectorAll(\".stickyleft\");\n let style = \"\";\n let setWidth = 0;\n for (let i = 0; i < stickyleftArr.length; i++) {\n style += `#Tab0 .FusionTable .stickyleft${stickyleftArr[i].getAttribute(\"freezecolumn\")}{left:${setWidth}px}`;\n setWidth += parseFloat(getComputedStyle(stickyleftArr[i]).width.replace(\"px\", \"\"));\n }\n const FusionFreezeColumnStyle = document.getElementById(`FusionFreezeColumnStyle${ReportID}`);\n if (FusionFreezeColumnStyle) {\n FusionFreezeColumnStyle.remove();\n }\n const printStyleEle = document.createElement(\"STYLE\");\n printStyleEle.setAttribute(\"type\", \"text/css\");\n printStyleEle.id = `FusionFreezeColumnStyle${ReportID}`;\n printStyleEle.innerHTML = style;\n FusionTable.appendChild(printStyleEle);\n }\n }\n\n async function ExecuteSort(reportId, baseReportID, direction, e) {\n direction = EC_Fmt.isNull(direction) ? \"\" : `${field}.${direction}`;\n // Task 1126762: Sorting on a drill-down report does not sort it\n let data = { ReportID: reportId, OrderBy: direction };\n if (!e) {\n ECP.Dialog.ShowLoading();\n const myRequest = new ECP.EC_Request(\"FluxEdit_OrderReport\");\n myRequest.AddRequestVariable(\"ReportID\", reportId, ECP.EC_Verb.Post);\n if (!EC_Fmt.isNull(me.BaseReportID)) {\n myRequest.AddRequestVariable(\"BaseReportID\", baseReportID, ECP.EC_Verb.Post);\n }\n myRequest.AddRequestVariable(\"OrderBy\", direction, ECP.EC_Verb.Post);\n data = await myRequest.Submit();\n }\n let redirect = true;\n if (e) {\n redirect = e(data);\n // Task 911769: Fusion Drill Down popup window sort column does not work\n const NewOrderMenu = document.getElementById(EC_Fmt.CssEscape(`OrderMenu_${reportId}_${field}`));\n if (NewOrderMenu) {\n NewOrderMenu.remove();\n }\n }\n if (redirect) {\n if (EC_Fmt.Null2ZeroInt(data.BaseReportID) > 0) {\n window.location.href = `Home?DashboardID=${ECP.CommonDashboards.FusionView}&ReportID=${data.ReportID}&BaseReportID=${data.BaseReportID}&OrderBy=${direction}&${EC_Fmt.Get_QueryString(\"DashboardID;ReportID;BaseReportID;OrderBy\")}`;\n } else {\n window.location.href = `Home?DashboardID=${ECP.CommonDashboards.FusionView}&ReportID=${data.ReportID}&OrderBy=${direction}&${EC_Fmt.Get_QueryString(\"DashboardID;ReportID;BaseReportID;OrderBy\")}`;\n }\n }\n }\n\n // Task 1091677: Fusion Goals: Allowing users to type-in and save goals for each row on a fusion report\n function GetMenuGoalsItemHtml(element) {\n const Field = element.getAttribute(\"field\");\n const IsFusionGoals = element.getAttribute(\"FusionGoals\");\n const IsFusionOfGoals = element.getAttribute(\"FusionOfGoals\");\n let html = `
`;\n if (IsFusionGoals) {\n if (IsFusionGoals.toLowerCase() === \"edit\") {\n html = `
`;\n } else if (IsFusionGoals.toLowerCase() === \"save\") {\n html = \"\";\n if (IsFusionOfGoals?.toLowerCase() === \"lower\") {\n html += `
`;\n } else {\n html += `
`;\n }\n html += `
`;\n } else if (IsFusionGoals.toLowerCase() === \"remove\") {\n html = `
`;\n }\n }\n return html;\n }\n\n function ExecuteGoals() {\n const el = this;\n const ColumnI = EC_Fmt.Null2ZeroInt(el.getAttribute(\"columnindex\"));\n const Field = el.getAttribute(\"field\");\n const FusionTable = document.querySelector(\"#Tab0 .FusionTable\");\n if (FusionTable?.querySelector(`th.FusionGoals[field=${Field}]`)) {\n return;\n }\n const thFusionGoals = FusionTable.querySelector(`th[field=${Field}]`);\n const datatype = thFusionGoals.getAttribute(\"datatype\") || \"_Integer\";\n thFusionGoals.setAttribute(\"FusionGoals\", \"remove\");\n const RowArr = FusionTable.querySelectorAll(\"tr [rowtype=ColumnHeader],tr [rowtype=Detail],tr [rowtype=Parent],tr [rowtype=Child]\");\n for (let i = 0; i < RowArr.length; i++) {\n const rowType = RowArr[i].getAttribute(\"rowtype\") === \"ColumnHeader\";\n\n const RowCell = RowArr[i].querySelectorAll(\"td,th\")[ColumnI];\n const NewGoals = RowCell.cloneNode();\n NewGoals.setAttribute(\"field\", Field);\n NewGoals.removeAttribute(\"order-trigger\");\n NewGoals.removeAttribute(\"sort\");\n const NewofGoals = NewGoals.cloneNode();\n NewGoals.setAttribute(\"FusionGoals\", \"\");\n if (rowType) {\n NewGoals.setAttribute(\"FusionGoals\", \"save\");\n NewGoals.setAttribute(\"FusionOfGoals\", \"higher\");\n\n NewGoals.classList.add(\"FusionGoals\");\n NewGoals.innerText = `(${RowCell.innerText}) Goals`;\n NewGoals.title = `(${RowCell.title}) Goals`;\n NewGoals.addEventListener(\"click\", (e) => { me.OrderReport(e.currentTarget); });\n\n NewofGoals.removeAttribute(\"fusiongoals\");\n NewofGoals.classList.add(\"FusionOfGoals\");\n NewofGoals.innerText = `(${RowCell.innerText}) % of Goals`;\n NewofGoals.title = `(${RowCell.title}) % of Goals`;\n NewofGoals.addEventListener(\"click\", (e) => { me.OrderReport(e.currentTarget); });\n } else {\n let goalsrowmd5 = RowArr[i].getAttribute(\"goalsrowmd5\");\n if (!goalsrowmd5) {\n let rowsting = RowArr[i].getAttribute(\"parent\");\n rowsting += RowArr[i].hasAttribute(\"child\") ? RowArr[i].getAttribute(\"child\") : \"\";\n rowsting += RowArr[i].hasAttribute(\"detail\") ? RowArr[i].getAttribute(\"detail\") : \"\";\n goalsrowmd5 = `_${EC_Fmt.MD5(rowsting.replaceAll(\"\\t\", \"\"))}`;\n }\n const GoalsInput = EC_Fmt.HtmlStrToElement(``); // type=number\n GoalsInput.addEventListener(\"change\", OfGoalsCompute);\n NewGoals.append(GoalsInput);\n NewofGoals.setAttribute(\"FusionOfGoals\", \"higher\");\n NewofGoals.classList.add(\"OfGoalsLower\");\n NewofGoals.innerHTML = \"0%\";\n }\n RowCell.parentElement.insertBefore(NewGoals, RowCell.nextSibling);\n NewGoals.parentElement.insertBefore(NewofGoals, NewGoals.nextSibling);\n }\n }\n function OfGoalsCompute() {\n const Field = this.getAttribute(\"field\");\n const tr = this.closest(\"tr\");\n const OfGoals = tr.querySelector(`[FusionOfGoals][field=${Field}]`);\n const GoalsHL = OfGoals.getAttribute(\"fusionofgoals\");\n const originalItem = tr.querySelector(`span[original][field=${Field}]`);\n const GoalsValue = EC_Fmt.CDec(this.value);\n const originalGoalsValue = EC_Fmt.CDec(originalItem.innerText);\n let OfGoalsValue = 0;\n if (OfGoals && originalGoalsValue !== 0 & GoalsValue !== 0) {\n OfGoalsValue = EC_Fmt.CDec((originalGoalsValue / GoalsValue * 100).toFixed(1));\n }\n if ((OfGoalsValue >= 100 && GoalsHL === \"higher\") || (OfGoalsValue > 100 && GoalsHL === \"lower\")) {\n OfGoals.classList.remove(\"OfGoalsLower\");\n OfGoals.classList.add(\"OfGoalsHigher\");\n } else {\n OfGoals.classList.remove(\"OfGoalsHigher\");\n OfGoals.classList.add(\"OfGoalsLower\");\n }\n OfGoals.innerHTML = `${OfGoalsValue}%`;\n }\n\n function HigherLowerclick() {\n const clickField = this.getAttribute(\"field\");\n const FusionTable = document.getElementById(\"Tab0\");\n const HigherLower = this.getAttribute(\"FusionOfGoals\").toLowerCase();\n const LowerArr = FusionTable.querySelectorAll(`td[field=${clickField}][FusionOfGoals], th[field=${clickField}][FusionOfGoals] `);\n for (let i = 0; i < LowerArr.length; i++) {\n if (EC_Fmt.Null2ZeroInt(LowerArr[i].innerText) !== 100) {\n LowerArr[i].setAttribute(\"FusionOfGoals\", HigherLower);\n }\n }\n }\n function GoalsEdit() {\n const el = this;\n const Field = el.getAttribute(\"field\");\n const FusionTable = document.getElementById(\"Tab0\");\n const GoalsArr = FusionTable.querySelectorAll(`td[fusiongoals] span[field=${field}]`);\n const fusiongoals = FusionTable.querySelector(`th[fusiongoals=edit][field=${field}]`);\n const datatype = fusiongoals.getAttribute(\"datatype\") || \"_Integer\";\n\n fusiongoals.setAttribute(\"fusiongoals\", \"save\");\n for (let i = 0; i < GoalsArr.length; i++) {\n const Item = GoalsArr[i];\n const Value = EC_Fmt.isNull(Item.innerText) ? \"\" : EC_Fmt.Null2ZeroInt(Item.innerText);\n const GoalsInput = EC_Fmt.HtmlStrToElement(``);\n Item.parentElement.append(GoalsInput);\n Item.remove();\n GoalsInput.addEventListener(\"change\", OfGoalsCompute);\n }\n }\n\n function GoalsRemove() {\n const thisme = this;\n const goalsField = thisme.getAttribute(\"field\");\n const FusionTable = document.getElementById(\"Tab0\");\n const FusionGoalsArr = FusionTable.querySelectorAll(`td[FusionGoals] span[field=${goalsField}], td[FusionGoals] input[field=${goalsField}]`);\n const FusionGoalsDic = [];\n for (let i = 0; i < FusionGoalsArr.length; i++) {\n const FusionGoalsItem = FusionGoalsArr[i];\n if (EC_Fmt.Null2ZeroInt(FusionGoalsItem.getAttribute(\"goalsid\")) > 0) {\n const GoalsDic = {\n GoalsID: FusionGoalsItem.getAttribute(\"goalsid\"),\n Goal: \"\"\n };\n FusionGoalsDic.push(GoalsDic);\n }\n }\n const myRequest = new ECP.EC_Request(\"FluxExtended_SaveGoals\");\n myRequest.AddRequestVariable(\"ReportID\", me.ReportID, ECP.EC_Verb.Get);\n myRequest.AddRequestVariable(\"FusionGoals\", JSON.stringify(FusionGoalsDic), ECP.EC_Verb.Post);\n myRequest.Submit().then(() => {\n const RemoveArr = FusionTable.querySelectorAll(`td[field=${goalsField}][fusiongoals],td[field=${field}][fusionofgoals],th.FusionGoals[field=${goalsField}],th.FusionOfGoals[field=${goalsField}`);\n for (let i = 0; i < RemoveArr.length; i++) {\n RemoveArr[i].remove();\n }\n FusionTable.querySelector(`th[field=${goalsField}][fusiongoals=remove]`).setAttribute(\"fusiongoals\", \"add\");\n LoadFusionGraph();\n ECP.Dialog.Alert(\"Delete Goals success.\");\n });\n }\n function GoalsSave() {\n const thisme = this;\n const goalsField = thisme.getAttribute(\"field\");\n const FusionTable = document.getElementById(\"Tab0\");\n const HigherLower = FusionTable.querySelector(`th[FusionOfGoals][field=${goalsField}]`).getAttribute(\"FusionOfGoals\");\n let FusionGoalsArr = FusionTable.querySelectorAll(`td[FusionGoals] input[field=${goalsField}]`);\n const FusionGoalsDic = [];\n for (let i = 0; i < FusionGoalsArr.length; i++) {\n const FusionGoalsItem = FusionGoalsArr[i];\n const value = EC_Fmt.CDec(FusionGoalsItem.value);\n const oldvalue = EC_Fmt.CDec(FusionGoalsItem.getAttribute(\"oldvalue\"));\n if ((!EC_Fmt.isNull(FusionGoalsItem.value) && value > 0 && value !== oldvalue) || EC_Fmt.Null2ZeroInt(FusionGoalsItem.getAttribute(\"goalsid\")) > 0) {\n const GoalsDic = {\n GoalsID: FusionGoalsItem.getAttribute(\"goalsid\"),\n ValueColumn: FusionGoalsItem.getAttribute(\"field\"),\n RowIdentifier: FusionGoalsItem.getAttribute(\"goalsrowmd5\"),\n Goal: value,\n HigherLower\n };\n FusionGoalsDic.push(GoalsDic);\n }\n }\n const myRequest = new ECP.EC_Request(\"FluxExtended_SaveGoals\");\n myRequest.AddRequestVariable(\"ReportID\", me.ReportID, ECP.EC_Verb.Get);\n myRequest.AddRequestVariable(\"FusionGoals\", JSON.stringify(FusionGoalsDic), ECP.EC_Verb.Post);\n myRequest.Submit().then((json) => {\n if (!EC_Fmt.isNull(json)) {\n for (let i = 0; i < json.length; i++) {\n const Item = json[i];\n const IsValidGoal = EC_Fmt.CDec(Item.Goal) !== 0;\n const GoalsSpan = EC_Fmt.HtmlStrToElement(`${Item.Goal}`);\n const FusionGoals = FusionTable.querySelector(`td[FusionGoals] input[field=${field}][goalsrowmd5=${Item.RowIdentifier}`);\n FusionGoals.parentElement.append(GoalsSpan);\n FusionGoals.remove();\n }\n }\n FusionGoalsArr = FusionTable.querySelectorAll(`td[FusionGoals] input[field=${field}]`);\n for (let i = 0; i < FusionGoalsArr.length; i++) {\n const FusionGoalsItem = FusionGoalsArr[i];\n const GoalsSpan = EC_Fmt.HtmlStrToElement(`${FusionGoalsItem.value}`);\n FusionGoalsItem.parentElement.append(GoalsSpan);\n FusionGoalsItem.remove();\n }\n const FusionGoalsTh = FusionTable.querySelector(`th[FusionGoals=save][field=${field}]`);\n FusionGoalsTh.setAttribute(\"fusiongoals\", \"edit\");\n\n LoadFusionGraph();\n });\n }\n\n function LoadFusionGraph() {\n let chart = me.Container.querySelector(\"svg.ews-chart\");\n if (!chart) {\n return;\n }\n chart = chart.closest(\".NoHover\");\n\n const chartElement = chart.querySelector(\".draft-ecp-fusion-graph svg\") || chart.querySelector(\".ecp-fusion-graph svg\");\n chartElement.innerHTML = \"\";\n EC_FluxGraph.initChart(chartElement);\n }\n }\n\n InitCollapsing(URLHash, Expand, callback) {\n // EC-12470\n const DataHtml = this.Container?.querySelector(\".FusionTable\") || this.Container;\n if (!DataHtml || DataHtml.querySelectorAll(`tr[rowtype=Parent],tr[rowtype=Child]`).length === 0) {\n return;\n }\n const ColumnHeader = DataHtml.querySelector(\"tr[rowtype=ColumnHeader] th\");\n const ParentArr = DataHtml.querySelectorAll(\"tr[rowtype=Parent]\");\n const ChildArr = DataHtml.querySelectorAll(\"tr[rowtype=Child]\");\n\n let ExpandedArr = [];\n if (!EC_Fmt.isNull(URLHash)) {\n ExpandedArr = EC_Fmt.GetURLParameters(URLHash).Expanded || \"\";\n ExpandedArr = ExpandedArr.split(\",\");\n for (let i = 0; ExpandedArr.length > i; i++) {\n if (i > 0 && !ExpandedArr[i].startsWith(\"Parent\")) {\n ExpandedArr[i - 1] = `${ExpandedArr[i - 1]},${ExpandedArr[i]}`;\n ExpandedArr.splice(i, 1);\n i--;\n }\n }\n } else if (Expand && !EC_Fmt.isNull(\"Expand\")) {\n switch (Expand.toString()) {\n case \"0\": {\n break;\n }\n case \"2\": {\n ExpandedArr.push(\"all\");\n break;\n }\n default: {\n if (ChildArr.length > 0) {\n const FirstChild = `${ChildArr[0].getAttribute(\"parent\")}|${ChildArr[0].getAttribute(\"child\")}`;\n ExpandedArr.push(FirstChild);\n }\n if (ParentArr.length > 0) {\n const FirstParent = `${ParentArr[0].getAttribute(\"parent\")}`;\n ExpandedArr.push(FirstParent);\n }\n break;\n }\n }\n }\n\n const IconHtml = EC_Fmt.HtmlStrToElement(\"
\"); // onclick='Collapsing(this);event.stopPropagation();'\n let IsColumnRotateicon = false;\n if (ChildArr.length > 0) {\n for (let i = 0; ChildArr.length > i; i++) {\n const Child = ChildArr[i];\n const IconHtmlNode = IconHtml.cloneNode();\n if (!ExpandedArr.includes(Child.getAttribute(\"parent\")) && !ExpandedArr.includes(\"all\")) {\n Child.classList.add(\"CollapseHidden\");\n } else if (ExpandedArr.includes(`${Child.getAttribute(\"parent\")}|${Child.getAttribute(\"child\")}`) || ExpandedArr.includes(\"all\")) {\n IconHtmlNode.classList.add(\"rotateicon\");\n IsColumnRotateicon = true;\n }\n const Childtd = Child.querySelector(\"td\");\n Childtd.insertBefore(IconHtmlNode, Childtd.firstChild);\n }\n }\n if (ParentArr.length > 0) {\n for (let i = 0; ParentArr.length > i; i++) {\n const Parent = ParentArr[i];\n const ParentTd = ParentArr[i].querySelector(\"td\");\n const IconHtmlNode = IconHtml.cloneNode();\n if (ExpandedArr.includes(Parent.getAttribute(\"parent\")) || ExpandedArr.includes(\"all\")) {\n IconHtmlNode.classList.add(\"rotateicon\");\n IsColumnRotateicon = true;\n }\n ParentTd.insertBefore(IconHtmlNode, ParentTd.firstChild);\n }\n }\n if (ParentArr.length > 0 || ChildArr.length > 0) {\n const DetailArr = DataHtml.querySelectorAll(\"tr[rowtype=Detail]\");\n for (let i = 0; DetailArr.length > i; i++) {\n const Detail = DetailArr[i];\n const ExpanStr = ChildArr.length > 0 ? `${Detail.getAttribute(\"parent\")}|${Detail.getAttribute(\"child\")}` : Detail.getAttribute(\"parent\");\n if (!ExpandedArr.includes(ExpanStr) && !ExpandedArr.includes(\"all\")) {\n Detail.classList.add(\"CollapseHidden\");\n } else {\n IsColumnRotateicon = true;\n }\n }\n }\n if (ColumnHeader) {\n const span = `${ColumnHeader.innerHTML}`;\n ColumnHeader.innerHTML = span;\n const IconHtmlNode = IconHtml.cloneNode();\n if (IsColumnRotateicon) {\n IconHtmlNode.classList.add(\"rotateicon\");\n }\n ColumnHeader.insertBefore(IconHtmlNode, ColumnHeader.firstChild);\n ColumnHeader.style.whiteSpace = \"nowrap\";\n }\n DataHtml.addEventListener(\"click\", (e) => {\n if (e.target.tagName === \"DIV\" && e.target.classList.contains(\"ews-icon-insertsheet\")) {\n FluxDisplay.Collapsing(e.target, this.Container, callback);\n e.stopPropagation();\n }\n });\n }\n\n static Collapsing(e, Container, callback) {\n const FusionTable = Container;\n if (!FusionTable) {\n return;\n }\n let updatedAnchor = \"\";\n const tr = e.closest(\"tr\");\n const IsCollapse = !e.classList.contains(\"rotateicon\");\n if (IsCollapse) {\n e.classList.add(\"rotateicon\");\n } else {\n e.classList.remove(\"rotateicon\");\n }\n const rowtype = tr.getAttribute(\"rowtype\");\n if (rowtype === \"ColumnHeader\") {\n const AllArr = FusionTable.querySelectorAll(`tr[rowtype=Parent],tr[rowtype=Child],tr[rowtype=Detail]`);\n for (let i = 0; i < AllArr.length; i++) {\n const CurTr = AllArr[i];\n const CurRowType = CurTr.getAttribute(\"rowtype\");\n if (CurRowType === \"Parent\" || CurRowType === \"Child\") {\n if (!IsCollapse) {\n AllArr[i].querySelector(\"div\").classList.remove(\"rotateicon\");\n } else {\n AllArr[i].querySelector(\"div\").classList.add(\"rotateicon\");\n }\n }\n if (CurRowType === \"Child\" || CurRowType === \"Detail\") {\n if (IsCollapse) {\n CurTr.classList.remove(\"CollapseHidden\");\n } else {\n CurTr.classList.add(\"CollapseHidden\");\n }\n }\n }\n if (IsCollapse) {\n updatedAnchor = \"all\";\n } else {\n updatedAnchor = \"\";\n }\n } else {\n const parent = tr.getAttribute(\"parent\");\n const ChildArrAll = FusionTable.querySelectorAll(`tr[rowtype=Child][parent]`);\n const ChildArr = Array.from(ChildArrAll).filter(child => child.getAttribute(\"parent\") === parent);\n\n const child = tr.getAttribute(\"child\");\n let DetailArr;\n if (rowtype === \"Child\") {\n const DetailAll = Array.from(FusionTable.querySelectorAll(`tr[rowtype=Detail][parent][child]`));\n DetailArr = DetailAll.filter(detail => detail.getAttribute(\"parent\") === parent && detail.getAttribute(\"child\") === child);\n } else {\n const DetailAll = Array.from(FusionTable.querySelectorAll(`tr[rowtype=Detail][parent]`));\n DetailArr = DetailAll.filter(detail => detail.getAttribute(\"parent\") === parent);\n }\n\n if (rowtype === \"Parent\" && ChildArr.length > 0) {\n for (let i = 0; i < ChildArr.length; i++) {\n if (IsCollapse) {\n ChildArr[i].classList.remove(\"CollapseHidden\");\n } else {\n ChildArr[i].classList.add(\"CollapseHidden\");\n }\n if (!IsCollapse) {\n ChildArr[i].querySelector(\"div\").classList.remove(\"rotateicon\");\n }\n }\n }\n if (rowtype === \"Child\" || ChildArr.length === 0 || !IsCollapse) {\n for (let i = 0; i < DetailArr.length; i++) {\n if (IsCollapse) {\n DetailArr[i].classList.remove(\"CollapseHidden\");\n } else {\n DetailArr[i].classList.add(\"CollapseHidden\");\n }\n }\n }\n const ColumnHeader = FusionTable.querySelector(\"tr[rowtype=ColumnHeader] div.ews-icon-insertsheet\");\n if (document.querySelectorAll(\".FusionTable tbody div.rotateicon\").length > 0) {\n ColumnHeader.classList.add(\"rotateicon\");\n } else {\n ColumnHeader.classList.remove(\"rotateicon\");\n }\n // check expanded\n const ExpandedArr = FusionTable.querySelector(\"tbody\").querySelectorAll(\"tbody td .rotateicon\");\n for (let i = 0; i < ExpandedArr.length; i++) {\n const CurExpanded = ExpandedArr[i].closest(\"tr[rowtype]\");\n let ExpandedStr = encodeURIComponent(CurExpanded.getAttribute(\"parent\"));\n const CurRowType = CurExpanded.getAttribute(\"rowtype\");\n if (CurRowType?.toLowerCase() === \"child\") {\n ExpandedStr += `|${encodeURIComponent(CurExpanded.getAttribute(\"child\"))}`;\n }\n updatedAnchor += updatedAnchor.length > 0 ? `,${ExpandedStr}` : ExpandedStr;\n }\n }\n if (callback) {\n callback(`Expanded=${updatedAnchor}`);\n }\n }\n\n InitDrillDown() {\n if (this.table) {\n // Task 937777: Dashboard filters will repeat the loading event when creating a Report.\n const me = this.table.querySelector(\".FusionTable\") || this.table;\n if (me) {\n me.addEventListener(\"click\", (e) => {\n const target = e.target;\n\n if (target.tagName === \"SPAN\") {\n const CurrentTr = target.closest(\"tr[RowType]\");\n\n let parent = null;\n let child = null;\n let detail = null;\n let columnValue = null;\n const FusionFieldType = CurrentTr?.getAttribute(\"FusionFieldType\");\n if (CurrentTr && !FusionFieldType) {\n parent = CurrentTr.getAttribute(\"parent\");\n child = CurrentTr.getAttribute(\"child\");\n detail = CurrentTr.getAttribute(\"detail\");\n columnValue = CurrentTr.getAttribute(\"columnvalue\");\n } else if (FusionFieldType) {\n // Task 1004474: Add option to switch rows and columns on the fusion report data table\n const CurrentTd = target.closest(\"td\");\n const TrArr = document.querySelectorAll(\"#Tab0 tr[fusionfieldtype=Parent]\");\n parent = \"\";\n for (let i = 0; i < TrArr.length; i++) {\n const CurTr = TrArr[i];\n if (i > 0) {\n parent += \"\\t\";\n }\n parent += `${CurTr.getAttribute(\"parent\")}^${CurTr.querySelectorAll(\"td\")[CurrentTd.cellIndex].innerText}`;\n }\n }\n if (parent || child || detail || columnValue) {\n e.cancelBubble = true;\n e.stopPropagation();\n // Task 655842: Enable fusion drill down through fusion graphs\n this.openDrillDown(parent, child, detail, columnValue, target);\n }\n }\n });\n }\n }\n }\n\n openDrillDown(parent, child, detail, columnValue, target) {\n // Task 655842: Enable fusion drill down through fusion graphs\n const me = this;\n // Task 663094: Fusion Drill down JavaScript erro\n const CurrentTr = target.closest(\"tr[RowType]\");\n const IsChart = target.closest(\"svg\");\n (new Promise((resolve, reject) => {\n // Task 1114376: Fusion Report Graph(cards) in dashboard is not reflecting the right numbers when doing drilldown\n const ParametersStr = EC_Fmt.GetPageParameter(\"Parameters\");\n const DrilDownCache = \"IsChart\";\n let DrillDownFields = document.getElementById(`DrillDownFields_${me.ReportID}_${IsChart ? DrilDownCache : \"\"}`);\n\n EWS.VerifySession(async () => {\n if (!DrillDownFields) {\n const myRequest = new ECP.EC_Request(\"GetDrillDownMenuOptions\");\n myRequest.AddRequestVariable(\"ReportID\", me.ReportID, ECP.EC_Verb.Get);\n // Task 1024422: Fusion variable quick edit change not respected for the value header name\n if (EC_Fmt.Null2EmptyStr(ParametersStr).length > 4000) {\n myRequest.AddRequestVariable(\"Parameters\", ParametersStr, ECP.EC_Verb.Post);\n } else {\n myRequest.AddRequestVariable(\"Parameters\", ParametersStr, ECP.EC_Verb.Get);\n }\n const json = await myRequest.Submit();\n const fields = [];\n\n json.Data.sort((a, b) => {\n let v = 0;\n if (a.Category < b.Category) {\n v = -1;\n } else if (a.Category === b.Category) {\n if (a.Display < b.Display) {\n v = -1;\n } else if (a.Display === b.Display) {\n v = 0;\n } else if (a.Display > b.Display) {\n v = 1;\n }\n } else if (a.Category > b.Category) {\n v = 1;\n }\n return v;\n });\n\n let prevCategory = \"\";\n for (let i = 0; i < json.Data.length; i++) {\n const item = json.Data[i];\n if (prevCategory !== item.Category) {\n fields.push({\n class: \"CategoryTitle\",\n name: item.Category\n });\n prevCategory = item.Category;\n }\n\n fields.push({\n class: `Item Category${item.FusionFieldType === \"PinValue\" ? \" PinValueCategory\" : \"\"}`,\n name: item.Display,\n value: item.Value,\n datatype: item.DataType\n });\n }\n\n let template;\n let addCommentDiv = \"\";\n\n if (!IsChart && Settings.DashboardID === ECP.CommonDashboards.FusionView) {\n addCommentDiv = `Add Comment`;\n }\n if (!EC_Fmt.isMobile || IsChart) {\n template = `
`\n + `${addCommentDiv}`\n + ``\n + `Filters`\n + ``\n + `Include`\n + `Exclude`\n + ``\n + ``\n + `Drill Downs`\n + ``;\n for (let i = 0; i < fields.length; i++) {\n const item = fields[i];\n if (item.class === \"CategoryTitle\") {\n template += `${item.name}`;\n } else {\n template += `${item.name}`;\n }\n }\n template += ``\n + `
`;\n } else {\n template = ``\n + `${addCommentDiv}`\n + ``\n + `Filters`\n + ``\n + `Include`\n + `Exclude`\n + ``\n + ``\n + `Drill Downs`\n + ``;\n for (let i = 0; i < fields.length; i++) {\n const item = fields[i];\n if (item.class === \"CategoryTitle\") {\n template += `${item.name}`;\n } else {\n template += `${item.name}`;\n }\n }\n template += ``\n + ``\n + ``;\n }\n DrillDownFields = EC_Fmt.HtmlStrToElement(template);\n }\n\n const filterTarget = target.closest(\"td\") || target;\n let loadFilter = false;\n const regex = /^(Value|Parent|Child|Detail)/;\n if (filterTarget && regex.test(filterTarget.getAttribute(\"field\")) && filterTarget.parentElement.getAttribute(\"rowtype\") !== \"GrandTotal\") {\n loadFilter = true;\n }\n if (!loadFilter) {\n DrillDownFields.querySelector(\".loadFilter\").style.display = \"none\";\n } else {\n DrillDownFields.querySelector(\".loadFilter\").style.display = \"\";\n }\n\n function drillDownFunc(aEvent) {\n const value = DrillDownFields.getAttribute(\"curValue\");\n const title = `${value.length > 12 ? `${value.substring(0, 9)}...` : value} - ${aEvent.target.DrillDownText || aEvent.target.innerText}`;\n let drillDownColumnValue = \"\";\n const field = DrillDownFields.getAttribute(\"field\");\n if (field.startsWith(\"Column\")) {\n const headerValue = me.Container.querySelector(`tr[rowtype=ColumnHeader] th[field=${DrillDownFields.getAttribute(\"field\")}]`);\n if (headerValue) {\n drillDownColumnValue = headerValue.getAttribute(\"headervalue\");\n }\n }\n me.CreateDrillDown(title, aEvent.target.getAttribute(\"FusionFieldSelectAs\"), DrillDownFields.getAttribute(\"parent\"), DrillDownFields.getAttribute(\"child\"), DrillDownFields.getAttribute(\"detail\"), drillDownColumnValue, me.DrillDownDialogID);\n }\n const anchorsWithoutHref = DrillDownFields.querySelectorAll(\"ecp-list.DrillDownList ecp-list-item:not(.PinValueCategory)\");\n for (let i = 0; i < anchorsWithoutHref.length; i++) {\n const a = EC_Fmt.RemoveAllEventListeners(anchorsWithoutHref[i]);\n a.addEventListener(\"click\", drillDownFunc);\n }\n const addCommentsBtn = DrillDownFields.querySelectorAll(\"#ShowAddComment\");\n for (let i = 0; i < addCommentsBtn.length; i++) {\n const a = EC_Fmt.RemoveAllEventListeners(addCommentsBtn[i]);\n a.addEventListener(\"click\", AddComments.bind(window, DrillDownFields, target));\n }\n const includeExcludeBtn = DrillDownFields.querySelectorAll(\"ecp-list-item.Include, ecp-list-item.Exclude\");\n for (let i = 0; i < includeExcludeBtn.length; i++) {\n const a = EC_Fmt.RemoveAllEventListeners(includeExcludeBtn[i]);\n a.addEventListener(\"click\", IncludeExcludeFilter);\n }\n function IncludeExcludeFilter(e) {\n const curent = e.currentTarget;\n if (curent.tagName !== \"ECP-LIST-ITEM\") {\n return;\n }\n const isInclude = curent.classList.contains(\"Include\");\n const field = curent.closest(\"ecp-list\").getAttribute(\"field\");\n const fieldValue = curent.closest(\"ecp-list\").getAttribute(\"fieldvalue\");\n const CustomFilter = `F:${field}~V:${fieldValue}~O:${isInclude ? \"E\" : \"NE\"}`;\n let result = {\n CustomFilter,\n redirect: true\n };\n if (me.DrillDownFilterCallBack) {\n result = me.DrillDownFilterCallBack(result);\n }\n if (result.redirect) {\n const URLCustomFilter = EC_Fmt.GetPageParameter(\"CustomFilter\");\n if (URLCustomFilter) {\n result.CustomFilter += `|${URLCustomFilter}`;\n }\n result.CustomFilter = mergeCustomFilter(result.CustomFilter);\n window.location.href = `Home?${EC_Fmt.Get_QueryString(\"CustomFilter\")}&CustomFilter=${result.CustomFilter}`;\n }\n }\n resolve(DrillDownFields);\n }, false, null, (obj) => {\n obj.message = \"Session Expired, Login to enable drill down...\";\n reject(obj);\n });\n })).then((DrillDownFields) => {\n // Task 675423: Transaction Detail Report isn't showing\n DrillDownFields.querySelectorAll(\".InsertPinValue\").remove();\n\n DrillDownFields.setAttribute(\"curValue\", target.DrillDownText || target.innerText);\n DrillDownFields.setAttribute(\"parent\", parent);\n DrillDownFields.setAttribute(\"child\", child);\n DrillDownFields.setAttribute(\"detail\", detail);\n DrillDownFields.setAttribute(\"field\", target.getAttribute(\"field\"));\n\n const list = EC_Fmt.isNull(columnValue) ? \"\" : columnValue.split(\"\\t\");\n\n for (let i = 0; i < list.length; i++) {\n const tmpArr = list[i].split(\"^\");\n for (let j = i + 1; j < list.length; j++) {\n const tmpArr2 = list[j].split(\"^\");\n if (tmpArr[1] === tmpArr2[1]) {\n list.splice(j, 1);\n }\n }\n }\n const HyperlinkMD5List = [];\n for (let i = 0; i < list.length; i++) {\n let tmpArr2 = \"\";\n const tmpArr = list[i].split(\"^\");\n const FusionFieldSelectAs = tmpArr[0].substring(tmpArr[0].indexOf(\"PinValue\"), tmpArr[0].length);\n if (tmpArr.length > 1) {\n tmpArr2 = tmpArr[1].replace(\"^\", \"^\").split(\"^\");\n }\n const Display = tmpArr2[0];\n\n if (tmpArr2.length > 1) {\n const Link = tmpArr2[1].replace(/^/g, \"^\");\n const pinValue = DrillDownFields.querySelector(`ecp-list-item.PinValueCategory[fusionfieldselectas=${FusionFieldSelectAs}]`);\n if (pinValue) {\n // Task 1028629: Fusion View Drill Down: Additional Values\n const FusionFieldSelectAlias = pinValue.getAttribute(\"FusionFieldSelectAs\");\n const IsRepeat = pinValue.getAttribute(\"datatype\") === \"_Hyperlink\" ? HyperlinkMD5List.includes(EC_Fmt.MD5(FusionFieldSelectAlias + Display + Link)) : false;\n if (!IsRepeat) {\n pinValue.parentNode.insertBefore((EC_Fmt.HtmlStrToElement(`${Display}`)), pinValue.nextSibling);\n HyperlinkMD5List.push(EC_Fmt.MD5(FusionFieldSelectAs + Display + Link));\n }\n }\n }\n }\n\n if (!EC_Fmt.isMobile) {\n document.body.append(DrillDownFields);\n HideAllDivs();\n FluxDisplay.ShowPopMenu(target, DrillDownFields);\n } else {\n if (CurrentTr) {\n CurrentTr.parentNode.insertBefore(DrillDownFields, CurrentTr.nextSibling);\n } else {\n document.body.append(DrillDownFields);\n // Task 765585: Fusion Report Graph Javascript Error when clicking on graph elements in ios safari\n if (IsChart) {\n HideAllDivs();\n FluxDisplay.ShowPopMenu(target, DrillDownFields);\n }\n }\n DrillDownFields.style.display = \"table-row\";\n }\n }).catch((obj) => {\n ECP.Dialog.HideLoading();\n ECP.Dialog.Alert(obj);\n });\n }\n\n CreateDrillDown(title, selectAs, parent, child, detail, columnValue, drillDownDialogID) {\n const me = this;\n\n let dialog = drillDownDialogID ? document.getElementById(drillDownDialogID) : null;\n let dialogContainer = null;\n let dialogContent = null;\n let expandDrillDownBtn = null;\n\n if (dialog) {\n dialogContent = dialog.querySelector(\".ecp-dialog-content\");\n expandDrillDownBtn = dialog.querySelector(\".ecp-drilldown-expand > ecp-btn\");\n dialogContainer = dialog.querySelector(\".ecp-dialog-container\");\n } else {\n let offsetLeft = 0;\n if (!EC_Fmt.isMobile) {\n const dialogList = document.querySelectorAll(\"div[id^=ecp-dialog-container]\");\n if (dialogList.length > 0) {\n offsetLeft = dialogList[dialogList.length - 1].offsetLeft + 20;\n }\n }\n\n dialog = ECP.Dialog.ShowDialog(\"\", \"\", Object.assign(EC_Fmt.isMobile ? {\n width: window.innerWidth > 0 ? window.innerWidth : window.screen.width,\n height: window.innerHeight > 0 ? window.innerHeight : window.screen.height\n } : {}, {\n disableModal: !EC_Fmt.isMobile,\n disableButtons: true,\n confirmButtonAction() { },\n cancelButtonAction(myDialog) {\n const fusionTables = myDialog.querySelectorAll(\".FusionTable\");\n for (let i = 0; i < fusionTables.length; i++) {\n if (!EC_Fmt.isNull(EWS.TableCalculators) && !EC_Fmt.isNull(EWS.TableCalculators.Fusion)) {\n TableCalculator.RemoveTable(EWS.TableCalculators.Fusion, fusionTables[i]);\n }\n }\n }\n }));\n\n dialog.id = EC_Fmt.Guid();\n // Task 1041296: Fusion View drill down style is incorrect\n // Task 1042026: Fusion View Drill down with large number of rows extends off screen. I can not see top or bottom, can not scroll\n dialogContainer = dialog.querySelector(\".ecp-dialog-container\");\n dialogContainer.firstChild.classList.add(\"ecp-drilldown-title\");\n dialogContainer.querySelector(\".ecp-dialog-footer\").style.display = \"none\";\n // Task 1137404: Fusion View drilldown Style Error\n dialogContainer.append(EC_Fmt.HtmlStrToElement(\"
\"));\n\n dialogContent = dialog.querySelector(\".ecp-dialog-content\");\n dialogContent.style.padding = \"2px 5px 5px\";\n dialogContent.innerHTML = \"
\";\n\n expandDrillDownBtn = dialog.querySelector(\".ecp-drilldown-expand > ecp-btn\");\n\n dialog.addEventListener(\"mousedown\", () => {\n const dialogContainers = document.querySelectorAll(\"div[id^=ecp-dialog-container]\");\n for (let i = 0; i < dialogContainers.length; i++) {\n dialogContainers[i].style.zIndex = \"288\";\n }\n dialog.firstChild.style.zIndex = \"300\";\n });\n\n if (offsetLeft > 0) {\n dialog.firstChild.style.left = `${offsetLeft}px`;\n }\n }\n\n // Task 673663: Fusion Drill-Down 'Loading' is not in the specified position\n EWS.ShowLoading(0, dialogContainer);\n\n const myRequest = new ECP.EC_Request(\"FluxEdit_CreateDrillDownReport\");\n myRequest.AddRequestVariable(\"ReportID\", me.ReportID, ECP.EC_Verb.Post);\n myRequest.AddRequestVariable(\"FusionFieldSelectAs\", selectAs, ECP.EC_Verb.Post);\n myRequest.AddRequestVariable(\"Parent\", parent, ECP.EC_Verb.Post);\n myRequest.AddRequestVariable(\"Child\", child, ECP.EC_Verb.Post);\n myRequest.AddRequestVariable(\"Detail\", detail, ECP.EC_Verb.Post);\n myRequest.AddRequestVariable(\"ColumnValue\", columnValue, ECP.EC_Verb.Post);\n\n myRequest.Submit().then((json) => {\n if (json.Message) {\n ECP.Dialog.Alert(json.Message);\n return;\n }\n\n const drillDownDivs = dialogContent.querySelectorAll(\".drill-down-content > div\");\n const drillDownSpans = dialogContent.querySelectorAll(\".drill-down-title > span\");\n for (let i = 0; i < drillDownSpans.length; i++) {\n drillDownSpans[i].classList.remove(\"ecp-drilldown-title-active\");\n }\n const titleEl = EC_Fmt.HtmlStrToElement(`${title}`);\n titleEl.style.cursor = \"pointer\";\n\n titleEl.addEventListener(\"click\", () => {\n // Task 643498: Cannot go back to previous breadcrumb reports in Fusion drilldown\n const NewdrillDownDivs = dialogContent.querySelectorAll(\".drill-down-content > div\");\n const NewdrillDownSpans = dialogContent.querySelectorAll(\".drill-down-title > span\");\n for (let i = 0; i < NewdrillDownSpans.length; i++) {\n NewdrillDownSpans[i].classList.remove(\"ecp-drilldown-title-active\");\n }\n titleEl.classList.add(\"ecp-drilldown-title-active\");\n for (let i = 0; i < NewdrillDownDivs.length; i++) {\n if (NewdrillDownDivs[i].getAttribute(\"reportId\") === titleEl.getAttribute(\"reportId\")) {\n NewdrillDownDivs[i].style.display = \"block\";\n } else {\n NewdrillDownDivs[i].style.display = \"none\";\n }\n }\n // Task 1049221: Drill down on fusion report from dashboard does not respect the filters at the top if the filters have changed from their original value\n expandDrillDownBtn.href = `Home?DashboardID=${ECP.CommonDashboards.FusionView}&ReportID=${titleEl.getAttribute(\"reportId\")}&Parameters=${FluxDisplay.ParametersToUrl(FluxDisplay.GetParameters(me.ParametersStr))}`;\n });\n\n const DrillDownTitle = dialogContent.querySelector(\".drill-down-title\");\n if (drillDownSpans.length > 0) {\n DrillDownTitle.append(EC_Fmt.HtmlStrToElement(` > `));\n }\n DrillDownTitle.append(titleEl);\n // Task 841328: Dashboard Item Report Graph drill downs not respecting Omni Filters\n // Task 948393: Omni Filters are not respected when drilling down using graph points.\n let DashboardReportURL = me.table.getAttribute(\"src\");\n const FluxViewContainer = me.table.closest(\".FluxViewContainer\");\n const Dahsboarddrilldown = me.table.closest(\".ecp-dialog-container\");\n if (!me.table.classList.contains(\"FluxViewContainer\") && FluxViewContainer) {\n DashboardReportURL = FluxViewContainer.getAttribute(\"src\");\n } else if (EC_Fmt.isNull(me.ParametersStr) && EC_Fmt.isNull(DashboardReportURL) && !FluxViewContainer && Dahsboarddrilldown) {\n // Task 1020780: Fusion Graph: Error when using drill-down function on fusion graph multiple times\n // The chart and data are two DrillDown events, so the events are not synchronized.\n DashboardReportURL = Dahsboarddrilldown.querySelector(\".ecp-drilldown-expand ecp-btn\").getAttribute(\"href\");\n }\n if (EC_Fmt.isNull(me.ParametersStr) && !EC_Fmt.isNull(DashboardReportURL)) {\n me.ParametersStr = EC_Fmt.Null2EmptyStr(EC_Fmt.GetURLParameters(DashboardReportURL).Parameters);\n }\n expandDrillDownBtn.href = `Home?DashboardID=${ECP.CommonDashboards.FusionView}&ReportID=${json.ReportID}&Parameters=${FluxDisplay.ParametersToUrl(FluxDisplay.GetParameters(me.ParametersStr))}`;\n\n const el = EC_Fmt.HtmlStrToElement(`
`);\n for (let i = 0; i < drillDownDivs.length; i++) {\n drillDownDivs[i].style.display = \"none\";\n }\n dialogContent.querySelector(\".drill-down-content\").append(el);\n\n FillInDialog(el, json.ReportID, \"\").then(() => {\n EWS.HideLoading();\n\n // Task 704230: Drill down on a report in a dashboard takes up the full screen when viewing on iPadOS Safari and the user cannot move the popup around\n if (dialogContainer) {\n const maxWidth = window.innerWidth > 0 ? window.innerWidth : window.screen.width;\n const maxHeight = window.innerHeight > 0 ? window.innerHeight : window.screen.height;\n dialogContainer.style.top = `${maxHeight / 2 - dialogContainer.clientHeight / 2}px`;\n dialogContainer.style.left = `${maxWidth / 2 - dialogContainer.clientWidth / 2}px`;\n }\n });\n });\n\n function FillInDialog(el, ReportID, OrderBy) {\n return new Promise((resolve) => {\n const myDrillDownFluxView = new EC_FluxView({\n ReportID\n });\n\n const parameters = FluxDisplay.GetParameters(me.ParametersStr);\n const keys = Object.keys(parameters);\n for (let i = 0; i < keys.length; i++) {\n myDrillDownFluxView.SetParameter(keys[i], parameters[keys[i]]);\n }\n if (!EC_Fmt.isNull(OrderBy)) {\n myDrillDownFluxView.SetQueryString(\"OrderBy\", OrderBy);\n }\n myDrillDownFluxView.GetHtml().then((html) => {\n el.innerHTML = \"\";\n const dom = EC_Fmt.HtmlStrToElement(`
${html}
`);\n\n // Task 837520: Drill down on Fusion Report displays the 'Details' information if the drill down report returns no results\n const reportEl = dom.querySelector(\"#Tab0\");\n if (reportEl) {\n const styleElements = dom.querySelectorAll(\"style\");\n for (let i = 0; i < styleElements.length; i++) {\n el.append(styleElements[i]);\n }\n el.append(reportEl);\n\n const myDrillDownFluxDisplay = new FluxDisplay({ el: reportEl, ReportID });\n myDrillDownFluxDisplay.DrillDownDialogID = dialog.id;\n // Task 947289: Omni Filter is not being applied to when drilling down multiple times.\n if (me && !EC_Fmt.isNull(me.ParametersStr)) {\n myDrillDownFluxDisplay.ParametersStr = me.ParametersStr;\n }\n myDrillDownFluxDisplay.InitOrder((data) => {\n EWS.ShowLoading(0, el);\n FillInDialog(el, data.ReportID, data.OrderBy).then(() => {\n EWS.HideLoading();\n });\n });\n myDrillDownFluxDisplay.FixHeader();\n myDrillDownFluxDisplay.InitDrillDown();\n myDrillDownFluxDisplay.InitCharts();\n if (!EC_Fmt.isNull(EWS.TableCalculators) && !EC_Fmt.isNull(EWS.TableCalculators.Fusion)) {\n myDrillDownFluxDisplay.InitTableCalculator();\n }\n } else {\n const container = dom.querySelector(\"div.ecp-fusion-container\");\n if (container) {\n el.append(container);\n } else {\n el.append(dom);\n }\n }\n resolve();\n });\n });\n }\n }\n\n async InitPinnedFilter(onAfterFilter) {\n const me = this;\n const tabContainer = me.Container;\n if (tabContainer) {\n const fusionFiltersHtml = EC_Fmt.HtmlStrToElement(`
`);\n if (tabContainer.firstChild) {\n tabContainer.insertBefore(fusionFiltersHtml, tabContainer.firstChild);\n } else {\n tabContainer.appendChild(fusionFiltersHtml);\n }\n\n const myRequest = new ECP.EC_Request(\"FluxView_GetReportPinTabs\");\n myRequest.AddRequestVariable(\"ReportID\", me.ReportID);\n const CustomFilter = EC_Fmt.GetPageParameter(\"CustomFilter\");\n if (!EC_Fmt.isNull(CustomFilter)) {\n myRequest.AddRequestVariable(\"CustomFilter\", CustomFilter);\n }\n let StrParameters = decodeURIComponent(EC_Fmt.Null2EmptyStr(EC_Fmt.GetPageParameter(\"Parameters\")));\n // -- load Dashboard Filed\n const DashboardReportURL = tabContainer.getAttribute(\"src\");\n if (!EC_Fmt.isNull(DashboardReportURL)) {\n StrParameters = EC_Fmt.Null2EmptyStr(EC_Fmt.GetURLParameters(DashboardReportURL).Parameters);\n }\n\n if (!EC_Fmt.isNull(StrParameters)) {\n if (StrParameters.length > 4000 || EC_Fmt.Null2EmptyStr(EC_Fmt.GetPageParameter(\"Parameters\")).length > 4000) {\n myRequest.AddRequestVariable(\"Parameters\", StrParameters, ECP.EC_Verb.Post);\n } else {\n myRequest.AddRequestVariable(\"Parameters\", StrParameters, ECP.EC_Verb.Get);\n }\n }\n\n myRequest.SetReturnType(ECP.EC_ReturnType.Text);\n const ReportPinTabs = await myRequest.Submit();\n tabContainer.querySelector(\"#FusionFilters\").appendChild(EC_Fmt.HtmlStrToElement(`
${ReportPinTabs}
`));\n const FiltersRequired = tabContainer.querySelector(\".Filtersrequired\");\n let FiltersRequiredShowHTML = \"\";\n if (FiltersRequired?.innerHTML) {\n FiltersRequiredShowHTML = `
${FiltersRequired.innerHTML}
`;\n }\n tabContainer.querySelector(\"#FusionFilters\").appendChild(EC_Fmt.HtmlStrToElement(`
${FiltersRequiredShowHTML}
`));\n }\n\n if (me.pinnedFiltersForm) {\n EWS.Input.Init(me.pinnedFiltersForm);\n\n // AjaxInput\n const ajaxInputArr = me.pinnedFiltersForm.querySelectorAll(\"input.Autocomplete\");\n for (let i = 0; i < ajaxInputArr.length; i++) {\n if (ajaxInputArr[i].closest(\"table\").nextSibling) {\n // Task 1137364: For Fusion View Filter select length over 4000.\n new ECP.HTML.AjaxInput(ajaxInputArr[i], \"\", \"\", (_, hidden) => {\n const filedValue = hidden.value.length;\n if (filedValue > 4000) {\n ECP.HTML.Snackbar(`The values in '${hidden.name}' filter exceed 4000 characters, additional values will not be added. Please filter on a field with a smaller stored value or use multiple variables.`, \"Warning\");\n }\n });\n }\n }\n\n const fusionPeriods = me.pinnedFiltersForm.querySelectorAll(\".fusion-pinned-period\");\n for (let i = 0; i < fusionPeriods.length; i++) {\n const fusionPeriod = fusionPeriods[i];\n const key = fusionPeriod.getAttribute(\"key\");\n const periodType = fusionPeriod.getAttribute(\"period-type\");\n const periodInput = me.pinnedFiltersForm.querySelector(`#${key}`);\n if (periodType === \"Period\") {\n const Inputs = fusionPeriod.querySelectorAll(\"input\");\n for (let j = 0; j < Inputs.length; j++) {\n Inputs[j].addEventListener(\"blur\", () => {\n const periodYearsInput = document.querySelector(`div[key=\"${key}\"] input[type=\"hidden\"]`);\n const yearsValue = document.querySelector(`div[key=\"${key}\"] ecp-input[id=\"PeriodYears\"]`).value;\n periodYearsInput.value += `^${yearsValue}`;\n });\n }\n } else if (periodType === \"DateRange\") {\n const startDate = me.pinnedFiltersForm.querySelector(`#StartDate${key}`);\n const endDate = me.pinnedFiltersForm.querySelector(`#EndDate${key}`);\n // Task 743043: Fusion Reports -> Quick Edit: Optimize Design\n if (startDate) {\n startDate.removeAttribute(\"name\");\n }\n if (endDate) {\n endDate.removeAttribute(\"name\");\n }\n\n const dateInputs = fusionPeriod.querySelectorAll(\"ecp-input[type=date]\");\n for (let j = 0; j < dateInputs.length; j++) {\n // Task 1129362: Date Range is not work in our Reports.\n dateInputs[j].addEventListener(\"change\", () => {\n // Task 1125747: Fusion: Creating an invalid Date Range in the Filter from Filters Side tab doesn't allow you to fix mistake\n const startDateValue = document.getElementById(`StartDate${key}`).value;\n const endDateValue = document.getElementById(`EndDate${key}`).value;\n const yearsValue = document.querySelector(`div[key=\"${key}\"] ecp-input[id=\"PeriodYears\"]`).value;\n if (!EC_Fmt.isNull(startDateValue) && !EC_Fmt.isNull(endDateValue) && EC_Fmt.ToDate(startDateValue) > EC_Fmt.ToDate(endDateValue)) {\n ECP.HTML.Snackbar(EC_Fmt.Trn(\"Start Date is greater than the End Date.\"), \"Info\");\n }\n periodInput.value = `${startDateValue}^${endDateValue}^${yearsValue}`;\n });\n }\n } else if (periodType === \"WeekRange\") {\n const weekInputs = fusionPeriod.querySelectorAll(\"ecp-input[type=number]\");\n for (let j = 0; j < weekInputs.length; j++) {\n weekInputs[j].addEventListener(\"change\", () => {\n // Task 987416: Pin Filter Week supports inputting one\n const StartWeek = document.getElementById(`StartWeek${key}`).value;\n const EndWeek = document.getElementById(`EndWeek${key}`).value;\n const yearsValue = document.querySelector(`div[key=\"${key}\"] ecp-input[id=\"PeriodYears\"]`).value;\n if (!EC_Fmt.isNull(StartWeek) && (EC_Fmt.Null2ZeroInt(StartWeek) < 1 || EC_Fmt.Null2ZeroInt(StartWeek) > 53)) {\n ECP.HTML.Snackbar(\"Start Week Is Out of Range: Must be between 1 and 53.\", \"Info\");\n document.getElementById(`StartWeek${key}`).value = \"\";\n } else if (!EC_Fmt.isNull(EndWeek) && (EC_Fmt.Null2ZeroInt(EndWeek) < 1 || EC_Fmt.Null2ZeroInt(EndWeek) > 53)) {\n ECP.HTML.Snackbar(\"End Week Is Out of Range: Must be between 1 and 53.\", \"Info\");\n document.getElementById(`EndWeek${key}`).value = \"\";\n } else {\n periodInput.value = `${StartWeek}^${EndWeek}^${yearsValue}`;\n }\n });\n }\n }\n }\n\n const pinnedPeriodsYears = me.pinnedFiltersForm.querySelectorAll(\".pinned-period-years\");\n for (let i = 0; i < pinnedPeriodsYears.length; i++) {\n const periodYears = pinnedPeriodsYears[i];\n const key = periodYears.getAttribute(\"key\");\n const periodInputs = periodYears.querySelectorAll(\"ecp-input\");\n const periodType = periodYears.getAttribute(\"period-type\");\n for (let j = 0; j < periodInputs.length; j++) {\n periodInputs[j].addEventListener(\"change\", () => {\n const periodInput = document.querySelector(`div[key=\"${key}\"] input[type=\"hidden\"]`);\n const yearsValue = document.querySelector(`div[key=\"${key}\"] ecp-input[id=\"PeriodYears\"]`).value;\n const splitValue = periodInput.value.split(\"^\");\n if (periodType === \"Period\") {\n periodInput.value = `${splitValue[0]}^${yearsValue}`;\n } else if (periodType === \"DateRange\" || periodType === \"WeekRange\") {\n periodInput.value = `${splitValue[0]}^${splitValue[1]}^${yearsValue}`;\n }\n });\n }\n }\n // Task 953291: Fusion Pinned Filter on Date Range does not label Start and End Date Fields\n const requiredFields = me.pinnedFiltersForm.querySelectorAll(\".ecp-fv_flex-item .ecp-fv_column-value[required=true] input[type=text]:not(.DatePickerInput)\");\n for (let i = 0; i < requiredFields.length; i++) {\n requiredFields[i].setAttribute(\"placeholder\", EC_Fmt.Trn(\"Required\"));\n }\n\n // Submit Button\n const submitBtn = me.pinnedFiltersForm.querySelector(\".ecp-fusion-pinned-override-submit > input[type=button]\");\n if (submitBtn) {\n // Task 937125: Dashboard filters viewed from mobile present troublesome popup\n const SubmitBtnForm = submitBtn.form;\n if (SubmitBtnForm && EC_Fmt.isMobile) {\n SubmitBtnForm.addEventListener(\"submit\", (e) => {\n e.preventDefault();\n EC_Fmt.TriggerEvent(submitBtn, \"click\");\n });\n }\n\n submitBtn.addEventListener(\"click\", (e) => {\n EWS.VerifySession(async () => {\n ECP.Dialog.ShowLoading(null, me.Container, null);\n const fusionPeriodArr = me.pinnedFiltersForm.querySelectorAll(\".fusion-pinned-period[period-type=DateRange] input\");\n for (let i = 0; i < fusionPeriodArr.length; i++) {\n const CurValue = fusionPeriodArr[i].value;\n if (!EC_Fmt.isNull(CurValue) && CurValue.split(\"^\").length === 2) {\n const startDate = CurValue.split(\"^\")[0];\n const endDate = CurValue.split(\"^\")[1];\n if (!EC_Fmt.isNull(startDate) && !EC_Fmt.isNull(endDate) && EC_Fmt.ToDate(startDate) > EC_Fmt.ToDate(endDate)) {\n ECP.HTML.Snackbar(EC_Fmt.Trn(\"Start Date is greater than the End Date.\"), \"Info\");\n ECP.Dialog.HideLoading();\n return;\n }\n }\n }\n const data = me.GetPinnedFilterFormData();\n let IsGetRequest = true;\n let redirect = true;\n let StrParameters = FluxDisplay.ParametersToUrl(data, false);\n let result = { ReportID: me.ReportID };\n const myRequest = new ECP.EC_Request(\"FluxEdit_UpdateFilters\");\n\n if (encodeURIComponent(StrParameters).length > 4000) {\n myRequest.AddRequestVariable(\"Parameters\", StrParameters, ECP.EC_Verb.Post);\n StrParameters = \"\";\n IsGetRequest = false;\n } else {\n myRequest.AddRequestVariable(\"Parameters\", StrParameters, ECP.EC_Verb.Get);\n StrParameters = FluxDisplay.ParametersToUrl(data);\n }\n const OwnerAuthenticationID = document.getElementById(\"report-OwnerAuthenticationID\");\n if (!IsGetRequest || (OwnerAuthenticationID && EC_Fmt.Null2ZeroInt(OwnerAuthenticationID.value) === AuthenticationID)) {\n myRequest.AddRequestVariable(\"ReportID\", me.ReportID, ECP.EC_Verb.Post);\n if (me.BaseReportID > 0) {\n myRequest.AddRequestVariable(\"BaseReportID\", me.BaseReportID, ECP.EC_Verb.Post);\n }\n try {\n const PinFiltersValue = this.pinnedFiltersForm.querySelector(\"#PinFiltersValueArr\");\n if (PinFiltersValue) {\n PinFiltersValue.value = JSON.stringify(Object.assign({}, JSON.parse(PinFiltersValue.value), data));\n }\n result = await myRequest.Submit();\n } catch (ex) {\n ECP.Dialog.HideLoading();\n throw ex;\n }\n }\n\n if (onAfterFilter) {\n result.Parameters = StrParameters;\n redirect = await onAfterFilter(result, me);\n ECP.Dialog.HideLoading();\n }\n if (redirect) {\n EC_Fmt.OpenWithCtrlClickSupport(e, `Home?DashboardID=${ECP.CommonDashboards.FusionView}&ReportID=${result.ReportID}${result.BaseReportID > 0 ? `&BaseReportID=${result.BaseReportID}` : \"\"}&${EC_Fmt.Get_QueryString(`DashboardID;ReportID;Parameters;${result.BaseReportID ? \"BaseReportID\" : \"\"}`)}${!EC_Fmt.isNull(StrParameters) ? `&Parameters=${StrParameters}` : \"\"}`);\n ECP.Dialog.HideLoading();\n }\n });\n });\n }\n\n const titles = me.pinnedFiltersForm.querySelectorAll(\".ecp-fusion-pinned-override-title\");\n for (let i = 0; i < titles.length; i++) {\n const title = titles[i];\n title.addEventListener(\"click\", () => {\n const caretDiv = title.querySelector(\"span.caret-down,.caret-right\");\n if (caretDiv) {\n const filterBody = me.pinnedFiltersForm.querySelectorAll(\".ecp-fusion-pinned-override-filters,.ecp-fusion-pinned-override-submit\");\n\n if (caretDiv.classList.contains(\"caret-down\")) {\n for (let j = 0; j < filterBody.length; j++) {\n filterBody[j].style.display = \"none\";\n }\n caretDiv.classList.add(\"caret-right\");\n caretDiv.classList.remove(\"caret-down\");\n } else {\n for (let j = 0; j < filterBody.length; j++) {\n // Task 629461: 'Filters' display at the top of a fusion report changes to be stacked horizontally after opening and closing the filters section\n filterBody[j].style.display = \"flex\";\n }\n caretDiv.classList.add(\"caret-down\");\n caretDiv.classList.remove(\"caret-right\");\n }\n }\n });\n }\n\n const categories = me.pinnedFiltersForm.querySelectorAll(\".ecp-fv_record-category\");\n for (let i = 0; i < categories.length; i++) {\n const category = categories[i];\n category.addEventListener(\"click\", () => {\n const caretDiv = category.querySelector(\"span.caret-down,.caret-right\");\n const categoryName = category.getAttribute(\"category\");\n\n if (caretDiv.classList.contains(\"caret-down\")) {\n CollapseCategory(me.pinnedFiltersForm, category, categoryName);\n } else {\n ExpandCategory(me.pinnedFiltersForm, category, categoryName);\n }\n });\n }\n }\n\n function CollapseCategory(container, category, categoryName) {\n if (category.querySelectorAll(\"span.caret-down\").length === 0 || !categoryName) {\n return;\n }\n const categoryItems = container.querySelectorAll(`div.ecp-fv_flex-item[category='${categoryName}']`);\n for (let i = 0; i < categoryItems.length; i++) {\n const categoryItem = categoryItems[i];\n if (!categoryItem.classList.contains(\"ecp-fv_record-category\")) {\n categoryItem.style.display = \"none\";\n }\n }\n const caret = category.querySelector(\"span.caret-down\");\n caret.classList.add(\"caret-right\");\n caret.classList.remove(\"caret-down\");\n SetReportSetting(`Fusion_Pinned_Filters_Collapsed_${categoryName}`, \"True\");\n }\n\n function ExpandCategory(container, category, categoryName) {\n if (category.querySelectorAll(\"span.caret-right\").length === 0 || !categoryName) {\n return;\n }\n const categoryItems = container.querySelectorAll(`div.ecp-fv_flex-item[category='${categoryName}']`);\n for (let i = 0; i < categoryItems.length; i++) {\n const categoryItem = categoryItems[i];\n if (!categoryItem.classList.contains(\"ecp-fv_record-category\")) {\n // Task 743043: Fusion Reports -> Quick Edit: Optimize Design\n categoryItem.style.display = \"\";\n }\n }\n const caret = category.querySelector(\"span.caret-right\");\n caret.classList.add(\"caret-down\");\n caret.classList.remove(\"caret-right\");\n SetReportSetting(`Fusion_Pinned_Filters_Collapsed_${categoryName}`, \"False\");\n }\n\n function SetReportSetting(name, value) {\n const myRequest = new ECP.EC_Request(\"FluxEdit_SetReportSetting\");\n myRequest.AddRequestVariable(\"ReportID\", me.ReportID, ECP.EC_Verb.Post);\n myRequest.AddRequestVariable(\"Name\", name, ECP.EC_Verb.Post);\n myRequest.AddRequestVariable(\"Value\", value, ECP.EC_Verb.Post);\n myRequest.Submit();\n }\n }\n\n GetPinnedFilterFormData() {\n // Task 964255: Fusion View: Using Pinned filters creates a new Draft ReportID.\n let PinFiltersValueArr = {};\n const PinFiltersValue = this.pinnedFiltersForm.querySelector(\"#PinFiltersValueArr\");\n if (PinFiltersValue && !EC_Fmt.isNull(PinFiltersValue.value)) {\n PinFiltersValueArr = JSON.parse(PinFiltersValue.value);\n }\n const result = {};\n\n if (this.pinnedFiltersForm) {\n const fusionInputs = this.pinnedFiltersForm.querySelectorAll(\"input[type=hidden],ecp-input,input.fusion-pinned-input\");\n for (let i = 0; i < fusionInputs.length; i++) {\n const input = fusionInputs[i];\n if (input.name && ((!PinFiltersValueArr[input.name] && !EC_Fmt.isNull(input.value)) || (PinFiltersValueArr[input.name] && PinFiltersValueArr[input.name] !== input.value))) {\n result[input.name] = input.value;\n }\n }\n }\n return result;\n }\n\n InitPostToDashboard() {\n const me = this;\n if (me.postToDashboardForm) {\n const selectAllCheckBoxes = me.postToDashboardForm.querySelectorAll(\".ecp-fusion-select-all\");\n\n if (selectAllCheckBoxes?.length > 0) {\n for (let i = 0; i < selectAllCheckBoxes.length; i++) {\n const selectAllCB = selectAllCheckBoxes[i];\n let index = -1;\n const selectAs = selectAllCB.getAttribute(\"select-as\");\n\n let myParentNode = selectAllCB.parentNode;\n while (myParentNode) {\n if (myParentNode.tagName.toLowerCase() === \"th\") {\n index = myParentNode.cellIndex;\n break;\n }\n myParentNode = myParentNode.parentNode;\n }\n\n if (index >= 0) {\n const parents = document.querySelectorAll(\"tr[rowtype=Parent]\");\n const children = document.querySelectorAll(\"tr[rowtype=Child]\");\n\n for (let j = 0; j < parents.length; j++) {\n const parent = parents[j];\n if (parent.children[index]) {\n const detail = parent.children[index];\n if (!detail.querySelector(\"input[type=checkbox]\")) {\n detail.innerHTML = getCheckBoxHtml(detail, selectAs) + detail.innerHTML;\n }\n }\n }\n\n for (let j = 0; j < children.length; j++) {\n const child = children[j];\n if (child.children[index]) {\n const detail = child.children[index];\n if (!detail.querySelector(\"input[type=checkbox]\")) {\n detail.innerHTML += getCheckBoxHtml(detail, selectAs);\n }\n }\n }\n }\n }\n\n if (me.table) {\n const SelectAll = me.table.querySelectorAll(\".ecp-fusion-select-all,.ecp-fusion-select-all-sub\");\n for (let i = 0; i < SelectAll.length; i++) {\n SelectAll[i].addEventListener(\"click\", (event) => {\n selectAllCheckBox(event.currentTarget, event.currentTarget.getAttribute(\"select-as\"), event.currentTarget.getAttribute(\"parent\"), event.currentTarget.getAttribute(\"child\"));\n });\n }\n }\n\n const submitBtn = me.postToDashboardForm.querySelector(\".ecp-fusion-post-dashboard-submit\");\n if (submitBtn) {\n submitBtn.addEventListener(\"click\", () => {\n EWS.VerifySession(() => {\n me.postToDashboardForm.submit();\n });\n });\n }\n }\n }\n\n function getCheckBoxHtml(el, selectAs) {\n let parentGroup = null;\n let childGroup = null;\n\n // Task 610208: Checking a parent checkbox from a Checkbox Fusion Report used in a Dashboard does not check/select children entries\n const myTr = el.closest(\"tr[rowtype]\");\n if (myTr) {\n parentGroup = myTr.getAttribute(\"parent\");\n childGroup = myTr.getAttribute(\"child\");\n }\n\n return ` `;\n }\n\n function selectAllCheckBox(el, selectAs, parentGroup, childGroup) {\n const checked = el.checked;\n\n if (me.postToDashboardForm) {\n const selectAllSub = me.postToDashboardForm.querySelectorAll(`.ecp-fusion-select-all-sub`);\n for (let i = 0; i < selectAllSub.length; i++) {\n const checkbox = selectAllSub[i];\n const mySelectAs = checkbox.getAttribute(\"select-as\");\n const myParentGroup = checkbox.getAttribute(\"parent\");\n const myChildGroup = checkbox.getAttribute(\"child\");\n\n if (selectAs === mySelectAs && (!parentGroup || parentGroup === myParentGroup) && (!childGroup || childGroup === myChildGroup)) {\n checkbox.checked = checked;\n }\n }\n\n const checkboxes = me.postToDashboardForm.querySelectorAll(`.ecp-fusion-checkbox[select-as=${selectAs}]`);\n for (let i = 0; i < checkboxes.length; i++) {\n const checkbox = checkboxes[i];\n // Task 610208: Checking a parent checkbox from a Checkbox Fusion Report used in a Dashboard does not check/select children entries\n const myTr = checkbox.closest(\"tr[rowtype]\");\n const myParentGroup = myTr.getAttribute(\"parent\");\n const myChildGroup = myTr.getAttribute(\"child\");\n\n if ((!parentGroup || parentGroup === myParentGroup) && (!childGroup || childGroup === myChildGroup)) {\n checkbox.checked = checked;\n }\n }\n }\n }\n }\n\n InitTableCalculator() {\n // Task 5867423: Make Table calculator work on fusion drill down reports\n if (this.table && this.table.classList.contains(\"FusionTable\")) {\n TableCalculator.AddTable(EWS.TableCalculators.Fusion, this.table);\n }\n }\n\n static ShowPopMenu(target, menu) {\n let minHeight = null;\n\n menu.style.height = \"0\";\n\n menu.style.display = \"block\";\n menu.style.zIndex = \"310\";\n menu.style.position = \"fixed\";\n\n const targetPosition = target.getBoundingClientRect();\n const PositionLeft = targetPosition.left;\n let x = PositionLeft;\n let y = targetPosition.top + targetPosition.height + EC_Fmt.Null2ZeroInt(target.parentElement.style.paddingTop) + 3;\n\n const menuPosition = menu.getBoundingClientRect();\n const contentPosition = document.body.getBoundingClientRect();\n if (x + menuPosition.width + 3 > contentPosition.width) {\n x -= PositionLeft + menuPosition.width + 3 - contentPosition.width;\n }\n if (y + menu.scrollHeight + 3 >= contentPosition.bottom) {\n if (targetPosition.top - menu.scrollHeight - 3 > 0) {\n y = targetPosition.top - menu.scrollHeight - 3;\n } else {\n minHeight = (contentPosition.height - targetPosition.height) / 2;\n\n if (targetPosition.top > contentPosition.height / 2) {\n y = targetPosition.top - minHeight - 3;\n }\n\n menu.style.overflow = \"auto\";\n }\n }\n\n menu.style.top = `${Number.parseInt(y)}px`;\n menu.style.left = `${Number.parseInt(x)}px`;\n\n requestAnimationFrame(() => {\n // -16 is .OrderMenu height\n menu.style.height = `${(minHeight || menu.scrollHeight) - 16}px`;\n const TransitionExpandSectionDone = () => {\n menu.removeEventListener(\"transitionend\", TransitionExpandSectionDone);\n };\n menu.addEventListener(\"transitionend\", TransitionExpandSectionDone);\n });\n }\n\n static GetParameters(ParametersStr) {\n if (!ParametersStr && window?.PageParameters?.Parameters) {\n const parameter = {};\n const parameterKeys = Object.keys(PageParameters.Parameters);\n for (let i = 0; i < parameterKeys.length; i++) {\n parameter[PageParameters.Parameters[parameterKeys[i]].Field] = PageParameters.Parameters[parameterKeys[i]].Value;\n }\n // Task 640292: System error when using drill down report in fusion report: Index was outside the bounds of the array.\n return parameter;\n }\n if (!ParametersStr && window?.FluxPageParameters?.Parameters) {\n return FluxPageParameters.Parameters;\n }\n\n const parameter = {};\n if (!ParametersStr) {\n ParametersStr = EC_Fmt.GetURLParameters(EC_Fmt.Get_QueryString(\"\", \"Parameters\"));\n }\n const ParametersArr = decodeURIComponent(ParametersStr || \"\").split(\"|\");\n for (let i = 0; i < ParametersArr.length; i++) {\n let field = \"\";\n let value = \"\";\n const s = ParametersArr[i].split(\"~\");\n for (let j = 0; j < s.length; j++) {\n const type = s[j].substring(0, 2);\n if (type === \"F:\") {\n field = s[j].substring(2);\n } else if (type === \"V:\") {\n value = s[j].substring(2);\n }\n }\n if (field) {\n parameter[field] = value;\n }\n }\n return parameter;\n }\n\n static ParametersToUrl(Parameters, encodeURI = true) {\n const url = [];\n const keys = Object.keys(Parameters);\n const len = keys.length;\n for (let i = 0; i < len; i++) {\n // Task 640220: Pinned filter in Fusion report cuts off value, causes report to return no data\n if (encodeURI) {\n url.push(`F:${encodeURIComponent(keys[i])}~V:${encodeURIComponent(Parameters[keys[i]])}`);\n } else {\n // Task // Task 711434: Accounting Reports - Request for Input about Best Practices\n url.push(`F:${keys[i]}~V:${Parameters[keys[i]]}`);\n }\n }\n return url.join(\"|\");\n }\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction FillFusionReportToElements(el, ReportID) {\n return new Promise((resolve, reject) => {\n EC_FluxView.FillToElements({ el, ReportID }).then(() => {\n const myFluxDisplay = new FluxDisplay({ el, ReportID });\n myFluxDisplay.Init();\n }).catch(reject);\n });\n}\n\nfunction mergeCustomFilter(customFilterStr) {\n const params = {};\n\n const regex = /F:([^~]+)~V:([^~]+)~O:([^|]+)/g;\n const matches = [...customFilterStr.matchAll(regex)];\n matches.forEach((match) => {\n const [_, key, valueStr, operator] = match;\n const value = valueStr.replaceAll(\"^\", \"%5E\").split(\"%5E\").map(decodeURIComponent);\n const paramKey = `${key}_${operator}`;\n params[paramKey] = params[paramKey] || new Set();\n\n value.forEach(val => params[paramKey].add(val));\n });\n\n const mergedParams = Object.entries(params)\n .filter(([_, values]) => values.size > 0)\n .map(([paramKey, values]) => {\n const mergedValue = Array.from(values).join(\"%5E\");\n const [key, operator] = paramKey.split(\"_\");\n return `F:${key}~V:${mergedValue}~O:${operator}`;\n });\n\n return mergedParams.join(\"|\");\n}\n"],"names":["EC_FluxView","constructor","el","ReportID","this","Container","_QueryStringMap","Map","_ParameterMap","SetQueryString","name","value","set","SetParameter","SetPinnedPeriod","selectAs","SetPinnedFilter","SetPinnedVariable","_GetRequest","myRequest","ECP","EC_Request","SetReturnType","EC_ReturnType","Text","AddRequestVariable","forEach","key","AddParameter","GetResult","Submit","GetHtml","GetJson","Json","FillToElements","Promise","resolve","reject","myFluxView","then","innerHTML","reportHtml","catch","FluxDisplay","BaseReportID","ParametersStr","Guid","EC_Fmt","DrillDownFilterCallBack","setAttribute","table","querySelector","pinnedFiltersForm","postToDashboardForm","Init","me","FixHeader","InitCharts","InitOrder","InitDrillDown","InitPostToDashboard","SetDrillDownFilterCallBack","callback","let","headerHeight","headerRows","querySelectorAll","i","length","headerCells","j","th","hasAttribute","classList","add","style","top","offsetHeight","maxWidth","offsetWidth","minHeight","height","border","width","overflow","resizeReportHeader","Math","max","styleName","stickyHeaderStyle","document","createElement","id","appendChild","maxParentHeight","parentRows","parentCells","maxChildHeight","childRows","childCells","resizeReportHeaderTimer","window","addEventListener","clearTimeout","setTimeout","Tools","EventBus","On","async","_feature","tables","SyncTable","SyncTableArr","split","target","targetArr","getElementById","TriggerEvent","GetTableSyncInfoAPI","EC_Verb","Get","GetPageParameter","TableSyncInfo","await","SyncState","LastSyncTime","NextSyncTime","remove","Targethtml","Null2EmptyStr","getAttribute","includes","charts","chartElement","graph","closest","ReportContent","getBoundingClientRect","panelWidth","body","isMobile","EC_FluxGraph","initChart","NoHover","chartResize","HtmlStrToElement","ChartMousedown","event","e","display","chart","stopPropagation","preventDefault","marginWidth","x","marginHeight","y","mousedownX","mousedownY","mousemoveHandle","mouseEvent","mouseupHandle","removeEventListener","onAfterSort","orderContainer","OrderEvent","contains","OrderReport","currentTarget","trigger","field","dataTypeStr","elementtd","ColumnIndex","Array","from","parentElement","children","indexOf","goals","HasSort","FieldName","CssEscape","OrderMenu","AlreadyOpen","HideAllDivs","AllowHideAllDivs","SortState","matches","IsOrder","OrderMenuHtml","GetMenuItemHtml","DataTypeParse","GetMenuFreezeItemHtml","ReportAuthentication","GoalsTypeArr","toLowerCase","AuthenticationID","toString","GetMenuGoalsItemHtml","ExecuteSort","FusionUnfreezeColumn","CurrentFusionTable","ExecuteFloatColumn","FusionGoals","ExecuteGoals","HigherLower","HigherLowerclick","GoalsSaveDom","GoalsSave","GoalsEditDom","GoalsEdit","GoalsRemoveDom","GoalsRemove","ShowPopMenu","dataType","ExistingSortState","htmlB","IsNumericDataType","IsDateDataType","InputFmt","DataType","_MonthDay","FreezeState","FusionTable","ColumnI","Null2ZeroInt","RowArr","RemoveRowArr","rowType","RowCell","Browser","Safari","zIndex","stickyleftArr","setWidth","parseFloat","getComputedStyle","replace","FusionFreezeColumnStyle","printStyleEle","reportId","baseReportID","direction","isNull","data","OrderBy","Dialog","ShowLoading","Post","redirect","NewOrderMenu","location","href","CommonDashboards","FusionView","Get_QueryString","element","Field","IsFusionGoals","IsFusionOfGoals","html","thFusionGoals","datatype","NewGoals","cloneNode","removeAttribute","NewofGoals","innerText","title","goalsrowmd5","rowsting","MD5","replaceAll","GoalsInput","OfGoalsCompute","append","insertBefore","nextSibling","tr","OfGoals","GoalsHL","originalItem","GoalsValue","CDec","originalGoalsValue","OfGoalsValue","toFixed","clickField","LowerArr","GoalsArr","fusiongoals","Item","Value","thisme","goalsField","FusionGoalsArr","FusionGoalsDic","FusionGoalsItem","GoalsDic","GoalsID","Goal","push","JSON","stringify","RemoveArr","LoadFusionGraph","Alert","oldvalue","ValueColumn","RowIdentifier","json","IsValidGoal","GoalsSpan","FusionGoalsTh","InitCollapsing","URLHash","Expand","DataHtml","ColumnHeader","ParentArr","ChildArr","ExpandedArr","GetURLParameters","Expanded","startsWith","splice","FirstChild","FirstParent","IconHtml","IsColumnRotateicon","Child","IconHtmlNode","Childtd","firstChild","Parent","ParentTd","DetailArr","Detail","ExpanStr","span","whiteSpace","tagName","Collapsing","updatedAnchor","IsCollapse","rowtype","AllArr","CurTr","CurRowType","parent","ChildArrAll","filter","child","DetailAll","detail","CurExpanded","ExpandedStr","encodeURIComponent","CurrentTr","columnValue","FusionFieldType","CurrentTd","TrArr","cellIndex","cancelBubble","openDrillDown","IsChart","DrilDownCache","DrillDownFields","EWS","VerifySession","fields","Data","sort","a","b","v","Category","Display","prevCategory","item","class","template","addCommentDiv","Settings","DashboardID","filterTarget","loadFilter","regex","test","drillDownFunc","aEvent","substring","DrillDownText","drillDownColumnValue","headerValue","CreateDrillDown","DrillDownDialogID","anchorsWithoutHref","RemoveAllEventListeners","addCommentsBtn","AddComments","bind","includeExcludeBtn","IncludeExcludeFilter","curent","isInclude","fieldValue","CustomFilter","result","URLCustomFilter","mergeCustomFilter","obj","message","list","tmpArr","tmpArr2","HyperlinkMD5List","FusionFieldSelectAs","Link","pinValue","FusionFieldSelectAlias","IsRepeat","parentNode","HideLoading","drillDownDialogID","dialog","dialogContainer","dialogContent","expandDrillDownBtn","offsetLeft","dialogList","ShowDialog","Object","assign","innerWidth","screen","innerHeight","disableModal","disableButtons","confirmButtonAction","cancelButtonAction","myDialog","fusionTables","TableCalculators","Fusion","TableCalculator","RemoveTable","padding","dialogContainers","left","Message","drillDownDivs","drillDownSpans","titleEl","cursor","NewdrillDownDivs","NewdrillDownSpans","ParametersToUrl","GetParameters","DrillDownTitle","DashboardReportURL","FluxViewContainer","Dahsboarddrilldown","Parameters","FillInDialog","maxHeight","clientHeight","clientWidth","myDrillDownFluxView","parameters","keys","dom","reportEl","styleElements","myDrillDownFluxDisplay","InitTableCalculator","container","InitPinnedFilter","onAfterFilter","tabContainer","fusionFiltersHtml","StrParameters","decodeURIComponent","ReportPinTabs","FiltersRequired","FiltersRequiredShowHTML","Input","ajaxInputArr","HTML","AjaxInput","_","hidden","filedValue","Snackbar","fusionPeriods","fusionPeriod","periodType","periodInput","Inputs","periodYearsInput","yearsValue","startDate","endDate","dateInputs","startDateValue","endDateValue","ToDate","Trn","weekInputs","StartWeek","EndWeek","pinnedPeriodsYears","periodYears","periodInputs","splitValue","requiredFields","submitBtn","SubmitBtnForm","form","fusionPeriodArr","CurValue","GetPinnedFilterFormData","IsGetRequest","OwnerAuthenticationID","PinFiltersValue","parse","ex","OpenWithCtrlClickSupport","titles","caretDiv","filterBody","categories","category","categoryName","CollapseCategory","ExpandCategory","categoryItems","categoryItem","caret","SetReportSetting","PinFiltersValueArr","fusionInputs","input","selectAllCheckBoxes","selectAllCB","index","myParentNode","parents","getCheckBoxHtml","SelectAll","selectAllCheckBox","submit","parentGroup","childGroup","myTr","checked","selectAllSub","checkbox","mySelectAs","myParentGroup","myChildGroup","checkboxes","AddTable","menu","position","targetPosition","PositionLeft","paddingTop","menuPosition","contentPosition","scrollHeight","bottom","Number","parseInt","requestAnimationFrame","TransitionExpandSectionDone","PageParameters","parameter","parameterKeys","FluxPageParameters","ParametersArr","s","type","encodeURI","url","len","join","FillFusionReportToElements","myFluxDisplay","customFilterStr","params","matchAll","valueStr","operator","match","map","paramKey","Set","val","mergedParams","entries","values","size","mergedValue"],"mappings":"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"}