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.
@@ -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>&nbsp;<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>&nbsp;&nbsp;<span>Not Started:</span>&nbsp;<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>&nbsp;&nbsp;<span>Pending Approval:</span>&nbsp;<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>&nbsp;&nbsp;<span>Rejected:</span>&nbsp;<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>&nbsp;&nbsp;<span>Approved:</span>&nbsp;<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>&nbsp;&nbsp;<span>In Time:</span>&nbsp;<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>&nbsp;&nbsp;<span>Past Due Date:</span>&nbsp;<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>&nbsp;&nbsp;<span>Late Reported:</span>&nbsp;<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>&nbsp;&nbsp;<span>Late Approved:</span>&nbsp;<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>&nbsp;&nbsp;<span>Late Executed:</span>&nbsp;<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>&nbsp;&nbsp;<span>Scheduled:</span>&nbsp;<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>&nbsp;&nbsp;<span>Not Complied:</span>&nbsp;<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>&nbsp;&nbsp;<span>Partially Complied:</span>&nbsp;<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>&nbsp;&nbsp;<span>Complied:</span>&nbsp;<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></div></td>'
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>&nbsp;&nbsp;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>&nbsp;&nbsp;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>&nbsp;&nbsp;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><div>';
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.renderCalendarEventSummary();
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
- console.log('mmdd', mmdd, this.statistics[mmdd]['approved']);
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
- filtersTableHtml = filtersTableHtml.replace("DASHBOARD_TOTAL", filterTotal+"");
5192
- filtersTableHtml = filtersTableHtml.replace("DASHBOARD_NOT_STARTED", filterNotStarted+ Util.percentageString(filterNotStarted, filterTotal));
5193
- filtersTableHtml = filtersTableHtml.replace("DASHBOARD_APPROVED", filterApproved + Util.percentageString(filterApproved, filterTotal));
5194
- filtersTableHtml = filtersTableHtml.replace("DASHBOARD_PENDING_APPROVAL", filterPendingApproval + Util.percentageString(filterPendingApproval, filterTotal));
5195
- filtersTableHtml = filtersTableHtml.replace("DASHBOARD_REJECTED", filterRejected + Util.percentageString(filterRejected, filterTotal));
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
- html = html.replace("DASHBOARD_TOTAL", total+"");
5212
- html = html.replace("DASHBOARD_NOT_STARTED", notStarted+"");
5213
- html = html.replace("DASHBOARD_APPROVED", approved+"");
5214
- html = html.replace("DASHBOARD_PENDING_APPROVAL", pendingApproval+"");
5215
- html = html.replace("DASHBOARD_REJECTED", rejected+"");
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
- this.processDateSelectionViewer(eventsContainer)
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;