@mj-biz-apps/contracts-ng 0.2.0 → 0.3.0
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/dist/lib/form-panels/contract-form.panels.d.ts +77 -0
- package/dist/lib/form-panels/contract-form.panels.d.ts.map +1 -0
- package/dist/lib/form-panels/contract-form.panels.js +955 -0
- package/dist/lib/form-panels/contract-form.panels.js.map +1 -0
- package/dist/lib/form-panels/contract-form.policy.d.ts +5 -0
- package/dist/lib/form-panels/contract-form.policy.d.ts.map +1 -0
- package/dist/lib/form-panels/contract-form.policy.js +33 -0
- package/dist/lib/form-panels/contract-form.policy.js.map +1 -0
- package/dist/lib/form-panels/contract.panels.d.ts +7 -1
- package/dist/lib/form-panels/contract.panels.d.ts.map +1 -1
- package/dist/lib/form-panels/contract.panels.js +395 -236
- package/dist/lib/form-panels/contract.panels.js.map +1 -1
- package/dist/lib/form-panels/organization.panels.d.ts +4 -13
- package/dist/lib/form-panels/organization.panels.d.ts.map +1 -1
- package/dist/lib/form-panels/organization.panels.js +54 -62
- package/dist/lib/form-panels/organization.panels.js.map +1 -1
- package/dist/lib/form-panels/person.panels.d.ts +14 -0
- package/dist/lib/form-panels/person.panels.d.ts.map +1 -0
- package/dist/lib/form-panels/person.panels.js +108 -0
- package/dist/lib/form-panels/person.panels.js.map +1 -0
- package/dist/lib/form-panels/supersede.panel.d.ts +11 -2
- package/dist/lib/form-panels/supersede.panel.d.ts.map +1 -1
- package/dist/lib/form-panels/supersede.panel.js +44 -13
- package/dist/lib/form-panels/supersede.panel.js.map +1 -1
- package/dist/lib/pages/contracts-dashboard.page.d.ts +37 -17
- package/dist/lib/pages/contracts-dashboard.page.d.ts.map +1 -1
- package/dist/lib/pages/contracts-dashboard.page.js +365 -63
- package/dist/lib/pages/contracts-dashboard.page.js.map +1 -1
- package/dist/lib/sections/section-shell.component.js +2 -2
- package/dist/public-api.d.ts +3 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +15 -4
- package/dist/public-api.js.map +1 -1
- package/package.json +2 -3
- package/dist/lib/form-panels/record-files.panel.d.ts +0 -151
- package/dist/lib/form-panels/record-files.panel.d.ts.map +0 -1
- package/dist/lib/form-panels/record-files.panel.js +0 -1046
- package/dist/lib/form-panels/record-files.panel.js.map +0 -1
|
@@ -1,57 +1,152 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview The Contracts dashboard —
|
|
2
|
+
* @fileoverview The Contracts dashboard — obligation command center.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* NOT A REVENUE CHART. Plan §1: contracts is not money. Every number here is a COUNT or a date.
|
|
5
|
+
* Tiles are counted from the layered view's DERIVED columns (`IsAwaitingDocument`,
|
|
6
|
+
* `RenewalNoticeDeadline`, `DaysToEnd`, `HasModifications`, `State`) with `TotalRowCount`, so they
|
|
7
|
+
* cannot disagree with the worklists. Charts read the same columns off a roster; they do not
|
|
8
|
+
* re-derive "expiring soon".
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* from the same view. A dashboard computing its own version of "expiring soon" is how a summary and a
|
|
12
|
-
* worklist end up giving different answers to the same question.
|
|
10
|
+
* A hot-list row is `NavigationService.OpenEntityRecord`. A tile click still jumps to the matching
|
|
11
|
+
* rail worklist.
|
|
13
12
|
*
|
|
14
13
|
* @module @mj-biz-apps/contracts-ng
|
|
15
14
|
*/
|
|
16
15
|
import { ChangeDetectorRef, Component, EventEmitter, Output, ViewEncapsulation, inject } from '@angular/core';
|
|
17
16
|
import { CommonModule } from '@angular/common';
|
|
17
|
+
import { CompositeKey, Metadata } from '@memberjunction/core';
|
|
18
|
+
import { NavigationService } from '@memberjunction/ng-shared';
|
|
19
|
+
import { EntityViewerModule } from '@memberjunction/ng-entity-viewer';
|
|
20
|
+
import { CONTRACT_STATES } from '@mj-biz-apps/contracts-entities';
|
|
18
21
|
import { MJC_ENTITIES } from '../data/entity-names';
|
|
19
22
|
import { ScopedRunView } from '../data/provider';
|
|
20
23
|
import * as i0 from "@angular/core";
|
|
24
|
+
import * as i1 from "@memberjunction/ng-entity-viewer";
|
|
21
25
|
const _forTrack0 = ($index, $item) => $item.Id;
|
|
26
|
+
const _forTrack1 = ($index, $item) => $item.Label;
|
|
27
|
+
const _forTrack2 = ($index, $item) => $item.State;
|
|
22
28
|
function MJCContractsDashboardPageComponent_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
23
29
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
24
|
-
i0.ɵɵ
|
|
25
|
-
i0.ɵɵ
|
|
26
|
-
i0.ɵɵ
|
|
27
|
-
i0.ɵɵ
|
|
28
|
-
i0.ɵɵ
|
|
29
|
-
i0.ɵɵ
|
|
30
|
+
i0.ɵɵelementStart(0, "button", 15);
|
|
31
|
+
i0.ɵɵlistener("click", function MJCContractsDashboardPageComponent_For_5_Template_button_click_0_listener() { const tile_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.Open(tile_r2)); });
|
|
32
|
+
i0.ɵɵelementStart(1, "div", 16);
|
|
33
|
+
i0.ɵɵtext(2);
|
|
34
|
+
i0.ɵɵelementEnd();
|
|
35
|
+
i0.ɵɵelementStart(3, "div", 17);
|
|
36
|
+
i0.ɵɵtext(4);
|
|
37
|
+
i0.ɵɵelementEnd();
|
|
38
|
+
i0.ɵɵelementStart(5, "div", 18);
|
|
39
|
+
i0.ɵɵtext(6);
|
|
40
|
+
i0.ɵɵelementEnd()();
|
|
30
41
|
} if (rf & 2) {
|
|
31
42
|
const tile_r2 = ctx.$implicit;
|
|
32
|
-
i0.ɵɵclassProp("mjc-
|
|
33
|
-
i0.ɵɵ
|
|
34
|
-
i0.ɵɵadvance();
|
|
35
|
-
i0.ɵɵ
|
|
43
|
+
i0.ɵɵclassProp("mjc-kpi--alert", tile_r2.Count !== null && tile_r2.Count > 0 && (tile_r2.Id === "in-force-no-paper" || tile_r2.Id === "notice-window"));
|
|
44
|
+
i0.ɵɵproperty("title", tile_r2.Hint)("disabled", !tile_r2.GoTo);
|
|
45
|
+
i0.ɵɵadvance(2);
|
|
46
|
+
i0.ɵɵtextInterpolate(tile_r2.Label);
|
|
36
47
|
i0.ɵɵadvance(2);
|
|
37
48
|
i0.ɵɵtextInterpolate(tile_r2.Count === null ? "\u2014" : tile_r2.Count);
|
|
49
|
+
i0.ɵɵadvance(2);
|
|
50
|
+
i0.ɵɵtextInterpolate(tile_r2.Hint);
|
|
38
51
|
} }
|
|
39
52
|
function MJCContractsDashboardPageComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
-
i0.ɵɵ
|
|
53
|
+
i0.ɵɵelementStart(0, "p", 4);
|
|
41
54
|
i0.ɵɵtext(1);
|
|
42
|
-
i0.ɵɵ
|
|
55
|
+
i0.ɵɵelementEnd();
|
|
43
56
|
} if (rf & 2) {
|
|
44
57
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
45
58
|
i0.ɵɵadvance();
|
|
46
59
|
i0.ɵɵtextInterpolate(ctx_r2.LoadError);
|
|
47
60
|
} }
|
|
61
|
+
function MJCContractsDashboardPageComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
62
|
+
i0.ɵɵelementStart(0, "p", 4);
|
|
63
|
+
i0.ɵɵtext(1, "No contracts to mix.");
|
|
64
|
+
i0.ɵɵelementEnd();
|
|
65
|
+
} }
|
|
66
|
+
function MJCContractsDashboardPageComponent_Conditional_18_For_1_Template(rf, ctx) { if (rf & 1) {
|
|
67
|
+
i0.ɵɵelementStart(0, "div", 19)(1, "b");
|
|
68
|
+
i0.ɵɵtext(2);
|
|
69
|
+
i0.ɵɵelementEnd();
|
|
70
|
+
i0.ɵɵelementStart(3, "div", 20);
|
|
71
|
+
i0.ɵɵelement(4, "div", 21);
|
|
72
|
+
i0.ɵɵelementEnd();
|
|
73
|
+
i0.ɵɵelementStart(5, "span", 22);
|
|
74
|
+
i0.ɵɵtext(6);
|
|
75
|
+
i0.ɵɵelementEnd()();
|
|
76
|
+
} if (rf & 2) {
|
|
77
|
+
const bar_r4 = ctx.$implicit;
|
|
78
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
79
|
+
i0.ɵɵadvance(2);
|
|
80
|
+
i0.ɵɵtextInterpolate(bar_r4.State);
|
|
81
|
+
i0.ɵɵadvance(2);
|
|
82
|
+
i0.ɵɵstyleProp("width", ctx_r2.BarPct(bar_r4.Count));
|
|
83
|
+
i0.ɵɵadvance(2);
|
|
84
|
+
i0.ɵɵtextInterpolate(bar_r4.Count);
|
|
85
|
+
} }
|
|
86
|
+
function MJCContractsDashboardPageComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
87
|
+
i0.ɵɵrepeaterCreate(0, MJCContractsDashboardPageComponent_Conditional_18_For_1_Template, 7, 4, "div", 19, _forTrack2);
|
|
88
|
+
} if (rf & 2) {
|
|
89
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
90
|
+
i0.ɵɵrepeater(ctx_r2.StateBars);
|
|
91
|
+
} }
|
|
92
|
+
function MJCContractsDashboardPageComponent_For_26_Template(rf, ctx) { if (rf & 1) {
|
|
93
|
+
i0.ɵɵelementStart(0, "div", 10)(1, "div", 23);
|
|
94
|
+
i0.ɵɵtext(2);
|
|
95
|
+
i0.ɵɵelementEnd();
|
|
96
|
+
i0.ɵɵelement(3, "div", 24);
|
|
97
|
+
i0.ɵɵelementStart(4, "div", 25);
|
|
98
|
+
i0.ɵɵtext(5);
|
|
99
|
+
i0.ɵɵelementEnd()();
|
|
100
|
+
} if (rf & 2) {
|
|
101
|
+
const tile_r5 = ctx.$implicit;
|
|
102
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
103
|
+
i0.ɵɵadvance(2);
|
|
104
|
+
i0.ɵɵtextInterpolate(tile_r5.Count === null ? "\u2014" : tile_r5.Count);
|
|
105
|
+
i0.ɵɵadvance();
|
|
106
|
+
i0.ɵɵstyleProp("height", ctx_r2.FunnelHeight(tile_r5.Count));
|
|
107
|
+
i0.ɵɵadvance(2);
|
|
108
|
+
i0.ɵɵtextInterpolate(ctx_r2.ShortLabel(tile_r5.Id));
|
|
109
|
+
} }
|
|
110
|
+
function MJCContractsDashboardPageComponent_For_36_Template(rf, ctx) { if (rf & 1) {
|
|
111
|
+
i0.ɵɵelementStart(0, "div", 12)(1, "div", 16);
|
|
112
|
+
i0.ɵɵtext(2);
|
|
113
|
+
i0.ɵɵelementEnd();
|
|
114
|
+
i0.ɵɵelementStart(3, "div", 17);
|
|
115
|
+
i0.ɵɵtext(4);
|
|
116
|
+
i0.ɵɵelementEnd()();
|
|
117
|
+
} if (rf & 2) {
|
|
118
|
+
const b_r6 = ctx.$implicit;
|
|
119
|
+
i0.ɵɵadvance(2);
|
|
120
|
+
i0.ɵɵtextInterpolate(b_r6.Label);
|
|
121
|
+
i0.ɵɵadvance(2);
|
|
122
|
+
i0.ɵɵtextInterpolate(b_r6.Count);
|
|
123
|
+
} }
|
|
124
|
+
function MJCContractsDashboardPageComponent_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
125
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
126
|
+
i0.ɵɵelementStart(0, "mj-entity-viewer", 26);
|
|
127
|
+
i0.ɵɵlistener("RecordOpened", function MJCContractsDashboardPageComponent_Conditional_43_Template_mj_entity_viewer_RecordOpened_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnRecordOpened($event)); });
|
|
128
|
+
i0.ɵɵelementEnd();
|
|
129
|
+
} if (rf & 2) {
|
|
130
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
131
|
+
i0.ɵɵproperty("Entity", ctx_r2.ContractEntityInfo)("ViewEntity", ctx_r2.HotView);
|
|
132
|
+
} }
|
|
133
|
+
function MJCContractsDashboardPageComponent_Conditional_44_Template(rf, ctx) { if (rf & 1) {
|
|
134
|
+
i0.ɵɵelementStart(0, "p", 4);
|
|
135
|
+
i0.ɵɵtext(1, "Contract entity metadata is not loaded.");
|
|
136
|
+
i0.ɵɵelementEnd();
|
|
137
|
+
} }
|
|
48
138
|
export class MJCContractsDashboardPageComponent {
|
|
49
139
|
cdr = inject(ChangeDetectorRef);
|
|
140
|
+
navigation = inject(NavigationService);
|
|
50
141
|
/** Asks the host section to switch rail pages. The dashboard does not route itself. */
|
|
51
142
|
NavigateToPage = new EventEmitter();
|
|
52
143
|
LoadError = null;
|
|
144
|
+
StateBars = [];
|
|
145
|
+
Horizon = [];
|
|
146
|
+
ContractEntityInfo = null;
|
|
147
|
+
HotView = null;
|
|
53
148
|
/**
|
|
54
|
-
* The
|
|
149
|
+
* The questions worth answering on open, in priority order.
|
|
55
150
|
*
|
|
56
151
|
* "In force without paper" leads because it is the only one that is both an obligation we are
|
|
57
152
|
* already performing and a document we cannot produce — the combination that hurts in a dispute.
|
|
@@ -100,6 +195,10 @@ export class MJCContractsDashboardPageComponent {
|
|
|
100
195
|
Count: null,
|
|
101
196
|
},
|
|
102
197
|
];
|
|
198
|
+
/** The four actionable tiles, in funnel order. Signed-not-started is informational, not a queue. */
|
|
199
|
+
get ChartTiles() {
|
|
200
|
+
return this.Tiles.filter((t) => t.Id !== 'signed-not-started');
|
|
201
|
+
}
|
|
103
202
|
ngOnInit() {
|
|
104
203
|
void this.refresh();
|
|
105
204
|
}
|
|
@@ -107,13 +206,43 @@ export class MJCContractsDashboardPageComponent {
|
|
|
107
206
|
if (tile.GoTo)
|
|
108
207
|
this.NavigateToPage.emit(tile.GoTo);
|
|
109
208
|
}
|
|
209
|
+
OpenRecord(id) {
|
|
210
|
+
this.navigation.OpenEntityRecord(MJC_ENTITIES.Contract, CompositeKey.FromID(id));
|
|
211
|
+
}
|
|
212
|
+
OnRecordOpened(event) {
|
|
213
|
+
const id = (event.compositeKey?.GetValueByFieldName('ID') ?? event.record?.['ID']);
|
|
214
|
+
if (id)
|
|
215
|
+
this.OpenRecord(id);
|
|
216
|
+
}
|
|
217
|
+
BarPct(count) {
|
|
218
|
+
const max = Math.max(1, ...this.StateBars.map((b) => b.Count));
|
|
219
|
+
return `${Math.round((count / max) * 100)}%`;
|
|
220
|
+
}
|
|
221
|
+
FunnelHeight(count) {
|
|
222
|
+
const values = this.ChartTiles.map((t) => t.Count ?? 0);
|
|
223
|
+
const max = Math.max(1, ...values);
|
|
224
|
+
const n = count ?? 0;
|
|
225
|
+
return `${Math.max(8, Math.round((n / max) * 100))}%`;
|
|
226
|
+
}
|
|
227
|
+
ShortLabel(id) {
|
|
228
|
+
switch (id) {
|
|
229
|
+
case 'in-force-no-paper':
|
|
230
|
+
return 'No paper';
|
|
231
|
+
case 'notice-window':
|
|
232
|
+
return 'Notice';
|
|
233
|
+
case 'ends-120':
|
|
234
|
+
return 'Ending';
|
|
235
|
+
case 'modified':
|
|
236
|
+
return 'Modified';
|
|
237
|
+
default:
|
|
238
|
+
return id;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
110
241
|
/**
|
|
111
|
-
* Count every tile concurrently.
|
|
242
|
+
* Count every tile concurrently, then load the roster used for mix / horizon / hot list.
|
|
112
243
|
*
|
|
113
|
-
* `MaxRows: 1` and read `TotalRowCount` — the count comes back without transferring
|
|
114
|
-
* whose query fails shows an em dash rather than a zero
|
|
115
|
-
* different answers, and showing 0 for the first is the kind of quiet lie a dashboard should never
|
|
116
|
-
* tell. One shared error line explains it once rather than five times.
|
|
244
|
+
* `MaxRows: 1` and read `TotalRowCount` for tiles — the count comes back without transferring
|
|
245
|
+
* rows. A tile whose query fails shows an em dash rather than a zero.
|
|
117
246
|
*/
|
|
118
247
|
async refresh() {
|
|
119
248
|
const rv = ScopedRunView();
|
|
@@ -132,36 +261,141 @@ export class MJCContractsDashboardPageComponent {
|
|
|
132
261
|
failures += 1;
|
|
133
262
|
}
|
|
134
263
|
}));
|
|
264
|
+
try {
|
|
265
|
+
const roster = await rv.RunView({
|
|
266
|
+
EntityName: MJC_ENTITIES.Contract,
|
|
267
|
+
ResultType: 'simple',
|
|
268
|
+
MaxRows: 500,
|
|
269
|
+
Fields: [
|
|
270
|
+
'ID',
|
|
271
|
+
'Name',
|
|
272
|
+
'ContractNumber',
|
|
273
|
+
'State',
|
|
274
|
+
'CustomerOrganization',
|
|
275
|
+
'DaysToEnd',
|
|
276
|
+
'IsAwaitingDocument',
|
|
277
|
+
'HasModifications',
|
|
278
|
+
'RenewalNoticeDeadline',
|
|
279
|
+
'EndDate',
|
|
280
|
+
],
|
|
281
|
+
});
|
|
282
|
+
const rows = roster?.Success ? (roster.Results ?? []) : [];
|
|
283
|
+
this.StateBars = this.mixStates(rows);
|
|
284
|
+
this.Horizon = this.horizon(rows);
|
|
285
|
+
this.ContractEntityInfo = new Metadata().Entities.find((e) => e.Name === MJC_ENTITIES.Contract) ?? null;
|
|
286
|
+
this.HotView = this.ContractEntityInfo
|
|
287
|
+
? {
|
|
288
|
+
EntityID: this.ContractEntityInfo.ID,
|
|
289
|
+
Entity: this.ContractEntityInfo.Name,
|
|
290
|
+
WhereClause: HOT_WHERE,
|
|
291
|
+
ID: 'contracts-hot',
|
|
292
|
+
Name: 'Needs a person',
|
|
293
|
+
}
|
|
294
|
+
: null;
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
failures += 1;
|
|
298
|
+
}
|
|
135
299
|
this.LoadError = failures
|
|
136
|
-
? `${failures}
|
|
300
|
+
? `${failures} count(s) could not be read — tiles showing “—” are unknown, not zero.`
|
|
137
301
|
: null;
|
|
138
302
|
this.cdr.detectChanges();
|
|
139
303
|
}
|
|
304
|
+
mixStates(rows) {
|
|
305
|
+
const map = new Map();
|
|
306
|
+
for (const s of CONTRACT_STATES)
|
|
307
|
+
map.set(s, 0);
|
|
308
|
+
for (const r of rows) {
|
|
309
|
+
const s = r.State || '—';
|
|
310
|
+
map.set(s, (map.get(s) ?? 0) + 1);
|
|
311
|
+
}
|
|
312
|
+
return [...map.entries()]
|
|
313
|
+
.filter(([, n]) => n > 0)
|
|
314
|
+
.map(([State, Count]) => ({ State, Count }));
|
|
315
|
+
}
|
|
316
|
+
horizon(rows) {
|
|
317
|
+
const buckets = [
|
|
318
|
+
{ Label: '0–30 days', Count: 0 },
|
|
319
|
+
{ Label: '31–60 days', Count: 0 },
|
|
320
|
+
{ Label: '61–90 days', Count: 0 },
|
|
321
|
+
{ Label: '91–120 days', Count: 0 },
|
|
322
|
+
];
|
|
323
|
+
for (const r of rows) {
|
|
324
|
+
const d = Number(r.DaysToEnd);
|
|
325
|
+
if (!Number.isFinite(d) || d < 0 || d > 120)
|
|
326
|
+
continue;
|
|
327
|
+
if (d <= 30)
|
|
328
|
+
buckets[0].Count += 1;
|
|
329
|
+
else if (d <= 60)
|
|
330
|
+
buckets[1].Count += 1;
|
|
331
|
+
else if (d <= 90)
|
|
332
|
+
buckets[2].Count += 1;
|
|
333
|
+
else
|
|
334
|
+
buckets[3].Count += 1;
|
|
335
|
+
}
|
|
336
|
+
return buckets;
|
|
337
|
+
}
|
|
140
338
|
static ɵfac = function MJCContractsDashboardPageComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MJCContractsDashboardPageComponent)(); };
|
|
141
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJCContractsDashboardPageComponent, selectors: [["mjc-contracts-dashboard-page"]], outputs: { NavigateToPage: "NavigateToPage" }, decls:
|
|
142
|
-
i0.ɵɵ
|
|
143
|
-
i0.ɵɵtext(2, " What needs a person.
|
|
144
|
-
i0.ɵɵ
|
|
145
|
-
i0.ɵɵ
|
|
146
|
-
i0.ɵɵrepeaterCreate(4, MJCContractsDashboardPageComponent_For_5_Template,
|
|
147
|
-
i0.ɵɵ
|
|
339
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJCContractsDashboardPageComponent, selectors: [["mjc-contracts-dashboard-page"]], outputs: { NavigateToPage: "NavigateToPage" }, decls: 45, vars: 3, consts: [[1, "mjc-page"], [1, "mjc-page__intro"], [1, "mjc-kpis"], ["type", "button", 1, "mjc-kpi", 3, "mjc-kpi--alert", "title", "disabled"], [1, "mjc-empty"], [1, "mjc-dash-split"], [1, "mjc-dash-card"], [1, "mjc-dash-card__h"], [1, "mjc-barlist"], [1, "mjc-funnel"], [1, "mjc-funnel__col"], [1, "mjc-buckets"], [1, "mjc-bucket"], [1, "mjc-viewer-host"], [3, "Entity", "ViewEntity"], ["type", "button", 1, "mjc-kpi", 3, "click", "title", "disabled"], [1, "mjc-kpi__l"], [1, "mjc-kpi__v"], [1, "mjc-kpi__f"], [1, "mjc-barrow"], [1, "mjc-track"], [1, "mjc-fill"], [1, "mjc-num"], [1, "mjc-funnel__n"], [1, "mjc-funnel__bar"], [1, "mjc-funnel__lab"], [3, "RecordOpened", "Entity", "ViewEntity"]], template: function MJCContractsDashboardPageComponent_Template(rf, ctx) { if (rf & 1) {
|
|
340
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "p", 1);
|
|
341
|
+
i0.ɵɵtext(2, " What needs a person. Tile counts come from the same view the worklists read. Charts are counts and dates \u2014 never dollars. ");
|
|
342
|
+
i0.ɵɵelementEnd();
|
|
343
|
+
i0.ɵɵelementStart(3, "div", 2);
|
|
344
|
+
i0.ɵɵrepeaterCreate(4, MJCContractsDashboardPageComponent_For_5_Template, 7, 7, "button", 3, _forTrack0);
|
|
345
|
+
i0.ɵɵelementEnd();
|
|
148
346
|
i0.ɵɵconditionalCreate(6, MJCContractsDashboardPageComponent_Conditional_6_Template, 2, 1, "p", 4);
|
|
149
|
-
i0.ɵɵ
|
|
150
|
-
i0.ɵɵtext(
|
|
151
|
-
i0.ɵɵ
|
|
152
|
-
i0.ɵɵ
|
|
153
|
-
i0.ɵɵ
|
|
154
|
-
i0.ɵɵ
|
|
155
|
-
i0.ɵɵ
|
|
156
|
-
i0.ɵɵ
|
|
157
|
-
i0.ɵɵ
|
|
158
|
-
i0.ɵɵ
|
|
347
|
+
i0.ɵɵelementStart(7, "div", 5)(8, "div", 6)(9, "div", 7);
|
|
348
|
+
i0.ɵɵtext(10, " State mix ");
|
|
349
|
+
i0.ɵɵelementStart(11, "span");
|
|
350
|
+
i0.ɵɵtext(12, "layered-view ");
|
|
351
|
+
i0.ɵɵelementStart(13, "code");
|
|
352
|
+
i0.ɵɵtext(14, "State");
|
|
353
|
+
i0.ɵɵelementEnd();
|
|
354
|
+
i0.ɵɵtext(15, " \u2014 not re-derived");
|
|
355
|
+
i0.ɵɵelementEnd()();
|
|
356
|
+
i0.ɵɵelementStart(16, "div", 8);
|
|
357
|
+
i0.ɵɵconditionalCreate(17, MJCContractsDashboardPageComponent_Conditional_17_Template, 2, 0, "p", 4)(18, MJCContractsDashboardPageComponent_Conditional_18_Template, 2, 0);
|
|
358
|
+
i0.ɵɵelementEnd()();
|
|
359
|
+
i0.ɵɵelementStart(19, "div", 6)(20, "div", 7);
|
|
360
|
+
i0.ɵɵtext(21, " Attention ");
|
|
361
|
+
i0.ɵɵelementStart(22, "span");
|
|
362
|
+
i0.ɵɵtext(23, "same counts as the tiles");
|
|
363
|
+
i0.ɵɵelementEnd()();
|
|
364
|
+
i0.ɵɵelementStart(24, "div", 9);
|
|
365
|
+
i0.ɵɵrepeaterCreate(25, MJCContractsDashboardPageComponent_For_26_Template, 6, 4, "div", 10, _forTrack0);
|
|
366
|
+
i0.ɵɵelementEnd()()();
|
|
367
|
+
i0.ɵɵelementStart(27, "div", 6)(28, "div", 7);
|
|
368
|
+
i0.ɵɵtext(29, " Days to end ");
|
|
369
|
+
i0.ɵɵelementStart(30, "span");
|
|
370
|
+
i0.ɵɵtext(31, "0\u2013120 day horizon \u00B7 ");
|
|
371
|
+
i0.ɵɵelementStart(32, "code");
|
|
372
|
+
i0.ɵɵtext(33, "DaysToEnd");
|
|
373
|
+
i0.ɵɵelementEnd()()();
|
|
374
|
+
i0.ɵɵelementStart(34, "div", 11);
|
|
375
|
+
i0.ɵɵrepeaterCreate(35, MJCContractsDashboardPageComponent_For_36_Template, 5, 2, "div", 12, _forTrack1);
|
|
376
|
+
i0.ɵɵelementEnd()();
|
|
377
|
+
i0.ɵɵelementStart(37, "div", 6)(38, "div", 7);
|
|
378
|
+
i0.ɵɵtext(39, " Hot list ");
|
|
379
|
+
i0.ɵɵelementStart(40, "span");
|
|
380
|
+
i0.ɵɵtext(41, "paper, notice, or ending \u00B7 click \u2192 Explorer tab");
|
|
381
|
+
i0.ɵɵelementEnd()();
|
|
382
|
+
i0.ɵɵelementStart(42, "div", 13);
|
|
383
|
+
i0.ɵɵconditionalCreate(43, MJCContractsDashboardPageComponent_Conditional_43_Template, 1, 2, "mj-entity-viewer", 14)(44, MJCContractsDashboardPageComponent_Conditional_44_Template, 2, 0, "p", 4);
|
|
384
|
+
i0.ɵɵelementEnd()()();
|
|
159
385
|
} if (rf & 2) {
|
|
160
386
|
i0.ɵɵadvance(4);
|
|
161
387
|
i0.ɵɵrepeater(ctx.Tiles);
|
|
162
388
|
i0.ɵɵadvance(2);
|
|
163
389
|
i0.ɵɵconditional(ctx.LoadError ? 6 : -1);
|
|
164
|
-
|
|
390
|
+
i0.ɵɵadvance(11);
|
|
391
|
+
i0.ɵɵconditional(!ctx.StateBars.length ? 17 : 18);
|
|
392
|
+
i0.ɵɵadvance(8);
|
|
393
|
+
i0.ɵɵrepeater(ctx.ChartTiles);
|
|
394
|
+
i0.ɵɵadvance(10);
|
|
395
|
+
i0.ɵɵrepeater(ctx.Horizon);
|
|
396
|
+
i0.ɵɵadvance(8);
|
|
397
|
+
i0.ɵɵconditional(ctx.ContractEntityInfo ? 43 : 44);
|
|
398
|
+
} }, dependencies: [CommonModule, EntityViewerModule, i1.EntityViewerComponent], encapsulation: 2 });
|
|
165
399
|
}
|
|
166
400
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJCContractsDashboardPageComponent, [{
|
|
167
401
|
type: Component,
|
|
@@ -169,25 +403,26 @@ export class MJCContractsDashboardPageComponent {
|
|
|
169
403
|
selector: 'mjc-contracts-dashboard-page',
|
|
170
404
|
standalone: true,
|
|
171
405
|
encapsulation: ViewEncapsulation.None,
|
|
172
|
-
imports: [CommonModule],
|
|
406
|
+
imports: [CommonModule, EntityViewerModule],
|
|
173
407
|
template: `
|
|
174
408
|
<div class="mjc-page">
|
|
175
409
|
<p class="mjc-page__intro">
|
|
176
|
-
What needs a person.
|
|
177
|
-
|
|
410
|
+
What needs a person. Tile counts come from the same view the worklists read. Charts
|
|
411
|
+
are counts and dates — never dollars.
|
|
178
412
|
</p>
|
|
179
413
|
|
|
180
|
-
<div class="mjc-
|
|
414
|
+
<div class="mjc-kpis">
|
|
181
415
|
@for (tile of Tiles; track tile.Id) {
|
|
182
416
|
<button
|
|
183
417
|
type="button"
|
|
184
|
-
class="mjc-
|
|
185
|
-
[class.mjc-
|
|
418
|
+
class="mjc-kpi"
|
|
419
|
+
[class.mjc-kpi--alert]="tile.Count !== null && tile.Count > 0 && (tile.Id === 'in-force-no-paper' || tile.Id === 'notice-window')"
|
|
186
420
|
[title]="tile.Hint"
|
|
187
421
|
[disabled]="!tile.GoTo"
|
|
188
422
|
(click)="Open(tile)">
|
|
189
|
-
{{ tile.Label }}
|
|
190
|
-
<
|
|
423
|
+
<div class="mjc-kpi__l">{{ tile.Label }}</div>
|
|
424
|
+
<div class="mjc-kpi__v">{{ tile.Count === null ? '—' : tile.Count }}</div>
|
|
425
|
+
<div class="mjc-kpi__f">{{ tile.Hint }}</div>
|
|
191
426
|
</button>
|
|
192
427
|
}
|
|
193
428
|
</div>
|
|
@@ -196,14 +431,76 @@ export class MJCContractsDashboardPageComponent {
|
|
|
196
431
|
<p class="mjc-empty">{{ LoadError }}</p>
|
|
197
432
|
}
|
|
198
433
|
|
|
199
|
-
<div class="mjc-
|
|
200
|
-
<
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
434
|
+
<div class="mjc-dash-split">
|
|
435
|
+
<div class="mjc-dash-card">
|
|
436
|
+
<div class="mjc-dash-card__h">
|
|
437
|
+
State mix
|
|
438
|
+
<span>layered-view <code>State</code> — not re-derived</span>
|
|
439
|
+
</div>
|
|
440
|
+
<div class="mjc-barlist">
|
|
441
|
+
@if (!StateBars.length) {
|
|
442
|
+
<p class="mjc-empty">No contracts to mix.</p>
|
|
443
|
+
} @else {
|
|
444
|
+
@for (bar of StateBars; track bar.State) {
|
|
445
|
+
<div class="mjc-barrow">
|
|
446
|
+
<b>{{ bar.State }}</b>
|
|
447
|
+
<div class="mjc-track">
|
|
448
|
+
<div class="mjc-fill" [style.width]="BarPct(bar.Count)"></div>
|
|
449
|
+
</div>
|
|
450
|
+
<span class="mjc-num">{{ bar.Count }}</span>
|
|
451
|
+
</div>
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
</div>
|
|
455
|
+
</div>
|
|
456
|
+
<div class="mjc-dash-card">
|
|
457
|
+
<div class="mjc-dash-card__h">
|
|
458
|
+
Attention
|
|
459
|
+
<span>same counts as the tiles</span>
|
|
460
|
+
</div>
|
|
461
|
+
<div class="mjc-funnel">
|
|
462
|
+
@for (tile of ChartTiles; track tile.Id) {
|
|
463
|
+
<div class="mjc-funnel__col">
|
|
464
|
+
<div class="mjc-funnel__n">{{ tile.Count === null ? '—' : tile.Count }}</div>
|
|
465
|
+
<div class="mjc-funnel__bar" [style.height]="FunnelHeight(tile.Count)"></div>
|
|
466
|
+
<div class="mjc-funnel__lab">{{ ShortLabel(tile.Id) }}</div>
|
|
467
|
+
</div>
|
|
468
|
+
}
|
|
469
|
+
</div>
|
|
470
|
+
</div>
|
|
471
|
+
</div>
|
|
472
|
+
|
|
473
|
+
<div class="mjc-dash-card">
|
|
474
|
+
<div class="mjc-dash-card__h">
|
|
475
|
+
Days to end
|
|
476
|
+
<span>0–120 day horizon · <code>DaysToEnd</code></span>
|
|
477
|
+
</div>
|
|
478
|
+
<div class="mjc-buckets">
|
|
479
|
+
@for (b of Horizon; track b.Label) {
|
|
480
|
+
<div class="mjc-bucket">
|
|
481
|
+
<div class="mjc-kpi__l">{{ b.Label }}</div>
|
|
482
|
+
<div class="mjc-kpi__v">{{ b.Count }}</div>
|
|
483
|
+
</div>
|
|
484
|
+
}
|
|
485
|
+
</div>
|
|
486
|
+
</div>
|
|
487
|
+
|
|
488
|
+
<div class="mjc-dash-card">
|
|
489
|
+
<div class="mjc-dash-card__h">
|
|
490
|
+
Hot list
|
|
491
|
+
<span>paper, notice, or ending · click → Explorer tab</span>
|
|
492
|
+
</div>
|
|
493
|
+
<div class="mjc-viewer-host">
|
|
494
|
+
@if (ContractEntityInfo) {
|
|
495
|
+
<mj-entity-viewer
|
|
496
|
+
[Entity]="ContractEntityInfo"
|
|
497
|
+
[ViewEntity]="HotView"
|
|
498
|
+
(RecordOpened)="OnRecordOpened($event)">
|
|
499
|
+
</mj-entity-viewer>
|
|
500
|
+
} @else {
|
|
501
|
+
<p class="mjc-empty">Contract entity metadata is not loaded.</p>
|
|
502
|
+
}
|
|
503
|
+
</div>
|
|
207
504
|
</div>
|
|
208
505
|
</div>
|
|
209
506
|
`,
|
|
@@ -211,5 +508,10 @@ export class MJCContractsDashboardPageComponent {
|
|
|
211
508
|
}], null, { NavigateToPage: [{
|
|
212
509
|
type: Output
|
|
213
510
|
}] }); })();
|
|
214
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractsDashboardPageComponent, { className: "MJCContractsDashboardPageComponent", filePath: "lib/pages/contracts-dashboard.page.ts", lineNumber:
|
|
511
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractsDashboardPageComponent, { className: "MJCContractsDashboardPageComponent", filePath: "lib/pages/contracts-dashboard.page.ts", lineNumber: 164 }); })();
|
|
512
|
+
const HOT_WHERE = `(State = 'Active' AND IsAwaitingDocument = 1)` +
|
|
513
|
+
` OR (RenewalNoticeDeadline IS NOT NULL` +
|
|
514
|
+
` AND RenewalNoticeDeadline >= CAST(GETUTCDATE() AS date)` +
|
|
515
|
+
` AND RenewalNoticeDeadline <= DATEADD(day, 60, CAST(GETUTCDATE() AS date)))` +
|
|
516
|
+
` OR (DaysToEnd IS NOT NULL AND DaysToEnd BETWEEN 0 AND 120)`;
|
|
215
517
|
//# sourceMappingURL=contracts-dashboard.page.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts-dashboard.page.js","sourceRoot":"","sources":["../../../src/lib/pages/contracts-dashboard.page.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"contracts-dashboard.page.js","sourceRoot":"","sources":["../../../src/lib/pages/contracts-dashboard.page.ts"],"names":[],"mappings":"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"}
|