@mj-biz-apps/contracts-ng 0.4.0 → 0.4.2

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.
@@ -25,5 +25,22 @@ export declare const MJC_FOREIGN_ENTITIES: {
25
25
  readonly Person: "MJ_BizApps_Common: People";
26
26
  /** MJ CORE's Company, not accounting's — verified against __mj.EntityRelationship. */
27
27
  readonly Company: "MJ: Companies";
28
+ /** MJ CORE's file storage: a file row, its category, and the polymorphic record↔file link (golive #213). */
29
+ readonly File: "MJ: Files";
30
+ readonly FileCategory: "MJ: File Categories";
31
+ readonly FileEntityRecordLink: "MJ: File Entity Record Links";
32
+ /**
33
+ * bizapps-SALES, and read SOFTLY — no manifest dependency, deliberately (golive #219).
34
+ *
35
+ * Sales depends on THIS app: its Close-Won seam is what creates contracts. That is precisely why
36
+ * a contract's provenance is the polymorphic `CreatingEntityID` / `CreatingRecordID` pair rather
37
+ * than a `DealID` column — a hard reference upward would invert the dependency graph, and the
38
+ * Contract entity's own description says so in as many words.
39
+ *
40
+ * So this is a NAME resolved from provider metadata at runtime and nothing more. No import, no
41
+ * entry in `mj-app.json`. An installation without sales finds no such entity, and the Source-record
42
+ * picker does not render — a supported state, not a failure.
43
+ */
44
+ readonly Deal: "MJ_BizApps_Sales: Deals";
28
45
  };
29
46
  //# sourceMappingURL=entity-names.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-names.d.ts","sourceRoot":"","sources":["../../../src/lib/data/entity-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,kCAAkC;AAClC,eAAO,MAAM,YAAY;;;;;;;CAOf,CAAC;AAEX,iGAAiG;AACjG,eAAO,MAAM,oBAAoB;;;IAG7B,sFAAsF;;CAEhF,CAAC"}
