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/sf-i-events.js CHANGED
@@ -2267,16 +2267,41 @@ let SfIEvents = class SfIEvents extends LitElement {
2267
2267
  html += '<div id="stream-event-filter" part="stream-event-total" class="d-flex flex-wrap"></div>';
2268
2268
  return html;
2269
2269
  };
2270
+ this.renderCalendarEventSummaryViewer = () => {
2271
+ var html = '';
2272
+ html += '<div id="stream-event-summary" part="stream-event-total" class="d-flex flex-wrap">';
2273
+ 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>';
2274
+ 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>';
2275
+ 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>';
2276
+ 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>';
2277
+ 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>';
2278
+ 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>';
2279
+ 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>';
2280
+ 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>';
2281
+ 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>';
2282
+ 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>';
2283
+ 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>';
2284
+ 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>';
2285
+ 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>';
2286
+ 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>';
2287
+ html += '</div>';
2288
+ html += '<div id="stream-event-filter" part="stream-event-total" class="d-flex flex-wrap"></div>';
2289
+ return html;
2290
+ };
2270
2291
  this.renderStatisticsFiltersTableStart = () => {
2271
2292
  var html = '';
2272
2293
  html += '<div class="w-100 scroll-x">';
2273
2294
  html += '<table id="statistics-table" part="statistics-table" class="statistics-table w-100"><tbody>';
2274
2295
  return html;
2275
2296
  };
