@mj-biz-apps/contracts-ng 0.3.0 → 0.4.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.
@@ -49,13 +49,13 @@ function MJCContractOverviewPanel_Conditional_2_Template(rf, ctx) { if (rf & 1)
49
49
  function MJCContractOverviewPanel_Conditional_3_Template(rf, ctx) { if (rf & 1) {
50
50
  i0.ɵɵelementStart(0, "div", 3);
51
51
  i0.ɵɵelement(1, "i", 21);
52
- i0.ɵɵtext(2, " Nothing on this agreement is asking for a person. ");
52
+ i0.ɵɵtext(2, " No issues. ");
53
53
  i0.ɵɵelementEnd();
54
54
  } }
55
- function MJCContractOverviewPanel_Conditional_43_Template(rf, ctx) { if (rf & 1) {
55
+ function MJCContractOverviewPanel_Conditional_41_Template(rf, ctx) { if (rf & 1) {
56
56
  const _r3 = i0.ɵɵgetCurrentView();
57
57
  i0.ɵɵelementStart(0, "button", 22);
58
- i0.ɵɵlistener("click", function MJCContractOverviewPanel_Conditional_43_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OpenCustomer($event)); });
58
+ i0.ɵɵlistener("click", function MJCContractOverviewPanel_Conditional_41_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OpenCustomer($event)); });
59
59
  i0.ɵɵtext(1);
60
60
  i0.ɵɵelementEnd();
61
61
  } if (rf & 2) {
@@ -63,16 +63,16 @@ function MJCContractOverviewPanel_Conditional_43_Template(rf, ctx) { if (rf & 1)
63
63
  i0.ɵɵadvance();
64
64
  i0.ɵɵtextInterpolate(ctx_r1.CustomerName);
65
65
  } }