1
+ {"version":3,"file":"entity-names.d.ts","sourceRoot":"","sources":["../../../src/lib/data/entity-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,kCAAkC;AAClC,eAAO,MAAM,YAAY;;;;;;;CAOf,CAAC;AAEX,iGAAiG;AACjG,eAAO,MAAM,oBAAoB;;;IAG7B,sFAAsF;;IAEtF,4GAA4G;;;;IAI5G;;;;;;;;;;;OAWG;;CAEG,CAAC"}
@@ -25,5 +25,22 @@ export const MJC_FOREIGN_ENTITIES = {
25
25
  Person: 'MJ_BizApps_Common: People',
26
26
  /** MJ CORE's Company, not accounting's — verified against __mj.EntityRelationship. */
27
27
  Company: 'MJ: Companies',
28
+ /** MJ CORE's file storage: a file row, its category, and the polymorphic record↔file link (golive #213). */
29
+ File: 'MJ: Files',
30
+ FileCategory: 'MJ: File Categories',
31
+ FileEntityRecordLink: 'MJ: File Entity Record Links',
32
+ /**
33
+ * bizapps-SALES, and read SOFTLY — no manifest dependency, deliberately (golive #219).
34
+ *
35
+ * Sales depends on THIS app: its Close-Won seam is what creates contracts. That is precisely why
36
+ * a contract's provenance is the polymorphic `CreatingEntityID` / `CreatingRecordID` pair rather
37
+ * than a `DealID` column — a hard reference upward would invert the dependency graph, and the
38
+ * Contract entity's own description says so in as many words.
39
+ *
40
+ * So this is a NAME resolved from provider metadata at runtime and nothing more. No import, no
41
+ * entry in `mj-app.json`. An installation without sales finds no such entity, and the Source-record
42
+ * picker does not render — a supported state, not a failure.
43
+ */
44
+ Deal: 'MJ_BizApps_Sales: Deals',
28
45
  };
29
46
  //# sourceMappingURL=entity-names.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-names.js","sourceRoot":"","sources":["../../../src/lib/data/entity-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,kCAAkC;AAClC,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,QAAQ,EAAE,iCAAiC;IAC3C,YAAY,EAAE,sCAAsC;IACpD,gBAAgB,EAAE,0CAA0C;IAC5D,oBAAoB,EAAE,+CAA+C;IACrE,yBAAyB,EAAE,oDAAoD;IAC/E,4BAA4B,EAAE,uDAAuD;CAC/E,CAAC;AAEX,iGAAiG;AACjG,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC,YAAY,EAAE,kCAAkC;IAChD,MAAM,EAAE,2BAA2B;IACnC,sFAAsF;IACtF,OAAO,EAAE,eAAe;CAClB,CAAC"}
1
+ {"version":3,"file":"entity-names.js","sourceRoot":"","sources":["../../../src/lib/data/entity-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,kCAAkC;AAClC,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,QAAQ,EAAE,iCAAiC;IAC3C,YAAY,EAAE,sCAAsC;IACpD,gBAAgB,EAAE,0CAA0C;IAC5D,oBAAoB,EAAE,+CAA+C;IACrE,yBAAyB,EAAE,oDAAoD;IAC/E,4BAA4B,EAAE,uDAAuD;CAC/E,CAAC;AAEX,iGAAiG;AACjG,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC,YAAY,EAAE,kCAAkC;IAChD,MAAM,EAAE,2BAA2B;IACnC,sFAAsF;IACtF,OAAO,EAAE,eAAe;IACxB,4GAA4G;IAC5G,IAAI,EAAE,WAAW;IACjB,YAAY,EAAE,qBAAqB;IACnC,oBAAoB,EAAE,8BAA8B;IACpD;;;;;;;;;;;OAWG;IACH,IAAI,EAAE,yBAAyB;CACzB,CAAC"}
@@ -1,7 +1,17 @@
1
1
  import { BaseFormPanel } from '@memberjunction/ng-base-forms';
2
2
  import type { AfterDataLoadEventArgs } from '@memberjunction/ng-entity-viewer';
3
- import { ContractEntity, type ContractState } from '@mj-biz-apps/contracts-entities';
3
+ import { ContractEntity, type ContractState, type DealOption } from '@mj-biz-apps/contracts-entities';
4
4
  import * as i0 from "@angular/core";
5
+ /**
6
+ * A deal option with its rendered label attached (golive #219).
7
+ *
8
+ * The label is computed ONCE per row, on load, rather than from a template call: `mj-combobox` reads
9
+ * `TextField` on every change-detection pass and for every option, so a function there re-renders the
10
+ * whole list on each keystroke.
11
+ */
12
+ interface DealChoice extends DealOption {
13
+ Label: string;
14
+ }
5
15
  type ContractFieldType = 'textbox' | 'textarea' | 'number' | 'datepicker' | 'checkbox' | 'select' | 'autocomplete' | 'code' | 'dropdownlist' | 'numerictextbox';
6
16
  interface ContractFieldSpec {
7
17
  name: string;
@@ -69,30 +79,138 @@ export declare class MJCContractNotesPanel extends BaseFormPanel<ContractEntity>
69
79
  static ɵcmp: i0.ɵɵComponentDeclaration<MJCContractNotesPanel, "mjc-contract-notes-panel", never, {}, {}, never, never, true, never>;
70
80
  }
71
81
  export declare class MJCContractProvenanceFieldsPanel extends BaseFormPanel<ContractEntity> {
82
+ private readonly cdr;
72
83
  /**
73
- * READ-ONLY, and the section KEPT a deliberate departure from issue #28 item 18.
74
- *
75
- * Item 18 says to hide this section entirely, on the stated grounds that the hero's Source Deal
76
- * link (item 1) replaces it. That premise does not hold yet. Item 1 renders the stat ONLY when
77
- * `CreatingEntityID` and `CreatingRecordID` are both set, and on this database exactly one contract
78
- * of eleven has them `CTR-000026`, whose pair was typed in by hand: the entity is
79
- * `MJ: Explorer Navigation Items` rather than Deals and the record id is not a valid UUID. So on
80
- * every contract a person can currently open, the replacement is invisible. Hiding this section
81
- * today would remove the only visible provenance for a stat that does not appear.
82
- *
83
- * WHAT ITEM 18 IS ACTUALLY ABOUT, and this half is not in doubt: these two fields rendered as
84
- * ordinary inputs a person could type into, which is how that junk pair got there.
85
- * `CreatingEntityID` is a real FK to `__mj.Entity` and `CreatingRecordID` is the row it names, and
86
- * `CK_Contract_CreatingPairBothOrNeither` requires both or neither so editing one field alone
87
- * produces a save the constraint refuses, and editing both silently re-points a contract's
88
- * provenance at an unrelated record, which is then what the hero's link displays. The server sets
89
- * this pair (`LiveContractsSeam.setProvenance`, on Close-Won) and nothing else should.
90
- *
91
- * Read-only closes that defect and keeps the ids visible beneath the hero's human-readable name
92
- * complements rather than duplicates. Revisit hiding the section once a contract created by a real
93
- * Close-Won deal exists to verify item 1 against.
84
+ * THE RAW IDS STAY, AND STAY READ-ONLY. The lookup above is what WRITES them (golive #219).
85
+ *
86
+ * ── WHY THEY WERE READ-ONLY, WHICH HAS NOT CHANGED ────────────────────────────────────────
87
+ *
88
+ * `CreatingEntityID` is a real FK to `__mj.Entity` and `CreatingRecordID` is the row it names, under
89
+ * `CK_Contract_CreatingPairBothOrNeither`both or neither. Rendered as two ordinary inputs
90
+ * (contracts#28 item 18) they produced exactly the two failures the shape invites: editing one
91
+ * alone is a save the constraint refuses, and editing both silently re-points a contract's
92
+ * provenance at an unrelated record. `CTR-000026` still carries the evidence a hand-typed pair
93
+ * naming `MJ: Explorer Navigation Items` with a record id that is not a UUID.
94
+ *
95
+ * ── WHAT #219 ADDS, AND WHY IT IS NOT A REVERSAL ──────────────────────────────────────────
96
+ *
97
+ * Story C-US1 says finance may attach a MANUALLY created contract to an existing deal. Item 18's
98
+ * read-only made that impossible: the Close Won seam became not just the preferred writer but the
99
+ * only one, and a contract typed in by hand could never show its deal. The answer is not to reopen
100
+ * the fields it is to write them through a control that cannot produce a half pair. The lookup
101
+ * sets both halves from one chosen deal and clears both together; these two remain what they became
102
+ * in item 18, a read-only audit of what the pair actually holds, sitting under a human-readable name.
103
+ *
104
+ * The SECTION is likewise kept rather than hidden (item 18 asked for it gone, on the premise that
105
+ * the hero's Source Deal stat replaces it). With #219 that premise becomes true for deals — but the
106
+ * pair is polymorphic and the stat renders only what it can resolve, so the ids stay as the one
107
+ * place a reader can see the provenance verbatim, which is item 3 of #219.
94
108
  */
95
109
  readonly Fields: ContractFieldSpec[];
110
+ /** Options for the picker. Never read directly — go through the `Deals` getter, which loads. */
111
+ private _deals;
112
+ /** Bound to the combobox. Mirrors `CreatingRecordID`, and is '' whenever the source is not a deal. */
113
+ PickedDealID: string;
114
+ Loading: boolean;
115
+ /** Why the list is empty, when the reason is a failure rather than genuinely nothing. */
116
+ LoadError: string;
117
+ /** The pair names a record of some OTHER entity — surfaced rather than silently shown as blank. */
118
+ ForeignSource: boolean;
119
+ /** This contract arrived with provenance already recorded, so re-pointing takes a second click. */
120
+ Locked: boolean;
121
+ /** Label of the deal currently linked, for the locked line. */
122
+ SelectedLabel: string;
123
+ /**
124
+ * Which contract the picker was loaded for — not merely whether it was.
125
+ *
126
+ * The form reuses one component instance as it navigates, so a boolean leaves the PREVIOUS
127
+ * contract's candidates in the dropdown: a list scoped to the previous customer, which is a wrong
128
+ * list rather than a stale one. Same defect, same fix, as the Supersedes picker (contracts#28
129
+ * item 23).
130
+ */
131
+ private loadedFor;
132
+ private searchTimer;
133
+ /**
134
+ * Is there a Deals entity this user can see?
135
+ *
136
+ * Resolved from METADATA BY NAME, never imported: sales depends on contracts, so this app may not
137
+ * depend on sales (see `MJC_FOREIGN_ENTITIES.Deal`). A host without sales installed, or a user
138
+ * without read permission, simply gets no picker — the read-only ids and the hint below say so
139
+ * rather than rendering a control that can find nothing.
140
+ */
141
+ get DealLookupAvailable(): boolean;
142
+ /**
143
+ * Whether to render the lookup — AND the panel's single load trigger.
144
+ *
145
+ * `BaseFormPanel` has no lifecycle hook and the slot host sets `Record` before view init, so the
146
+ * first template read is the earliest reliable moment to do per-record work. This is the FIRST
147
+ * thing the template reads, which is the whole reason the trigger lives here rather than on
148
+ * `Deals`: the options are read inside the unlocked branch only, so a contract that arrives with
149
+ * provenance would never read them, `syncFromRecord()` would never run, and `Locked` would never
150
+ * become true — the guard silently absent on exactly the records it exists to protect.
151
+ *
152
+ * Keyed on the record so navigating the form to another contract re-syncs and reloads.
153
+ */
154
+ get ShowLookup(): boolean;
155
+ /** The candidate deals. Loaded by {@link ShowLookup}; this is a plain read. */
156
+ get Deals(): DealChoice[];
157
+ /**
158
+ * What the locked line says about the existing link.
159
+ *
160
+ * Deliberately does NOT claim the Close Won automation set it: nothing on the row records who
161
+ * did, and a contract linked by hand, saved and reopened arrives locked the same way. The panel
162
+ * says what it can actually see — the deal's name when the list has it, that the source is not a
163
+ * deal when the entity half says so, and otherwise nothing more than that something is linked.
164
+ * The raw ids sit directly below either way.
165
+ */
166
+ get LockedSummary(): string;
167
+ /** Release the re-point guard. Deliberate, and only ever by a click. */
168
+ Unlock(): void;
169
+ /**
170
+ * Take a chosen deal — and write BOTH halves of the pair, always.
171
+ *
172
+ * This is the whole reason the control exists. There is no path here that sets one column: a
173
+ * chosen deal writes the Deals entity id together with the deal's own id, and an empty selection
174
+ * goes through {@link ClearSource}, which empties both. The database's both-or-neither constraint
175
+ * (and the validator CodeGen derives from it) can therefore never be the thing that reports a
176
+ * mistake this form allowed a person to make.
177
+ */
178
+ PickDeal(dealID: string | null | undefined): void;
179
+ /** Empty BOTH halves. The constraint's other legal state, and #219's third acceptance criterion. */
180
+ ClearSource(): void;
181
+ /**
182
+ * Re-query as the user types, debounced.
183
+ *
184
+ * SERVER-SIDE, with the combobox's own `Filterable` off. Client filtering would need every deal in
185
+ * the database loaded to be correct, and it filters on the option LABEL — so a search that matched
186
+ * a customer whose name the label abbreviates would hide rows the server just returned. One
187
+ * authority for what matches, and it is the query.
188
+ */
189
+ Search(text: string): void;
190
+ /** The Deals entity's id, or null when this installation has no such entity. */
191
+ private dealEntityID;
192
+ /**
193
+ * Read the record's pair into the control's own state.
194
+ *
195
+ * The pair is POLYMORPHIC, so "there is a `CreatingRecordID`" does not mean "a deal is selected".
196
+ * Pre-selecting on the record id alone would show an unrelated record's id as the chosen deal; the
197
+ * entity half has to agree first, and when it does not, `ForeignSource` says so out loud.
198
+ *
199
+ * `Locked` is captured HERE — from what the record ARRIVED with — and never recomputed live. A
200
+ * live "already set, so lock it" would re-lock the instant a user picked a deal, which is the
201
+ * guard eating the very edit it was there to confirm.
202
+ */
203
+ private syncFromRecord;
204
+ /**
205
+ * Load the options.
206
+ *
207
+ * With nothing typed this is the contract's customer's deals — #219 item 2's "prefer deals for the
208
+ * contract's customer organization" — ORed with the deal already linked, so a contract pointed at
209
+ * a deal outside its customer still shows what it is pointed AT rather than a blank box. Typing
210
+ * widens the search to every deal by name, number or customer. The clauses themselves live in
211
+ * `@mj-biz-apps/contracts-entities`, where they can be unit-tested without Angular.
212
+ */
213
+ private load;
96
214
  static ɵfac: i0.ɵɵFactoryDeclaration<MJCContractProvenanceFieldsPanel, never>;
97
215
  static ɵcmp: i0.ɵɵComponentDeclaration<MJCContractProvenanceFieldsPanel, "mjc-contract-provenance-panel", never, {}, {}, never, never, true, never>;
98
216
  }
@@ -1 +1 @@
1
- {"version":3,"file":"contract-form.panels.d.ts","sourceRoot":"","sources":["../../../src/lib/form-panels/contract-form.panels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract-form.panels.d.ts","sourceRoot":"","sources":["../../../src/lib/form-panels/contract-form.panels.ts"],"names":[],"mappings":"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"}