2276
- this.renderStatisticsFiltersTableRow = () => {
2297
+ this.renderStatisticsFiltersTableRow = (filterUser = false) => {
2277
2298
  var html = '';
2278
2299
  html += '<tr class="tablerow">';
2279
- 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>';
2300
+ 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>';
2301
+ if (filterUser) {
2302
+ 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>';
2303
+ }
2304
+ html += '</div></td>';
2280
2305
  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>';
2281
2306
  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>';
2282
2307
  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>';
@@ -2287,7 +2312,7 @@ let SfIEvents = class SfIEvents extends LitElement {
2287
2312
  };
2288
2313
  this.renderStatisticsFiltersTableEnd = () => {
2289
2314
  var html = '';
2290
- html += '</tbody></table><div>';
2315
+ html += '</tbody></table></div>';
2291
2316
  return html;
2292
2317
  };
2293
2318
  this.getCalendarRowHide = (events, i, lastDay, month, firstDate = null, currDate = null) => {
@@ -2826,8 +2851,13 @@ let SfIEvents = class SfIEvents extends LitElement {
2826
2851
  return html;
2827
2852
  };
2828
2853
  this.renderStatistics = (_firstDay, _endDay, iInit, iLast, showGraph, index, month, period, firstDate = null, parametersTitle) => {
2829
- var _a, _b, _c, _f, _g, _h, _j, _k;
2854
+ var _a, _b, _c, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
2830
2855
  var total = 0, notStarted = 0, approved = 0, pendingApproval = 0, rejected = 0;
2856
+ let subfiltersTotal = {};
2857
+ let subfiltersNotStarted = {};
2858
+ let subfiltersPendingApproval = {};
2859
+ let subfiltersRejected = {};
2860
+ let subfiltersApproved = {};
2831
2861
  var html = '';
2832
2862
  // var lastDay = iLast;
2833
2863
  // var slice = 2;
@@ -2836,7 +2866,7 @@ let SfIEvents = class SfIEvents extends LitElement {
2836
2866
  this.clearSelectedLegend();
2837
2867
  html += this.renderCalendarStatisticsGraphs(showGraph, parametersTitle);
2838
2868
  html += this.renderCalendarContainerDivStart(index);
2839
- html += this.renderCalendarEventSummary();
2869
+ html += this.renderCalendarEventSummaryViewer();
2840
2870
  let filtersTableHtml = "";
2841
2871
  if (Object.keys(this.statisticsFiltersData).length > 0) {
2842
2872
  filtersTableHtml += this.renderStatisticsFiltersTableStart();
@@ -2861,13 +2891,37 @@ let SfIEvents = class SfIEvents extends LitElement {
2861
2891
  // hide = this.getCalendarRowHide(this.events[mmdd], i, lastDay, month, firstDate, currDate);
2862
2892
  // }
2863
2893
  if (this.statistics[mmdd] != null) {
2864
- console.log('mmdd', mmdd, this.statistics[mmdd]['approved']);
2865
2894
  // html += this.renderCalendarRowDivStart(i, firstDate, mmdd.split("/")[1] + "/" + mmdd.split("/")[0]);
2866
2895
  total += this.statistics[mmdd].count;
2896
+ console.log('mmdd', mmdd, this.statistics[mmdd].count, total);
2867
2897
  notStarted += (_a = this.statistics[mmdd]["not-started"]) !== null && _a !== void 0 ? _a : 0;
2868
2898
  pendingApproval += (_b = this.statistics[mmdd]["pending-approval"]) !== null && _b !== void 0 ? _b : 0;
2869
2899
  rejected += (_c = this.statistics[mmdd]["rejected"]) !== null && _c !== void 0 ? _c : 0;
2870
2900
  approved += (_f = this.statistics[mmdd]["approved"]) !== null && _f !== void 0 ? _f : 0;
2901
+ for (let subfilter of Object.keys(this.statistics['subfilters'])) {
2902
+ if (subfiltersTotal[subfilter] == null) {
2903
+ subfiltersTotal[subfilter] = 0;
2904
+ }
2905
+ if (subfiltersNotStarted[subfilter] == null) {
2906
+ subfiltersNotStarted[subfilter] = 0;
2907
+ }
2908
+ if (subfiltersPendingApproval[subfilter] == null) {
2909
+ subfiltersPendingApproval[subfilter] = 0;
2910
+ }
2911
+ if (subfiltersRejected[subfilter] == null) {
2912
+ subfiltersRejected[subfilter] = 0;
2913
+ }
2914
+ if (subfiltersApproved[subfilter] == null) {
2915
+ subfiltersApproved[subfilter] = 0;
2916
+ }
2917
+ if (this.statistics['subfilters'][subfilter][mmdd] != null) {
2918
+ subfiltersTotal[subfilter] += (this.statistics['subfilters'][subfilter][mmdd].count);
2919
+ subfiltersNotStarted[subfilter] += ((_g = this.statistics['subfilters'][subfilter][mmdd]['not-started']) !== null && _g !== void 0 ? _g : 0);
2920
+ subfiltersPendingApproval[subfilter] += ((_h = this.statistics['subfilters'][subfilter][mmdd]['pending-approval']) !== null && _h !== void 0 ? _h : 0);
2921
+ subfiltersRejected[subfilter] += ((_j = this.statistics['subfilters'][subfilter][mmdd]['rejected']) !== null && _j !== void 0 ? _j : 0);
2922
+ subfiltersApproved[subfilter] += ((_k = this.statistics['subfilters'][subfilter][mmdd]['approved']) !== null && _k !== void 0 ? _k : 0);
2923
+ }
2924
+ }
2871
2925
  }
2872
2926
  }
2873
2927
  if (Object.keys(this.statisticsFiltersData).length > 0) {
@@ -2877,6 +2931,13 @@ let SfIEvents = class SfIEvents extends LitElement {
2877
2931
  let filtername = filterval.split(';')[0];
2878
2932
  let filterid = filterval.split(';')[1];
2879
2933
  let filterTotal = 0, filterNotStarted = 0, filterPendingApproval = 0, filterRejected = 0, filterApproved = 0;
2934
+ let lastActive = "";
2935
+ let lastAction = "";
2936
+ let subfiltersFilterTotal = {};
2937
+ let subfiltersFilterNotStarted = {};
2938
+ let subfiltersFilterPendingApproval = {};
2939
+ let subfiltersFilterRejected = {};
2940
+ let subfiltersFilterApproved = {};
2880
2941
  for (var i = iInit; i <= iLast; i++) {
2881
2942
  let mmdd = "";
2882
2943
  if (firstDate == null) {
@@ -2888,16 +2949,45 @@ let SfIEvents = class SfIEvents extends LitElement {
2888
2949
  mmdd = ("0" + (currDate.getMonth() + 1)).slice(-2) + "/" + ("0" + currDate.getDate()).slice(-2);
2889
2950
  }
2890
2951
  if (this.statisticsFiltersData[filtercriteria][filterid] != null) {
2952
+ if (this.statisticsFiltersData[filtercriteria][filterid]['lasttime'] != null) {
2953
+ lastAction = (_l = this.statisticsFiltersData[filtercriteria][filterid]['lasttime']['lastaction']) !== null && _l !== void 0 ? _l : "";
2954
+ lastActive = (_m = this.statisticsFiltersData[filtercriteria][filterid]['lasttime']['lastactive']) !== null && _m !== void 0 ? _m : "";
2955
+ }
2891
2956
  if (this.statisticsFiltersData[filtercriteria][filterid][mmdd] != null) {
2892
2957
  filterTotal += this.statisticsFiltersData[filtercriteria][filterid][mmdd].count;
2893
- filterNotStarted += (_g = this.statisticsFiltersData[filtercriteria][filterid][mmdd]['not-started']) !== null && _g !== void 0 ? _g : 0;
2894
- filterPendingApproval += (_h = this.statisticsFiltersData[filtercriteria][filterid][mmdd]['pending-approval']) !== null && _h !== void 0 ? _h : 0;
2895
- filterRejected += (_j = this.statisticsFiltersData[filtercriteria][filterid][mmdd]['rejected']) !== null && _j !== void 0 ? _j : 0;
2896
- filterApproved += (_k = this.statisticsFiltersData[filtercriteria][filterid][mmdd]['approved']) !== null && _k !== void 0 ? _k : 0;
2958
+ filterNotStarted += (_o = this.statisticsFiltersData[filtercriteria][filterid][mmdd]['not-started']) !== null && _o !== void 0 ? _o : 0;
2959
+ filterPendingApproval += (_p = this.statisticsFiltersData[filtercriteria][filterid][mmdd]['pending-approval']) !== null && _p !== void 0 ? _p : 0;
2960
+ filterRejected += (_q = this.statisticsFiltersData[filtercriteria][filterid][mmdd]['rejected']) !== null && _q !== void 0 ? _q : 0;
2961
+ filterApproved += (_r = this.statisticsFiltersData[filtercriteria][filterid][mmdd]['approved']) !== null && _r !== void 0 ? _r : 0;
2962
+ for (let subfilter of Object.keys(this.statisticsFiltersData[filtercriteria][filterid]['subfilters'])) {
2963
+ if (subfiltersFilterTotal[subfilter] == null) {
2964
+ subfiltersFilterTotal[subfilter] = 0;
2965
+ }
2966
+ if (subfiltersFilterNotStarted[subfilter] == null) {
2967
+ subfiltersFilterNotStarted[subfilter] = 0;
2968
+ }
2969
+ if (subfiltersFilterPendingApproval[subfilter] == null) {
2970
+ subfiltersFilterPendingApproval[subfilter] = 0;
2971
+ }
2972
+ if (subfiltersFilterRejected[subfilter] == null) {
2973
+ subfiltersFilterRejected[subfilter] = 0;
2974
+ }
2975
+ if (subfiltersFilterApproved[subfilter] == null) {
2976
+ subfiltersFilterApproved[subfilter] = 0;
2977
+ }
2978
+ if (this.statisticsFiltersData[filtercriteria][filterid]['subfilters'][subfilter][mmdd] != null) {
2979
+ subfiltersFilterTotal[subfilter] += (this.statisticsFiltersData[filtercriteria][filterid]['subfilters'][subfilter][mmdd].count);
2980
+ console.log('subfilterTotal', subfiltersFilterTotal);
2981
+ subfiltersFilterNotStarted[subfilter] += ((_s = this.statisticsFiltersData[filtercriteria][filterid]['subfilters'][subfilter][mmdd]['not-started']) !== null && _s !== void 0 ? _s : 0);
2982
+ subfiltersFilterPendingApproval[subfilter] += ((_t = this.statisticsFiltersData[filtercriteria][filterid]['subfilters'][subfilter][mmdd]['pending-approval']) !== null && _t !== void 0 ? _t : 0);
2983
+ subfiltersFilterRejected[subfilter] += ((_u = this.statisticsFiltersData[filtercriteria][filterid]['subfilters'][subfilter][mmdd]['rejected']) !== null && _u !== void 0 ? _u : 0);
2984
+ subfiltersFilterApproved[subfilter] += ((_v = this.statisticsFiltersData[filtercriteria][filterid]['subfilters'][subfilter][mmdd]['approved']) !== null && _v !== void 0 ? _v : 0);
2985
+ }
2986
+ }
2897
2987
  }
2898
2988
  }
2899
2989
  }
2900
- filtersTableHtml += this.renderStatisticsFiltersTableRow();
2990
+ filtersTableHtml += this.renderStatisticsFiltersTableRow(lastAction != "" || lastActive != "");
2901
2991
  if (filterindex % 2 == 0) {
2902
2992
  filtersTableHtml = filtersTableHtml.replace(/TD_BODY_CLASS/g, "td-light");
2903
2993
  }
@@ -2906,11 +2996,26 @@ let SfIEvents = class SfIEvents extends LitElement {
2906
2996
  }
2907
2997
  filtersTableHtml = filtersTableHtml.replace("FILTER_CRITERIA_NAME", filtercriteria + "");
2908
2998
  filtersTableHtml = filtersTableHtml.replace("DASHBOARD_FILTER_NAME", (filtername + "").replace(/\([^)]*\)/g, ""));
2909
- filtersTableHtml = filtersTableHtml.replace("DASHBOARD_TOTAL", filterTotal + "");
2910
- filtersTableHtml = filtersTableHtml.replace("DASHBOARD_NOT_STARTED", filterNotStarted + Util.percentageString(filterNotStarted, filterTotal));
2911
- filtersTableHtml = filtersTableHtml.replace("DASHBOARD_APPROVED", filterApproved + Util.percentageString(filterApproved, filterTotal));
2912
- filtersTableHtml = filtersTableHtml.replace("DASHBOARD_PENDING_APPROVAL", filterPendingApproval + Util.percentageString(filterPendingApproval, filterTotal));
2913
- filtersTableHtml = filtersTableHtml.replace("DASHBOARD_REJECTED", filterRejected + Util.percentageString(filterRejected, filterTotal));
2999
+ let filterTotalHtml = filterTotal + "";
3000
+ let filterNotStartedHtml = filterNotStarted + Util.percentageString(filterNotStarted, filterTotal);
3001
+ let filterPendingApprovalHtml = filterPendingApproval + Util.percentageString(filterPendingApproval, filterTotal);
3002
+ let filterRejectedHtml = filterRejected + Util.percentageString(filterRejected, filterTotal);
3003
+ let filterApprovedHtml = filterApproved + Util.percentageString(filterApproved, filterTotal);
3004
+ for (let subfilter of Object.keys(this.statisticsFiltersData[filtercriteria][filterid]['subfilters'])) {
3005
+ filterTotalHtml += `<br />${subfilter}: ${subfiltersFilterTotal[subfilter]}${Util.percentageString(subfiltersFilterTotal[subfilter], filterTotal)}`;
3006
+ filterNotStartedHtml += `<br />${subfilter}: ${subfiltersFilterNotStarted[subfilter]}${Util.percentageString(subfiltersFilterNotStarted[subfilter], filterNotStarted)}`;
3007
+ filterPendingApprovalHtml += `<br />${subfilter}: ${subfiltersFilterPendingApproval[subfilter]}${Util.percentageString(subfiltersFilterPendingApproval[subfilter], filterPendingApproval)}`;
3008
+ filterRejectedHtml += `<br />${subfilter}: ${subfiltersFilterRejected[subfilter]}${Util.percentageString(subfiltersFilterRejected[subfilter], filterRejected)}`;
3009
+ filterApprovedHtml += `<br />${subfilter}: ${subfiltersFilterApproved[subfilter]}${Util.percentageString(subfiltersFilterApproved[subfilter], filterApproved)}`;
3010
+ }
3011
+ console.log('subfilterstotal', subfiltersFilterTotal);
3012
+ filtersTableHtml = filtersTableHtml.replace("DASHBOARD_TOTAL", filterTotalHtml);
3013
+ filtersTableHtml = filtersTableHtml.replace("DASHBOARD_NOT_STARTED", filterNotStartedHtml);
3014
+ filtersTableHtml = filtersTableHtml.replace("DASHBOARD_APPROVED", filterApprovedHtml);
3015
+ filtersTableHtml = filtersTableHtml.replace("DASHBOARD_PENDING_APPROVAL", filterPendingApprovalHtml);
3016
+ filtersTableHtml = filtersTableHtml.replace("DASHBOARD_REJECTED", filterRejectedHtml);
3017
+ filtersTableHtml = filtersTableHtml.replace("DASHBOARD_LAST_ACTION", lastAction);
3018
+ filtersTableHtml = filtersTableHtml.replace("DASHBOARD_LAST_ACTIVE", lastActive);
2914
3019
  }
2915
3020
  filtersTableHtml += this.renderStatisticsFiltersTableEnd();
2916
3021
  }
@@ -2921,13 +3026,30 @@ let SfIEvents = class SfIEvents extends LitElement {
2921
3026
  this.period = period;
2922
3027
  //console.log('renderevents htmlcols', this.htmlDataCompliances);
2923
3028
  console.log('progress', this.period, total, notStarted, approved, this.statistics);
3029
+ let totalHtml = "";
3030
+ let notStartedHtml = "";
3031
+ let pendingApprovalHtml = "";
3032
+ let rejectedHtml = "";
3033
+ let approvedHtml = "";
3034
+ for (let subfilter of Object.keys(this.statistics['subfilters'])) {
3035
+ totalHtml += `<br />${subfilter}: ${subfiltersTotal[subfilter]}${Util.percentageString(subfiltersTotal[subfilter], total)}`;
3036
+ notStartedHtml += `<br />${subfilter}: ${subfiltersNotStarted[subfilter]}${Util.percentageString(subfiltersNotStarted[subfilter], notStarted)}`;
3037
+ pendingApprovalHtml += `<br />${subfilter}: ${subfiltersPendingApproval[subfilter]}${Util.percentageString(subfiltersPendingApproval[subfilter], pendingApproval)}`;
3038
+ rejectedHtml += `<br />${subfilter}: ${subfiltersRejected[subfilter]}${Util.percentageString(subfiltersRejected[subfilter], rejected)}`;
3039
+ approvedHtml += `<br />${subfilter}: ${subfiltersApproved[subfilter]}${Util.percentageString(subfiltersApproved[subfilter], approved)}`;
3040
+ }
2924
3041
  html = html.replace("DASHBOARD_TOTAL", total + "");
3042
+ html = html.replace("DASHBOARD_TOTAL_SUBFILTER", totalHtml.replace('<br />', ''));
2925
3043
  html = html.replace("DASHBOARD_NOT_STARTED", notStarted + "");
3044
+ html = html.replace("DASHBOARD_NOT_STARTED_SUBFILTER", notStartedHtml.replace('<br />', ''));
2926
3045
  html = html.replace("DASHBOARD_APPROVED", approved + "");
3046
+ html = html.replace("DASHBOARD_APPROVED_SUBFILTER", approvedHtml.replace('<br />', ''));
2927
3047
  html = html.replace("DASHBOARD_PENDING_APPROVAL", pendingApproval + "");
3048
+ html = html.replace("DASHBOARD_PENDING_APPROVAL_SUBFILTER", pendingApprovalHtml.replace('<br />', ''));
2928
3049
  html = html.replace("DASHBOARD_REJECTED", rejected + "");
3050
+ html = html.replace("DASHBOARD_REJECTED_SUBFILTER", rejectedHtml.replace('<br />', ''));
2929
3051
  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>';
2930
- 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>';
3052
+ 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>';
2931
3053
  if (Object.keys(this.statisticsFiltersData).length > 0) {
2932
3054
  this.htmlDataStats += '<br /><br />Report<br /><br />';
2933
3055
  this.htmlDataStats += filtersTableHtml;
@@ -4455,6 +4577,9 @@ let SfIEvents = class SfIEvents extends LitElement {
4455
4577
  filterscriteria = Object.keys(this.statisticsFiltersData)[0];
4456
4578
  }
4457
4579
  for (let criteria of Object.keys(this.statisticsMeta)) {
4580
+ if (criteria == "subfilters") {
4581
+ continue;
4582
+ }
4458
4583
  let option = new Option();
4459
4584
  option.value = criteria;
4460
4585
  console.log('statistics filters criteria', criteria, filterscriteria, criteria == filterscriteria);
@@ -4483,7 +4608,9 @@ let SfIEvents = class SfIEvents extends LitElement {
4483
4608
  let inputLabelCriteria = eventsContainer.querySelector('#input-label-criteria');
4484
4609
  let selectFilterValues = eventsContainer.querySelector('#select-filter-values');
4485
4610
  selectFilterValues.value = "";
4486
- this.processDateSelectionViewer(eventsContainer);
4611
+ let inputLabelSubfilters = eventsContainer.querySelector('#input-label-subfilter');
4612
+ let selectSubfilterCriteria = eventsContainer.querySelector('#select-subfilter-criteria');
4613
+ selectSubfilterCriteria.value = "";
4487
4614
  selectFilterValues.innerHTML = "";
4488
4615
  let option = new Option();
4489
4616
  option.value = "";
@@ -4505,11 +4632,37 @@ let SfIEvents = class SfIEvents extends LitElement {
4505
4632
  console.log('changed');
4506
4633
  this.processDateSelectionViewer(eventsContainer);
4507
4634
  });
4635
+ selectSubfilterCriteria.style.display = 'block';
4636
+ inputLabelSubfilters.style.display = 'block';
4637
+ let sortedSubfilters = Util.alphabeticalSort(Object.keys(this.statisticsMeta.subfilters));
4638
+ if (sortedSubfilters.length > 1) {
4639
+ let option = new Option();
4640
+ option.value = "";
4641
+ option.innerHTML = "All";
4642
+ selectSubfilterCriteria.add(option);
4643
+ }
4644
+ for (let subfilter of sortedSubfilters) {
4645
+ let option = new Option();
4646
+ option.value = subfilter;
4647
+ option.innerHTML = subfilter;
4648
+ selectSubfilterCriteria.add(option);
4649
+ }
4650
+ let inputLabelSubfiltersValue = eventsContainer.querySelector('#input-label-subfilter-value');
4651
+ let selectSubfilterValues = eventsContainer.querySelector('#select-subfilter-values');
4652
+ inputLabelSubfiltersValue.style.display = 'none';
4653
+ selectSubfilterValues.style.display = 'none';
4654
+ let selectSubfilterCriteriaNew = Util.clearListeners(selectSubfilterCriteria);
4655
+ selectSubfilterCriteriaNew.addEventListener('change', () => {
4656
+ this.processDateSelectionViewer(eventsContainer);
4657
+ });
4508
4658
  }
4509
4659
  else {
4510
4660
  selectFilterValues.style.display = 'none';
4511
4661
  inputLabelCriteria.style.display = 'none';
4662
+ selectSubfilterCriteria.style.display = 'none';
4663
+ inputLabelSubfilters.style.display = 'none';
4512
4664
  }
4665
+ this.processDateSelectionViewer(eventsContainer);
4513
4666
  });
4514
4667
  let selectFilterCriteriaMobileNew = Util.clearListeners(selectFilterCriteriaMobile);
4515
4668
  selectFilterCriteriaMobileNew.addEventListener('change', (ev) => {
@@ -4768,7 +4921,7 @@ let SfIEvents = class SfIEvents extends LitElement {
4768
4921
  const radioRisk = eventContainer.querySelector('#radio-risk');
4769
4922
  radioRisk === null || radioRisk === void 0 ? void 0 : radioRisk.addEventListener('click', () => {
4770
4923
  this.flowGraph = this.FLOW_GRAPH_RISKAREAS;
4771
- //console.log('setting flow graph to ', this.flowGraph);
4924
+ // console.log('setting flow graph to ', this.flowGraph);
4772
4925
  this.renderRangeEvents(new Date(valueStart), (new Date(valueEnd).getTime() - new Date(valueStart).getTime()) / (1000 * 60 * 60 * 24), eventContainer);
4773
4926
  this.renderRiskGraph(eventContainer);
4774
4927
  this.attachHandlers(eventContainer, valueStart, valueEnd);
@@ -4918,7 +5071,6 @@ let SfIEvents = class SfIEvents extends LitElement {
4918
5071
  //console.log('valueend', valueEnd);
4919
5072
  let filtercriteria = this._SfCustomContainer.querySelector('#select-filter-criteria').value;
4920
5073
  let filtercriterianame = "";
4921
- console.log('criteria', this._SfCustomContainer.querySelector('#select-filter-criteria').options[this._SfCustomContainer.querySelector('#select-filter-criteria').selectedIndex]);
4922
5074
  if (this._SfCustomContainer.querySelector('#select-filter-criteria').options[this._SfCustomContainer.querySelector('#select-filter-criteria').selectedIndex] != null) {
4923
5075
  filtercriterianame = this._SfCustomContainer.querySelector('#select-filter-criteria').options[this._SfCustomContainer.querySelector('#select-filter-criteria').selectedIndex].innerHTML;
4924
5076
  }
@@ -4950,6 +5102,30 @@ let SfIEvents = class SfIEvents extends LitElement {
4950
5102
  this.htmlStatsFilter = "Filters Selected -> " + Util.titleCase(filtercriterianame) + " -> " + Util.titleCase(filtervaluename);
4951
5103
  }
4952
5104
  }
5105
+ let subfiltervalue = this._SfCustomContainer.querySelector('#select-subfilter-values').value;
5106
+ let subfiltervaluename = "";
5107
+ if (this._SfCustomContainer.querySelector('#select-subfilter-values').options[this._SfCustomContainer.querySelector('#select-subfilter-values').selectedIndex] != null) {
5108
+ subfiltervaluename = this._SfCustomContainer.querySelector('#select-subfilter-values').options[this._SfCustomContainer.querySelector('#select-subfilter-values').selectedIndex].innerHTML;
5109
+ }
5110
+ if (subfiltervalue == "") {
5111
+ subfiltervalue = this._SfCustomContainer.querySelector('#select-subfilter-values-mobile').value;
5112
+ if (this._SfCustomContainer.querySelector('#select-subfilter-values-mobile').options[this._SfCustomContainer.querySelector('#select-subfilter-values-mobile').selectedIndex] != null) {
5113
+ subfiltervaluename = this._SfCustomContainer.querySelector('#select-subfilter-values-mobile').options[this._SfCustomContainer.querySelector('#select-subfilter-values-mobile').selectedIndex].innerHTML;
5114
+ }
5115
+ }
5116
+ console.log('subfiltervalue, subfiltervaluename', subfiltervalue, subfiltervaluename);
5117
+ let subfiltercriteria = this._SfCustomContainer.querySelector('#select-subfilter-criteria').value;
5118
+ let subfiltercriterianame = "";
5119
+ if (this._SfCustomContainer.querySelector('#select-subfilter-criteria').options[this._SfCustomContainer.querySelector('#select-subfilter-criteria').selectedIndex] != null) {
5120
+ subfiltercriterianame = this._SfCustomContainer.querySelector('#select-subfilter-criteria').options[this._SfCustomContainer.querySelector('#select-subfilter-criteria').selectedIndex].innerHTML;
5121
+ }
5122
+ if (subfiltercriteria == "") {
5123
+ subfiltercriteria = this._SfCustomContainer.querySelector('#select-subfilter-criteria-mobile').value;
5124
+ if (this._SfCustomContainer.querySelector('#select-subfilter-criteria-mobile').options[this._SfCustomContainer.querySelector('#select-subfilter-criteria-mobile').selectedIndex] != null) {
5125
+ subfiltercriterianame = this._SfCustomContainer.querySelector('#select-subfilter-criteria-mobile').options[this._SfCustomContainer.querySelector('#select-subfilter-criteria-mobile').selectedIndex].innerHTML;
5126
+ }
5127
+ }
5128
+ console.log('subfiltercriteria, subfiltercriterianame', subfiltercriteria, subfiltercriterianame);
4953
5129
  if (valueStart != "" && valueEnd != "") {
4954
5130
  this.initCustomRightColViewer();
4955
5131
  if (!this.checkStartDateEarliness(valueStart)) {
@@ -4974,7 +5150,7 @@ let SfIEvents = class SfIEvents extends LitElement {
4974
5150
  tsEnd.setDate(tsEnd.getDate() + 2);
4975
5151
  //console.log('tsstart', tsStart);
4976
5152
  //console.log('tsend', tsEnd);
4977
- let meta = await this.fetchStatistics((tsStart.getMonth() + 1) + "/" + tsStart.getDate() + "/" + tsStart.getFullYear(), (tsEnd.getMonth() + 1) + "/" + tsEnd.getDate() + "/" + tsEnd.getFullYear(), filtercriteria, filtervalue);
5153
+ let meta = await this.fetchStatistics((tsStart.getMonth() + 1) + "/" + tsStart.getDate() + "/" + tsStart.getFullYear(), (tsEnd.getMonth() + 1) + "/" + tsEnd.getDate() + "/" + tsEnd.getFullYear(), filtercriteria, filtervalue, subfiltercriteria, subfiltervalue);
4978
5154
  this.renderRangeStatistics(new Date(valueStart), ((new Date(valueEnd).getTime() + 24 * 60 * 60 * 1000) - new Date(valueStart).getTime()) / (1000 * 60 * 60 * 24), this._SfCustomContainer);
4979
5155
  if (meta != null)
4980
5156
  this.renderStatisticsFilters(this._SfCustomContainer);
@@ -6660,6 +6836,14 @@ let SfIEvents = class SfIEvents extends LitElement {
6660
6836
  html += '<label part="input-label-filter-value" id="input-label-criteria-mobile"></label>';
6661
6837
  html += '<select id="select-filter-values-mobile"></select>';
6662
6838
  html += '</div>';
6839
+ html += '<div class="title-item-date">';
6840
+ html += '<label part="input-label-subfilter-criteria" id="input-label-subfilter-mobile">Subfilter Criteria</label>';
6841
+ html += '<select id="select-subfilter-criteria-mobile"></select>';
6842
+ html += '</div>';
6843
+ html += '<div class="title-item-date">';
6844
+ html += '<label part="input-label-subfilter-value" id="input-label-subfilter-value-mobile"></label>';
6845
+ html += '<select id="select-subfilter-values-mobile"></select>';
6846
+ html += '</div>';
6663
6847
  html += '</div>';
6664
6848
  html += '<div class="d-flex w-100">';
6665
6849
  html += '<div class="calendar-left-col desktop-only flex-col justify-start align-end">';
@@ -6688,6 +6872,14 @@ let SfIEvents = class SfIEvents extends LitElement {
6688
6872
  html += '<label part="input-label-filter-value" id="input-label-criteria"></label>';
6689
6873
  html += '<select part="input-select-calendar-filter" id="select-filter-values"></select>';
6690
6874
  html += '</div>';
6875
+ html += '<div class="title-item-date d-flex flex-col align-start">';
6876
+ html += '<label part="input-label-subfilter-criteria" id="input-label-subfilter">Subfilter Criteria</label>';
6877
+ html += '<select part="input-select-calendar-subfilter" id="select-subfilter-criteria"></select>';
6878
+ html += '</div>';
6879
+ html += '<div class="title-item-date d-flex flex-col align-start">';
6880
+ html += '<label part="input-label-subfilter-value" id="input-label-subfilter-value"></label>';
6881
+ html += '<select part="input-select-calendar-subfilter" id="select-subfilter-values"></select>';
6882
+ html += '</div>';
6691
6883
  html += '</div>';
6692
6884
  html += '<div class="calendar-right-data flex-grow">';
6693
6885
  html += '</div>';
@@ -6803,12 +6995,24 @@ let SfIEvents = class SfIEvents extends LitElement {
6803
6995
  selectFilterValues.style.display = 'none';
6804
6996
  let inputLabelFilter = this._SfCustomContainer.querySelector('#input-label-filter');
6805
6997
  inputLabelFilter.style.display = 'none';
6998
+ let selectSubfilterCriteria = this._SfCustomContainer.querySelector('#select-subfilter-criteria');
6999
+ selectSubfilterCriteria.style.display = 'none';
7000
+ let selectSubfilterValues = this._SfCustomContainer.querySelector('#select-subfilter-values');
7001
+ selectSubfilterValues.style.display = 'none';
7002
+ let inputLabelSubfilter = this._SfCustomContainer.querySelector('#input-label-subfilter');
7003
+ inputLabelSubfilter.style.display = 'none';
6806
7004
  let selectFilterCriteriaMobile = this._SfCustomContainer.querySelector('#select-filter-criteria-mobile');
6807
7005
  selectFilterCriteriaMobile.style.display = 'none';
6808
7006
  let selectFilterValuesMobile = this._SfCustomContainer.querySelector('#select-filter-values-mobile');
6809
7007
  selectFilterValuesMobile.style.display = 'none';
6810
7008
  let inputLabelFilterMobile = this._SfCustomContainer.querySelector('#input-label-filter-mobile');
6811
7009
  inputLabelFilterMobile.style.display = 'none';
7010
+ let selectSubfilterCriteriaMobile = this._SfCustomContainer.querySelector('#select-subfilter-criteria-mobile');
7011
+ selectSubfilterCriteriaMobile.style.display = 'none';
7012
+ let selectSubfilterValuesMobile = this._SfCustomContainer.querySelector('#select-subfilter-values-mobile');
7013
+ selectSubfilterValuesMobile.style.display = 'none';
7014
+ let inputLabelSubfilterMobile = this._SfCustomContainer.querySelector('#input-label-subfilter-mobile');
7015
+ inputLabelSubfilterMobile.style.display = 'none';
6812
7016
  this._SfCustomContainer.querySelector('#button-year-to-date').click();
6813
7017
  };
6814
7018
  this.renderThis = (index = 1, showGraph = true, showBackgroundButton) => {
@@ -16236,6 +16440,7 @@ let SfIEvents = class SfIEvents extends LitElement {
16236
16440
  "approved": approved,
16237
16441
  "entityid": entityId,
16238
16442
  "locationid": locationId,
16443
+ "userid": this.userProfileId,
16239
16444
  "username": this.userName,
16240
16445
  "module": module
16241
16446
  };
@@ -16289,6 +16494,7 @@ let SfIEvents = class SfIEvents extends LitElement {
16289
16494
  "approved": approved,
16290
16495
  "entityid": entityId,
16291
16496
  "locationid": locationId,
16497
+ "userid": this.userProfileId,
16292
16498
  "username": this.userName,
16293
16499
  "module": module
16294
16500
  };
@@ -17797,7 +18003,7 @@ let SfIEvents = class SfIEvents extends LitElement {
17797
18003
  }
17798
18004
  }
17799
18005
  };
17800
- this.fetchStatistics = async (startDate = "", endDate = "", filtercriteria, filterid) => {
18006
+ this.fetchStatistics = async (startDate = "", endDate = "", filtercriteria, filterid, subfiltercriteria, subfilterid) => {
17801
18007
  var _a;
17802
18008
  let path = "";
17803
18009
  this.sdate = startDate;
@@ -17822,7 +18028,7 @@ let SfIEvents = class SfIEvents extends LitElement {
17822
18028
  url = "https://" + this.apiIdNotices + "/" + path;
17823
18029
  }
17824
18030
  //console.log('fetch calendar url', url);
17825
- let urlBody = { "projectid": this.projectId, "userid": this.userProfileId, "role": this.myRole, "sdate": sDate, "edate": eDate, "filtercriteria": filtercriteria };
18031
+ let urlBody = { "projectid": this.projectId, "userid": this.userProfileId, "role": this.myRole, "sdate": sDate, "edate": eDate, "filtercriteria": filtercriteria, "subfiltercriteria": subfiltercriteria, "subfilterid": subfilterid };
17826
18032
  if (filtercriteria == 'function') {
17827
18033
  urlBody["functionid"] = filterid;
17828
18034
  urlBody["locationid"] = '';