66
- function MJCContractOverviewPanel_Conditional_44_Template(rf, ctx) { if (rf & 1) {
66
+ function MJCContractOverviewPanel_Conditional_42_Template(rf, ctx) { if (rf & 1) {
67
67
  i0.ɵɵtext(0);
68
68
  } if (rf & 2) {
69
69
  const ctx_r1 = i0.ɵɵnextContext();
70
70
  i0.ɵɵtextInterpolate1(" ", ctx_r1.CustomerName || "\u2014", " ");
71
71
  } }
72
- function MJCContractOverviewPanel_Conditional_49_Template(rf, ctx) { if (rf & 1) {
72
+ function MJCContractOverviewPanel_Conditional_47_Template(rf, ctx) { if (rf & 1) {
73
73
  const _r4 = i0.ɵɵgetCurrentView();
74
74
  i0.ɵɵelementStart(0, "button", 22);
75
- i0.ɵɵlistener("click", function MJCContractOverviewPanel_Conditional_49_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OpenContact($event)); });
75
+ i0.ɵɵlistener("click", function MJCContractOverviewPanel_Conditional_47_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OpenContact($event)); });
76
76
  i0.ɵɵtext(1);
77
77
  i0.ɵɵelementEnd();
78
78
  } if (rf & 2) {
@@ -80,30 +80,42 @@ function MJCContractOverviewPanel_Conditional_49_Template(rf, ctx) { if (rf & 1)
80
80
  i0.ɵɵadvance();
81
81
  i0.ɵɵtextInterpolate(ctx_r1.ContactName);
82
82
  } }
83
- function MJCContractOverviewPanel_Conditional_50_Template(rf, ctx) { if (rf & 1) {
83
+ function MJCContractOverviewPanel_Conditional_48_Template(rf, ctx) { if (rf & 1) {
84
84
  i0.ɵɵtext(0);
85
85
  } if (rf & 2) {
86
86
  const ctx_r1 = i0.ɵɵnextContext();
87
87
  i0.ɵɵtextInterpolate1(" ", ctx_r1.ContactName || "\u2014", " ");
88
88
  } }
89
- function MJCContractOverviewPanel_Conditional_95_Template(rf, ctx) { if (rf & 1) {
89
+ function MJCContractOverviewPanel_Conditional_89_Conditional_4_Template(rf, ctx) { if (rf & 1) {
90
90
  const _r5 = i0.ɵɵgetCurrentView();
91
91
  i0.ɵɵelementStart(0, "button", 22);
92
- i0.ɵɵlistener("click", function MJCContractOverviewPanel_Conditional_95_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OpenSource($event)); });
92
+ i0.ɵɵlistener("click", function MJCContractOverviewPanel_Conditional_89_Conditional_4_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenSource($event)); });
93
93
  i0.ɵɵtext(1);
94
94
  i0.ɵɵelementEnd();
95
95
  } if (rf & 2) {
96
- const ctx_r1 = i0.ɵɵnextContext();
96
+ const ctx_r1 = i0.ɵɵnextContext(2);
97
97
  i0.ɵɵadvance();
98
98
  i0.ɵɵtextInterpolate(ctx_r1.SourceLabel);
99
99
  } }
100
- function MJCContractOverviewPanel_Conditional_96_Template(rf, ctx) { if (rf & 1) {
100
+ function MJCContractOverviewPanel_Conditional_89_Conditional_5_Template(rf, ctx) { if (rf & 1) {
101
101
  i0.ɵɵtext(0);
102
102
  } if (rf & 2) {
103
- const ctx_r1 = i0.ɵɵnextContext();
103
+ const ctx_r1 = i0.ɵɵnextContext(2);
104
104
  i0.ɵɵtextInterpolate1(" ", ctx_r1.SourceLabel, " ");
105
105
  } }
106
- function MJCContractOverviewPanel_Conditional_101_Template(rf, ctx) { if (rf & 1) {
106
+ function MJCContractOverviewPanel_Conditional_89_Template(rf, ctx) { if (rf & 1) {
107
+ i0.ɵɵelementStart(0, "div")(1, "div", 6);
108
+ i0.ɵɵtext(2, "Created from");
109
+ i0.ɵɵelementEnd();
110
+ i0.ɵɵelementStart(3, "div", 7);
111
+ i0.ɵɵconditionalCreate(4, MJCContractOverviewPanel_Conditional_89_Conditional_4_Template, 2, 1, "button", 13)(5, MJCContractOverviewPanel_Conditional_89_Conditional_5_Template, 1, 1);
112
+ i0.ɵɵelementEnd()();
113
+ } if (rf & 2) {
114
+ const ctx_r1 = i0.ɵɵnextContext();
115
+ i0.ɵɵadvance(4);
116
+ i0.ɵɵconditional(ctx_r1.CanOpenSource ? 4 : 5);
117
+ } }
118
+ function MJCContractOverviewPanel_Conditional_94_Template(rf, ctx) { if (rf & 1) {
107
119
  i0.ɵɵelementStart(0, "p", 17);
108
120
  i0.ɵɵtext(1);
109
121
  i0.ɵɵelementEnd();
@@ -112,9 +124,9 @@ function MJCContractOverviewPanel_Conditional_101_Template(rf, ctx) { if (rf & 1
112
124
  i0.ɵɵadvance();
113
125
  i0.ɵɵtextInterpolate(ctx_r1.NextMove);
114
126
  } }
115
- function MJCContractOverviewPanel_Conditional_102_Template(rf, ctx) { if (rf & 1) {
127
+ function MJCContractOverviewPanel_Conditional_95_Template(rf, ctx) { if (rf & 1) {
116
128
  i0.ɵɵelementStart(0, "p", 18);
117
- i0.ɵɵtext(1, "No action sitting on this agreement right now.");
129
+ i0.ɵɵtext(1, "No action needed.");
118
130
  i0.ɵɵelementEnd();
119
131
  } }
120
132
  const _forTrack0 = ($index, $item) => $item.name;
@@ -128,7 +140,7 @@ function MJCContractAgreementPanel_For_3_Template(rf, ctx) { if (rf & 1) {
128
140
  const ctx_r1 = i0.ɵɵnextContext();
129
141
  i0.ɵɵclassProp("mjc-fg--span", f_r3.span);
130
142
  i0.ɵɵadvance();
131
- i0.ɵɵproperty("Record", ctx_r1.Record)("ShowLabel", true)("FieldName", f_r3.name)("Type", f_r3.type)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.FormContext)("LinkType", f_r3.link ?? "None");
143
+ i0.ɵɵproperty("Record", ctx_r1.Record)("ShowLabel", true)("FieldName", f_r3.name)("Type", f_r3.type)("EditMode", f_r3.readOnly ? false : ctx_r1.EditMode)("FormContext", ctx_r1.FormContext)("LinkType", f_r3.link ?? "None");
132
144
  } }
133
145
  function MJCContractPartiesPanel_For_3_Template(rf, ctx) { if (rf & 1) {
134
146
  const _r1 = i0.ɵɵgetCurrentView();
@@ -140,7 +152,7 @@ function MJCContractPartiesPanel_For_3_Template(rf, ctx) { if (rf & 1) {
140
152
  const ctx_r1 = i0.ɵɵnextContext();
141
153
  i0.ɵɵclassProp("mjc-fg--span", f_r3.span);
142
154
  i0.ɵɵadvance();
143
- i0.ɵɵproperty("Record", ctx_r1.Record)("ShowLabel", true)("FieldName", f_r3.name)("Type", f_r3.type)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.FormContext)("LinkType", f_r3.link ?? "None");
155
+ i0.ɵɵproperty("Record", ctx_r1.Record)("ShowLabel", true)("FieldName", f_r3.name)("Type", f_r3.type)("EditMode", f_r3.readOnly ? false : ctx_r1.EditMode)("FormContext", ctx_r1.FormContext)("LinkType", f_r3.link ?? "None");
144
156
  } }
145
157
  const _c0 = "\n .mjc-fields-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--mj-space-4) var(--mj-space-5);\n padding: var(--mj-space-4) var(--mj-space-5);\n }\n @media (max-width: 720px) { .mjc-fields-grid { grid-template-columns: 1fr; } }\n .mjc-fg { min-width: 0; }\n .mjc-fg--span { grid-column: 1 / -1; }\n .mjc-fg .mj-forms-field {\n display: flex; flex-direction: column; align-items: stretch; gap: 4px; padding: 0;\n }\n .mjc-fg .mj-forms-field-label {\n font-size: var(--mj-text-xs); font-weight: 700; letter-spacing: .06em;\n text-transform: uppercase; color: var(--mj-text-muted);\n }\n .mjc-fg .mj-forms-field--editing:hover { margin: 0; padding: 0; }\n";
146
158
  function MJCContractNotesPanel_For_3_Template(rf, ctx) { if (rf & 1) {
@@ -153,7 +165,7 @@ function MJCContractNotesPanel_For_3_Template(rf, ctx) { if (rf & 1) {
153
165
  const ctx_r1 = i0.ɵɵnextContext();
154
166
  i0.ɵɵclassProp("mjc-fg--span", f_r3.span);
155
167
  i0.ɵɵadvance();
156
- i0.ɵɵproperty("Record", ctx_r1.Record)("ShowLabel", true)("FieldName", f_r3.name)("Type", f_r3.type)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.FormContext)("LinkType", f_r3.link ?? "None");
168
+ i0.ɵɵproperty("Record", ctx_r1.Record)("ShowLabel", true)("FieldName", f_r3.name)("Type", f_r3.type)("EditMode", f_r3.readOnly ? false : ctx_r1.EditMode)("FormContext", ctx_r1.FormContext)("LinkType", f_r3.link ?? "None");
157
169
  } }
158
170
  function MJCContractProvenanceFieldsPanel_For_3_Template(rf, ctx) { if (rf & 1) {
159
171
  const _r1 = i0.ɵɵgetCurrentView();
@@ -165,7 +177,7 @@ function MJCContractProvenanceFieldsPanel_For_3_Template(rf, ctx) { if (rf & 1)
165
177
  const ctx_r1 = i0.ɵɵnextContext();
166
178
  i0.ɵɵclassProp("mjc-fg--span", f_r3.span);
167
179
  i0.ɵɵadvance();
168
- i0.ɵɵproperty("Record", ctx_r1.Record)("ShowLabel", true)("FieldName", f_r3.name)("Type", f_r3.type)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.FormContext)("LinkType", f_r3.link ?? "None");
180
+ i0.ɵɵproperty("Record", ctx_r1.Record)("ShowLabel", true)("FieldName", f_r3.name)("Type", f_r3.type)("EditMode", f_r3.readOnly ? false : ctx_r1.EditMode)("FormContext", ctx_r1.FormContext)("LinkType", f_r3.link ?? "None");
169
181
  } }
170
182
  function MJCContractLifecyclePanel_For_3_Template(rf, ctx) { if (rf & 1) {
171
183
  const _r1 = i0.ɵɵgetCurrentView();
@@ -177,7 +189,7 @@ function MJCContractLifecyclePanel_For_3_Template(rf, ctx) { if (rf & 1) {
177
189
  const ctx_r1 = i0.ɵɵnextContext();
178
190
  i0.ɵɵclassProp("mjc-fg--span", f_r3.span);
179
191
  i0.ɵɵadvance();
180
- i0.ɵɵproperty("Record", ctx_r1.Record)("ShowLabel", true)("FieldName", f_r3.name)("Type", f_r3.type)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.FormContext)("LinkType", f_r3.link ?? "None");
192
+ i0.ɵɵproperty("Record", ctx_r1.Record)("ShowLabel", true)("FieldName", f_r3.name)("Type", f_r3.type)("EditMode", f_r3.readOnly ? false : ctx_r1.EditMode)("FormContext", ctx_r1.FormContext)("LinkType", f_r3.link ?? "None");
181
193
  } }
182
194
  function MJCContractModificationsPanel_Conditional_1_Template(rf, ctx) { if (rf & 1) {
183
195
  const _r1 = i0.ɵɵgetCurrentView();
@@ -225,6 +237,20 @@ function endsInText(days) {
225
237
  const months = Math.round(days / 30);
226
238
  return `in ${months} month${months === 1 ? '' : 's'}`;
227
239
  }
240
+ /**
241
+ * The whole clause, verb included, because the verb has to agree with the tense
242
+ * `endsInText` picks. Writing `Term ends ${endsInText(d)}` reads "Term ends ends
243
+ * today" on the day a term ends, and "Term ends ended 3 days ago" behind it.
244
+ */
245
+ function termEndsText(days) {
246
+ if (days == null)
247
+ return '';
248
+ if (days < 0)
249
+ return `Term ${endsInText(days)}`;
250
+ if (days === 0)
251
+ return 'Term ends today';
252
+ return `Term ends ${endsInText(days)}`;
253
+ }
228
254
  /* ── Overview ─────────────────────────────────────────────────────────────── */
229
255
  let MJCContractOverviewPanel = class MJCContractOverviewPanel extends BaseFormPanel {
230
256
  dateLabel = dateLabel;
@@ -289,61 +315,62 @@ let MJCContractOverviewPanel = class MJCContractOverviewPanel extends BaseFormPa
289
315
  return 'warning';
290
316
  return 'muted';
291
317
  }
318
+ get HasSource() {
319
+ return !!this.Record?.CreatingEntity;
320
+ }
292
321
  get CanOpenSource() {
293
322
  return !!(this.Record?.CreatingEntity && this.Record?.CreatingRecordID);
294
323
  }
295
324
  get SourceLabel() {
296
- if (!this.Record?.CreatingEntity)
297
- return 'Entered directly';
298
- return this.Record.CreatingEntity;
325
+ return this.Record?.CreatingEntity ?? '';
299
326
  }
300
327
  get Health() {
301
328
  const out = [];
302
329
  if (!this.Record)
303
330
  return out;
304
331
  if (this.Record.IsAwaitingDocument) {
305
- out.push('This type expects an executed document and none is attached.');
332
+ out.push('Executed agreement not attached.');
306
333
  }
307
334
  if (this.Record.IsInCancellationWindow) {
308
- out.push('The cancellation window is open — a customer can walk without renewing.');
335
+ out.push('Cancellation window is open.');
309
336
  }
310
337
  const end = this.Record.DaysToEnd;
311
338
  if (end != null && end < 0 && !this.Record.TerminatedDate) {
312
339
  out.push('The term has ended and no termination date is recorded.');
313
340
  }
314
341
  else if (this.State === 'Active' && end != null && end <= 120) {
315
- out.push(`Term ends ${endsInText(end)} — this belongs on the renewals watchlist.`);
342
+ out.push(`${termEndsText(end)}.`);
316
343
  }
317
344
  const notice = daysUntil(this.Record.RenewalNoticeDeadline);
318
345
  if (notice != null && notice < 0) {
319
346
  out.push('Renewal notice deadline has already passed.');
320
347
  }
321
348
  else if (notice != null && notice <= 30) {
322
- out.push(`We owe written notice by ${dateLabel(this.Record.RenewalNoticeDeadline)}.`);
349
+ out.push(`Renewal notice due by ${dateLabel(this.Record.RenewalNoticeDeadline)}.`);
323
350
  }
324
351
  if (this.Record.HasModifications) {
325
- out.push('The standard agreement was modified — read the paper.');
352
+ out.push('Standard agreement was modified.');
326
353
  }
327
354
  if (this.State === 'Active' && !this.Record.EndDate) {
328
- out.push('Active with no end date — the watchlist cannot see this.');
355
+ out.push('Active with no end date.');
329
356
  }
330
357
  return out;
331
358
  }
332
359
  get NextMove() {
333
360
  if (this.Record?.IsAwaitingDocument)
334
- return 'Attach the executed document. Finance cannot process paper they cannot see.';
361
+ return 'Attach the executed agreement.';
335
362
  if (this.Record?.IsInCancellationWindow)
336
- return 'Cancellation window is open. Confirm whether this renews or walks.';
363
+ return 'Cancellation window is open. Confirm whether the customer is renewing.';
337
364
  const notice = daysUntil(this.Record?.RenewalNoticeDeadline);
338
365
  if (notice != null && notice <= 30) {
339
366
  return `Send the renewal notice. Deadline ${dateLabel(this.Record?.RenewalNoticeDeadline)}.`;
340
367
  }
341
368
  const end = this.Record?.DaysToEnd;
342
369
  if (this.State === 'Active' && end != null && end <= 120) {
343
- return `Start the renewal conversation. Term ends ${endsInText(end)}.`;
370
+ return `Begin renewal discussion. ${termEndsText(end)}.`;
344
371
  }
345
372
  if (this.Record?.HasModifications)
346
- return 'Read the deviations before anyone treats this as a standard agreement.';
373
+ return 'Review the modifications to the standard agreement.';
347
374
  return null;
348
375
  }
349
376
  OpenCustomer(event) {
@@ -371,7 +398,7 @@ let MJCContractOverviewPanel = class MJCContractOverviewPanel extends BaseFormPa
371
398
  });
372
399
  }
373
400
  static ɵfac = /*@__PURE__*/ (() => { let ɵMJCContractOverviewPanel_BaseFactory; return function MJCContractOverviewPanel_Factory(__ngFactoryType__) { return (ɵMJCContractOverviewPanel_BaseFactory || (ɵMJCContractOverviewPanel_BaseFactory = i0.ɵɵgetInheritedFactory(MJCContractOverviewPanel)))(__ngFactoryType__ || MJCContractOverviewPanel); }; })();
374
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJCContractOverviewPanel, selectors: [["mjc-contract-overview-panel"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 103, vars: 26, consts: [["SectionKey", "overview", "SectionName", "Overview", "Icon", "fa-solid fa-chart-pie", 3, "Form", "FormContext", "DefaultExpanded"], [1, "mjc-ov"], [1, "mjc-ov-health"], [1, "mjc-ov-ok"], [1, "mjc-ov-strip"], [1, "mjc-ov-kpi"], [1, "l"], [1, "v"], [1, "s"], [1, "mjc-ov-grid"], [1, "mjc-ov-card"], [1, "fa-solid", "fa-building"], [1, "mjc-ov-facts"], ["type", "button", 1, "mjc-ov-link"], [1, "fa-solid", "fa-scale-balanced"], [1, "mjc-ov-card", "mjc-ov-card--wide"], [1, "fa-solid", "fa-person-walking"], [1, "mjc-ov-next"], [1, "mjc-ov-empty"], [1, "mjc-ov-alert"], ["aria-hidden", "true", 1, "fa-solid", "fa-triangle-exclamation"], ["aria-hidden", "true", 1, "fa-solid", "fa-circle-check"], ["type", "button", 1, "mjc-ov-link", 3, "click"]], template: function MJCContractOverviewPanel_Template(rf, ctx) { if (rf & 1) {
401
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJCContractOverviewPanel, selectors: [["mjc-contract-overview-panel"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 96, vars: 25, consts: [["SectionKey", "overview", "SectionName", "Overview", "Icon", "fa-solid fa-chart-pie", 3, "Form", "FormContext", "DefaultExpanded"], [1, "mjc-ov"], [1, "mjc-ov-health"], [1, "mjc-ov-ok"], [1, "mjc-ov-strip"], [1, "mjc-ov-kpi"], [1, "l"], [1, "v"], [1, "s"], [1, "mjc-ov-grid"], [1, "mjc-ov-card"], [1, "fa-solid", "fa-building"], [1, "mjc-ov-facts"], ["type", "button", 1, "mjc-ov-link"], [1, "fa-solid", "fa-scale-balanced"], [1, "mjc-ov-card", "mjc-ov-card--wide"], [1, "fa-solid", "fa-person-walking"], [1, "mjc-ov-next"], [1, "mjc-ov-empty"], [1, "mjc-ov-alert"], ["aria-hidden", "true", 1, "fa-solid", "fa-triangle-exclamation"], ["aria-hidden", "true", 1, "fa-solid", "fa-circle-check"], ["type", "button", 1, "mjc-ov-link", 3, "click"]], template: function MJCContractOverviewPanel_Template(rf, ctx) { if (rf & 1) {
375
402
  i0.ɵɵelementStart(0, "mj-collapsible-panel", 0)(1, "div", 1);
376
403
  i0.ɵɵconditionalCreate(2, MJCContractOverviewPanel_Conditional_2_Template, 3, 0, "div", 2)(3, MJCContractOverviewPanel_Conditional_3_Template, 3, 0, "div", 3);
377
404
  i0.ɵɵelementStart(4, "div", 4)(5, "div", 5)(6, "div", 6);
@@ -406,83 +433,76 @@ let MJCContractOverviewPanel = class MJCContractOverviewPanel extends BaseFormPa
406
433
  i0.ɵɵelementEnd();
407
434
  i0.ɵɵelementStart(29, "div", 7);
408
435
  i0.ɵɵtext(30);
409
- i0.ɵɵelementEnd();
410
- i0.ɵɵelementStart(31, "div", 8);
411
- i0.ɵɵtext(32);
412
436
  i0.ɵɵelementEnd()()();
413
- i0.ɵɵelementStart(33, "div", 9)(34, "article", 10)(35, "header");
414
- i0.ɵɵelement(36, "i", 11);
415
- i0.ɵɵtext(37, " Parties");
437
+ i0.ɵɵelementStart(31, "div", 9)(32, "article", 10)(33, "header");
438
+ i0.ɵɵelement(34, "i", 11);
439
+ i0.ɵɵtext(35, " Parties");
416
440
  i0.ɵɵelementEnd();
417
- i0.ɵɵelementStart(38, "div", 12)(39, "div")(40, "div", 6);
418
- i0.ɵɵtext(41, "Customer");
441
+ i0.ɵɵelementStart(36, "div", 12)(37, "div")(38, "div", 6);
442
+ i0.ɵɵtext(39, "Customer");
419
443
  i0.ɵɵelementEnd();
420
- i0.ɵɵelementStart(42, "div", 7);
421
- i0.ɵɵconditionalCreate(43, MJCContractOverviewPanel_Conditional_43_Template, 2, 1, "button", 13)(44, MJCContractOverviewPanel_Conditional_44_Template, 1, 1);
444
+ i0.ɵɵelementStart(40, "div", 7);
445
+ i0.ɵɵconditionalCreate(41, MJCContractOverviewPanel_Conditional_41_Template, 2, 1, "button", 13)(42, MJCContractOverviewPanel_Conditional_42_Template, 1, 1);
422
446
  i0.ɵɵelementEnd()();
423
- i0.ɵɵelementStart(45, "div")(46, "div", 6);
424
- i0.ɵɵtext(47, "Contact");
447
+ i0.ɵɵelementStart(43, "div")(44, "div", 6);
448
+ i0.ɵɵtext(45, "Contact");
425
449
  i0.ɵɵelementEnd();
426
- i0.ɵɵelementStart(48, "div", 7);
427
- i0.ɵɵconditionalCreate(49, MJCContractOverviewPanel_Conditional_49_Template, 2, 1, "button", 13)(50, MJCContractOverviewPanel_Conditional_50_Template, 1, 1);
450
+ i0.ɵɵelementStart(46, "div", 7);
451
+ i0.ɵɵconditionalCreate(47, MJCContractOverviewPanel_Conditional_47_Template, 2, 1, "button", 13)(48, MJCContractOverviewPanel_Conditional_48_Template, 1, 1);
428
452
  i0.ɵɵelementEnd()();
429
- i0.ɵɵelementStart(51, "div")(52, "div", 6);
430
- i0.ɵɵtext(53, "Selling as");
453
+ i0.ɵɵelementStart(49, "div")(50, "div", 6);
454
+ i0.ɵɵtext(51, "Company");
431
455
  i0.ɵɵelementEnd();
432
- i0.ɵɵelementStart(54, "div", 7);
433
- i0.ɵɵtext(55);
456
+ i0.ɵɵelementStart(52, "div", 7);
457
+ i0.ɵɵtext(53);
434
458
  i0.ɵɵelementEnd()();
435
- i0.ɵɵelementStart(56, "div")(57, "div", 6);
436
- i0.ɵɵtext(58, "Agreement");
459
+ i0.ɵɵelementStart(54, "div")(55, "div", 6);
460
+ i0.ɵɵtext(56, "Agreement");
437
461
  i0.ɵɵelementEnd();
438
- i0.ɵɵelementStart(59, "div", 7);
439
- i0.ɵɵtext(60);
462
+ i0.ɵɵelementStart(57, "div", 7);
463
+ i0.ɵɵtext(58);
440
464
  i0.ɵɵelementEnd()()()();
441
- i0.ɵɵelementStart(61, "article", 10)(62, "header");
442
- i0.ɵɵelement(63, "i", 14);
443
- i0.ɵɵtext(64, " Obligation");
465
+ i0.ɵɵelementStart(59, "article", 10)(60, "header");
466
+ i0.ɵɵelement(61, "i", 14);
467
+ i0.ɵɵtext(62, " Obligation");
444
468
  i0.ɵɵelementEnd();
445
- i0.ɵɵelementStart(65, "div", 12)(66, "div")(67, "div", 6);
446
- i0.ɵɵtext(68, "Executed");
469
+ i0.ɵɵelementStart(63, "div", 12)(64, "div")(65, "div", 6);
470
+ i0.ɵɵtext(66, "Executed");
447
471
  i0.ɵɵelementEnd();
448
- i0.ɵɵelementStart(69, "div", 7);
449
- i0.ɵɵtext(70);
472
+ i0.ɵɵelementStart(67, "div", 7);
473
+ i0.ɵɵtext(68);
450
474
  i0.ɵɵelementEnd()();
451
- i0.ɵɵelementStart(71, "div")(72, "div", 6);
452
- i0.ɵɵtext(73, "Effective");
475
+ i0.ɵɵelementStart(69, "div")(70, "div", 6);
476
+ i0.ɵɵtext(71, "Effective");
453
477
  i0.ɵɵelementEnd();
454
- i0.ɵɵelementStart(74, "div", 7);
455
- i0.ɵɵtext(75);
478
+ i0.ɵɵelementStart(72, "div", 7);
479
+ i0.ɵɵtext(73);
456
480
  i0.ɵɵelementEnd()();
457
- i0.ɵɵelementStart(76, "div")(77, "div", 6);
458
- i0.ɵɵtext(78, "Notice we owe");
481
+ i0.ɵɵelementStart(74, "div")(75, "div", 6);
482
+ i0.ɵɵtext(76, "Notice we owe");
459
483
  i0.ɵɵelementEnd();
460
- i0.ɵɵelementStart(79, "div", 7);
461
- i0.ɵɵtext(80);
484
+ i0.ɵɵelementStart(77, "div", 7);
485
+ i0.ɵɵtext(78);
462
486
  i0.ɵɵelementEnd()();
463
- i0.ɵɵelementStart(81, "div")(82, "div", 6);
464
- i0.ɵɵtext(83, "Cancel window");
487
+ i0.ɵɵelementStart(79, "div")(80, "div", 6);
488
+ i0.ɵɵtext(81, "Cancel window");
465
489
  i0.ɵɵelementEnd();
466
- i0.ɵɵelementStart(84, "div", 7);
467
- i0.ɵɵtext(85);
490
+ i0.ɵɵelementStart(82, "div", 7);
491
+ i0.ɵɵtext(83);
468
492
  i0.ɵɵelementEnd()();
469
- i0.ɵɵelementStart(86, "div")(87, "div", 6);
470
- i0.ɵɵtext(88, "Annual increase");
493
+ i0.ɵɵelementStart(84, "div")(85, "div", 6);
494
+ i0.ɵɵtext(86, "Annual increase");
471
495
  i0.ɵɵelementEnd();
472
- i0.ɵɵelementStart(89, "div", 7);
473
- i0.ɵɵtext(90);
496
+ i0.ɵɵelementStart(87, "div", 7);
497
+ i0.ɵɵtext(88);
474
498
  i0.ɵɵelementEnd()();
475
- i0.ɵɵelementStart(91, "div")(92, "div", 6);
476
- i0.ɵɵtext(93, "Created from");
477
- i0.ɵɵelementEnd();
478
- i0.ɵɵelementStart(94, "div", 7);
479
- i0.ɵɵconditionalCreate(95, MJCContractOverviewPanel_Conditional_95_Template, 2, 1, "button", 13)(96, MJCContractOverviewPanel_Conditional_96_Template, 1, 1);
480
- i0.ɵɵelementEnd()()()();
481
- i0.ɵɵelementStart(97, "article", 15)(98, "header");
482
- i0.ɵɵelement(99, "i", 16);
483
- i0.ɵɵtext(100, " What needs a person");
499
+ i0.ɵɵconditionalCreate(89, MJCContractOverviewPanel_Conditional_89_Template, 6, 1, "div");
500
+ i0.ɵɵelementEnd()();
501
+ i0.ɵɵelementStart(90, "article", 15)(91, "header");
502
+ i0.ɵɵelement(92, "i", 16);
503
+ i0.ɵɵtext(93, " Next step");
484
504
  i0.ɵɵelementEnd();
485
- i0.ɵɵconditionalCreate(101, MJCContractOverviewPanel_Conditional_101_Template, 2, 1, "p", 17)(102, MJCContractOverviewPanel_Conditional_102_Template, 2, 0, "p", 18);
505
+ i0.ɵɵconditionalCreate(94, MJCContractOverviewPanel_Conditional_94_Template, 2, 1, "p", 17)(95, MJCContractOverviewPanel_Conditional_95_Template, 2, 0, "p", 18);
486
506
  i0.ɵɵelementEnd()()()();
487
507
  } if (rf & 2) {
488
508
  i0.ɵɵproperty("Form", ctx.FormComponent)("FormContext", ctx.FormContext)("DefaultExpanded", true);
@@ -508,16 +528,14 @@ let MJCContractOverviewPanel = class MJCContractOverviewPanel extends BaseFormPa
508
528
  i0.ɵɵtextInterpolate(ctx.dateLabel(ctx.Record.RenewalNoticeDeadline));
509
529
  i0.ɵɵadvance(5);
510
530
  i0.ɵɵtextInterpolate(ctx.Record.AutoRenew ? "Yes" : "No");
511
- i0.ɵɵadvance(2);
512
- i0.ɵɵtextInterpolate(ctx.Record.AutoRenew ? "as the paper states" : "someone must act");
513
531
  i0.ɵɵadvance(11);
514
- i0.ɵɵconditional(ctx.Record.CustomerOrganizationID && ctx.CustomerName ? 43 : 44);
532
+ i0.ɵɵconditional(ctx.Record.CustomerOrganizationID && ctx.CustomerName ? 41 : 42);
515
533
  i0.ɵɵadvance(6);
516
- i0.ɵɵconditional(ctx.Record.PrimaryContactPersonID && ctx.ContactName ? 49 : 50);
534
+ i0.ɵɵconditional(ctx.Record.PrimaryContactPersonID && ctx.ContactName ? 47 : 48);
517
535
  i0.ɵɵadvance(6);
518
536
  i0.ɵɵtextInterpolate(ctx.CompanyName || "\u2014");
519
537
  i0.ɵɵadvance(5);
520
- i0.ɵɵtextInterpolate(ctx.TemplateName || "no standard terms");
538
+ i0.ɵɵtextInterpolate(ctx.TemplateName || "None");
521
539
  i0.ɵɵadvance(10);
522
540
  i0.ɵɵtextInterpolate(ctx.dateLabel(ctx.Record.ExecutedDate));
523
541
  i0.ɵɵadvance(5);
@@ -528,10 +546,10 @@ let MJCContractOverviewPanel = class MJCContractOverviewPanel extends BaseFormPa
528
546
  i0.ɵɵtextInterpolate(ctx.DaysLabel(ctx.Record.CancellationWindowDays));
529
547
  i0.ɵɵadvance(5);
530
548
  i0.ɵɵtextInterpolate(ctx.IncreaseLabel);
549
+ i0.ɵɵadvance();
550
+ i0.ɵɵconditional(ctx.HasSource ? 89 : -1);
531
551
  i0.ɵɵadvance(5);
532
- i0.ɵɵconditional(ctx.CanOpenSource ? 95 : 96);
533
- i0.ɵɵadvance(6);
534
- i0.ɵɵconditional(ctx.NextMove ? 101 : 102);
552
+ i0.ɵɵconditional(ctx.NextMove ? 94 : 95);
535
553
  } }, dependencies: [CommonModule, BaseFormsModule, i1.MjCollapsiblePanelComponent], styles: ["\n .mjc-ov { display: flex; flex-direction: column; gap: var(--mj-space-4); padding: var(--mj-space-3) var(--mj-space-4) var(--mj-space-5); }\n .mjc-ov-health { display: flex; flex-direction: column; gap: var(--mj-space-2); }\n .mjc-ov-alert {\n display: flex; align-items: center; gap: var(--mj-space-2);\n padding: var(--mj-space-2) var(--mj-space-3);\n background: var(--mj-status-warning-bg); color: var(--mj-status-warning-text);\n border-radius: var(--mj-radius-md); font-size: var(--mj-text-sm); font-weight: 600;\n }\n .mjc-ov-ok {\n display: flex; align-items: center; gap: var(--mj-space-2);\n padding: var(--mj-space-2) var(--mj-space-3);\n background: var(--mj-status-success-bg); color: var(--mj-status-success-text);\n border-radius: var(--mj-radius-md); font-size: var(--mj-text-sm); font-weight: 600;\n }\n .mjc-ov-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--mj-space-3); }\n @media (max-width: 900px) { .mjc-ov-strip { grid-template-columns: 1fr 1fr; } }\n .mjc-ov-kpi {\n background: var(--mj-bg-page); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md); padding: var(--mj-space-3) var(--mj-space-4);\n }\n .mjc-ov-kpi .l {\n font-size: var(--mj-text-xs); text-transform: uppercase; letter-spacing: .04em;\n color: var(--mj-text-muted); font-weight: 700;\n }\n .mjc-ov-kpi .v { font-size: 1.35rem; font-weight: 800; letter-spacing: -.02em; margin-top: 4px; line-height: 1.2; }\n .mjc-ov-kpi .s { color: var(--mj-text-muted); font-size: var(--mj-text-sm); margin-top: 2px; }\n .mjc-ov-kpi[data-tone='warning'] .v { color: var(--mj-status-warning-text); }\n .mjc-ov-kpi[data-tone='success'] .v { color: var(--mj-status-success-text); }\n .mjc-ov-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--mj-space-3); }\n @media (max-width: 800px) { .mjc-ov-grid { grid-template-columns: 1fr; } }\n .mjc-ov-card {\n background: var(--mj-bg-page); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md); padding: var(--mj-space-3) var(--mj-space-4);\n }\n .mjc-ov-card--wide { grid-column: 1 / -1; }\n .mjc-ov-card header {\n display: flex; align-items: center; gap: 8px;\n font-weight: 700; margin-bottom: var(--mj-space-3); color: var(--mj-text-primary);\n }\n .mjc-ov-card header i { color: var(--mj-brand-primary); width: 1.1rem; text-align: center; }\n .mjc-ov-facts { display: grid; grid-template-columns: 1fr 1fr; gap: var(--mj-space-3); }\n .mjc-ov-facts .l {\n font-size: var(--mj-text-xs); text-transform: uppercase; letter-spacing: .04em;\n color: var(--mj-text-muted); font-weight: 700;\n }\n .mjc-ov-facts .v { font-weight: 650; margin-top: 2px; }\n .mjc-ov-link {\n border: 0; padding: 0; background: transparent; color: var(--mj-text-link);\n cursor: pointer; font: inherit; font-weight: 650; text-align: left;\n }\n .mjc-ov-link:hover { text-decoration: underline; }\n .mjc-ov-next { margin: 0; font-size: 1.05rem; font-weight: 650; }\n .mjc-ov-empty { color: var(--mj-text-muted); margin: 0; }\n "], encapsulation: 2 });
536
554
  };
537
555
  MJCContractOverviewPanel = __decorate([
@@ -572,7 +590,7 @@ export { MJCContractOverviewPanel };
572
590
  } @else if (Record.IsSaved) {
573
591
  <div class="mjc-ov-ok">
574
592
  <i class="fa-solid fa-circle-check" aria-hidden="true"></i>
575
- Nothing on this agreement is asking for a person.
593
+ No issues.
576
594
  </div>
577
595
  }
578
596
 
@@ -595,7 +613,6 @@ export { MJCContractOverviewPanel };
595
613
  <div class="mjc-ov-kpi">
596
614
  <div class="l">Auto-renew</div>
597
615
  <div class="v">{{ Record.AutoRenew ? 'Yes' : 'No' }}</div>
598
- <div class="s">{{ Record.AutoRenew ? 'as the paper states' : 'someone must act' }}</div>
599
616
  </div>
600
617
  </div>
601
618
 
@@ -619,8 +636,8 @@ export { MJCContractOverviewPanel };
619
636
  } @else { {{ ContactName || '—' }} }
620
637
  </div>
621
638
  </div>
622
- <div><div class="l">Selling as</div><div class="v">{{ CompanyName || '—' }}</div></div>
623
- <div><div class="l">Agreement</div><div class="v">{{ TemplateName || 'no standard terms' }}</div></div>
639
+ <div><div class="l">Company</div><div class="v">{{ CompanyName || '—' }}</div></div>
640
+ <div><div class="l">Agreement</div><div class="v">{{ TemplateName || 'None' }}</div></div>
624
641
  </div>
625
642
  </article>
626
643
  <article class="mjc-ov-card">
@@ -631,21 +648,23 @@ export { MJCContractOverviewPanel };
631
648
  <div><div class="l">Notice we owe</div><div class="v">{{ DaysLabel(Record.RenewalNoticeDays) }}</div></div>
632
649
  <div><div class="l">Cancel window</div><div class="v">{{ DaysLabel(Record.CancellationWindowDays) }}</div></div>
633
650
  <div><div class="l">Annual increase</div><div class="v">{{ IncreaseLabel }}</div></div>
634
- <div><div class="l">Created from</div>
635
- <div class="v">
636
- @if (CanOpenSource) {
637
- <button type="button" class="mjc-ov-link" (click)="OpenSource($event)">{{ SourceLabel }}</button>
638
- } @else { {{ SourceLabel }} }
651
+ @if (HasSource) {
652
+ <div><div class="l">Created from</div>
653
+ <div class="v">
654
+ @if (CanOpenSource) {
655
+ <button type="button" class="mjc-ov-link" (click)="OpenSource($event)">{{ SourceLabel }}</button>
656
+ } @else { {{ SourceLabel }} }
657
+ </div>
639
658
  </div>
640
- </div>
659
+ }
641
660
  </div>
642
661
  </article>
643
662
  <article class="mjc-ov-card mjc-ov-card--wide">
644
- <header><i class="fa-solid fa-person-walking"></i> What needs a person</header>
663
+ <header><i class="fa-solid fa-person-walking"></i> Next step</header>
645
664
  @if (NextMove) {
646
665
  <p class="mjc-ov-next">{{ NextMove }}</p>
647
666
  } @else {
648
- <p class="mjc-ov-empty">No action sitting on this agreement right now.</p>
667
+ <p class="mjc-ov-empty">No action needed.</p>
649
668
  }
650
669
  </article>
651
670
  </div>
@@ -653,7 +672,7 @@ export { MJCContractOverviewPanel };
653
672
  </mj-collapsible-panel>
654
673
  `, styles: ["\n .mjc-ov { display: flex; flex-direction: column; gap: var(--mj-space-4); padding: var(--mj-space-3) var(--mj-space-4) var(--mj-space-5); }\n .mjc-ov-health { display: flex; flex-direction: column; gap: var(--mj-space-2); }\n .mjc-ov-alert {\n display: flex; align-items: center; gap: var(--mj-space-2);\n padding: var(--mj-space-2) var(--mj-space-3);\n background: var(--mj-status-warning-bg); color: var(--mj-status-warning-text);\n border-radius: var(--mj-radius-md); font-size: var(--mj-text-sm); font-weight: 600;\n }\n .mjc-ov-ok {\n display: flex; align-items: center; gap: var(--mj-space-2);\n padding: var(--mj-space-2) var(--mj-space-3);\n background: var(--mj-status-success-bg); color: var(--mj-status-success-text);\n border-radius: var(--mj-radius-md); font-size: var(--mj-text-sm); font-weight: 600;\n }\n .mjc-ov-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--mj-space-3); }\n @media (max-width: 900px) { .mjc-ov-strip { grid-template-columns: 1fr 1fr; } }\n .mjc-ov-kpi {\n background: var(--mj-bg-page); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md); padding: var(--mj-space-3) var(--mj-space-4);\n }\n .mjc-ov-kpi .l {\n font-size: var(--mj-text-xs); text-transform: uppercase; letter-spacing: .04em;\n color: var(--mj-text-muted); font-weight: 700;\n }\n .mjc-ov-kpi .v { font-size: 1.35rem; font-weight: 800; letter-spacing: -.02em; margin-top: 4px; line-height: 1.2; }\n .mjc-ov-kpi .s { color: var(--mj-text-muted); font-size: var(--mj-text-sm); margin-top: 2px; }\n .mjc-ov-kpi[data-tone='warning'] .v { color: var(--mj-status-warning-text); }\n .mjc-ov-kpi[data-tone='success'] .v { color: var(--mj-status-success-text); }\n .mjc-ov-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--mj-space-3); }\n @media (max-width: 800px) { .mjc-ov-grid { grid-template-columns: 1fr; } }\n .mjc-ov-card {\n background: var(--mj-bg-page); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md); padding: var(--mj-space-3) var(--mj-space-4);\n }\n .mjc-ov-card--wide { grid-column: 1 / -1; }\n .mjc-ov-card header {\n display: flex; align-items: center; gap: 8px;\n font-weight: 700; margin-bottom: var(--mj-space-3); color: var(--mj-text-primary);\n }\n .mjc-ov-card header i { color: var(--mj-brand-primary); width: 1.1rem; text-align: center; }\n .mjc-ov-facts { display: grid; grid-template-columns: 1fr 1fr; gap: var(--mj-space-3); }\n .mjc-ov-facts .l {\n font-size: var(--mj-text-xs); text-transform: uppercase; letter-spacing: .04em;\n color: var(--mj-text-muted); font-weight: 700;\n }\n .mjc-ov-facts .v { font-weight: 650; margin-top: 2px; }\n .mjc-ov-link {\n border: 0; padding: 0; background: transparent; color: var(--mj-text-link);\n cursor: pointer; font: inherit; font-weight: 650; text-align: left;\n }\n .mjc-ov-link:hover { text-decoration: underline; }\n .mjc-ov-next { margin: 0; font-size: 1.05rem; font-weight: 650; }\n .mjc-ov-empty { color: var(--mj-text-muted); margin: 0; }\n "] }]
655
674
  }], null, null); })();
656
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractOverviewPanel, { className: "MJCContractOverviewPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 248 }); })();
675
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractOverviewPanel, { className: "MJCContractOverviewPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 271 }); })();
657
676
  function daysUntil(d) {
658
677
  if (!d)
659
678
  return null;
@@ -670,11 +689,11 @@ function daysUntil(d) {
670
689
  /* ── Field sections ───────────────────────────────────────────────────────── */
671
690
  let MJCContractAgreementPanel = class MJCContractAgreementPanel extends BaseFormPanel {
672
691
  Fields = [
673
- { name: 'ContractNumber', type: 'textbox' },
692
+ { name: 'ContractNumber', type: 'textbox', readOnly: true },
674
693
  { name: 'ContractTypeID', type: 'textbox', link: 'Record' },
675
694
  { name: 'ContractTemplateID', type: 'textbox', link: 'Record' },
676
695
  { name: 'SigningProviderURL', type: 'textbox', link: 'URL' },
677
- { name: 'HasModifications', type: 'checkbox' },
696
+ { name: 'HasModifications', type: 'checkbox', readOnly: true },
678
697
  { name: 'Description', type: 'textarea', span: true },
679
698
  ];
680
699
  static ɵfac = /*@__PURE__*/ (() => { let ɵMJCContractAgreementPanel_BaseFactory; return function MJCContractAgreementPanel_Factory(__ngFactoryType__) { return (ɵMJCContractAgreementPanel_BaseFactory || (ɵMJCContractAgreementPanel_BaseFactory = i0.ɵɵgetInheritedFactory(MJCContractAgreementPanel)))(__ngFactoryType__ || MJCContractAgreementPanel); }; })();
@@ -705,7 +724,8 @@ export { MJCContractAgreementPanel };
705
724
  @for (f of Fields; track f.name) {
706
725
  <div class="mjc-fg" [class.mjc-fg--span]="f.span">
707
726
  <mj-form-field [Record]="Record" [ShowLabel]="true" [FieldName]="f.name" [Type]="f.type"
708
- [EditMode]="EditMode" [FormContext]="FormContext" [LinkType]="f.link ?? 'None'"
727
+ [EditMode]="f.readOnly ? false : EditMode" [FormContext]="FormContext"
728
+ [LinkType]="f.link ?? 'None'"
709
729
  (Navigate)="FormComponent.OnFormNavigate($event)"></mj-form-field>
710
730
  </div>
711
731
  }
@@ -713,7 +733,7 @@ export { MJCContractAgreementPanel };
713
733
  </mj-collapsible-panel>
714
734
  `, styles: ["\n .mjc-fields-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--mj-space-4) var(--mj-space-5);\n padding: var(--mj-space-4) var(--mj-space-5);\n }\n @media (max-width: 720px) { .mjc-fields-grid { grid-template-columns: 1fr; } }\n .mjc-fg { min-width: 0; }\n .mjc-fg--span { grid-column: 1 / -1; }\n .mjc-fg .mj-forms-field {\n display: flex; flex-direction: column; align-items: stretch; gap: 4px; padding: 0;\n }\n .mjc-fg .mj-forms-field-label {\n font-size: var(--mj-text-xs); font-weight: 700; letter-spacing: .06em;\n text-transform: uppercase; color: var(--mj-text-muted);\n }\n .mjc-fg .mj-forms-field--editing:hover { margin: 0; padding: 0; }\n"] }]
715
735
  }], null, null); })();
716
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractAgreementPanel, { className: "MJCContractAgreementPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 415 }); })();
736
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractAgreementPanel, { className: "MJCContractAgreementPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 441 }); })();
717
737
  let MJCContractPartiesPanel = class MJCContractPartiesPanel extends BaseFormPanel {
718
738
  /**
719
739
  * Record links on these fields emit `Navigate` from `mj-form-field`. That output must be
@@ -757,7 +777,8 @@ export { MJCContractPartiesPanel };
757
777
  @for (f of Fields; track f.name) {
758
778
  <div class="mjc-fg" [class.mjc-fg--span]="f.span">
759
779
  <mj-form-field [Record]="Record" [ShowLabel]="true" [FieldName]="f.name" [Type]="f.type"
760
- [EditMode]="EditMode" [FormContext]="FormContext" [LinkType]="f.link ?? 'None'"
780
+ [EditMode]="f.readOnly ? false : EditMode" [FormContext]="FormContext"
781
+ [LinkType]="f.link ?? 'None'"
761
782
  (Navigate)="FormComponent.OnFormNavigate($event)"></mj-form-field>
762
783
  </div>
763
784
  }
@@ -765,7 +786,7 @@ export { MJCContractPartiesPanel };
765
786
  </mj-collapsible-panel>
766
787
  `, styles: ["\n .mjc-fields-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--mj-space-4) var(--mj-space-5);\n padding: var(--mj-space-4) var(--mj-space-5);\n }\n @media (max-width: 720px) { .mjc-fields-grid { grid-template-columns: 1fr; } }\n .mjc-fg { min-width: 0; }\n .mjc-fg--span { grid-column: 1 / -1; }\n .mjc-fg .mj-forms-field {\n display: flex; flex-direction: column; align-items: stretch; gap: 4px; padding: 0;\n }\n .mjc-fg .mj-forms-field-label {\n font-size: var(--mj-text-xs); font-weight: 700; letter-spacing: .06em;\n text-transform: uppercase; color: var(--mj-text-muted);\n }\n .mjc-fg .mj-forms-field--editing:hover { margin: 0; padding: 0; }\n"] }]
767
788
  }], null, null); })();
768
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractPartiesPanel, { className: "MJCContractPartiesPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 455 }); })();
789
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractPartiesPanel, { className: "MJCContractPartiesPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 482 }); })();
769
790
  let MJCContractNotesPanel = class MJCContractNotesPanel extends BaseFormPanel {
770
791
  Fields = [
771
792
  { name: 'Notes', type: 'textarea', span: true },
@@ -801,7 +822,8 @@ export { MJCContractNotesPanel };
801
822
  @for (f of Fields; track f.name) {
802
823
  <div class="mjc-fg" [class.mjc-fg--span]="f.span">
803
824
  <mj-form-field [Record]="Record" [ShowLabel]="true" [FieldName]="f.name" [Type]="f.type"
804
- [EditMode]="EditMode" [FormContext]="FormContext" [LinkType]="f.link ?? 'None'"
825
+ [EditMode]="f.readOnly ? false : EditMode" [FormContext]="FormContext"
826
+ [LinkType]="f.link ?? 'None'"
805
827
  (Navigate)="FormComponent.OnFormNavigate($event)"></mj-form-field>
806
828
  </div>
807
829
  }
@@ -809,11 +831,34 @@ export { MJCContractNotesPanel };
809
831
  </mj-collapsible-panel>
810
832
  `, styles: ["\n .mjc-fields-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--mj-space-4) var(--mj-space-5);\n padding: var(--mj-space-4) var(--mj-space-5);\n }\n @media (max-width: 720px) { .mjc-fields-grid { grid-template-columns: 1fr; } }\n .mjc-fg { min-width: 0; }\n .mjc-fg--span { grid-column: 1 / -1; }\n .mjc-fg .mj-forms-field {\n display: flex; flex-direction: column; align-items: stretch; gap: 4px; padding: 0;\n }\n .mjc-fg .mj-forms-field-label {\n font-size: var(--mj-text-xs); font-weight: 700; letter-spacing: .06em;\n text-transform: uppercase; color: var(--mj-text-muted);\n }\n .mjc-fg .mj-forms-field--editing:hover { margin: 0; padding: 0; }\n"] }]
811
833
  }], null, null); })();
812
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractNotesPanel, { className: "MJCContractNotesPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 498 }); })();
834
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractNotesPanel, { className: "MJCContractNotesPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 526 }); })();
813
835
  let MJCContractProvenanceFieldsPanel = class MJCContractProvenanceFieldsPanel extends BaseFormPanel {
836
+ /**
837
+ * READ-ONLY, and the section KEPT — a deliberate departure from issue #28 item 18.
838
+ *
839
+ * Item 18 says to hide this section entirely, on the stated grounds that the hero's Source Deal
840
+ * link (item 1) replaces it. That premise does not hold yet. Item 1 renders the stat ONLY when
841
+ * `CreatingEntityID` and `CreatingRecordID` are both set, and on this database exactly one contract
842
+ * of eleven has them — `CTR-000026`, whose pair was typed in by hand: the entity is
843
+ * `MJ: Explorer Navigation Items` rather than Deals and the record id is not a valid UUID. So on
844
+ * every contract a person can currently open, the replacement is invisible. Hiding this section
845
+ * today would remove the only visible provenance for a stat that does not appear.
846
+ *
847
+ * WHAT ITEM 18 IS ACTUALLY ABOUT, and this half is not in doubt: these two fields rendered as
848
+ * ordinary inputs a person could type into, which is how that junk pair got there.
849
+ * `CreatingEntityID` is a real FK to `__mj.Entity` and `CreatingRecordID` is the row it names, and
850
+ * `CK_Contract_CreatingPairBothOrNeither` requires both or neither — so editing one field alone
851
+ * produces a save the constraint refuses, and editing both silently re-points a contract's
852
+ * provenance at an unrelated record, which is then what the hero's link displays. The server sets
853
+ * this pair (`LiveContractsSeam.setProvenance`, on Close-Won) and nothing else should.
854
+ *
855
+ * Read-only closes that defect and keeps the ids visible beneath the hero's human-readable name —
856
+ * complements rather than duplicates. Revisit hiding the section once a contract created by a real
857
+ * Close-Won deal exists to verify item 1 against.
858
+ */
814
859
  Fields = [
815
- { name: 'CreatingEntityID', type: 'textbox', link: 'Record' },
816
- { name: 'CreatingRecordID', type: 'textbox' },
860
+ { name: 'CreatingEntityID', type: 'textbox', link: 'Record', readOnly: true },
861
+ { name: 'CreatingRecordID', type: 'textbox', readOnly: true },
817
862
  ];
818
863
  static ɵfac = /*@__PURE__*/ (() => { let ɵMJCContractProvenanceFieldsPanel_BaseFactory; return function MJCContractProvenanceFieldsPanel_Factory(__ngFactoryType__) { return (ɵMJCContractProvenanceFieldsPanel_BaseFactory || (ɵMJCContractProvenanceFieldsPanel_BaseFactory = i0.ɵɵgetInheritedFactory(MJCContractProvenanceFieldsPanel)))(__ngFactoryType__ || MJCContractProvenanceFieldsPanel); }; })();
819
864
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJCContractProvenanceFieldsPanel, selectors: [["mjc-contract-provenance-panel"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 2, consts: [["SectionKey", "origin", "SectionName", "Provenance", "Icon", "fa-solid fa-diagram-project", 3, "Form", "FormContext"], [1, "mjc-fields-grid"], [1, "mjc-fg", 3, "mjc-fg--span"], [1, "mjc-fg"], [3, "Navigate", "Record", "ShowLabel", "FieldName", "Type", "EditMode", "FormContext", "LinkType"]], template: function MJCContractProvenanceFieldsPanel_Template(rf, ctx) { if (rf & 1) {
@@ -846,7 +891,8 @@ export { MJCContractProvenanceFieldsPanel };
846
891
  @for (f of Fields; track f.name) {
847
892
  <div class="mjc-fg" [class.mjc-fg--span]="f.span">
848
893
  <mj-form-field [Record]="Record" [ShowLabel]="true" [FieldName]="f.name" [Type]="f.type"
849
- [EditMode]="EditMode" [FormContext]="FormContext" [LinkType]="f.link ?? 'None'"
894
+ [EditMode]="f.readOnly ? false : EditMode" [FormContext]="FormContext"
895
+ [LinkType]="f.link ?? 'None'"
850
896
  (Navigate)="FormComponent.OnFormNavigate($event)"></mj-form-field>
851
897
  </div>
852
898
  }
@@ -854,11 +900,11 @@ export { MJCContractProvenanceFieldsPanel };
854
900
  </mj-collapsible-panel>
855
901
  `, styles: ["\n .mjc-fields-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--mj-space-4) var(--mj-space-5);\n padding: var(--mj-space-4) var(--mj-space-5);\n }\n @media (max-width: 720px) { .mjc-fields-grid { grid-template-columns: 1fr; } }\n .mjc-fg { min-width: 0; }\n .mjc-fg--span { grid-column: 1 / -1; }\n .mjc-fg .mj-forms-field {\n display: flex; flex-direction: column; align-items: stretch; gap: 4px; padding: 0;\n }\n .mjc-fg .mj-forms-field-label {\n font-size: var(--mj-text-xs); font-weight: 700; letter-spacing: .06em;\n text-transform: uppercase; color: var(--mj-text-muted);\n }\n .mjc-fg .mj-forms-field--editing:hover { margin: 0; padding: 0; }\n"] }]
856
902
  }], null, null); })();
857
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractProvenanceFieldsPanel, { className: "MJCContractProvenanceFieldsPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 533 }); })();
903
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractProvenanceFieldsPanel, { className: "MJCContractProvenanceFieldsPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 562 }); })();
858
904
  let MJCContractLifecyclePanel = class MJCContractLifecyclePanel extends BaseFormPanel {
859
905
  Fields = [
860
906
  { name: 'ParentContractID', type: 'textbox', link: 'Record' },
861
- { name: 'SupersededByContractID', type: 'textbox', link: 'Record' },
907
+ { name: 'SupersededByContractID', type: 'textbox', link: 'Record', readOnly: true },
862
908
  ];
863
909
  static ɵfac = /*@__PURE__*/ (() => { let ɵMJCContractLifecyclePanel_BaseFactory; return function MJCContractLifecyclePanel_Factory(__ngFactoryType__) { return (ɵMJCContractLifecyclePanel_BaseFactory || (ɵMJCContractLifecyclePanel_BaseFactory = i0.ɵɵgetInheritedFactory(MJCContractLifecyclePanel)))(__ngFactoryType__ || MJCContractLifecyclePanel); }; })();
864
910
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJCContractLifecyclePanel, selectors: [["mjc-contract-lifecycle-panel"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 2, consts: [["SectionKey", "lifecycle", "SectionName", "Change orders", "Icon", "fa-solid fa-code-branch", 3, "Form", "FormContext"], [1, "mjc-fields-grid"], [1, "mjc-fg", 3, "mjc-fg--span"], [1, "mjc-fg"], [3, "Navigate", "Record", "ShowLabel", "FieldName", "Type", "EditMode", "FormContext", "LinkType"]], template: function MJCContractLifecyclePanel_Template(rf, ctx) { if (rf & 1) {
@@ -891,7 +937,8 @@ export { MJCContractLifecyclePanel };
891
937
  @for (f of Fields; track f.name) {
892
938
  <div class="mjc-fg" [class.mjc-fg--span]="f.span">
893
939
  <mj-form-field [Record]="Record" [ShowLabel]="true" [FieldName]="f.name" [Type]="f.type"
894
- [EditMode]="EditMode" [FormContext]="FormContext" [LinkType]="f.link ?? 'None'"
940
+ [EditMode]="f.readOnly ? false : EditMode" [FormContext]="FormContext"
941
+ [LinkType]="f.link ?? 'None'"
895
942
  (Navigate)="FormComponent.OnFormNavigate($event)"></mj-form-field>
896
943
  </div>
897
944
  }
@@ -899,7 +946,7 @@ export { MJCContractLifecyclePanel };
899
946
  </mj-collapsible-panel>
900
947
  `, styles: ["\n .mjc-fields-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--mj-space-4) var(--mj-space-5);\n padding: var(--mj-space-4) var(--mj-space-5);\n }\n @media (max-width: 720px) { .mjc-fields-grid { grid-template-columns: 1fr; } }\n .mjc-fg { min-width: 0; }\n .mjc-fg--span { grid-column: 1 / -1; }\n .mjc-fg .mj-forms-field {\n display: flex; flex-direction: column; align-items: stretch; gap: 4px; padding: 0;\n }\n .mjc-fg .mj-forms-field-label {\n font-size: var(--mj-text-xs); font-weight: 700; letter-spacing: .06em;\n text-transform: uppercase; color: var(--mj-text-muted);\n }\n .mjc-fg .mj-forms-field--editing:hover { margin: 0; padding: 0; }\n"] }]
901
948
  }], null, null); })();
902
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractLifecyclePanel, { className: "MJCContractLifecyclePanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 569 }); })();
949
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractLifecyclePanel, { className: "MJCContractLifecyclePanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 622 }); })();
903
950
  let MJCContractModificationsPanel = class MJCContractModificationsPanel extends BaseFormPanel {
904
951
  Entity = MJC_ENTITIES.ContractTemplateModification;
905
952
  OnDataLoad(event) {
@@ -951,5 +998,5 @@ export { MJCContractModificationsPanel };
951
998
  `,
952
999
  }]
953
1000
  }], null, null); })();
954
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractModificationsPanel, { className: "MJCContractModificationsPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 605 }); })();
1001
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractModificationsPanel, { className: "MJCContractModificationsPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 658 }); })();
955
1002
  //# sourceMappingURL=contract-form.panels.js.map