@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
|
@@ -0,0 +1,955 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* @fileoverview Contract form body — Overview plus organized rail sections.
|
|
9
|
+
*
|
|
10
|
+
* Replaces leftover generated field dumps (Contract Details, Stakeholders, Provenance,
|
|
11
|
+
* Lifecycle, Notes) with:
|
|
12
|
+
* Overview (exec briefing) · Agreement · Parties · Dates · Renewal · Notes
|
|
13
|
+
* Modifications · Lineage · Re-papering · Provenance
|
|
14
|
+
*
|
|
15
|
+
* Dates / Renewal / Lineage / Re-papering already live in sibling files.
|
|
16
|
+
* Files on a contract are MJ's stock attachments (form toolbar), not a custom Documents section.
|
|
17
|
+
* `contributionKey` equals each panel's `SectionKey`. Overview is the only
|
|
18
|
+
* `inclusion: 'Primary'` so it leads; the rest sort into the related band by sortKey.
|
|
19
|
+
*
|
|
20
|
+
* @module @mj-biz-apps/contracts-ng
|
|
21
|
+
*/
|
|
22
|
+
import { Component, ViewEncapsulation } from '@angular/core';
|
|
23
|
+
import { CommonModule } from '@angular/common';
|
|
24
|
+
import { CompositeKey } from '@memberjunction/core';
|
|
25
|
+
import { RegisterClassEx } from '@memberjunction/global';
|
|
26
|
+
import { BaseFormPanel, BaseFormsModule } from '@memberjunction/ng-base-forms';
|
|
27
|
+
import { MJC_ENTITIES, MJC_FOREIGN_ENTITIES } from '../data/entity-names';
|
|
28
|
+
import * as i0 from "@angular/core";
|
|
29
|
+
import * as i1 from "@memberjunction/ng-base-forms";
|
|
30
|
+
function MJCContractOverviewPanel_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
+
i0.ɵɵelementStart(0, "div", 19);
|
|
32
|
+
i0.ɵɵelement(1, "i", 20);
|
|
33
|
+
i0.ɵɵtext(2);
|
|
34
|
+
i0.ɵɵelementEnd();
|
|
35
|
+
} if (rf & 2) {
|
|
36
|
+
const h_r1 = ctx.$implicit;
|
|
37
|
+
i0.ɵɵadvance(2);
|
|
38
|
+
i0.ɵɵtextInterpolate1(" ", h_r1, " ");
|
|
39
|
+
} }
|
|
40
|
+
function MJCContractOverviewPanel_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
41
|
+
i0.ɵɵelementStart(0, "div", 2);
|
|
42
|
+
i0.ɵɵrepeaterCreate(1, MJCContractOverviewPanel_Conditional_2_For_2_Template, 3, 1, "div", 19, i0.ɵɵrepeaterTrackByIdentity);
|
|
43
|
+
i0.ɵɵelementEnd();
|
|
44
|
+
} if (rf & 2) {
|
|
45
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
46
|
+
i0.ɵɵadvance();
|
|
47
|
+
i0.ɵɵrepeater(ctx_r1.Health);
|
|
48
|
+
} }
|
|
49
|
+
function MJCContractOverviewPanel_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
50
|
+
i0.ɵɵelementStart(0, "div", 3);
|
|
51
|
+
i0.ɵɵelement(1, "i", 21);
|
|
52
|
+
i0.ɵɵtext(2, " Nothing on this agreement is asking for a person. ");
|
|
53
|
+
i0.ɵɵelementEnd();
|
|
54
|
+
} }
|
|
55
|
+
function MJCContractOverviewPanel_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
56
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
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)); });
|
|
59
|
+
i0.ɵɵtext(1);
|
|
60
|
+
i0.ɵɵelementEnd();
|
|
61
|
+
} if (rf & 2) {
|
|
62
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
63
|
+
i0.ɵɵadvance();
|
|
64
|
+
i0.ɵɵtextInterpolate(ctx_r1.CustomerName);
|
|
65
|
+
} }
|
|
66
|
+
function MJCContractOverviewPanel_Conditional_44_Template(rf, ctx) { if (rf & 1) {
|
|
67
|
+
i0.ɵɵtext(0);
|
|
68
|
+
} if (rf & 2) {
|
|
69
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
70
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.CustomerName || "\u2014", " ");
|
|
71
|
+
} }
|
|
72
|
+
function MJCContractOverviewPanel_Conditional_49_Template(rf, ctx) { if (rf & 1) {
|
|
73
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
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)); });
|
|
76
|
+
i0.ɵɵtext(1);
|
|
77
|
+
i0.ɵɵelementEnd();
|
|
78
|
+
} if (rf & 2) {
|
|
79
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
80
|
+
i0.ɵɵadvance();
|
|
81
|
+
i0.ɵɵtextInterpolate(ctx_r1.ContactName);
|
|
82
|
+
} }
|
|
83
|
+
function MJCContractOverviewPanel_Conditional_50_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
+
i0.ɵɵtext(0);
|
|
85
|
+
} if (rf & 2) {
|
|
86
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
87
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.ContactName || "\u2014", " ");
|
|
88
|
+
} }
|
|
89
|
+
function MJCContractOverviewPanel_Conditional_95_Template(rf, ctx) { if (rf & 1) {
|
|
90
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
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)); });
|
|
93
|
+
i0.ɵɵtext(1);
|
|
94
|
+
i0.ɵɵelementEnd();
|
|
95
|
+
} if (rf & 2) {
|
|
96
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
97
|
+
i0.ɵɵadvance();
|
|
98
|
+
i0.ɵɵtextInterpolate(ctx_r1.SourceLabel);
|
|
99
|
+
} }
|
|
100
|
+
function MJCContractOverviewPanel_Conditional_96_Template(rf, ctx) { if (rf & 1) {
|
|
101
|
+
i0.ɵɵtext(0);
|
|
102
|
+
} if (rf & 2) {
|
|
103
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
104
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.SourceLabel, " ");
|
|
105
|
+
} }
|
|
106
|
+
function MJCContractOverviewPanel_Conditional_101_Template(rf, ctx) { if (rf & 1) {
|
|
107
|
+
i0.ɵɵelementStart(0, "p", 17);
|
|
108
|
+
i0.ɵɵtext(1);
|
|
109
|
+
i0.ɵɵelementEnd();
|
|
110
|
+
} if (rf & 2) {
|
|
111
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
112
|
+
i0.ɵɵadvance();
|
|
113
|
+
i0.ɵɵtextInterpolate(ctx_r1.NextMove);
|
|
114
|
+
} }
|
|
115
|
+
function MJCContractOverviewPanel_Conditional_102_Template(rf, ctx) { if (rf & 1) {
|
|
116
|
+
i0.ɵɵelementStart(0, "p", 18);
|
|
117
|
+
i0.ɵɵtext(1, "No action sitting on this agreement right now.");
|
|
118
|
+
i0.ɵɵelementEnd();
|
|
119
|
+
} }
|
|
120
|
+
const _forTrack0 = ($index, $item) => $item.name;
|
|
121
|
+
function MJCContractAgreementPanel_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
122
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
123
|
+
i0.ɵɵelementStart(0, "div", 3)(1, "mj-form-field", 4);
|
|
124
|
+
i0.ɵɵlistener("Navigate", function MJCContractAgreementPanel_For_3_Template_mj_form_field_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.FormComponent.OnFormNavigate($event)); });
|
|
125
|
+
i0.ɵɵelementEnd()();
|
|
126
|
+
} if (rf & 2) {
|
|
127
|
+
const f_r3 = ctx.$implicit;
|
|
128
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
129
|
+
i0.ɵɵclassProp("mjc-fg--span", f_r3.span);
|
|
130
|
+
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");
|
|
132
|
+
} }
|
|
133
|
+
function MJCContractPartiesPanel_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
134
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
135
|
+
i0.ɵɵelementStart(0, "div", 3)(1, "mj-form-field", 4);
|
|
136
|
+
i0.ɵɵlistener("Navigate", function MJCContractPartiesPanel_For_3_Template_mj_form_field_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.FormComponent.OnFormNavigate($event)); });
|
|
137
|
+
i0.ɵɵelementEnd()();
|
|
138
|
+
} if (rf & 2) {
|
|
139
|
+
const f_r3 = ctx.$implicit;
|
|
140
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
141
|
+
i0.ɵɵclassProp("mjc-fg--span", f_r3.span);
|
|
142
|
+
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");
|
|
144
|
+
} }
|
|
145
|
+
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
|
+
function MJCContractNotesPanel_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
147
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
148
|
+
i0.ɵɵelementStart(0, "div", 3)(1, "mj-form-field", 4);
|
|
149
|
+
i0.ɵɵlistener("Navigate", function MJCContractNotesPanel_For_3_Template_mj_form_field_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.FormComponent.OnFormNavigate($event)); });
|
|
150
|
+
i0.ɵɵelementEnd()();
|
|
151
|
+
} if (rf & 2) {
|
|
152
|
+
const f_r3 = ctx.$implicit;
|
|
153
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
154
|
+
i0.ɵɵclassProp("mjc-fg--span", f_r3.span);
|
|
155
|
+
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");
|
|
157
|
+
} }
|
|
158
|
+
function MJCContractProvenanceFieldsPanel_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
159
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
160
|
+
i0.ɵɵelementStart(0, "div", 3)(1, "mj-form-field", 4);
|
|
161
|
+
i0.ɵɵlistener("Navigate", function MJCContractProvenanceFieldsPanel_For_3_Template_mj_form_field_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.FormComponent.OnFormNavigate($event)); });
|
|
162
|
+
i0.ɵɵelementEnd()();
|
|
163
|
+
} if (rf & 2) {
|
|
164
|
+
const f_r3 = ctx.$implicit;
|
|
165
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
166
|
+
i0.ɵɵclassProp("mjc-fg--span", f_r3.span);
|
|
167
|
+
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");
|
|
169
|
+
} }
|
|
170
|
+
function MJCContractLifecyclePanel_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
171
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
172
|
+
i0.ɵɵelementStart(0, "div", 3)(1, "mj-form-field", 4);
|
|
173
|
+
i0.ɵɵlistener("Navigate", function MJCContractLifecyclePanel_For_3_Template_mj_form_field_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.FormComponent.OnFormNavigate($event)); });
|
|
174
|
+
i0.ɵɵelementEnd()();
|
|
175
|
+
} if (rf & 2) {
|
|
176
|
+
const f_r3 = ctx.$implicit;
|
|
177
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
178
|
+
i0.ɵɵclassProp("mjc-fg--span", f_r3.span);
|
|
179
|
+
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");
|
|
181
|
+
} }
|
|
182
|
+
function MJCContractModificationsPanel_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
183
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
184
|
+
i0.ɵɵelementStart(0, "mj-explorer-entity-data-grid", 2);
|
|
185
|
+
i0.ɵɵlistener("Navigate", function MJCContractModificationsPanel_Conditional_1_Template_mj_explorer_entity_data_grid_Navigate_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.FormComponent.OnFormNavigate($event)); })("AfterDataLoad", function MJCContractModificationsPanel_Conditional_1_Template_mj_explorer_entity_data_grid_AfterDataLoad_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDataLoad($event)); });
|
|
186
|
+
i0.ɵɵelementEnd();
|
|
187
|
+
} if (rf & 2) {
|
|
188
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
189
|
+
i0.ɵɵproperty("Params", ctx_r1.FormComponent.BuildRelationshipViewParamsByEntityName(ctx_r1.Entity, "ContractID"))("NewRecordValues", ctx_r1.FormComponent.NewRecordValues(ctx_r1.Entity, "ContractID"))("AllowLoad", ctx_r1.FormComponent.IsSectionExpanded("modifications"))("ShowToolbar", true);
|
|
190
|
+
} }
|
|
191
|
+
const E = MJC_ENTITIES.Contract;
|
|
192
|
+
const FIELD_STYLES = `
|
|
193
|
+
.mjc-fields-grid {
|
|
194
|
+
display: grid;
|
|
195
|
+
grid-template-columns: 1fr 1fr;
|
|
196
|
+
gap: var(--mj-space-4) var(--mj-space-5);
|
|
197
|
+
padding: var(--mj-space-4) var(--mj-space-5);
|
|
198
|
+
}
|
|
199
|
+
@media (max-width: 720px) { .mjc-fields-grid { grid-template-columns: 1fr; } }
|
|
200
|
+
.mjc-fg { min-width: 0; }
|
|
201
|
+
.mjc-fg--span { grid-column: 1 / -1; }
|
|
202
|
+
.mjc-fg .mj-forms-field {
|
|
203
|
+
display: flex; flex-direction: column; align-items: stretch; gap: 4px; padding: 0;
|
|
204
|
+
}
|
|
205
|
+
.mjc-fg .mj-forms-field-label {
|
|
206
|
+
font-size: var(--mj-text-xs); font-weight: 700; letter-spacing: .06em;
|
|
207
|
+
text-transform: uppercase; color: var(--mj-text-muted);
|
|
208
|
+
}
|
|
209
|
+
.mjc-fg .mj-forms-field--editing:hover { margin: 0; padding: 0; }
|
|
210
|
+
`;
|
|
211
|
+
function dateLabel(d) {
|
|
212
|
+
if (!d)
|
|
213
|
+
return '—';
|
|
214
|
+
return new Date(d).toLocaleDateString(undefined, { day: 'numeric', month: 'short', year: 'numeric', timeZone: 'UTC' });
|
|
215
|
+
}
|
|
216
|
+
function endsInText(days) {
|
|
217
|
+
if (days == null)
|
|
218
|
+
return '';
|
|
219
|
+
if (days < 0)
|
|
220
|
+
return `ended ${Math.abs(days)} days ago`;
|
|
221
|
+
if (days === 0)
|
|
222
|
+
return 'ends today';
|
|
223
|
+
if (days < 60)
|
|
224
|
+
return `in ${days} days`;
|
|
225
|
+
const months = Math.round(days / 30);
|
|
226
|
+
return `in ${months} month${months === 1 ? '' : 's'}`;
|
|
227
|
+
}
|
|
228
|
+
/* ── Overview ─────────────────────────────────────────────────────────────── */
|
|
229
|
+
let MJCContractOverviewPanel = class MJCContractOverviewPanel extends BaseFormPanel {
|
|
230
|
+
dateLabel = dateLabel;
|
|
231
|
+
get State() { return this.Record?.State || 'Draft'; }
|
|
232
|
+
get TypeName() { return this.Record?.ContractType ?? ''; }
|
|
233
|
+
get CustomerName() { return this.Record?.CustomerOrganization ?? ''; }
|
|
234
|
+
get ContactName() { return this.Record?.PrimaryContactPerson ?? ''; }
|
|
235
|
+
get CompanyName() { return this.Record?.Company ?? ''; }
|
|
236
|
+
get TemplateName() { return this.Record?.ContractTemplate ?? ''; }
|
|
237
|
+
get IncreaseLabel() {
|
|
238
|
+
const n = this.Record?.AnnualIncreasePercent;
|
|
239
|
+
return n == null ? '—' : `${n}%`;
|
|
240
|
+
}
|
|
241
|
+
DaysLabel(n) {
|
|
242
|
+
return n == null ? '—' : `${n} days`;
|
|
243
|
+
}
|
|
244
|
+
get StateTone() {
|
|
245
|
+
switch (this.State) {
|
|
246
|
+
case 'Active':
|
|
247
|
+
case 'Executed': return 'success';
|
|
248
|
+
case 'Terminated': return 'warning';
|
|
249
|
+
default: return 'muted';
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
get EndClock() {
|
|
253
|
+
if (this.Record?.TerminatedDate)
|
|
254
|
+
return 'Terminated';
|
|
255
|
+
const d = this.Record?.DaysToEnd;
|
|
256
|
+
if (d == null)
|
|
257
|
+
return 'Undated';
|
|
258
|
+
return endsInText(d).replace(/^in /, '').replace(/^ended /, '') || '—';
|
|
259
|
+
}
|
|
260
|
+
get EndTone() {
|
|
261
|
+
const d = this.Record?.DaysToEnd;
|
|
262
|
+
if (this.State === 'Active' && (d == null || d <= 120))
|
|
263
|
+
return 'warning';
|
|
264
|
+
if (d != null && d < 0)
|
|
265
|
+
return 'warning';
|
|
266
|
+
if (this.State === 'Active')
|
|
267
|
+
return 'success';
|
|
268
|
+
return 'muted';
|
|
269
|
+
}
|
|
270
|
+
get NoticeClock() {
|
|
271
|
+
const d = this.Record?.RenewalNoticeDeadline;
|
|
272
|
+
if (!d)
|
|
273
|
+
return 'None';
|
|
274
|
+
const days = daysUntil(d);
|
|
275
|
+
if (days == null)
|
|
276
|
+
return dateLabel(d);
|
|
277
|
+
if (days < 0)
|
|
278
|
+
return `${Math.abs(days)}d past`;
|
|
279
|
+
if (days === 0)
|
|
280
|
+
return 'Today';
|
|
281
|
+
return `${days}d`;
|
|
282
|
+
}
|
|
283
|
+
get NoticeTone() {
|
|
284
|
+
const d = this.Record?.RenewalNoticeDeadline;
|
|
285
|
+
if (!d)
|
|
286
|
+
return 'muted';
|
|
287
|
+
const days = daysUntil(d);
|
|
288
|
+
if (days != null && days <= 30)
|
|
289
|
+
return 'warning';
|
|
290
|
+
return 'muted';
|
|
291
|
+
}
|
|
292
|
+
get CanOpenSource() {
|
|
293
|
+
return !!(this.Record?.CreatingEntity && this.Record?.CreatingRecordID);
|
|
294
|
+
}
|
|
295
|
+
get SourceLabel() {
|
|
296
|
+
if (!this.Record?.CreatingEntity)
|
|
297
|
+
return 'Entered directly';
|
|
298
|
+
return this.Record.CreatingEntity;
|
|
299
|
+
}
|
|
300
|
+
get Health() {
|
|
301
|
+
const out = [];
|
|
302
|
+
if (!this.Record)
|
|
303
|
+
return out;
|
|
304
|
+
if (this.Record.IsAwaitingDocument) {
|
|
305
|
+
out.push('This type expects an executed document and none is attached.');
|
|
306
|
+
}
|
|
307
|
+
if (this.Record.IsInCancellationWindow) {
|
|
308
|
+
out.push('The cancellation window is open — a customer can walk without renewing.');
|
|
309
|
+
}
|
|
310
|
+
const end = this.Record.DaysToEnd;
|
|
311
|
+
if (end != null && end < 0 && !this.Record.TerminatedDate) {
|
|
312
|
+
out.push('The term has ended and no termination date is recorded.');
|
|
313
|
+
}
|
|
314
|
+
else if (this.State === 'Active' && end != null && end <= 120) {
|
|
315
|
+
out.push(`Term ends ${endsInText(end)} — this belongs on the renewals watchlist.`);
|
|
316
|
+
}
|
|
317
|
+
const notice = daysUntil(this.Record.RenewalNoticeDeadline);
|
|
318
|
+
if (notice != null && notice < 0) {
|
|
319
|
+
out.push('Renewal notice deadline has already passed.');
|
|
320
|
+
}
|
|
321
|
+
else if (notice != null && notice <= 30) {
|
|
322
|
+
out.push(`We owe written notice by ${dateLabel(this.Record.RenewalNoticeDeadline)}.`);
|
|
323
|
+
}
|
|
324
|
+
if (this.Record.HasModifications) {
|
|
325
|
+
out.push('The standard agreement was modified — read the paper.');
|
|
326
|
+
}
|
|
327
|
+
if (this.State === 'Active' && !this.Record.EndDate) {
|
|
328
|
+
out.push('Active with no end date — the watchlist cannot see this.');
|
|
329
|
+
}
|
|
330
|
+
return out;
|
|
331
|
+
}
|
|
332
|
+
get NextMove() {
|
|
333
|
+
if (this.Record?.IsAwaitingDocument)
|
|
334
|
+
return 'Attach the executed document. Finance cannot process paper they cannot see.';
|
|
335
|
+
if (this.Record?.IsInCancellationWindow)
|
|
336
|
+
return 'Cancellation window is open. Confirm whether this renews or walks.';
|
|
337
|
+
const notice = daysUntil(this.Record?.RenewalNoticeDeadline);
|
|
338
|
+
if (notice != null && notice <= 30) {
|
|
339
|
+
return `Send the renewal notice. Deadline ${dateLabel(this.Record?.RenewalNoticeDeadline)}.`;
|
|
340
|
+
}
|
|
341
|
+
const end = this.Record?.DaysToEnd;
|
|
342
|
+
if (this.State === 'Active' && end != null && end <= 120) {
|
|
343
|
+
return `Start the renewal conversation. Term ends ${endsInText(end)}.`;
|
|
344
|
+
}
|
|
345
|
+
if (this.Record?.HasModifications)
|
|
346
|
+
return 'Read the deviations before anyone treats this as a standard agreement.';
|
|
347
|
+
return null;
|
|
348
|
+
}
|
|
349
|
+
OpenCustomer(event) {
|
|
350
|
+
this.open(event, MJC_FOREIGN_ENTITIES.Organization, this.Record?.CustomerOrganizationID);
|
|
351
|
+
}
|
|
352
|
+
OpenContact(event) {
|
|
353
|
+
this.open(event, MJC_FOREIGN_ENTITIES.Person, this.Record?.PrimaryContactPersonID);
|
|
354
|
+
}
|
|
355
|
+
OpenSource(event) {
|
|
356
|
+
const entity = this.Record?.CreatingEntity;
|
|
357
|
+
const id = this.Record?.CreatingRecordID;
|
|
358
|
+
if (!entity || !id)
|
|
359
|
+
return;
|
|
360
|
+
this.open(event, entity, id);
|
|
361
|
+
}
|
|
362
|
+
open(event, entity, id) {
|
|
363
|
+
if (!id)
|
|
364
|
+
return;
|
|
365
|
+
event.preventDefault();
|
|
366
|
+
this.FormComponent.OnFormNavigate({
|
|
367
|
+
Kind: 'record',
|
|
368
|
+
EntityName: entity,
|
|
369
|
+
PrimaryKey: CompositeKey.FromID(id),
|
|
370
|
+
OpenInNewTab: event.ctrlKey || event.metaKey,
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
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) {
|
|
375
|
+
i0.ɵɵelementStart(0, "mj-collapsible-panel", 0)(1, "div", 1);
|
|
376
|
+
i0.ɵɵconditionalCreate(2, MJCContractOverviewPanel_Conditional_2_Template, 3, 0, "div", 2)(3, MJCContractOverviewPanel_Conditional_3_Template, 3, 0, "div", 3);
|
|
377
|
+
i0.ɵɵelementStart(4, "div", 4)(5, "div", 5)(6, "div", 6);
|
|
378
|
+
i0.ɵɵtext(7, "State");
|
|
379
|
+
i0.ɵɵelementEnd();
|
|
380
|
+
i0.ɵɵelementStart(8, "div", 7);
|
|
381
|
+
i0.ɵɵtext(9);
|
|
382
|
+
i0.ɵɵelementEnd();
|
|
383
|
+
i0.ɵɵelementStart(10, "div", 8);
|
|
384
|
+
i0.ɵɵtext(11);
|
|
385
|
+
i0.ɵɵelementEnd()();
|
|
386
|
+
i0.ɵɵelementStart(12, "div", 5)(13, "div", 6);
|
|
387
|
+
i0.ɵɵtext(14, "Term ends");
|
|
388
|
+
i0.ɵɵelementEnd();
|
|
389
|
+
i0.ɵɵelementStart(15, "div", 7);
|
|
390
|
+
i0.ɵɵtext(16);
|
|
391
|
+
i0.ɵɵelementEnd();
|
|
392
|
+
i0.ɵɵelementStart(17, "div", 8);
|
|
393
|
+
i0.ɵɵtext(18);
|
|
394
|
+
i0.ɵɵelementEnd()();
|
|
395
|
+
i0.ɵɵelementStart(19, "div", 5)(20, "div", 6);
|
|
396
|
+
i0.ɵɵtext(21, "Notice");
|
|
397
|
+
i0.ɵɵelementEnd();
|
|
398
|
+
i0.ɵɵelementStart(22, "div", 7);
|
|
399
|
+
i0.ɵɵtext(23);
|
|
400
|
+
i0.ɵɵelementEnd();
|
|
401
|
+
i0.ɵɵelementStart(24, "div", 8);
|
|
402
|
+
i0.ɵɵtext(25);
|
|
403
|
+
i0.ɵɵelementEnd()();
|
|
404
|
+
i0.ɵɵelementStart(26, "div", 5)(27, "div", 6);
|
|
405
|
+
i0.ɵɵtext(28, "Auto-renew");
|
|
406
|
+
i0.ɵɵelementEnd();
|
|
407
|
+
i0.ɵɵelementStart(29, "div", 7);
|
|
408
|
+
i0.ɵɵtext(30);
|
|
409
|
+
i0.ɵɵelementEnd();
|
|
410
|
+
i0.ɵɵelementStart(31, "div", 8);
|
|
411
|
+
i0.ɵɵtext(32);
|
|
412
|
+
i0.ɵɵelementEnd()()();
|
|
413
|
+
i0.ɵɵelementStart(33, "div", 9)(34, "article", 10)(35, "header");
|
|
414
|
+
i0.ɵɵelement(36, "i", 11);
|
|
415
|
+
i0.ɵɵtext(37, " Parties");
|
|
416
|
+
i0.ɵɵelementEnd();
|
|
417
|
+
i0.ɵɵelementStart(38, "div", 12)(39, "div")(40, "div", 6);
|
|
418
|
+
i0.ɵɵtext(41, "Customer");
|
|
419
|
+
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);
|
|
422
|
+
i0.ɵɵelementEnd()();
|
|
423
|
+
i0.ɵɵelementStart(45, "div")(46, "div", 6);
|
|
424
|
+
i0.ɵɵtext(47, "Contact");
|
|
425
|
+
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);
|
|
428
|
+
i0.ɵɵelementEnd()();
|
|
429
|
+
i0.ɵɵelementStart(51, "div")(52, "div", 6);
|
|
430
|
+
i0.ɵɵtext(53, "Selling as");
|
|
431
|
+
i0.ɵɵelementEnd();
|
|
432
|
+
i0.ɵɵelementStart(54, "div", 7);
|
|
433
|
+
i0.ɵɵtext(55);
|
|
434
|
+
i0.ɵɵelementEnd()();
|
|
435
|
+
i0.ɵɵelementStart(56, "div")(57, "div", 6);
|
|
436
|
+
i0.ɵɵtext(58, "Agreement");
|
|
437
|
+
i0.ɵɵelementEnd();
|
|
438
|
+
i0.ɵɵelementStart(59, "div", 7);
|
|
439
|
+
i0.ɵɵtext(60);
|
|
440
|
+
i0.ɵɵelementEnd()()()();
|
|
441
|
+
i0.ɵɵelementStart(61, "article", 10)(62, "header");
|
|
442
|
+
i0.ɵɵelement(63, "i", 14);
|
|
443
|
+
i0.ɵɵtext(64, " Obligation");
|
|
444
|
+
i0.ɵɵelementEnd();
|
|
445
|
+
i0.ɵɵelementStart(65, "div", 12)(66, "div")(67, "div", 6);
|
|
446
|
+
i0.ɵɵtext(68, "Executed");
|
|
447
|
+
i0.ɵɵelementEnd();
|
|
448
|
+
i0.ɵɵelementStart(69, "div", 7);
|
|
449
|
+
i0.ɵɵtext(70);
|
|
450
|
+
i0.ɵɵelementEnd()();
|
|
451
|
+
i0.ɵɵelementStart(71, "div")(72, "div", 6);
|
|
452
|
+
i0.ɵɵtext(73, "Effective");
|
|
453
|
+
i0.ɵɵelementEnd();
|
|
454
|
+
i0.ɵɵelementStart(74, "div", 7);
|
|
455
|
+
i0.ɵɵtext(75);
|
|
456
|
+
i0.ɵɵelementEnd()();
|
|
457
|
+
i0.ɵɵelementStart(76, "div")(77, "div", 6);
|
|
458
|
+
i0.ɵɵtext(78, "Notice we owe");
|
|
459
|
+
i0.ɵɵelementEnd();
|
|
460
|
+
i0.ɵɵelementStart(79, "div", 7);
|
|
461
|
+
i0.ɵɵtext(80);
|
|
462
|
+
i0.ɵɵelementEnd()();
|
|
463
|
+
i0.ɵɵelementStart(81, "div")(82, "div", 6);
|
|
464
|
+
i0.ɵɵtext(83, "Cancel window");
|
|
465
|
+
i0.ɵɵelementEnd();
|
|
466
|
+
i0.ɵɵelementStart(84, "div", 7);
|
|
467
|
+
i0.ɵɵtext(85);
|
|
468
|
+
i0.ɵɵelementEnd()();
|
|
469
|
+
i0.ɵɵelementStart(86, "div")(87, "div", 6);
|
|
470
|
+
i0.ɵɵtext(88, "Annual increase");
|
|
471
|
+
i0.ɵɵelementEnd();
|
|
472
|
+
i0.ɵɵelementStart(89, "div", 7);
|
|
473
|
+
i0.ɵɵtext(90);
|
|
474
|
+
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");
|
|
484
|
+
i0.ɵɵelementEnd();
|
|
485
|
+
i0.ɵɵconditionalCreate(101, MJCContractOverviewPanel_Conditional_101_Template, 2, 1, "p", 17)(102, MJCContractOverviewPanel_Conditional_102_Template, 2, 0, "p", 18);
|
|
486
|
+
i0.ɵɵelementEnd()()()();
|
|
487
|
+
} if (rf & 2) {
|
|
488
|
+
i0.ɵɵproperty("Form", ctx.FormComponent)("FormContext", ctx.FormContext)("DefaultExpanded", true);
|
|
489
|
+
i0.ɵɵadvance(2);
|
|
490
|
+
i0.ɵɵconditional(ctx.Health.length ? 2 : ctx.Record.IsSaved ? 3 : -1);
|
|
491
|
+
i0.ɵɵadvance(3);
|
|
492
|
+
i0.ɵɵattribute("data-tone", ctx.StateTone);
|
|
493
|
+
i0.ɵɵadvance(4);
|
|
494
|
+
i0.ɵɵtextInterpolate(ctx.State);
|
|
495
|
+
i0.ɵɵadvance(2);
|
|
496
|
+
i0.ɵɵtextInterpolate(ctx.TypeName || "No type");
|
|
497
|
+
i0.ɵɵadvance();
|
|
498
|
+
i0.ɵɵattribute("data-tone", ctx.EndTone);
|
|
499
|
+
i0.ɵɵadvance(4);
|
|
500
|
+
i0.ɵɵtextInterpolate(ctx.EndClock);
|
|
501
|
+
i0.ɵɵadvance(2);
|
|
502
|
+
i0.ɵɵtextInterpolate(ctx.dateLabel(ctx.Record.EndDate));
|
|
503
|
+
i0.ɵɵadvance();
|
|
504
|
+
i0.ɵɵattribute("data-tone", ctx.NoticeTone);
|
|
505
|
+
i0.ɵɵadvance(4);
|
|
506
|
+
i0.ɵɵtextInterpolate(ctx.NoticeClock);
|
|
507
|
+
i0.ɵɵadvance(2);
|
|
508
|
+
i0.ɵɵtextInterpolate(ctx.dateLabel(ctx.Record.RenewalNoticeDeadline));
|
|
509
|
+
i0.ɵɵadvance(5);
|
|
510
|
+
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
|
+
i0.ɵɵadvance(11);
|
|
514
|
+
i0.ɵɵconditional(ctx.Record.CustomerOrganizationID && ctx.CustomerName ? 43 : 44);
|
|
515
|
+
i0.ɵɵadvance(6);
|
|
516
|
+
i0.ɵɵconditional(ctx.Record.PrimaryContactPersonID && ctx.ContactName ? 49 : 50);
|
|
517
|
+
i0.ɵɵadvance(6);
|
|
518
|
+
i0.ɵɵtextInterpolate(ctx.CompanyName || "\u2014");
|
|
519
|
+
i0.ɵɵadvance(5);
|
|
520
|
+
i0.ɵɵtextInterpolate(ctx.TemplateName || "no standard terms");
|
|
521
|
+
i0.ɵɵadvance(10);
|
|
522
|
+
i0.ɵɵtextInterpolate(ctx.dateLabel(ctx.Record.ExecutedDate));
|
|
523
|
+
i0.ɵɵadvance(5);
|
|
524
|
+
i0.ɵɵtextInterpolate(ctx.dateLabel(ctx.Record.EffectiveDate));
|
|
525
|
+
i0.ɵɵadvance(5);
|
|
526
|
+
i0.ɵɵtextInterpolate(ctx.DaysLabel(ctx.Record.RenewalNoticeDays));
|
|
527
|
+
i0.ɵɵadvance(5);
|
|
528
|
+
i0.ɵɵtextInterpolate(ctx.DaysLabel(ctx.Record.CancellationWindowDays));
|
|
529
|
+
i0.ɵɵadvance(5);
|
|
530
|
+
i0.ɵɵtextInterpolate(ctx.IncreaseLabel);
|
|
531
|
+
i0.ɵɵadvance(5);
|
|
532
|
+
i0.ɵɵconditional(ctx.CanOpenSource ? 95 : 96);
|
|
533
|
+
i0.ɵɵadvance(6);
|
|
534
|
+
i0.ɵɵconditional(ctx.NextMove ? 101 : 102);
|
|
535
|
+
} }, 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
|
+
};
|
|
537
|
+
MJCContractOverviewPanel = __decorate([
|
|
538
|
+
RegisterClassEx(BaseFormPanel, {
|
|
539
|
+
key: 'contracts:overview',
|
|
540
|
+
skipNullKeyWarning: true,
|
|
541
|
+
metadata: {
|
|
542
|
+
entity: E,
|
|
543
|
+
slot: 'after-fields',
|
|
544
|
+
sortKey: 200,
|
|
545
|
+
contributionKey: 'overview',
|
|
546
|
+
inclusion: 'Primary',
|
|
547
|
+
replacesSectionKey: 'contractDetails',
|
|
548
|
+
},
|
|
549
|
+
})
|
|
550
|
+
], MJCContractOverviewPanel);
|
|
551
|
+
export { MJCContractOverviewPanel };
|
|
552
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJCContractOverviewPanel, [{
|
|
553
|
+
type: Component,
|
|
554
|
+
args: [{ selector: 'mjc-contract-overview-panel', standalone: true, encapsulation: ViewEncapsulation.None, imports: [CommonModule, BaseFormsModule], template: `
|
|
555
|
+
<mj-collapsible-panel
|
|
556
|
+
SectionKey="overview"
|
|
557
|
+
SectionName="Overview"
|
|
558
|
+
Icon="fa-solid fa-chart-pie"
|
|
559
|
+
[Form]="FormComponent"
|
|
560
|
+
[FormContext]="FormContext"
|
|
561
|
+
[DefaultExpanded]="true">
|
|
562
|
+
<div class="mjc-ov">
|
|
563
|
+
@if (Health.length) {
|
|
564
|
+
<div class="mjc-ov-health">
|
|
565
|
+
@for (h of Health; track h) {
|
|
566
|
+
<div class="mjc-ov-alert">
|
|
567
|
+
<i class="fa-solid fa-triangle-exclamation" aria-hidden="true"></i>
|
|
568
|
+
{{ h }}
|
|
569
|
+
</div>
|
|
570
|
+
}
|
|
571
|
+
</div>
|
|
572
|
+
} @else if (Record.IsSaved) {
|
|
573
|
+
<div class="mjc-ov-ok">
|
|
574
|
+
<i class="fa-solid fa-circle-check" aria-hidden="true"></i>
|
|
575
|
+
Nothing on this agreement is asking for a person.
|
|
576
|
+
</div>
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
<div class="mjc-ov-strip">
|
|
580
|
+
<div class="mjc-ov-kpi" [attr.data-tone]="StateTone">
|
|
581
|
+
<div class="l">State</div>
|
|
582
|
+
<div class="v">{{ State }}</div>
|
|
583
|
+
<div class="s">{{ TypeName || 'No type' }}</div>
|
|
584
|
+
</div>
|
|
585
|
+
<div class="mjc-ov-kpi" [attr.data-tone]="EndTone">
|
|
586
|
+
<div class="l">Term ends</div>
|
|
587
|
+
<div class="v">{{ EndClock }}</div>
|
|
588
|
+
<div class="s">{{ dateLabel(Record.EndDate) }}</div>
|
|
589
|
+
</div>
|
|
590
|
+
<div class="mjc-ov-kpi" [attr.data-tone]="NoticeTone">
|
|
591
|
+
<div class="l">Notice</div>
|
|
592
|
+
<div class="v">{{ NoticeClock }}</div>
|
|
593
|
+
<div class="s">{{ dateLabel(Record.RenewalNoticeDeadline) }}</div>
|
|
594
|
+
</div>
|
|
595
|
+
<div class="mjc-ov-kpi">
|
|
596
|
+
<div class="l">Auto-renew</div>
|
|
597
|
+
<div class="v">{{ Record.AutoRenew ? 'Yes' : 'No' }}</div>
|
|
598
|
+
<div class="s">{{ Record.AutoRenew ? 'as the paper states' : 'someone must act' }}</div>
|
|
599
|
+
</div>
|
|
600
|
+
</div>
|
|
601
|
+
|
|
602
|
+
<div class="mjc-ov-grid">
|
|
603
|
+
<article class="mjc-ov-card">
|
|
604
|
+
<header><i class="fa-solid fa-building"></i> Parties</header>
|
|
605
|
+
<div class="mjc-ov-facts">
|
|
606
|
+
<div>
|
|
607
|
+
<div class="l">Customer</div>
|
|
608
|
+
<div class="v">
|
|
609
|
+
@if (Record.CustomerOrganizationID && CustomerName) {
|
|
610
|
+
<button type="button" class="mjc-ov-link" (click)="OpenCustomer($event)">{{ CustomerName }}</button>
|
|
611
|
+
} @else { {{ CustomerName || '—' }} }
|
|
612
|
+
</div>
|
|
613
|
+
</div>
|
|
614
|
+
<div>
|
|
615
|
+
<div class="l">Contact</div>
|
|
616
|
+
<div class="v">
|
|
617
|
+
@if (Record.PrimaryContactPersonID && ContactName) {
|
|
618
|
+
<button type="button" class="mjc-ov-link" (click)="OpenContact($event)">{{ ContactName }}</button>
|
|
619
|
+
} @else { {{ ContactName || '—' }} }
|
|
620
|
+
</div>
|
|
621
|
+
</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>
|
|
624
|
+
</div>
|
|
625
|
+
</article>
|
|
626
|
+
<article class="mjc-ov-card">
|
|
627
|
+
<header><i class="fa-solid fa-scale-balanced"></i> Obligation</header>
|
|
628
|
+
<div class="mjc-ov-facts">
|
|
629
|
+
<div><div class="l">Executed</div><div class="v">{{ dateLabel(Record.ExecutedDate) }}</div></div>
|
|
630
|
+
<div><div class="l">Effective</div><div class="v">{{ dateLabel(Record.EffectiveDate) }}</div></div>
|
|
631
|
+
<div><div class="l">Notice we owe</div><div class="v">{{ DaysLabel(Record.RenewalNoticeDays) }}</div></div>
|
|
632
|
+
<div><div class="l">Cancel window</div><div class="v">{{ DaysLabel(Record.CancellationWindowDays) }}</div></div>
|
|
633
|
+
<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 }} }
|
|
639
|
+
</div>
|
|
640
|
+
</div>
|
|
641
|
+
</div>
|
|
642
|
+
</article>
|
|
643
|
+
<article class="mjc-ov-card mjc-ov-card--wide">
|
|
644
|
+
<header><i class="fa-solid fa-person-walking"></i> What needs a person</header>
|
|
645
|
+
@if (NextMove) {
|
|
646
|
+
<p class="mjc-ov-next">{{ NextMove }}</p>
|
|
647
|
+
} @else {
|
|
648
|
+
<p class="mjc-ov-empty">No action sitting on this agreement right now.</p>
|
|
649
|
+
}
|
|
650
|
+
</article>
|
|
651
|
+
</div>
|
|
652
|
+
</div>
|
|
653
|
+
</mj-collapsible-panel>
|
|
654
|
+
`, 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
|
+
}], null, null); })();
|
|
656
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractOverviewPanel, { className: "MJCContractOverviewPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 248 }); })();
|
|
657
|
+
function daysUntil(d) {
|
|
658
|
+
if (!d)
|
|
659
|
+
return null;
|
|
660
|
+
const iso = d instanceof Date
|
|
661
|
+
? `${d.getUTCFullYear()}-${String(d.getUTCMonth() + 1).padStart(2, '0')}-${String(d.getUTCDate()).padStart(2, '0')}`
|
|
662
|
+
: String(d).slice(0, 10);
|
|
663
|
+
const t = Date.parse(`${iso}T00:00:00Z`);
|
|
664
|
+
if (!Number.isFinite(t))
|
|
665
|
+
return null;
|
|
666
|
+
const now = new Date();
|
|
667
|
+
const today = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate());
|
|
668
|
+
return Math.round((t - today) / 86_400_000);
|
|
669
|
+
}
|
|
670
|
+
/* ── Field sections ───────────────────────────────────────────────────────── */
|
|
671
|
+
let MJCContractAgreementPanel = class MJCContractAgreementPanel extends BaseFormPanel {
|
|
672
|
+
Fields = [
|
|
673
|
+
{ name: 'ContractNumber', type: 'textbox' },
|
|
674
|
+
{ name: 'ContractTypeID', type: 'textbox', link: 'Record' },
|
|
675
|
+
{ name: 'ContractTemplateID', type: 'textbox', link: 'Record' },
|
|
676
|
+
{ name: 'SigningProviderURL', type: 'textbox', link: 'URL' },
|
|
677
|
+
{ name: 'HasModifications', type: 'checkbox' },
|
|
678
|
+
{ name: 'Description', type: 'textarea', span: true },
|
|
679
|
+
];
|
|
680
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵMJCContractAgreementPanel_BaseFactory; return function MJCContractAgreementPanel_Factory(__ngFactoryType__) { return (ɵMJCContractAgreementPanel_BaseFactory || (ɵMJCContractAgreementPanel_BaseFactory = i0.ɵɵgetInheritedFactory(MJCContractAgreementPanel)))(__ngFactoryType__ || MJCContractAgreementPanel); }; })();
|
|
681
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJCContractAgreementPanel, selectors: [["mjc-contract-agreement-panel"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 2, consts: [["SectionKey", "agreement", "SectionName", "Agreement", "Icon", "fa-solid fa-file-contract", 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 MJCContractAgreementPanel_Template(rf, ctx) { if (rf & 1) {
|
|
682
|
+
i0.ɵɵelementStart(0, "mj-collapsible-panel", 0)(1, "div", 1);
|
|
683
|
+
i0.ɵɵrepeaterCreate(2, MJCContractAgreementPanel_For_3_Template, 2, 9, "div", 2, _forTrack0);
|
|
684
|
+
i0.ɵɵelementEnd()();
|
|
685
|
+
} if (rf & 2) {
|
|
686
|
+
i0.ɵɵproperty("Form", ctx.FormComponent)("FormContext", ctx.FormContext);
|
|
687
|
+
i0.ɵɵadvance(2);
|
|
688
|
+
i0.ɵɵrepeater(ctx.Fields);
|
|
689
|
+
} }, dependencies: [CommonModule, BaseFormsModule, i1.MjFormFieldComponent, i1.MjCollapsiblePanelComponent], styles: [_c0], encapsulation: 2 });
|
|
690
|
+
};
|
|
691
|
+
MJCContractAgreementPanel = __decorate([
|
|
692
|
+
RegisterClassEx(BaseFormPanel, {
|
|
693
|
+
key: 'contracts:agreement',
|
|
694
|
+
skipNullKeyWarning: true,
|
|
695
|
+
metadata: { entity: E, slot: 'after-fields', sortKey: 95, contributionKey: 'agreement' },
|
|
696
|
+
})
|
|
697
|
+
], MJCContractAgreementPanel);
|
|
698
|
+
export { MJCContractAgreementPanel };
|
|
699
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJCContractAgreementPanel, [{
|
|
700
|
+
type: Component,
|
|
701
|
+
args: [{ selector: 'mjc-contract-agreement-panel', standalone: true, encapsulation: ViewEncapsulation.None, imports: [CommonModule, BaseFormsModule], template: `
|
|
702
|
+
<mj-collapsible-panel SectionKey="agreement" SectionName="Agreement" Icon="fa-solid fa-file-contract"
|
|
703
|
+
[Form]="FormComponent" [FormContext]="FormContext">
|
|
704
|
+
<div class="mjc-fields-grid">
|
|
705
|
+
@for (f of Fields; track f.name) {
|
|
706
|
+
<div class="mjc-fg" [class.mjc-fg--span]="f.span">
|
|
707
|
+
<mj-form-field [Record]="Record" [ShowLabel]="true" [FieldName]="f.name" [Type]="f.type"
|
|
708
|
+
[EditMode]="EditMode" [FormContext]="FormContext" [LinkType]="f.link ?? 'None'"
|
|
709
|
+
(Navigate)="FormComponent.OnFormNavigate($event)"></mj-form-field>
|
|
710
|
+
</div>
|
|
711
|
+
}
|
|
712
|
+
</div>
|
|
713
|
+
</mj-collapsible-panel>
|
|
714
|
+
`, 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
|
+
}], null, null); })();
|
|
716
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractAgreementPanel, { className: "MJCContractAgreementPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 415 }); })();
|
|
717
|
+
let MJCContractPartiesPanel = class MJCContractPartiesPanel extends BaseFormPanel {
|
|
718
|
+
/**
|
|
719
|
+
* Record links on these fields emit `Navigate` from `mj-form-field`. That output must be
|
|
720
|
+
* forwarded to `FormComponent.OnFormNavigate`, which Explorer maps onto
|
|
721
|
+
* `NavigationService.OpenEntityRecord`. Without the binding the cells look like links and
|
|
722
|
+
* do nothing — Overview's customer/contact buttons already go through this path.
|
|
723
|
+
*/
|
|
724
|
+
Fields = [
|
|
725
|
+
{ name: 'CustomerOrganizationID', type: 'textbox', link: 'Record' },
|
|
726
|
+
{ name: 'PrimaryContactPersonID', type: 'textbox', link: 'Record' },
|
|
727
|
+
{ name: 'CompanyID', type: 'textbox', link: 'Record' },
|
|
728
|
+
];
|
|
729
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵMJCContractPartiesPanel_BaseFactory; return function MJCContractPartiesPanel_Factory(__ngFactoryType__) { return (ɵMJCContractPartiesPanel_BaseFactory || (ɵMJCContractPartiesPanel_BaseFactory = i0.ɵɵgetInheritedFactory(MJCContractPartiesPanel)))(__ngFactoryType__ || MJCContractPartiesPanel); }; })();
|
|
730
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJCContractPartiesPanel, selectors: [["mjc-contract-parties-panel"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 2, consts: [["SectionKey", "parties", "SectionName", "Parties", "Icon", "fa-solid fa-building", 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 MJCContractPartiesPanel_Template(rf, ctx) { if (rf & 1) {
|
|
731
|
+
i0.ɵɵelementStart(0, "mj-collapsible-panel", 0)(1, "div", 1);
|
|
732
|
+
i0.ɵɵrepeaterCreate(2, MJCContractPartiesPanel_For_3_Template, 2, 9, "div", 2, _forTrack0);
|
|
733
|
+
i0.ɵɵelementEnd()();
|
|
734
|
+
} if (rf & 2) {
|
|
735
|
+
i0.ɵɵproperty("Form", ctx.FormComponent)("FormContext", ctx.FormContext);
|
|
736
|
+
i0.ɵɵadvance(2);
|
|
737
|
+
i0.ɵɵrepeater(ctx.Fields);
|
|
738
|
+
} }, dependencies: [CommonModule, BaseFormsModule, i1.MjFormFieldComponent, i1.MjCollapsiblePanelComponent], styles: [_c0], encapsulation: 2 });
|
|
739
|
+
};
|
|
740
|
+
MJCContractPartiesPanel = __decorate([
|
|
741
|
+
RegisterClassEx(BaseFormPanel, {
|
|
742
|
+
key: 'contracts:parties',
|
|
743
|
+
skipNullKeyWarning: true,
|
|
744
|
+
metadata: {
|
|
745
|
+
entity: E, slot: 'after-fields', sortKey: 92, contributionKey: 'parties',
|
|
746
|
+
replacesSectionKey: 'stakeholders',
|
|
747
|
+
},
|
|
748
|
+
})
|
|
749
|
+
], MJCContractPartiesPanel);
|
|
750
|
+
export { MJCContractPartiesPanel };
|
|
751
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJCContractPartiesPanel, [{
|
|
752
|
+
type: Component,
|
|
753
|
+
args: [{ selector: 'mjc-contract-parties-panel', standalone: true, encapsulation: ViewEncapsulation.None, imports: [CommonModule, BaseFormsModule], template: `
|
|
754
|
+
<mj-collapsible-panel SectionKey="parties" SectionName="Parties" Icon="fa-solid fa-building"
|
|
755
|
+
[Form]="FormComponent" [FormContext]="FormContext">
|
|
756
|
+
<div class="mjc-fields-grid">
|
|
757
|
+
@for (f of Fields; track f.name) {
|
|
758
|
+
<div class="mjc-fg" [class.mjc-fg--span]="f.span">
|
|
759
|
+
<mj-form-field [Record]="Record" [ShowLabel]="true" [FieldName]="f.name" [Type]="f.type"
|
|
760
|
+
[EditMode]="EditMode" [FormContext]="FormContext" [LinkType]="f.link ?? 'None'"
|
|
761
|
+
(Navigate)="FormComponent.OnFormNavigate($event)"></mj-form-field>
|
|
762
|
+
</div>
|
|
763
|
+
}
|
|
764
|
+
</div>
|
|
765
|
+
</mj-collapsible-panel>
|
|
766
|
+
`, 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
|
+
}], null, null); })();
|
|
768
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractPartiesPanel, { className: "MJCContractPartiesPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 455 }); })();
|
|
769
|
+
let MJCContractNotesPanel = class MJCContractNotesPanel extends BaseFormPanel {
|
|
770
|
+
Fields = [
|
|
771
|
+
{ name: 'Notes', type: 'textarea', span: true },
|
|
772
|
+
];
|
|
773
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵMJCContractNotesPanel_BaseFactory; return function MJCContractNotesPanel_Factory(__ngFactoryType__) { return (ɵMJCContractNotesPanel_BaseFactory || (ɵMJCContractNotesPanel_BaseFactory = i0.ɵɵgetInheritedFactory(MJCContractNotesPanel)))(__ngFactoryType__ || MJCContractNotesPanel); }; })();
|
|
774
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJCContractNotesPanel, selectors: [["mjc-contract-notes-panel"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 2, consts: [["SectionKey", "notes", "SectionName", "Notes", "Icon", "fa-solid fa-align-left", 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 MJCContractNotesPanel_Template(rf, ctx) { if (rf & 1) {
|
|
775
|
+
i0.ɵɵelementStart(0, "mj-collapsible-panel", 0)(1, "div", 1);
|
|
776
|
+
i0.ɵɵrepeaterCreate(2, MJCContractNotesPanel_For_3_Template, 2, 9, "div", 2, _forTrack0);
|
|
777
|
+
i0.ɵɵelementEnd()();
|
|
778
|
+
} if (rf & 2) {
|
|
779
|
+
i0.ɵɵproperty("Form", ctx.FormComponent)("FormContext", ctx.FormContext);
|
|
780
|
+
i0.ɵɵadvance(2);
|
|
781
|
+
i0.ɵɵrepeater(ctx.Fields);
|
|
782
|
+
} }, dependencies: [CommonModule, BaseFormsModule, i1.MjFormFieldComponent, i1.MjCollapsiblePanelComponent], styles: [_c0], encapsulation: 2 });
|
|
783
|
+
};
|
|
784
|
+
MJCContractNotesPanel = __decorate([
|
|
785
|
+
RegisterClassEx(BaseFormPanel, {
|
|
786
|
+
key: 'contracts:notes',
|
|
787
|
+
skipNullKeyWarning: true,
|
|
788
|
+
metadata: {
|
|
789
|
+
entity: E, slot: 'after-fields', sortKey: 80, contributionKey: 'notes',
|
|
790
|
+
replacesSectionKey: 'notesAndMetadata',
|
|
791
|
+
},
|
|
792
|
+
})
|
|
793
|
+
], MJCContractNotesPanel);
|
|
794
|
+
export { MJCContractNotesPanel };
|
|
795
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJCContractNotesPanel, [{
|
|
796
|
+
type: Component,
|
|
797
|
+
args: [{ selector: 'mjc-contract-notes-panel', standalone: true, encapsulation: ViewEncapsulation.None, imports: [CommonModule, BaseFormsModule], template: `
|
|
798
|
+
<mj-collapsible-panel SectionKey="notes" SectionName="Notes" Icon="fa-solid fa-align-left"
|
|
799
|
+
[Form]="FormComponent" [FormContext]="FormContext">
|
|
800
|
+
<div class="mjc-fields-grid">
|
|
801
|
+
@for (f of Fields; track f.name) {
|
|
802
|
+
<div class="mjc-fg" [class.mjc-fg--span]="f.span">
|
|
803
|
+
<mj-form-field [Record]="Record" [ShowLabel]="true" [FieldName]="f.name" [Type]="f.type"
|
|
804
|
+
[EditMode]="EditMode" [FormContext]="FormContext" [LinkType]="f.link ?? 'None'"
|
|
805
|
+
(Navigate)="FormComponent.OnFormNavigate($event)"></mj-form-field>
|
|
806
|
+
</div>
|
|
807
|
+
}
|
|
808
|
+
</div>
|
|
809
|
+
</mj-collapsible-panel>
|
|
810
|
+
`, 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
|
+
}], null, null); })();
|
|
812
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractNotesPanel, { className: "MJCContractNotesPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 498 }); })();
|
|
813
|
+
let MJCContractProvenanceFieldsPanel = class MJCContractProvenanceFieldsPanel extends BaseFormPanel {
|
|
814
|
+
Fields = [
|
|
815
|
+
{ name: 'CreatingEntityID', type: 'textbox', link: 'Record' },
|
|
816
|
+
{ name: 'CreatingRecordID', type: 'textbox' },
|
|
817
|
+
];
|
|
818
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵMJCContractProvenanceFieldsPanel_BaseFactory; return function MJCContractProvenanceFieldsPanel_Factory(__ngFactoryType__) { return (ɵMJCContractProvenanceFieldsPanel_BaseFactory || (ɵMJCContractProvenanceFieldsPanel_BaseFactory = i0.ɵɵgetInheritedFactory(MJCContractProvenanceFieldsPanel)))(__ngFactoryType__ || MJCContractProvenanceFieldsPanel); }; })();
|
|
819
|
+
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) {
|
|
820
|
+
i0.ɵɵelementStart(0, "mj-collapsible-panel", 0)(1, "div", 1);
|
|
821
|
+
i0.ɵɵrepeaterCreate(2, MJCContractProvenanceFieldsPanel_For_3_Template, 2, 9, "div", 2, _forTrack0);
|
|
822
|
+
i0.ɵɵelementEnd()();
|
|
823
|
+
} if (rf & 2) {
|
|
824
|
+
i0.ɵɵproperty("Form", ctx.FormComponent)("FormContext", ctx.FormContext);
|
|
825
|
+
i0.ɵɵadvance(2);
|
|
826
|
+
i0.ɵɵrepeater(ctx.Fields);
|
|
827
|
+
} }, dependencies: [CommonModule, BaseFormsModule, i1.MjFormFieldComponent, i1.MjCollapsiblePanelComponent], styles: [_c0], encapsulation: 2 });
|
|
828
|
+
};
|
|
829
|
+
MJCContractProvenanceFieldsPanel = __decorate([
|
|
830
|
+
RegisterClassEx(BaseFormPanel, {
|
|
831
|
+
key: 'contracts:provenance',
|
|
832
|
+
skipNullKeyWarning: true,
|
|
833
|
+
metadata: {
|
|
834
|
+
entity: E, slot: 'after-fields', sortKey: 35, contributionKey: 'origin',
|
|
835
|
+
replacesSectionKey: 'provenance',
|
|
836
|
+
},
|
|
837
|
+
})
|
|
838
|
+
], MJCContractProvenanceFieldsPanel);
|
|
839
|
+
export { MJCContractProvenanceFieldsPanel };
|
|
840
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJCContractProvenanceFieldsPanel, [{
|
|
841
|
+
type: Component,
|
|
842
|
+
args: [{ selector: 'mjc-contract-provenance-panel', standalone: true, encapsulation: ViewEncapsulation.None, imports: [CommonModule, BaseFormsModule], template: `
|
|
843
|
+
<mj-collapsible-panel SectionKey="origin" SectionName="Provenance" Icon="fa-solid fa-diagram-project"
|
|
844
|
+
[Form]="FormComponent" [FormContext]="FormContext">
|
|
845
|
+
<div class="mjc-fields-grid">
|
|
846
|
+
@for (f of Fields; track f.name) {
|
|
847
|
+
<div class="mjc-fg" [class.mjc-fg--span]="f.span">
|
|
848
|
+
<mj-form-field [Record]="Record" [ShowLabel]="true" [FieldName]="f.name" [Type]="f.type"
|
|
849
|
+
[EditMode]="EditMode" [FormContext]="FormContext" [LinkType]="f.link ?? 'None'"
|
|
850
|
+
(Navigate)="FormComponent.OnFormNavigate($event)"></mj-form-field>
|
|
851
|
+
</div>
|
|
852
|
+
}
|
|
853
|
+
</div>
|
|
854
|
+
</mj-collapsible-panel>
|
|
855
|
+
`, 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
|
+
}], null, null); })();
|
|
857
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractProvenanceFieldsPanel, { className: "MJCContractProvenanceFieldsPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 533 }); })();
|
|
858
|
+
let MJCContractLifecyclePanel = class MJCContractLifecyclePanel extends BaseFormPanel {
|
|
859
|
+
Fields = [
|
|
860
|
+
{ name: 'ParentContractID', type: 'textbox', link: 'Record' },
|
|
861
|
+
{ name: 'SupersededByContractID', type: 'textbox', link: 'Record' },
|
|
862
|
+
];
|
|
863
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵMJCContractLifecyclePanel_BaseFactory; return function MJCContractLifecyclePanel_Factory(__ngFactoryType__) { return (ɵMJCContractLifecyclePanel_BaseFactory || (ɵMJCContractLifecyclePanel_BaseFactory = i0.ɵɵgetInheritedFactory(MJCContractLifecyclePanel)))(__ngFactoryType__ || MJCContractLifecyclePanel); }; })();
|
|
864
|
+
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) {
|
|
865
|
+
i0.ɵɵelementStart(0, "mj-collapsible-panel", 0)(1, "div", 1);
|
|
866
|
+
i0.ɵɵrepeaterCreate(2, MJCContractLifecyclePanel_For_3_Template, 2, 9, "div", 2, _forTrack0);
|
|
867
|
+
i0.ɵɵelementEnd()();
|
|
868
|
+
} if (rf & 2) {
|
|
869
|
+
i0.ɵɵproperty("Form", ctx.FormComponent)("FormContext", ctx.FormContext);
|
|
870
|
+
i0.ɵɵadvance(2);
|
|
871
|
+
i0.ɵɵrepeater(ctx.Fields);
|
|
872
|
+
} }, dependencies: [CommonModule, BaseFormsModule, i1.MjFormFieldComponent, i1.MjCollapsiblePanelComponent], styles: [_c0], encapsulation: 2 });
|
|
873
|
+
};
|
|
874
|
+
MJCContractLifecyclePanel = __decorate([
|
|
875
|
+
RegisterClassEx(BaseFormPanel, {
|
|
876
|
+
key: 'contracts:lifecycle-fields',
|
|
877
|
+
skipNullKeyWarning: true,
|
|
878
|
+
metadata: {
|
|
879
|
+
entity: E, slot: 'after-fields', sortKey: 50, contributionKey: 'lifecycle',
|
|
880
|
+
replacesSectionKey: 'contractLifecycle',
|
|
881
|
+
},
|
|
882
|
+
})
|
|
883
|
+
], MJCContractLifecyclePanel);
|
|
884
|
+
export { MJCContractLifecyclePanel };
|
|
885
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJCContractLifecyclePanel, [{
|
|
886
|
+
type: Component,
|
|
887
|
+
args: [{ selector: 'mjc-contract-lifecycle-panel', standalone: true, encapsulation: ViewEncapsulation.None, imports: [CommonModule, BaseFormsModule], template: `
|
|
888
|
+
<mj-collapsible-panel SectionKey="lifecycle" SectionName="Change orders" Icon="fa-solid fa-code-branch"
|
|
889
|
+
[Form]="FormComponent" [FormContext]="FormContext">
|
|
890
|
+
<div class="mjc-fields-grid">
|
|
891
|
+
@for (f of Fields; track f.name) {
|
|
892
|
+
<div class="mjc-fg" [class.mjc-fg--span]="f.span">
|
|
893
|
+
<mj-form-field [Record]="Record" [ShowLabel]="true" [FieldName]="f.name" [Type]="f.type"
|
|
894
|
+
[EditMode]="EditMode" [FormContext]="FormContext" [LinkType]="f.link ?? 'None'"
|
|
895
|
+
(Navigate)="FormComponent.OnFormNavigate($event)"></mj-form-field>
|
|
896
|
+
</div>
|
|
897
|
+
}
|
|
898
|
+
</div>
|
|
899
|
+
</mj-collapsible-panel>
|
|
900
|
+
`, 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
|
+
}], null, null); })();
|
|
902
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractLifecyclePanel, { className: "MJCContractLifecyclePanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 569 }); })();
|
|
903
|
+
let MJCContractModificationsPanel = class MJCContractModificationsPanel extends BaseFormPanel {
|
|
904
|
+
Entity = MJC_ENTITIES.ContractTemplateModification;
|
|
905
|
+
OnDataLoad(event) {
|
|
906
|
+
this.FormComponent.SetSectionRowCount('modifications', event.totalRowCount);
|
|
907
|
+
}
|
|
908
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵMJCContractModificationsPanel_BaseFactory; return function MJCContractModificationsPanel_Factory(__ngFactoryType__) { return (ɵMJCContractModificationsPanel_BaseFactory || (ɵMJCContractModificationsPanel_BaseFactory = i0.ɵɵgetInheritedFactory(MJCContractModificationsPanel)))(__ngFactoryType__ || MJCContractModificationsPanel); }; })();
|
|
909
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJCContractModificationsPanel, selectors: [["mjc-contract-modifications-panel"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 5, consts: [["SectionKey", "modifications", "SectionName", "Modifications", "Icon", "fa-solid fa-file-circle-exclamation", "Variant", "related-entity", 3, "Form", "FormContext", "DefaultExpanded", "BadgeCount"], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [3, "Navigate", "AfterDataLoad", "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"]], template: function MJCContractModificationsPanel_Template(rf, ctx) { if (rf & 1) {
|
|
910
|
+
i0.ɵɵelementStart(0, "mj-collapsible-panel", 0);
|
|
911
|
+
i0.ɵɵconditionalCreate(1, MJCContractModificationsPanel_Conditional_1_Template, 1, 4, "mj-explorer-entity-data-grid", 1);
|
|
912
|
+
i0.ɵɵelementEnd();
|
|
913
|
+
} if (rf & 2) {
|
|
914
|
+
i0.ɵɵproperty("Form", ctx.FormComponent)("FormContext", ctx.FormContext)("DefaultExpanded", false)("BadgeCount", ctx.FormComponent.GetSectionRowCount("modifications"));
|
|
915
|
+
i0.ɵɵadvance();
|
|
916
|
+
i0.ɵɵconditional(ctx.Record.IsSaved ? 1 : -1);
|
|
917
|
+
} }, dependencies: [CommonModule, BaseFormsModule, i1.MjCollapsiblePanelComponent, i1.ExplorerEntityDataGridComponent], encapsulation: 2 });
|
|
918
|
+
};
|
|
919
|
+
MJCContractModificationsPanel = __decorate([
|
|
920
|
+
RegisterClassEx(BaseFormPanel, {
|
|
921
|
+
key: 'contracts:related-modifications',
|
|
922
|
+
skipNullKeyWarning: true,
|
|
923
|
+
metadata: {
|
|
924
|
+
entity: E, slot: 'after-related', sortKey: 70, contributionKey: 'modifications',
|
|
925
|
+
relatedEntity: MJC_ENTITIES.ContractTemplateModification, relatedJoinField: 'ContractID',
|
|
926
|
+
},
|
|
927
|
+
})
|
|
928
|
+
], MJCContractModificationsPanel);
|
|
929
|
+
export { MJCContractModificationsPanel };
|
|
930
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJCContractModificationsPanel, [{
|
|
931
|
+
type: Component,
|
|
932
|
+
args: [{
|
|
933
|
+
selector: 'mjc-contract-modifications-panel',
|
|
934
|
+
standalone: true,
|
|
935
|
+
imports: [CommonModule, BaseFormsModule],
|
|
936
|
+
template: `
|
|
937
|
+
<mj-collapsible-panel SectionKey="modifications" SectionName="Modifications" Icon="fa-solid fa-file-circle-exclamation"
|
|
938
|
+
Variant="related-entity" [Form]="FormComponent" [FormContext]="FormContext" [DefaultExpanded]="false"
|
|
939
|
+
[BadgeCount]="FormComponent.GetSectionRowCount('modifications')">
|
|
940
|
+
@if (Record.IsSaved) {
|
|
941
|
+
<mj-explorer-entity-data-grid
|
|
942
|
+
[Params]="FormComponent.BuildRelationshipViewParamsByEntityName(Entity, 'ContractID')"
|
|
943
|
+
[NewRecordValues]="FormComponent.NewRecordValues(Entity, 'ContractID')"
|
|
944
|
+
[AllowLoad]="FormComponent.IsSectionExpanded('modifications')"
|
|
945
|
+
[ShowToolbar]="true"
|
|
946
|
+
(Navigate)="FormComponent.OnFormNavigate($event)"
|
|
947
|
+
(AfterDataLoad)="OnDataLoad($event)">
|
|
948
|
+
</mj-explorer-entity-data-grid>
|
|
949
|
+
}
|
|
950
|
+
</mj-collapsible-panel>
|
|
951
|
+
`,
|
|
952
|
+
}]
|
|
953
|
+
}], null, null); })();
|
|
954
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJCContractModificationsPanel, { className: "MJCContractModificationsPanel", filePath: "lib/form-panels/contract-form.panels.ts", lineNumber: 605 }); })();
|
|
955
|
+
//# sourceMappingURL=contract-form.panels.js.map
|