sf-i-events 1.0.778 → 1.0.780
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dev/index.html +8 -8
- package/package.json +1 -1
- package/sf-i-events.d.ts +3 -2
- package/sf-i-events.js +229 -23
- package/src/sf-i-events.ts +260 -24
- package/dev/Untitled-1.json +0 -4835
- package/dev/Untitled-2.json +0 -38553
package/src/sf-i-events.ts
CHANGED
|
@@ -4403,7 +4403,33 @@ export class SfIEvents extends LitElement {
|
|
|
4403
4403
|
return html;
|
|
4404
4404
|
|
|
4405
4405
|
}
|
|
4406
|
+
renderCalendarEventSummaryViewer = () => {
|
|
4406
4407
|
|
|
4408
|
+
var html = '';
|
|
4409
|
+
|
|
4410
|
+
html += '<div id="stream-event-summary" part="stream-event-total" class="d-flex flex-wrap">';
|
|
4411
|
+
html += '<div part="badge-dashboard" class="d-flex flex-col align-start mr-10 mb-10 no-shrink"><div class="d-flex justify-center"><span>Total:</span> <span id="graph-total">DASHBOARD_TOTAL</span></div><div class="d-flex justify-center">DASHBOARD_TOTAL_SUBFILTER</div></div>';
|
|
4412
|
+
html += '<div part="badge-dashboard" id="chip-completeness-0" class="chip stat-completeness d-flex flex-col align-start mr-10 mb-10 no-shrink"><div class="d-flex justify-center"><span class="material-icons color-not-started">schedule</span> <span>Not Started:</span> <span id="graph-not-started">DASHBOARD_NOT_STARTED</span></div><div class="d-flex justify-center">DASHBOARD_NOT_STARTED_SUBFILTER</div></div>';
|
|
4413
|
+
html += '<div part="badge-dashboard" id="chip-completeness-1" class="chip stat-completeness d-flex flex-col align-start mr-10 mb-10 no-shrink"><div class="d-flex justify-center"><span class="material-symbols-outlined color-pending">pending</span> <span>Pending Approval:</span> <span id="graph-pending-approval">DASHBOARD_PENDING_APPROVAL</span></div><div class="d-flex justify-center">DASHBOARD_PENDING_APPROVAL_SUBFILTER</div></div>';
|
|
4414
|
+
html += '<div part="badge-dashboard" id="chip-completeness-2" class="chip stat-completeness d-flex flex-col align-start mr-10 mb-10 no-shrink"><div class="d-flex justify-center"><span class="material-symbols-outlined color-rejected">block</span> <span>Rejected:</span> <span id="graph-rejected">DASHBOARD_REJECTED</span></div><div class="d-flex justify-center">DASHBOARD_REJECTED_SUBFILTER</div></div>';
|
|
4415
|
+
html += '<div part="badge-dashboard" id="chip-completeness-3" class="chip stat-completeness d-flex flex-col align-start mr-10 mb-10 no-shrink"><div class="d-flex justify-center"><span class="material-symbols-outlined color-done">check_circle</span> <span>Approved:</span> <span id="graph-approved">DASHBOARD_APPROVED</span></div><div class="d-flex justify-center">DASHBOARD_APPROVED_SUBFILTER</div></div>';
|
|
4416
|
+
html += '<div part="badge-dashboard" id="chip-timeliness-0" class="chip stat-timeliness justify-center align-center mr-10 mb-10 no-shrink late-statuses"><span class="material-icons color-in-time">schedule</span> <span>In Time:</span> <span id="graph-in-time">DASHBOARD_IN_TIME</span></div>';
|
|
4417
|
+
html += '<div part="badge-dashboard" id="chip-timeliness-1" class="chip stat-timeliness justify-center align-center mr-10 mb-10 no-shrink late-statuses"><span class="material-icons color-past-due-date">timer</span> <span>Past Due Date:</span> <span id="graph-past-due-date">DASHBOARD_PAST_DUE_DATE</span></div>';
|
|
4418
|
+
html += '<div part="badge-dashboard" id="chip-timeliness-2" class="chip stat-timeliness justify-center align-center mr-10 mb-10 no-shrink late-statuses"><span class="material-icons color-late-reported">report_off</span> <span>Late Reported:</span> <span id="graph-late-reported">DASHBOARD_LATE_REPORTED</span></div>';
|
|
4419
|
+
html += '<div part="badge-dashboard" id="chip-timeliness-3" class="chip stat-timeliness justify-center align-center mr-10 mb-10 no-shrink late-statuses"><span class="material-icons color-late-approved">remove_done</span> <span>Late Approved:</span> <span id="graph-late-approved">DASHBOARD_LATE_APPROVED</span></div>';
|
|
4420
|
+
html += '<div part="badge-dashboard" id="chip-timeliness-4" class="chip stat-timeliness justify-center align-center mr-10 mb-10 no-shrink late-statuses"><span class="material-icons color-late-executed">running_with_errors</span> <span>Late Executed:</span> <span id="graph-late-executed">DASHBOARD_LATE_EXECUTED</span></div>';
|
|
4421
|
+
|
|
4422
|
+
html += '<div part="badge-dashboard" id="chip-compliance-0" class="chip stat-compliance justify-center align-center mr-10 mb-10 no-shrink compliance-statuses"><span class="material-icons color-scheduled">schedule</span> <span>Scheduled:</span> <span id="graph-scheduled">DASHBOARD_SCHEDULED</span></div>';
|
|
4423
|
+
html += '<div part="badge-dashboard" id="chip-compliance-1" class="chip stat-compliance justify-center align-center mr-10 mb-10 no-shrink compliance-statuses"><span class="material-icons color-not-complied">disabled_by_default</span> <span>Not Complied:</span> <span id="graph-not-complied">DASHBOARD_NOT_COMPLIED</span></div>';
|
|
4424
|
+
html += '<div part="badge-dashboard" id="chip-compliance-2" class="chip stat-compliance justify-center align-center mr-10 mb-10 no-shrink compliance-statuses"><span class="material-icons color-partially-complied">rule</span> <span>Partially Complied:</span> <span id="graph-partially-complied">DASHBOARD_PARTIALLY_COMPLIED</span></div>';
|
|
4425
|
+
html += '<div part="badge-dashboard" id="chip-compliance-3" class="chip stat-compliance justify-center align-center mr-10 mb-10 no-shrink compliance-statuses"><span class="material-symbols-outlined color-complied">sweep</span> <span>Complied:</span> <span id="graph-complied">DASHBOARD_COMPLIED</span></div>';
|
|
4426
|
+
html += '</div>';
|
|
4427
|
+
|
|
4428
|
+
html += '<div id="stream-event-filter" part="stream-event-total" class="d-flex flex-wrap"></div>';
|
|
4429
|
+
|
|
4430
|
+
return html;
|
|
4431
|
+
|
|
4432
|
+
}
|
|
4407
4433
|
renderStatisticsFiltersTableStart = () => {
|
|
4408
4434
|
|
|
4409
4435
|
var html = '';
|
|
@@ -4414,11 +4440,15 @@ export class SfIEvents extends LitElement {
|
|
|
4414
4440
|
|
|
4415
4441
|
}
|
|
4416
4442
|
|
|
4417
|
-
renderStatisticsFiltersTableRow = () => {
|
|
4443
|
+
renderStatisticsFiltersTableRow = (filterUser: boolean = false) => {
|
|
4418
4444
|
|
|
4419
4445
|
var html = '';
|
|
4420
4446
|
html += '<tr class="tablerow">'
|
|
4421
|
-
html +='<td part="td-body" class="td-body TD_BODY_CLASS"><div class="d-flex align-center flex-wrap"><div part="td-head" class="pl-0-imp w-100 d-flex align-center">FILTER_CRITERIA_NAME</div><div>DASHBOARD_FILTER_NAME</div
|
|
4447
|
+
html +='<td part="td-body" class="td-body TD_BODY_CLASS"><div class="d-flex align-center flex-wrap"><div part="td-head" class="pl-0-imp w-100 d-flex align-center">FILTER_CRITERIA_NAME</div><div>DASHBOARD_FILTER_NAME</div>'
|
|
4448
|
+
if(filterUser){
|
|
4449
|
+
html += '<div part="td-head" class="pl-0-imp w-100 d-flex align-center">Last Access</div><div>DASHBOARD_LAST_ACTIVE</div><div part="td-head" class="pl-0-imp w-100 d-flex align-center">Last Action</div><div>DASHBOARD_LAST_ACTION</div>'
|
|
4450
|
+
}
|
|
4451
|
+
html +='</div></td>'
|
|
4422
4452
|
html +='<td part="td-body" class="td-body TD_BODY_CLASS"><div class="d-flex align-center flex-wrap"><div part="td-head" class="pl-0-imp w-100 d-flex align-center"><span class="small-icon material-icons color-not-started">schedule</span> Not Started</div><div>DASHBOARD_NOT_STARTED</div></div></td>'
|
|
4423
4453
|
html +='<td part="td-body" class="td-body TD_BODY_CLASS"><div class="d-flex align-center flex-wrap"><div part="td-head" class="pl-0-imp w-100 d-flex align-center"><span class="small-icon material-symbols-outlined color-pending">pending</span> Pending Approval</div><div>DASHBOARD_PENDING_APPROVAL</div></div></td>'
|
|
4424
4454
|
html +='<td part="td-body" class="td-body TD_BODY_CLASS"><div class="d-flex align-center flex-wrap"><div part="td-head" class="pl-0-imp w-100 d-flex align-center"><span class="small-icon material-symbols-outlined color-rejected">block</span> Rejected</div><div>DASHBOARD_REJECTED</div></div></td>'
|
|
@@ -4433,7 +4463,7 @@ export class SfIEvents extends LitElement {
|
|
|
4433
4463
|
renderStatisticsFiltersTableEnd = () => {
|
|
4434
4464
|
|
|
4435
4465
|
var html = '';
|
|
4436
|
-
html += '</tbody></table
|
|
4466
|
+
html += '</tbody></table></div>';
|
|
4437
4467
|
|
|
4438
4468
|
return html;
|
|
4439
4469
|
|
|
@@ -5099,7 +5129,13 @@ export class SfIEvents extends LitElement {
|
|
|
5099
5129
|
|
|
5100
5130
|
renderStatistics = (_firstDay: any, _endDay: any, iInit: number, iLast: number, showGraph: boolean, index: number, month: number, period: string, firstDate: any = null, parametersTitle: string) => {
|
|
5101
5131
|
var total = 0, notStarted = 0, approved = 0, pendingApproval = 0, rejected = 0;
|
|
5132
|
+
let subfiltersTotal:any = {}
|
|
5133
|
+
let subfiltersNotStarted:any = {}
|
|
5134
|
+
let subfiltersPendingApproval:any = {}
|
|
5135
|
+
let subfiltersRejected:any = {}
|
|
5136
|
+
let subfiltersApproved:any = {}
|
|
5102
5137
|
var html = '';
|
|
5138
|
+
|
|
5103
5139
|
// var lastDay = iLast;
|
|
5104
5140
|
// var slice = 2;
|
|
5105
5141
|
this.clearGraphData();
|
|
@@ -5108,7 +5144,7 @@ export class SfIEvents extends LitElement {
|
|
|
5108
5144
|
|
|
5109
5145
|
html += this.renderCalendarStatisticsGraphs(showGraph, parametersTitle);
|
|
5110
5146
|
html += this.renderCalendarContainerDivStart(index)
|
|
5111
|
-
html += this.
|
|
5147
|
+
html += this.renderCalendarEventSummaryViewer();
|
|
5112
5148
|
let filtersTableHtml = ""
|
|
5113
5149
|
if(Object.keys(this.statisticsFiltersData).length > 0){
|
|
5114
5150
|
filtersTableHtml += this.renderStatisticsFiltersTableStart()
|
|
@@ -5139,26 +5175,69 @@ export class SfIEvents extends LitElement {
|
|
|
5139
5175
|
|
|
5140
5176
|
if(this.statistics[mmdd] != null) {
|
|
5141
5177
|
|
|
5142
|
-
|
|
5178
|
+
|
|
5143
5179
|
// html += this.renderCalendarRowDivStart(i, firstDate, mmdd.split("/")[1] + "/" + mmdd.split("/")[0]);
|
|
5144
5180
|
total += this.statistics[mmdd].count;
|
|
5181
|
+
console.log('mmdd', mmdd, this.statistics[mmdd].count, total);
|
|
5145
5182
|
notStarted += this.statistics[mmdd]["not-started"] ?? 0;
|
|
5146
5183
|
pendingApproval += this.statistics[mmdd]["pending-approval"] ?? 0;
|
|
5147
5184
|
rejected += this.statistics[mmdd]["rejected"] ?? 0;
|
|
5148
5185
|
approved += this.statistics[mmdd]["approved"] ?? 0;
|
|
5149
|
-
|
|
5186
|
+
for(let subfilter of Object.keys(this.statistics['subfilters'])){
|
|
5187
|
+
if(subfiltersTotal[subfilter] == null){
|
|
5188
|
+
subfiltersTotal[subfilter] = 0
|
|
5189
|
+
}
|
|
5190
|
+
if(subfiltersNotStarted[subfilter] == null){
|
|
5191
|
+
subfiltersNotStarted[subfilter] = 0
|
|
5192
|
+
}
|
|
5193
|
+
if(subfiltersPendingApproval[subfilter] == null){
|
|
5194
|
+
subfiltersPendingApproval[subfilter] = 0
|
|
5195
|
+
}
|
|
5196
|
+
if(subfiltersRejected[subfilter] == null){
|
|
5197
|
+
subfiltersRejected[subfilter] = 0
|
|
5198
|
+
}
|
|
5199
|
+
if(subfiltersApproved[subfilter] == null){
|
|
5200
|
+
subfiltersApproved[subfilter] = 0
|
|
5201
|
+
}
|
|
5202
|
+
if(this.statistics['subfilters'][subfilter][mmdd] != null){
|
|
5203
|
+
|
|
5204
|
+
|
|
5205
|
+
subfiltersTotal[subfilter] += (this.statistics['subfilters'][subfilter][mmdd].count)
|
|
5206
|
+
|
|
5207
|
+
|
|
5208
|
+
subfiltersNotStarted[subfilter] += (this.statistics['subfilters'][subfilter][mmdd]['not-started'] ?? 0)
|
|
5209
|
+
|
|
5210
|
+
|
|
5211
|
+
subfiltersPendingApproval[subfilter] += (this.statistics['subfilters'][subfilter][mmdd]['pending-approval'] ?? 0)
|
|
5212
|
+
|
|
5213
|
+
|
|
5214
|
+
subfiltersRejected[subfilter] += (this.statistics['subfilters'][subfilter][mmdd]['rejected'] ?? 0)
|
|
5215
|
+
|
|
5216
|
+
|
|
5217
|
+
subfiltersApproved[subfilter] += (this.statistics['subfilters'][subfilter][mmdd]['approved'] ?? 0)
|
|
5218
|
+
}
|
|
5219
|
+
}
|
|
5150
5220
|
}
|
|
5151
5221
|
|
|
5152
5222
|
|
|
5153
5223
|
}
|
|
5154
5224
|
|
|
5155
5225
|
if(Object.keys(this.statisticsFiltersData).length > 0){
|
|
5226
|
+
|
|
5156
5227
|
let filtercriteria = Object.keys(this.statisticsFiltersData)[0]
|
|
5157
5228
|
let sortedFilters = Util.alphabeticalSort(this.statisticsMeta[filtercriteria])
|
|
5158
5229
|
for(let [filterindex, filterval] of sortedFilters.entries()){
|
|
5159
5230
|
let filtername = filterval.split(';')[0]
|
|
5160
5231
|
let filterid = filterval.split(';')[1]
|
|
5161
5232
|
let filterTotal = 0, filterNotStarted = 0, filterPendingApproval = 0, filterRejected = 0, filterApproved = 0;
|
|
5233
|
+
let lastActive = "";
|
|
5234
|
+
let lastAction = "";
|
|
5235
|
+
let subfiltersFilterTotal:any = {}
|
|
5236
|
+
let subfiltersFilterNotStarted:any = {}
|
|
5237
|
+
let subfiltersFilterPendingApproval:any = {}
|
|
5238
|
+
let subfiltersFilterRejected:any = {}
|
|
5239
|
+
let subfiltersFilterApproved:any = {}
|
|
5240
|
+
|
|
5162
5241
|
for(var i = iInit; i <= iLast; i++) {
|
|
5163
5242
|
|
|
5164
5243
|
let mmdd : string = "";
|
|
@@ -5171,16 +5250,50 @@ export class SfIEvents extends LitElement {
|
|
|
5171
5250
|
mmdd = ("0" + (currDate.getMonth()+1)).slice(-2) + "/" + ("0" + currDate.getDate()).slice(-2);
|
|
5172
5251
|
}
|
|
5173
5252
|
if(this.statisticsFiltersData[filtercriteria][filterid] != null){
|
|
5253
|
+
if(this.statisticsFiltersData[filtercriteria][filterid]['lasttime'] != null){
|
|
5254
|
+
lastAction = this.statisticsFiltersData[filtercriteria][filterid]['lasttime']['lastaction'] ?? ""
|
|
5255
|
+
lastActive = this.statisticsFiltersData[filtercriteria][filterid]['lasttime']['lastactive'] ?? ""
|
|
5256
|
+
}
|
|
5174
5257
|
if(this.statisticsFiltersData[filtercriteria][filterid][mmdd] != null){
|
|
5175
5258
|
filterTotal += this.statisticsFiltersData[filtercriteria][filterid][mmdd].count
|
|
5176
5259
|
filterNotStarted += this.statisticsFiltersData[filtercriteria][filterid][mmdd]['not-started'] ?? 0
|
|
5177
5260
|
filterPendingApproval += this.statisticsFiltersData[filtercriteria][filterid][mmdd]['pending-approval'] ?? 0
|
|
5178
5261
|
filterRejected += this.statisticsFiltersData[filtercriteria][filterid][mmdd]['rejected'] ?? 0
|
|
5179
5262
|
filterApproved += this.statisticsFiltersData[filtercriteria][filterid][mmdd]['approved'] ?? 0
|
|
5263
|
+
for(let subfilter of Object.keys(this.statisticsFiltersData[filtercriteria][filterid]['subfilters'])){
|
|
5264
|
+
if(subfiltersFilterTotal[subfilter] == null){
|
|
5265
|
+
subfiltersFilterTotal[subfilter] = 0
|
|
5266
|
+
}
|
|
5267
|
+
if(subfiltersFilterNotStarted[subfilter] == null){
|
|
5268
|
+
subfiltersFilterNotStarted[subfilter] = 0
|
|
5269
|
+
}
|
|
5270
|
+
if(subfiltersFilterPendingApproval[subfilter] == null){
|
|
5271
|
+
subfiltersFilterPendingApproval[subfilter] = 0
|
|
5272
|
+
}
|
|
5273
|
+
if(subfiltersFilterRejected[subfilter] == null){
|
|
5274
|
+
subfiltersFilterRejected[subfilter] = 0
|
|
5275
|
+
}
|
|
5276
|
+
if(subfiltersFilterApproved[subfilter] == null){
|
|
5277
|
+
subfiltersFilterApproved[subfilter] = 0
|
|
5278
|
+
}
|
|
5279
|
+
if(this.statisticsFiltersData[filtercriteria][filterid]['subfilters'][subfilter][mmdd] != null){
|
|
5280
|
+
|
|
5281
|
+
subfiltersFilterTotal[subfilter] += (this.statisticsFiltersData[filtercriteria][filterid]['subfilters'][subfilter][mmdd].count)
|
|
5282
|
+
console.log('subfilterTotal',subfiltersFilterTotal);
|
|
5283
|
+
|
|
5284
|
+
subfiltersFilterNotStarted[subfilter] += (this.statisticsFiltersData[filtercriteria][filterid]['subfilters'][subfilter][mmdd]['not-started'] ?? 0)
|
|
5285
|
+
|
|
5286
|
+
subfiltersFilterPendingApproval[subfilter] += (this.statisticsFiltersData[filtercriteria][filterid]['subfilters'][subfilter][mmdd]['pending-approval'] ?? 0)
|
|
5287
|
+
|
|
5288
|
+
subfiltersFilterRejected[subfilter] += (this.statisticsFiltersData[filtercriteria][filterid]['subfilters'][subfilter][mmdd]['rejected'] ?? 0)
|
|
5289
|
+
|
|
5290
|
+
subfiltersFilterApproved[subfilter] += (this.statisticsFiltersData[filtercriteria][filterid]['subfilters'][subfilter][mmdd]['approved'] ?? 0)
|
|
5291
|
+
}
|
|
5292
|
+
}
|
|
5180
5293
|
}
|
|
5181
5294
|
}
|
|
5182
5295
|
}
|
|
5183
|
-
filtersTableHtml += this.renderStatisticsFiltersTableRow()
|
|
5296
|
+
filtersTableHtml += this.renderStatisticsFiltersTableRow(lastAction != "" || lastActive != "")
|
|
5184
5297
|
if(filterindex % 2 == 0){
|
|
5185
5298
|
filtersTableHtml = filtersTableHtml.replace(/TD_BODY_CLASS/g, "td-light");
|
|
5186
5299
|
}else{
|
|
@@ -5188,11 +5301,26 @@ export class SfIEvents extends LitElement {
|
|
|
5188
5301
|
}
|
|
5189
5302
|
filtersTableHtml = filtersTableHtml.replace("FILTER_CRITERIA_NAME", filtercriteria+"");
|
|
5190
5303
|
filtersTableHtml = filtersTableHtml.replace("DASHBOARD_FILTER_NAME", (filtername+"").replace(/\([^)]*\)/g,""));
|
|
5191
|
-
|
|
5192
|
-
|
|
5193
|
-
|
|
5194
|
-
|
|
5195
|
-
|
|
5304
|
+
let filterTotalHtml = filterTotal + ""
|
|
5305
|
+
let filterNotStartedHtml = filterNotStarted + Util.percentageString(filterNotStarted, filterTotal)
|
|
5306
|
+
let filterPendingApprovalHtml = filterPendingApproval + Util.percentageString(filterPendingApproval, filterTotal)
|
|
5307
|
+
let filterRejectedHtml = filterRejected + Util.percentageString(filterRejected, filterTotal)
|
|
5308
|
+
let filterApprovedHtml = filterApproved + Util.percentageString(filterApproved, filterTotal)
|
|
5309
|
+
for(let subfilter of Object.keys(this.statisticsFiltersData[filtercriteria][filterid]['subfilters'])){
|
|
5310
|
+
filterTotalHtml += `<br />${subfilter}: ${subfiltersFilterTotal[subfilter]}${Util.percentageString(subfiltersFilterTotal[subfilter], filterTotal)}`
|
|
5311
|
+
filterNotStartedHtml += `<br />${subfilter}: ${subfiltersFilterNotStarted[subfilter]}${Util.percentageString(subfiltersFilterNotStarted[subfilter], filterNotStarted)}`
|
|
5312
|
+
filterPendingApprovalHtml += `<br />${subfilter}: ${subfiltersFilterPendingApproval[subfilter]}${Util.percentageString(subfiltersFilterPendingApproval[subfilter], filterPendingApproval)}`
|
|
5313
|
+
filterRejectedHtml += `<br />${subfilter}: ${subfiltersFilterRejected[subfilter]}${Util.percentageString(subfiltersFilterRejected[subfilter], filterRejected)}`
|
|
5314
|
+
filterApprovedHtml += `<br />${subfilter}: ${subfiltersFilterApproved[subfilter]}${Util.percentageString(subfiltersFilterApproved[subfilter], filterApproved)}`
|
|
5315
|
+
}
|
|
5316
|
+
console.log('subfilterstotal', subfiltersFilterTotal)
|
|
5317
|
+
filtersTableHtml = filtersTableHtml.replace("DASHBOARD_TOTAL", filterTotalHtml);
|
|
5318
|
+
filtersTableHtml = filtersTableHtml.replace("DASHBOARD_NOT_STARTED", filterNotStartedHtml);
|
|
5319
|
+
filtersTableHtml = filtersTableHtml.replace("DASHBOARD_APPROVED", filterApprovedHtml);
|
|
5320
|
+
filtersTableHtml = filtersTableHtml.replace("DASHBOARD_PENDING_APPROVAL", filterPendingApprovalHtml);
|
|
5321
|
+
filtersTableHtml = filtersTableHtml.replace("DASHBOARD_REJECTED", filterRejectedHtml);
|
|
5322
|
+
filtersTableHtml = filtersTableHtml.replace("DASHBOARD_LAST_ACTION", lastAction);
|
|
5323
|
+
filtersTableHtml = filtersTableHtml.replace("DASHBOARD_LAST_ACTIVE", lastActive);
|
|
5196
5324
|
}
|
|
5197
5325
|
filtersTableHtml += this.renderStatisticsFiltersTableEnd()
|
|
5198
5326
|
}
|
|
@@ -5208,14 +5336,31 @@ export class SfIEvents extends LitElement {
|
|
|
5208
5336
|
|
|
5209
5337
|
console.log('progress', this.period, total, notStarted, approved, this.statistics)
|
|
5210
5338
|
|
|
5211
|
-
|
|
5212
|
-
|
|
5213
|
-
|
|
5214
|
-
|
|
5215
|
-
|
|
5339
|
+
let totalHtml = ""
|
|
5340
|
+
let notStartedHtml = ""
|
|
5341
|
+
let pendingApprovalHtml = ""
|
|
5342
|
+
let rejectedHtml = ""
|
|
5343
|
+
let approvedHtml = ""
|
|
5344
|
+
for(let subfilter of Object.keys(this.statistics['subfilters'])){
|
|
5345
|
+
totalHtml += `<br />${subfilter}: ${subfiltersTotal[subfilter]}${Util.percentageString(subfiltersTotal[subfilter], total)}`
|
|
5346
|
+
notStartedHtml += `<br />${subfilter}: ${subfiltersNotStarted[subfilter]}${Util.percentageString(subfiltersNotStarted[subfilter], notStarted)}`
|
|
5347
|
+
pendingApprovalHtml += `<br />${subfilter}: ${subfiltersPendingApproval[subfilter]}${Util.percentageString(subfiltersPendingApproval[subfilter], pendingApproval)}`
|
|
5348
|
+
rejectedHtml += `<br />${subfilter}: ${subfiltersRejected[subfilter]}${Util.percentageString(subfiltersRejected[subfilter], rejected)}`
|
|
5349
|
+
approvedHtml += `<br />${subfilter}: ${subfiltersApproved[subfilter]}${Util.percentageString(subfiltersApproved[subfilter], approved)}`
|
|
5350
|
+
}
|
|
5351
|
+
html = html.replace("DASHBOARD_TOTAL", total + "");
|
|
5352
|
+
html = html.replace("DASHBOARD_TOTAL_SUBFILTER", totalHtml.replace('<br />',''));
|
|
5353
|
+
html = html.replace("DASHBOARD_NOT_STARTED", notStarted + "");
|
|
5354
|
+
html = html.replace("DASHBOARD_NOT_STARTED_SUBFILTER", notStartedHtml.replace('<br />',''));
|
|
5355
|
+
html = html.replace("DASHBOARD_APPROVED", approved + "");
|
|
5356
|
+
html = html.replace("DASHBOARD_APPROVED_SUBFILTER", approvedHtml.replace('<br />',''));
|
|
5357
|
+
html = html.replace("DASHBOARD_PENDING_APPROVAL", pendingApproval + "");
|
|
5358
|
+
html = html.replace("DASHBOARD_PENDING_APPROVAL_SUBFILTER", pendingApprovalHtml.replace('<br />',''));
|
|
5359
|
+
html = html.replace("DASHBOARD_REJECTED", rejected + "");
|
|
5360
|
+
html = html.replace("DASHBOARD_REJECTED_SUBFILTER", rejectedHtml.replace('<br />',''));
|
|
5216
5361
|
|
|
5217
5362
|
this.htmlDataStats = 'Completeness<br /><br /><table class="w-100"><tr><th class="w-14">Total</th><th class="w-14">Not Started</th><th class="w-14">Approved</th><th class="w-14">Pending Approval</th><th class="w-14">Rejected</th><tr>';
|
|
5218
|
-
this.htmlDataStats += '<tr><td class="w-14 text-center td-odd">'+total+'</td><td class="w-14 text-center td-odd">'+notStarted+'</td><td class="w-14 text-center td-odd">'+approved+'</td><td class="w-14 text-center td-odd">'+pendingApproval+'</td><td class="w-14 text-center td-odd">'+rejected+'</td></table>'
|
|
5363
|
+
this.htmlDataStats += '<tr><td class="w-14 text-center td-odd">'+total+totalHtml+'</td><td class="w-14 text-center td-odd">'+notStarted+notStartedHtml+'</td><td class="w-14 text-center td-odd">'+approved+approvedHtml+'</td><td class="w-14 text-center td-odd">'+pendingApproval+pendingApprovalHtml+'</td><td class="w-14 text-center td-odd">'+rejected+rejectedHtml+'</td></table>'
|
|
5219
5364
|
if(Object.keys(this.statisticsFiltersData).length > 0){
|
|
5220
5365
|
this.htmlDataStats += '<br /><br />Report<br /><br />'
|
|
5221
5366
|
this.htmlDataStats += filtersTableHtml
|
|
@@ -6979,10 +7124,14 @@ export class SfIEvents extends LitElement {
|
|
|
6979
7124
|
}
|
|
6980
7125
|
|
|
6981
7126
|
for(let criteria of Object.keys(this.statisticsMeta)){
|
|
7127
|
+
if(criteria == "subfilters"){
|
|
7128
|
+
continue;
|
|
7129
|
+
}
|
|
6982
7130
|
let option = new Option()
|
|
6983
7131
|
option.value = criteria;
|
|
6984
7132
|
console.log('statistics filters criteria',criteria, filterscriteria, criteria == filterscriteria)
|
|
6985
7133
|
option.selected = (criteria == filterscriteria)
|
|
7134
|
+
|
|
6986
7135
|
if(criteria == "reporter" || criteria == "approver" || criteria == "functionhead"){
|
|
6987
7136
|
option.innerHTML = "user:" + criteria
|
|
6988
7137
|
}else{
|
|
@@ -7006,7 +7155,10 @@ export class SfIEvents extends LitElement {
|
|
|
7006
7155
|
let inputLabelCriteria = eventsContainer.querySelector('#input-label-criteria') as HTMLLabelElement
|
|
7007
7156
|
let selectFilterValues = eventsContainer.querySelector('#select-filter-values') as HTMLSelectElement
|
|
7008
7157
|
selectFilterValues.value = ""
|
|
7009
|
-
|
|
7158
|
+
let inputLabelSubfilters = eventsContainer.querySelector('#input-label-subfilter') as HTMLLabelElement
|
|
7159
|
+
let selectSubfilterCriteria = eventsContainer.querySelector('#select-subfilter-criteria') as HTMLSelectElement
|
|
7160
|
+
selectSubfilterCriteria.value = ""
|
|
7161
|
+
|
|
7010
7162
|
|
|
7011
7163
|
selectFilterValues.innerHTML = ""
|
|
7012
7164
|
let option = new Option()
|
|
@@ -7029,10 +7181,37 @@ export class SfIEvents extends LitElement {
|
|
|
7029
7181
|
console.log('changed')
|
|
7030
7182
|
this.processDateSelectionViewer(eventsContainer);
|
|
7031
7183
|
})
|
|
7184
|
+
selectSubfilterCriteria.style.display = 'block'
|
|
7185
|
+
inputLabelSubfilters.style.display = 'block'
|
|
7186
|
+
let sortedSubfilters = Util.alphabeticalSort(Object.keys(this.statisticsMeta.subfilters))
|
|
7187
|
+
|
|
7188
|
+
if(sortedSubfilters.length > 1){
|
|
7189
|
+
let option = new Option()
|
|
7190
|
+
option.value = "";
|
|
7191
|
+
option.innerHTML = "All";
|
|
7192
|
+
selectSubfilterCriteria.add(option)
|
|
7193
|
+
}
|
|
7194
|
+
for(let subfilter of sortedSubfilters){
|
|
7195
|
+
let option = new Option()
|
|
7196
|
+
option.value = subfilter;
|
|
7197
|
+
option.innerHTML = subfilter
|
|
7198
|
+
selectSubfilterCriteria.add(option)
|
|
7199
|
+
}
|
|
7200
|
+
let inputLabelSubfiltersValue = eventsContainer.querySelector('#input-label-subfilter-value') as HTMLLabelElement
|
|
7201
|
+
let selectSubfilterValues = eventsContainer.querySelector('#select-subfilter-values') as HTMLSelectElement
|
|
7202
|
+
inputLabelSubfiltersValue.style.display = 'none'
|
|
7203
|
+
selectSubfilterValues.style.display = 'none'
|
|
7204
|
+
let selectSubfilterCriteriaNew = Util.clearListeners(selectSubfilterCriteria)
|
|
7205
|
+
selectSubfilterCriteriaNew.addEventListener('change',() => {
|
|
7206
|
+
this.processDateSelectionViewer(eventsContainer)
|
|
7207
|
+
})
|
|
7032
7208
|
}else{
|
|
7033
7209
|
selectFilterValues.style.display = 'none'
|
|
7034
7210
|
inputLabelCriteria.style.display = 'none'
|
|
7211
|
+
selectSubfilterCriteria.style.display = 'none'
|
|
7212
|
+
inputLabelSubfilters.style.display = 'none'
|
|
7035
7213
|
}
|
|
7214
|
+
this.processDateSelectionViewer(eventsContainer)
|
|
7036
7215
|
})
|
|
7037
7216
|
let selectFilterCriteriaMobileNew = Util.clearListeners(selectFilterCriteriaMobile)
|
|
7038
7217
|
selectFilterCriteriaMobileNew.addEventListener('change',(ev: any) => {
|
|
@@ -7342,7 +7521,7 @@ export class SfIEvents extends LitElement {
|
|
|
7342
7521
|
radioRisk?.addEventListener('click', () => {
|
|
7343
7522
|
|
|
7344
7523
|
this.flowGraph = this.FLOW_GRAPH_RISKAREAS;
|
|
7345
|
-
//console.log('setting flow graph to ', this.flowGraph);
|
|
7524
|
+
// console.log('setting flow graph to ', this.flowGraph);
|
|
7346
7525
|
this.renderRangeEvents(new Date(valueStart), (new Date(valueEnd).getTime() - new Date(valueStart).getTime())/(1000*60*60*24), eventContainer);
|
|
7347
7526
|
this.renderRiskGraph(eventContainer)
|
|
7348
7527
|
this.attachHandlers(eventContainer, valueStart, valueEnd);
|
|
@@ -7541,7 +7720,6 @@ export class SfIEvents extends LitElement {
|
|
|
7541
7720
|
//console.log('valueend', valueEnd);
|
|
7542
7721
|
let filtercriteria = ((this._SfCustomContainer as HTMLDivElement).querySelector('#select-filter-criteria') as HTMLSelectElement).value
|
|
7543
7722
|
let filtercriterianame = ""
|
|
7544
|
-
console.log('criteria', ((this._SfCustomContainer as HTMLDivElement).querySelector('#select-filter-criteria') as HTMLSelectElement).options[((this._SfCustomContainer as HTMLDivElement).querySelector('#select-filter-criteria') as HTMLSelectElement).selectedIndex]);
|
|
7545
7723
|
if(((this._SfCustomContainer as HTMLDivElement).querySelector('#select-filter-criteria') as HTMLSelectElement).options[((this._SfCustomContainer as HTMLDivElement).querySelector('#select-filter-criteria') as HTMLSelectElement).selectedIndex] != null){
|
|
7546
7724
|
filtercriterianame = ((this._SfCustomContainer as HTMLDivElement).querySelector('#select-filter-criteria') as HTMLSelectElement).options[((this._SfCustomContainer as HTMLDivElement).querySelector('#select-filter-criteria') as HTMLSelectElement).selectedIndex].innerHTML
|
|
7547
7725
|
}
|
|
@@ -7571,6 +7749,31 @@ export class SfIEvents extends LitElement {
|
|
|
7571
7749
|
this.htmlStatsFilter = "Filters Selected -> " + Util.titleCase(filtercriterianame) + " -> " + Util.titleCase(filtervaluename)
|
|
7572
7750
|
}
|
|
7573
7751
|
}
|
|
7752
|
+
|
|
7753
|
+
let subfiltervalue = ((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-values') as HTMLSelectElement).value
|
|
7754
|
+
let subfiltervaluename = ""
|
|
7755
|
+
if(((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-values') as HTMLSelectElement).options[((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-values') as HTMLSelectElement).selectedIndex] != null){
|
|
7756
|
+
subfiltervaluename = ((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-values') as HTMLSelectElement).options[((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-values') as HTMLSelectElement).selectedIndex].innerHTML
|
|
7757
|
+
}
|
|
7758
|
+
if(subfiltervalue == ""){
|
|
7759
|
+
subfiltervalue = ((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-values-mobile') as HTMLSelectElement).value
|
|
7760
|
+
if(((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-values-mobile') as HTMLSelectElement).options[((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-values-mobile') as HTMLSelectElement).selectedIndex] != null){
|
|
7761
|
+
subfiltervaluename = ((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-values-mobile') as HTMLSelectElement).options[((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-values-mobile') as HTMLSelectElement).selectedIndex].innerHTML
|
|
7762
|
+
}
|
|
7763
|
+
}
|
|
7764
|
+
console.log('subfiltervalue, subfiltervaluename', subfiltervalue, subfiltervaluename)
|
|
7765
|
+
let subfiltercriteria = ((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-criteria') as HTMLSelectElement).value
|
|
7766
|
+
let subfiltercriterianame = ""
|
|
7767
|
+
if(((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-criteria') as HTMLSelectElement).options[((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-criteria') as HTMLSelectElement).selectedIndex] != null){
|
|
7768
|
+
subfiltercriterianame = ((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-criteria') as HTMLSelectElement).options[((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-criteria') as HTMLSelectElement).selectedIndex].innerHTML
|
|
7769
|
+
}
|
|
7770
|
+
if(subfiltercriteria == ""){
|
|
7771
|
+
subfiltercriteria = ((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-criteria-mobile') as HTMLSelectElement).value
|
|
7772
|
+
if(((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-criteria-mobile') as HTMLSelectElement).options[((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-criteria-mobile') as HTMLSelectElement).selectedIndex] != null){
|
|
7773
|
+
subfiltercriterianame = ((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-criteria-mobile') as HTMLSelectElement).options[((this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-criteria-mobile') as HTMLSelectElement).selectedIndex].innerHTML
|
|
7774
|
+
}
|
|
7775
|
+
}
|
|
7776
|
+
console.log('subfiltercriteria, subfiltercriterianame', subfiltercriteria, subfiltercriterianame)
|
|
7574
7777
|
if(valueStart != "" && valueEnd != "") {
|
|
7575
7778
|
this.initCustomRightColViewer();
|
|
7576
7779
|
if(!this.checkStartDateEarliness(valueStart)) {
|
|
@@ -7597,7 +7800,7 @@ export class SfIEvents extends LitElement {
|
|
|
7597
7800
|
//console.log('tsstart', tsStart);
|
|
7598
7801
|
//console.log('tsend', tsEnd);
|
|
7599
7802
|
|
|
7600
|
-
let meta = await this.fetchStatistics((tsStart.getMonth() + 1) + "/" + tsStart.getDate() + "/" + tsStart.getFullYear(), (tsEnd.getMonth() + 1) + "/" + tsEnd.getDate() + "/" + tsEnd.getFullYear(), filtercriteria, filtervalue);
|
|
7803
|
+
let meta = await this.fetchStatistics((tsStart.getMonth() + 1) + "/" + tsStart.getDate() + "/" + tsStart.getFullYear(), (tsEnd.getMonth() + 1) + "/" + tsEnd.getDate() + "/" + tsEnd.getFullYear(), filtercriteria, filtervalue, subfiltercriteria, subfiltervalue);
|
|
7601
7804
|
this.renderRangeStatistics(new Date(valueStart), ((new Date(valueEnd).getTime()+24*60*60*1000) - new Date(valueStart).getTime())/(1000*60*60*24), (this._SfCustomContainer as HTMLDivElement));
|
|
7602
7805
|
|
|
7603
7806
|
if(meta != null) this.renderStatisticsFilters((this._SfCustomContainer as HTMLDivElement))
|
|
@@ -9678,6 +9881,16 @@ export class SfIEvents extends LitElement {
|
|
|
9678
9881
|
html += '<label part="input-label-filter-value" id="input-label-criteria-mobile"></label>'
|
|
9679
9882
|
html += '<select id="select-filter-values-mobile"></select>'
|
|
9680
9883
|
html += '</div>';
|
|
9884
|
+
|
|
9885
|
+
html += '<div class="title-item-date">';
|
|
9886
|
+
html += '<label part="input-label-subfilter-criteria" id="input-label-subfilter-mobile">Subfilter Criteria</label>'
|
|
9887
|
+
html += '<select id="select-subfilter-criteria-mobile"></select>'
|
|
9888
|
+
html += '</div>';
|
|
9889
|
+
html += '<div class="title-item-date">';
|
|
9890
|
+
html += '<label part="input-label-subfilter-value" id="input-label-subfilter-value-mobile"></label>'
|
|
9891
|
+
html += '<select id="select-subfilter-values-mobile"></select>'
|
|
9892
|
+
html += '</div>';
|
|
9893
|
+
|
|
9681
9894
|
|
|
9682
9895
|
html += '</div>';
|
|
9683
9896
|
|
|
@@ -9709,6 +9922,15 @@ export class SfIEvents extends LitElement {
|
|
|
9709
9922
|
html += '<label part="input-label-filter-value" id="input-label-criteria"></label>'
|
|
9710
9923
|
html += '<select part="input-select-calendar-filter" id="select-filter-values"></select>'
|
|
9711
9924
|
html += '</div>';
|
|
9925
|
+
html += '<div class="title-item-date d-flex flex-col align-start">';
|
|
9926
|
+
html += '<label part="input-label-subfilter-criteria" id="input-label-subfilter">Subfilter Criteria</label>'
|
|
9927
|
+
html += '<select part="input-select-calendar-subfilter" id="select-subfilter-criteria"></select>'
|
|
9928
|
+
html += '</div>';
|
|
9929
|
+
html += '<div class="title-item-date d-flex flex-col align-start">';
|
|
9930
|
+
html += '<label part="input-label-subfilter-value" id="input-label-subfilter-value"></label>'
|
|
9931
|
+
html += '<select part="input-select-calendar-subfilter" id="select-subfilter-values"></select>'
|
|
9932
|
+
|
|
9933
|
+
html += '</div>';
|
|
9712
9934
|
|
|
9713
9935
|
|
|
9714
9936
|
html += '</div>';
|
|
@@ -9851,6 +10073,12 @@ export class SfIEvents extends LitElement {
|
|
|
9851
10073
|
selectFilterValues.style.display = 'none'
|
|
9852
10074
|
let inputLabelFilter = (this._SfCustomContainer as HTMLDivElement).querySelector('#input-label-filter') as HTMLLabelElement
|
|
9853
10075
|
inputLabelFilter.style.display = 'none';
|
|
10076
|
+
let selectSubfilterCriteria = (this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-criteria') as HTMLSelectElement
|
|
10077
|
+
selectSubfilterCriteria.style.display = 'none'
|
|
10078
|
+
let selectSubfilterValues = (this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-values') as HTMLSelectElement
|
|
10079
|
+
selectSubfilterValues.style.display = 'none'
|
|
10080
|
+
let inputLabelSubfilter = (this._SfCustomContainer as HTMLDivElement).querySelector('#input-label-subfilter') as HTMLLabelElement
|
|
10081
|
+
inputLabelSubfilter.style.display = 'none';
|
|
9854
10082
|
|
|
9855
10083
|
let selectFilterCriteriaMobile = (this._SfCustomContainer as HTMLDivElement).querySelector('#select-filter-criteria-mobile') as HTMLSelectElement
|
|
9856
10084
|
selectFilterCriteriaMobile.style.display = 'none'
|
|
@@ -9858,6 +10086,12 @@ export class SfIEvents extends LitElement {
|
|
|
9858
10086
|
selectFilterValuesMobile.style.display = 'none'
|
|
9859
10087
|
let inputLabelFilterMobile = (this._SfCustomContainer as HTMLDivElement).querySelector('#input-label-filter-mobile') as HTMLLabelElement
|
|
9860
10088
|
inputLabelFilterMobile.style.display = 'none';
|
|
10089
|
+
let selectSubfilterCriteriaMobile = (this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-criteria-mobile') as HTMLSelectElement
|
|
10090
|
+
selectSubfilterCriteriaMobile.style.display = 'none'
|
|
10091
|
+
let selectSubfilterValuesMobile = (this._SfCustomContainer as HTMLDivElement).querySelector('#select-subfilter-values-mobile') as HTMLSelectElement
|
|
10092
|
+
selectSubfilterValuesMobile.style.display = 'none'
|
|
10093
|
+
let inputLabelSubfilterMobile = (this._SfCustomContainer as HTMLDivElement).querySelector('#input-label-subfilter-mobile') as HTMLLabelElement
|
|
10094
|
+
inputLabelSubfilterMobile.style.display = 'none';
|
|
9861
10095
|
|
|
9862
10096
|
((this._SfCustomContainer as HTMLDivElement).querySelector('#button-year-to-date') as HTMLButtonElement).click();
|
|
9863
10097
|
}
|
|
@@ -21702,6 +21936,7 @@ export class SfIEvents extends LitElement {
|
|
|
21702
21936
|
"approved": approved,
|
|
21703
21937
|
"entityid": entityId,
|
|
21704
21938
|
"locationid": locationId,
|
|
21939
|
+
"userid": this.userProfileId,
|
|
21705
21940
|
"username": this.userName,
|
|
21706
21941
|
"module" : module
|
|
21707
21942
|
}
|
|
@@ -21760,6 +21995,7 @@ export class SfIEvents extends LitElement {
|
|
|
21760
21995
|
"approved": approved,
|
|
21761
21996
|
"entityid": entityId,
|
|
21762
21997
|
"locationid": locationId,
|
|
21998
|
+
"userid": this.userProfileId,
|
|
21763
21999
|
"username": this.userName,
|
|
21764
22000
|
"module" : module
|
|
21765
22001
|
}
|
|
@@ -23839,7 +24075,7 @@ export class SfIEvents extends LitElement {
|
|
|
23839
24075
|
|
|
23840
24076
|
}
|
|
23841
24077
|
|
|
23842
|
-
fetchStatistics = async(startDate: string = "", endDate: string = "", filtercriteria: string, filterid: string) => {
|
|
24078
|
+
fetchStatistics = async(startDate: string = "", endDate: string = "", filtercriteria: string, filterid: string, subfiltercriteria: string, subfilterid: string) => {
|
|
23843
24079
|
|
|
23844
24080
|
let path = "";
|
|
23845
24081
|
this.sdate = startDate;
|
|
@@ -23869,7 +24105,7 @@ export class SfIEvents extends LitElement {
|
|
|
23869
24105
|
}
|
|
23870
24106
|
|
|
23871
24107
|
//console.log('fetch calendar url', url);
|
|
23872
|
-
let urlBody :any = {"projectid": this.projectId, "userid": this.userProfileId, "role": this.myRole, "sdate": sDate, "edate": eDate,"filtercriteria": filtercriteria};
|
|
24108
|
+
let urlBody :any = {"projectid": this.projectId, "userid": this.userProfileId, "role": this.myRole, "sdate": sDate, "edate": eDate,"filtercriteria": filtercriteria, "subfiltercriteria":subfiltercriteria, "subfilterid": subfilterid};
|
|
23873
24109
|
|
|
23874
24110
|
if(filtercriteria == 'function') {
|
|
23875
24111
|
urlBody["functionid"] = filterid;
|