@mj-biz-apps/contracts-core-entities-server 0.7.2 → 0.8.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.
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * @module @mj-biz-apps/contracts-core-entities-server
9
9
  */
10
- import { BaseEntity, type EntityDeleteOptions, ValidationResult } from '@memberjunction/core';
10
+ import { BaseEntity, type EntityDeleteOptions, type PlatformSQL, ValidationResult } from '@memberjunction/core';
11
11
  import { ContractEntity } from '@mj-biz-apps/contracts-entities';
12
12
  /**
13
13
  * The template a contract being CREATED should carry when its creator named none, or null to leave
@@ -25,7 +25,8 @@ import { ContractEntity } from '@mj-biz-apps/contracts-entities';
25
25
  * supplied is never replaced.
26
26
  *
27
27
  * NO CANDIDATE IS NOT AN ERROR HERE. It returns null, the field stays empty, and `ValidateAsync`
28
- * refuses the save with the type's own message — the same outcome as before this default existed.
28
+ * refuses the save — the same outcome as before this default existed, with a message
29
+ * ({@link TemplateRequiredMessage}) that says no usable template exists rather than asking for a choice.
29
30
  *
30
31
  * Takes its two reads as callbacks so a unit test can assert which of them run without a provider.
31
32
  * The type is read only when the field is writable, so a saved contract pays nothing.
@@ -35,6 +36,19 @@ export declare function ResolveServerDefaultTemplate(state: {
35
36
  contractTypeID: string | null | undefined;
36
37
  currentTemplateID: string | null | undefined;
37
38
  }, readTemplateRequired: () => Promise<boolean>, readCurrentTemplateID: () => Promise<string | null>): Promise<string | null>;
39
+ /**
40
+ * The R-4 refusal for a contract whose type requires a template and carries none.
41
+ *
42
+ * WHY TWO MESSAGES. A fresh install ships no template — `metadata/` carries template TYPES, never one
43
+ * organisation's agreement (docs/database-migrations.md) — so until someone publishes one, every
44
+ * contract of a template-requiring type is refused, including one created by another app with no form
45
+ * to choose from. "Choose the template" names a choice that does not exist; the message has to say
46
+ * what to set up instead (#95).
47
+ *
48
+ * `usableTemplateExists` is the same question the server default asks: is there a Published template
49
+ * with a document or source URL.
50
+ */
51
+ export declare function TemplateRequiredMessage(typeName: string, usableTemplateExists: boolean): string;
38
52
  /**
39
53
  * Whether a foreign key is being CHOSEN right now, as opposed to merely being present.
40
54
  *
@@ -53,15 +67,49 @@ export declare function ResolveServerDefaultTemplate(state: {
53
67
  * would report a change on a record nobody touched.
54
68
  */
55
69
  export declare function IsNewlySelected(entity: BaseEntity, fieldName: string): boolean;
70
+ /**
71
+ * The call that mints a contract number, one form per database.
72
+ *
73
+ * SQL Server: `spAssignNextContractNumber` is a procedure with one OUTPUT parameter, which only a
74
+ * T-SQL batch can read — DECLARE, EXEC … OUTPUT, SELECT.
75
+ *
76
+ * PostgreSQL: a function of the same name, taking nothing and returning the formatted number, ships
77
+ * in the PostgreSQL baseline (`migrations-pg/`). A PostgreSQL function is called from a SELECT, so
78
+ * the call shape differs even though the object and its contract do not. The schema is unquoted and
79
+ * the function name quoted, the converter's convention: it folds the schema to lowercase and keeps
80
+ * object names' case. The alias is quoted so the row key keeps its case instead of folding to
81
+ * `contractnumber`.
82
+ */
83
+ export declare const ASSIGN_CONTRACT_NUMBER_SQL: PlatformSQL;
84
+ /**
85
+ * The R-3 cycle probe: walk up `column` from `startID` and return the chain if it reaches `selfID`.
86
+ *
87
+ * Same walk on both databases; PostgreSQL needs `WITH RECURSIVE`, `||` for concatenation, `LIMIT 1`
88
+ * and quoted identifiers (the converter quotes table and column names). The aliases are quoted so the
89
+ * row keys stay `Chain` and `Depth` instead of folding to lowercase.
90
+ *
91
+ * Callers check both IDs against `UUID_SHAPE` first; `column` comes from a fixed internal list.
92
+ */
93
+ export declare function lineageProbeSQL(column: 'ParentContractID' | 'SupersededByContractID', startID: string, selfID: string): PlatformSQL;
94
+ /**
95
+ * The R-4 count: how many of `contractID`'s modifications cite a provision of `templateID`.
96
+ *
97
+ * A `RunView` cannot replace this: the modifications view carries no template column, so the filter
98
+ * needs a subquery, and that subquery would be dialect-specific too. `COUNT(*)` comes back as a
99
+ * string from the PostgreSQL driver (it is a bigint), which the caller's `Number()` handles.
100
+ *
101
+ * Callers check both IDs against `UUID_SHAPE` first.
102
+ */
103
+ export declare function modificationsAgainstTemplateSQL(contractID: string, templateID: string): PlatformSQL;
56
104
  export declare class ContractEntityServer extends ContractEntity {
57
105
  /**
58
106
  * Mint `ContractNumber` on first save, default an empty `ContractTemplateID` when the type requires
59
107
  * one (see {@link ResolveServerDefaultTemplate}), then persist.
60
108
  *
61
- * WHY THE NUMBER IS MINTED HERE and not defaulted in SQL. It comes from a singleton counter that
62
- * has to be taken under a lock inside the save's own transaction, so a rollback releases the
63
- * number instead of burning it. A column default cannot do that, and a client cannot be trusted
64
- * with it.
109
+ * WHY THE NUMBER IS MINTED HERE and not defaulted in SQL. It comes from the `seq_ContractNumber`
110
+ * sequence through `spAssignNextContractNumber` (see {@link assignContractNumber}), and a column
111
+ * default cannot be used: it stops spCreateContract from compiling (MJ#4000). A client cannot be
112
+ * trusted with it.
65
113
  *
66
114
  * Contracts needs no `SkipRelatedCollections` dance, unlike orders: nothing here prepares child
67
115
  * rows before the graph executor runs, so the plain save carries `Modifications` with it.
@@ -102,7 +150,7 @@ export declare class ContractEntityServer extends ContractEntity {
102
150
  * column whose values INVERT the rule when read in the wrong order is a column that will
103
151
  * eventually be read in the wrong order. Now two booleans, mutually exclusive by
104
152
  * `CK_ContractType_RootOrChild`, and "both false" means unrestricted — a real and in fact majority
105
- * state (V202608200300).
153
+ * state.
106
154
  *
107
155
  * Both placement directions are enforced, because a rule that only ever checks one of them is half
108
156
  * decoration: `MustBeChild` refuses a missing parent (a change order that amends nothing would
@@ -379,23 +427,24 @@ export declare class ContractEntityServer extends ContractEntity {
379
427
  * number, and the collision would surface later as a unique-index violation on the insert rather
380
428
  * than as a serialised wait.
381
429
  *
382
- * So the lock stays in the database, in a DATABASE OBJECT rather than a TypeScript string.
383
- * `spAssignNextContractNumber` (V202608192200) holds the `HOLDLOCK, UPDLOCK` and the format; this
384
- * method is one dialect-free `EXEC`. That is accounting's pattern, adopted rather than invented —
385
- * `SequenceService.ts` there keeps `spAssignNextJournalEntryNumber` at DB level for the same
386
- * stated reason. Orders still inlines the same UPDATE in four places, which is what this stops
430
+ * So the numbering stays in the database, in a DATABASE OBJECT rather than a TypeScript string.
431
+ * `spAssignNextContractNumber` takes `NEXT VALUE FOR seq_ContractNumber`, which is atomic and needs
432
+ * no lock, and applies the format; this method is one call. That is accounting's pattern, adopted
433
+ * rather than invented — `SequenceService.ts` there keeps `spAssignNextJournalEntryNumber` at DB
434
+ * level for the same stated reason. Orders still inlines the same UPDATE in four places, which is what this stops
387
435
  * doing.
388
436
  *
389
- * It also makes the PostgreSQL port a database exercise: write a PG function with this name and
390
- * signature and no application code changes.
437
+ * The PostgreSQL port keeps the name and the contract but not the call: a procedure's OUTPUT
438
+ * parameter is read through a T-SQL batch, and a PostgreSQL function through a SELECT. So the
439
+ * provider picks the form (`ASSIGN_CONTRACT_NUMBER_SQL`, resolved by `PlatformKey`) — sending the
440
+ * T-SQL batch to PostgreSQL is what failed every new contract's save there (#88).
391
441
  *
392
442
  * `isMutation: true` matters and was missing while this was inline: MJ's SQL-statement logging
393
443
  * uses it to know a statement CHANGED data, which is what lets a logging session capture the
394
444
  * mutation. `description` names the operation in that log.
395
445
  *
396
- * ⚠ NOT gap-free. On a standalone save the number is consumed before the row's own transaction
397
- * opens, so a later failure has already spent it; inside a graph save a rollback releases it. The
398
- * unique index is the real guard.
446
+ * ⚠ NOT gap-free. A sequence value is spent when it is taken, and a rollback does not return it,
447
+ * so a save that fails after minting leaves a gap. The unique index is the real guard.
399
448
  */
400
449
  private assignContractNumber;
401
450
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ContractEntityServer.d.ts","sourceRoot":"","sources":["../src/ContractEntityServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACH,UAAU,EAEV,KAAK,mBAAmB,EAIxB,gBAAgB,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACH,cAAc,EAKjB,MAAM,iCAAiC,CAAC;AAGzC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,4BAA4B,CAC9C,KAAK,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,EACpH,oBAAoB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAC5C,qBAAqB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GACpD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAK9E;AAqBD,qBACa,oBAAqB,SAAQ,cAAc;IACpD;;;;;;;;;;;OAWG;IACmB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAoC9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACmB,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAgFhE;;;;;;;;;;;;OAYG;IACmB,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAiC7E;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;YACW,uBAAuB;IAmCrC;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;;;;OAOG;YACW,mBAAmB;IA6BjC;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;YACW,mBAAmB;IA4CjC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH;;;;;;;;;;;;;;;;OAgBG;YACW,+BAA+B;YAqC/B,4BAA4B;IA6D1C;;;;;;;;;;;OAWG;YACW,kBAAkB;IA0BhC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,KAAK,EAAE,GAEb;IAED;;;;OAIG;YACW,qBAAqB;IAkBnC;;;;;;OAMG;YACW,QAAQ;IAkBtB;;;;OAIG;IACH,OAAO,CAAC,cAAc,CAAkD;IAExE;;;;;OAKG;YACW,iBAAiB;IAoB/B;;;;;;;;;;;;;;;;;;;OAmBG;YACW,sBAAsB;IAuDpC;;;;;;;;;;;;;;;OAeG;YACW,iCAAiC;IA0B/C,wFAAwF;YAC1E,4BAA4B;IAgB1C;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;YACW,oBAAoB;CAyBrC;AAED,yDAAyD;AACzD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
1
+ {"version":3,"file":"ContractEntityServer.d.ts","sourceRoot":"","sources":["../src/ContractEntityServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACH,UAAU,EAEV,KAAK,mBAAmB,EAExB,KAAK,WAAW,EAGhB,gBAAgB,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACH,cAAc,EAKjB,MAAM,iCAAiC,CAAC;AAGzC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,4BAA4B,CAC9C,KAAK,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,EACpH,oBAAoB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAC5C,qBAAqB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GACpD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,GAAG,MAAM,CAW/F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAK9E;AAqBD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,0BAA0B,EAAE,WAKxC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC3B,MAAM,EAAE,kBAAkB,GAAG,wBAAwB,EACrD,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACf,WAAW,CA6Bb;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAWnG;AAED,qBACa,oBAAqB,SAAQ,cAAc;IACpD;;;;;;;;;;;OAWG;IACmB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAoC9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACmB,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAiFhE;;;;;;;;;;;;OAYG;IACmB,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAiC7E;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;YACW,uBAAuB;IAmCrC;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;;;;OAOG;YACW,mBAAmB;IA6BjC;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;YACW,mBAAmB;IA4CjC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH;;;;;;;;;;;;;;;;OAgBG;YACW,+BAA+B;YAqC/B,4BAA4B;IA6D1C;;;;;;;;;;;OAWG;YACW,kBAAkB;IAchC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,KAAK,EAAE,GAEb;IAED;;;;OAIG;YACW,qBAAqB;IAkBnC;;;;;;OAMG;YACW,QAAQ;IAkBtB;;;;OAIG;IACH,OAAO,CAAC,cAAc,CAAkD;IAExE;;;;;OAKG;YACW,iBAAiB;IAoB/B;;;;;;;;;;;;;;;;;;;OAmBG;YACW,sBAAsB;IAuDpC;;;;;;;;;;;;;;;OAeG;YACW,iCAAiC;IA0B/C,wFAAwF;YAC1E,4BAA4B;IAa1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;YACW,oBAAoB;CAuBrC;AAED,yDAAyD;AACzD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -33,7 +33,8 @@ import { GuardedDelete, plural } from './delete-guard.js';
33
33
  * supplied is never replaced.
34
34
  *
35
35
  * NO CANDIDATE IS NOT AN ERROR HERE. It returns null, the field stays empty, and `ValidateAsync`
36
- * refuses the save with the type's own message — the same outcome as before this default existed.
36
+ * refuses the save — the same outcome as before this default existed, with a message
37
+ * ({@link TemplateRequiredMessage}) that says no usable template exists rather than asking for a choice.
37
38
  *
38
39
  * Takes its two reads as callbacks so a unit test can assert which of them run without a provider.
39
40
  * The type is read only when the field is writable, so a saved contract pays nothing.
@@ -48,6 +49,26 @@ export async function ResolveServerDefaultTemplate(state, readTemplateRequired,
48
49
  return null;
49
50
  return (await readCurrentTemplateID()) ?? null;
50
51
  }
52
+ /**
53
+ * The R-4 refusal for a contract whose type requires a template and carries none.
54
+ *
55
+ * WHY TWO MESSAGES. A fresh install ships no template — `metadata/` carries template TYPES, never one
56
+ * organisation's agreement (docs/database-migrations.md) — so until someone publishes one, every
57
+ * contract of a template-requiring type is refused, including one created by another app with no form
58
+ * to choose from. "Choose the template" names a choice that does not exist; the message has to say
59
+ * what to set up instead (#95).
60
+ *
61
+ * `usableTemplateExists` is the same question the server default asks: is there a Published template
62
+ * with a document or source URL.
63
+ */
64
+ export function TemplateRequiredMessage(typeName, usableTemplateExists) {
65
+ if (usableTemplateExists) {
66
+ return (`A ${typeName} must reference the agreement version it incorporates. Choose the template ` +
67
+ `whose standard terms this contract is written against.`);
68
+ }
69
+ return (`A ${typeName} must reference the agreement version it incorporates, and no Published template ` +
70
+ `with a document or source URL exists yet. Publish one under Templates, then save again.`);
71
+ }
51
72
  /**
52
73
  * Whether a foreign key is being CHOSEN right now, as opposed to merely being present.
53
74
  *
@@ -77,6 +98,85 @@ export function IsNewlySelected(entity, fieldName) {
77
98
  const RETIRED = 'Inactive';
78
99
  /** Guards an ID before it is interpolated into the R-3 lineage walk. */
79
100
  const UUID_SHAPE = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
101
+ /**
102
+ * The call that mints a contract number, one form per database.
103
+ *
104
+ * SQL Server: `spAssignNextContractNumber` is a procedure with one OUTPUT parameter, which only a
105
+ * T-SQL batch can read — DECLARE, EXEC … OUTPUT, SELECT.
106
+ *
107
+ * PostgreSQL: a function of the same name, taking nothing and returning the formatted number, ships
108
+ * in the PostgreSQL baseline (`migrations-pg/`). A PostgreSQL function is called from a SELECT, so
109
+ * the call shape differs even though the object and its contract do not. The schema is unquoted and
110
+ * the function name quoted, the converter's convention: it folds the schema to lowercase and keeps
111
+ * object names' case. The alias is quoted so the row key keeps its case instead of folding to
112
+ * `contractnumber`.
113
+ */
114
+ export const ASSIGN_CONTRACT_NUMBER_SQL = {
115
+ default: `DECLARE @contractNumber NVARCHAR(50);
116
+ EXEC __mj_BizAppsContracts.spAssignNextContractNumber @ContractNumber = @contractNumber OUTPUT;
117
+ SELECT @contractNumber AS ContractNumber;`,
118
+ postgresql: `SELECT __mj_BizAppsContracts."spAssignNextContractNumber"() AS "ContractNumber";`,
119
+ };
120
+ /**
121
+ * The R-3 cycle probe: walk up `column` from `startID` and return the chain if it reaches `selfID`.
122
+ *
123
+ * Same walk on both databases; PostgreSQL needs `WITH RECURSIVE`, `||` for concatenation, `LIMIT 1`
124
+ * and quoted identifiers (the converter quotes table and column names). The aliases are quoted so the
125
+ * row keys stay `Chain` and `Depth` instead of folding to lowercase.
126
+ *
127
+ * Callers check both IDs against `UUID_SHAPE` first; `column` comes from a fixed internal list.
128
+ */
129
+ export function lineageProbeSQL(column, startID, selfID) {
130
+ return {
131
+ default: `WITH lineage AS (
132
+ SELECT [ID], [${column}], 1 AS Depth,
133
+ CAST([ContractNumber] AS NVARCHAR(MAX)) AS Chain
134
+ FROM __mj_BizAppsContracts.[Contract]
135
+ WHERE [ID] = '${startID}'
136
+ UNION ALL
137
+ SELECT c.[ID], c.[${column}], l.Depth + 1,
138
+ CAST(l.Chain + N' -> ' + c.[ContractNumber] AS NVARCHAR(MAX))
139
+ FROM __mj_BizAppsContracts.[Contract] c
140
+ JOIN lineage l ON c.[ID] = l.[${column}]
141
+ WHERE l.Depth < 50
142
+ )
143
+ SELECT TOP 1 Chain, Depth FROM lineage WHERE [ID] = '${selfID}' ORDER BY Depth;`,
144
+ postgresql: `WITH RECURSIVE lineage AS (
145
+ SELECT "ID", "${column}", 1 AS "Depth",
146
+ "ContractNumber"::text AS "Chain"
147
+ FROM __mj_BizAppsContracts."Contract"
148
+ WHERE "ID" = '${startID}'
149
+ UNION ALL
150
+ SELECT c."ID", c."${column}", l."Depth" + 1,
151
+ l."Chain" || ' -> ' || c."ContractNumber"
152
+ FROM __mj_BizAppsContracts."Contract" c
153
+ JOIN lineage l ON c."ID" = l."${column}"
154
+ WHERE l."Depth" < 50
155
+ )
156
+ SELECT "Chain", "Depth" FROM lineage WHERE "ID" = '${selfID}' ORDER BY "Depth" LIMIT 1;`,
157
+ };
158
+ }
159
+ /**
160
+ * The R-4 count: how many of `contractID`'s modifications cite a provision of `templateID`.
161
+ *
162
+ * A `RunView` cannot replace this: the modifications view carries no template column, so the filter
163
+ * needs a subquery, and that subquery would be dialect-specific too. `COUNT(*)` comes back as a
164
+ * string from the PostgreSQL driver (it is a bigint), which the caller's `Number()` handles.
165
+ *
166
+ * Callers check both IDs against `UUID_SHAPE` first.
167
+ */
168
+ export function modificationsAgainstTemplateSQL(contractID, templateID) {
169
+ return {
170
+ default: `SELECT COUNT(*) AS Hits
171
+ FROM __mj_BizAppsContracts.[ContractTemplateModification] m
172
+ JOIN __mj_BizAppsContracts.[ContractTemplateProvision] p ON p.[ID] = m.[ContractTemplateProvisionID]
173
+ WHERE m.[ContractID] = '${contractID}' AND p.[ContractTemplateID] = '${templateID}';`,
174
+ postgresql: `SELECT COUNT(*) AS "Hits"
175
+ FROM __mj_BizAppsContracts."ContractTemplateModification" m
176
+ JOIN __mj_BizAppsContracts."ContractTemplateProvision" p ON p."ID" = m."ContractTemplateProvisionID"
177
+ WHERE m."ContractID" = '${contractID}' AND p."ContractTemplateID" = '${templateID}';`,
178
+ };
179
+ }
80
180
  let ContractEntityServer = class ContractEntityServer extends ContractEntity {
81
181
  constructor() {
82
182
  super(...arguments);
@@ -91,10 +191,10 @@ let ContractEntityServer = class ContractEntityServer extends ContractEntity {
91
191
  * Mint `ContractNumber` on first save, default an empty `ContractTemplateID` when the type requires
92
192
  * one (see {@link ResolveServerDefaultTemplate}), then persist.
93
193
  *
94
- * WHY THE NUMBER IS MINTED HERE and not defaulted in SQL. It comes from a singleton counter that
95
- * has to be taken under a lock inside the save's own transaction, so a rollback releases the
96
- * number instead of burning it. A column default cannot do that, and a client cannot be trusted
97
- * with it.
194
+ * WHY THE NUMBER IS MINTED HERE and not defaulted in SQL. It comes from the `seq_ContractNumber`
195
+ * sequence through `spAssignNextContractNumber` (see {@link assignContractNumber}), and a column
196
+ * default cannot be used: it stops spCreateContract from compiling (MJ#4000). A client cannot be
197
+ * trusted with it.
98
198
  *
99
199
  * Contracts needs no `SkipRelatedCollections` dance, unlike orders: nothing here prepares child
100
200
  * rows before the graph executor runs, so the plain save carries `Modifications` with it.
@@ -103,7 +203,7 @@ let ContractEntityServer = class ContractEntityServer extends ContractEntity {
103
203
  try {
104
204
  // MINT WHENEVER THE INCOMING VALUE IS ABSENT, and treat blank as absent.
105
205
  //
106
- // The column is NULLABLE as of V202608211200 — MJ cannot express "NOT NULL, assigned by the
206
+ // The column is NULLABLE (baseline) — MJ cannot express "NOT NULL, assigned by the
107
207
  // server on insert" (MJ#4001), and both workarounds broke creation: a DB DEFAULT stops
108
208
  // spCreateContract from compiling (MJ#4000), and marking the field read-only drops it from
109
209
  // the insert payload entirely. So the database no longer holds this invariant and THIS LINE
@@ -166,7 +266,7 @@ let ContractEntityServer = class ContractEntityServer extends ContractEntity {
166
266
  * column whose values INVERT the rule when read in the wrong order is a column that will
167
267
  * eventually be read in the wrong order. Now two booleans, mutually exclusive by
168
268
  * `CK_ContractType_RootOrChild`, and "both false" means unrestricted — a real and in fact majority
169
- * state (V202608200300).
269
+ * state.
170
270
  *
171
271
  * Both placement directions are enforced, because a rule that only ever checks one of them is half
172
272
  * decoration: `MustBeChild` refuses a missing parent (a change order that amends nothing would
@@ -184,7 +284,7 @@ let ContractEntityServer = class ContractEntityServer extends ContractEntity {
184
284
  if (this.ContractTypeID) {
185
285
  const rule = await this.typeRule();
186
286
  // R-4 — WHERE IN THE TREE this type may sit. Two booleans replacing the three-state
187
- // `ParentStatusRequirement` string (V202608200300). Both false = unrestricted, which is what
287
+ // `ParentStatusRequirement` string. Both false = unrestricted, which is what
188
288
  // two of the four seeded types want, and the CHECK guarantees they are never both true.
189
289
  if (rule?.MustBeChild && !this.ParentContractID) {
190
290
  result.Success = false;
@@ -201,10 +301,11 @@ let ContractEntityServer = class ContractEntityServer extends ContractEntity {
201
301
  // R-4 — DOES THIS TYPE NEED ITS OWN PAPER. A separate axis from placement: a type could
202
302
  // want any combination, which is why `TemplateRequired` is its own column rather than
203
303
  // inferred from the flags above.
304
+ //
305
+ // The current-template read runs only on this refusal path, so a save that passes pays nothing.
204
306
  if (rule?.TemplateRequired && !this.ContractTemplateID) {
205
307
  result.Success = false;
206
- result.Errors.push(new ValidationErrorInfo('ContractTemplateID', `A ${rule.Name} must reference the agreement version it incorporates. Choose the template ` +
207
- `whose standard terms this contract is written against.`, this.ContractTemplateID, ValidationErrorType.Failure));
308
+ result.Errors.push(new ValidationErrorInfo('ContractTemplateID', TemplateRequiredMessage(rule.Name, !!(await this.currentTemplateID())), this.ContractTemplateID, ValidationErrorType.Failure));
208
309
  }
209
310
  }
210
311
  await this.refuseClearingAReferencedTemplate(result);
@@ -572,19 +673,7 @@ let ContractEntityServer = class ContractEntityServer extends ContractEntity {
572
673
  if (!UUID_SHAPE.test(startID) || !UUID_SHAPE.test(this.ID)) {
573
674
  throw new Error(`Refusing to walk the ${column} lineage: '${startID}' or '${this.ID}' is not a UUID.`);
574
675
  }
575
- const rows = await this.db.ExecuteSQL(`WITH lineage AS (
576
- SELECT [ID], [${column}], 1 AS Depth,
577
- CAST([ContractNumber] AS NVARCHAR(MAX)) AS Chain
578
- FROM __mj_BizAppsContracts.[Contract]
579
- WHERE [ID] = '${startID}'
580
- UNION ALL
581
- SELECT c.[ID], c.[${column}], l.Depth + 1,
582
- CAST(l.Chain + N' -> ' + c.[ContractNumber] AS NVARCHAR(MAX))
583
- FROM __mj_BizAppsContracts.[Contract] c
584
- JOIN lineage l ON c.[ID] = l.[${column}]
585
- WHERE l.Depth < 50
586
- )
587
- SELECT TOP 1 Chain, Depth FROM lineage WHERE [ID] = '${this.ID}' ORDER BY Depth;`, undefined, { isMutation: false, description: `R-3 ${column} cycle probe` }, this.ContextCurrentUser);
676
+ const rows = await this.db.ExecuteSQL(this.db.ResolveSQL(lineageProbeSQL(column, startID, this.ID)), undefined, { isMutation: false, description: `R-3 ${column} cycle probe` }, this.ContextCurrentUser);
588
677
  const hit = rows?.[0];
589
678
  return hit ? `${this.ContractNumber ?? this.ID} -> ${hit.Chain}` : null;
590
679
  }
@@ -711,7 +800,7 @@ let ContractEntityServer = class ContractEntityServer extends ContractEntity {
711
800
  `terms it names — a contract cannot incorporate terms that are not available. Add a URL or ` +
712
801
  `attach the agreement document to that template first.`, this.ContractTemplateID, ValidationErrorType.Failure));
713
802
  }
714
- // V202608200900 — and the version must be PUBLISHED. A draft is still being authored: its
803
+ // And the version must be PUBLISHED. A draft is still being authored: its
715
804
  // provisions can be added to, edited and removed freely, so a contract pointing at one would
716
805
  // have its standard terms change underneath it. This is the other half of what makes the
717
806
  // publication freeze meaningful — the freeze protects referenced versions, and this ensures a
@@ -767,10 +856,7 @@ let ContractEntityServer = class ContractEntityServer extends ContractEntity {
767
856
  if (!UUID_SHAPE.test(templateID) || !UUID_SHAPE.test(this.ID)) {
768
857
  throw new Error(`Refusing to count modifications: '${templateID}' or '${this.ID}' is not a UUID.`);
769
858
  }
770
- const rows = await this.db.ExecuteSQL(`SELECT COUNT(*) AS Hits
771
- FROM __mj_BizAppsContracts.[ContractTemplateModification] m
772
- JOIN __mj_BizAppsContracts.[ContractTemplateProvision] p ON p.[ID] = m.[ContractTemplateProvisionID]
773
- WHERE m.[ContractID] = '${this.ID}' AND p.[ContractTemplateID] = '${templateID}';`, undefined, { isMutation: false, description: 'R-4 modifications-against-template count' }, this.ContextCurrentUser);
859
+ const rows = await this.db.ExecuteSQL(this.db.ResolveSQL(modificationsAgainstTemplateSQL(this.ID, templateID)), undefined, { isMutation: false, description: 'R-4 modifications-against-template count' }, this.ContextCurrentUser);
774
860
  return Number(rows?.[0]?.Hits ?? 0);
775
861
  }
776
862
  /**
@@ -783,29 +869,28 @@ let ContractEntityServer = class ContractEntityServer extends ContractEntity {
783
869
  * number, and the collision would surface later as a unique-index violation on the insert rather
784
870
  * than as a serialised wait.
785
871
  *
786
- * So the lock stays in the database, in a DATABASE OBJECT rather than a TypeScript string.
787
- * `spAssignNextContractNumber` (V202608192200) holds the `HOLDLOCK, UPDLOCK` and the format; this
788
- * method is one dialect-free `EXEC`. That is accounting's pattern, adopted rather than invented —
789
- * `SequenceService.ts` there keeps `spAssignNextJournalEntryNumber` at DB level for the same
790
- * stated reason. Orders still inlines the same UPDATE in four places, which is what this stops
872
+ * So the numbering stays in the database, in a DATABASE OBJECT rather than a TypeScript string.
873
+ * `spAssignNextContractNumber` takes `NEXT VALUE FOR seq_ContractNumber`, which is atomic and needs
874
+ * no lock, and applies the format; this method is one call. That is accounting's pattern, adopted
875
+ * rather than invented — `SequenceService.ts` there keeps `spAssignNextJournalEntryNumber` at DB
876
+ * level for the same stated reason. Orders still inlines the same UPDATE in four places, which is what this stops
791
877
  * doing.
792
878
  *
793
- * It also makes the PostgreSQL port a database exercise: write a PG function with this name and
794
- * signature and no application code changes.
879
+ * The PostgreSQL port keeps the name and the contract but not the call: a procedure's OUTPUT
880
+ * parameter is read through a T-SQL batch, and a PostgreSQL function through a SELECT. So the
881
+ * provider picks the form (`ASSIGN_CONTRACT_NUMBER_SQL`, resolved by `PlatformKey`) — sending the
882
+ * T-SQL batch to PostgreSQL is what failed every new contract's save there (#88).
795
883
  *
796
884
  * `isMutation: true` matters and was missing while this was inline: MJ's SQL-statement logging
797
885
  * uses it to know a statement CHANGED data, which is what lets a logging session capture the
798
886
  * mutation. `description` names the operation in that log.
799
887
  *
800
- * ⚠ NOT gap-free. On a standalone save the number is consumed before the row's own transaction
801
- * opens, so a later failure has already spent it; inside a graph save a rollback releases it. The
802
- * unique index is the real guard.
888
+ * ⚠ NOT gap-free. A sequence value is spent when it is taken, and a rollback does not return it,
889
+ * so a save that fails after minting leaves a gap. The unique index is the real guard.
803
890
  */
804
891
  async assignContractNumber() {
805
- const rows = await this.db.ExecuteSQL(`DECLARE @contractNumber NVARCHAR(50);
806
- EXEC __mj_BizAppsContracts.spAssignNextContractNumber @ContractNumber = @contractNumber OUTPUT;
807
- SELECT @contractNumber AS ContractNumber;`,
808
- // No parameters: the sproc takes only an OUTPUT, declared in the batch above. Accounting
892
+ const rows = await this.db.ExecuteSQL(this.db.ResolveSQL(ASSIGN_CONTRACT_NUMBER_SQL),
893
+ // No parameters: the sproc takes only an OUTPUT, declared in the batch. Accounting
809
894
  // passes an OBJECT here because its sprocs take inputs and `ExecuteSQL` binds objects BY
810
895
  // NAME while an array binds positionally as @p0 — worth knowing before adding a parameter
811
896
  // to this call, and worth noting that the object form needs the SQLServerDataProvider type
@@ -814,7 +899,7 @@ let ContractEntityServer = class ContractEntityServer extends ContractEntity {
814
899
  const assigned = rows?.[0]?.ContractNumber;
815
900
  if (!assigned) {
816
901
  throw new Error(`Could not obtain the next contract number — spAssignNextContractNumber returned nothing. ` +
817
- `The number comes from the schema-owned SQL sequence seq_ContractNumber (V202608200200); ` +
902
+ `The number comes from the schema-owned SQL sequence seq_ContractNumber; ` +
818
903
  `check that the sequence and the procedure both exist in __mj_BizAppsContracts.`);
819
904
  }
820
905
  return assigned;
@@ -1 +1 @@
1
- {"version":3,"file":"ContractEntityServer.js","sourceRoot":"","sources":["../src/ContractEntityServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ContractEntityServer.js","sourceRoot":"","sources":["../src/ContractEntityServer.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,19 @@
9
9
  *
10
10
  * @module @mj-biz-apps/contracts-core-entities-server
11
11
  */
12
- import { ValidationResult } from '@memberjunction/core';
12
+ import { type PlatformSQL, ValidationResult } from '@memberjunction/core';
13
13
  import { ContractTemplateModificationEntity } from '@mj-biz-apps/contracts-entities';
14
+ /**
15
+ * The provision's template against the templates on the contract's ancestor chain, one form per
16
+ * database.
17
+ *
18
+ * PostgreSQL needs `WITH RECURSIVE` and quoted identifiers. Its aliases are quoted too: unquoted,
19
+ * `InTree` would come back as `intree`, the caller's `row.InTree === 1` would never hold, and every
20
+ * modification under a templated tree would be refused.
21
+ *
22
+ * Callers check both IDs against `UUID_SHAPE` first.
23
+ */
24
+ export declare function provisionTemplateCheckSQL(contractID: string, provisionID: string): PlatformSQL;
14
25
  export declare class ContractTemplateModificationEntityServer extends ContractTemplateModificationEntity {
15
26
  /**
16
27
  * THE PROVISION MUST BELONG TO A TEMPLATE AT OR ABOVE THIS CONTRACT IN THE TREE (R-4).
@@ -1 +1 @@
1
- {"version":3,"file":"ContractTemplateModificationEntityServer.d.ts","sourceRoot":"","sources":["../src/ContractTemplateModificationEntityServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAOH,gBAAgB,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAkB,kCAAkC,EAAE,MAAM,iCAAiC,CAAC;AAYrG,qBACa,wCAAyC,SAAQ,kCAAkC;IAC5F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACmB,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAqChE;;;;;;;;;;;;;;OAcG;YACW,qBAAqB;IAuBnC;;;;;;;;;;;;;;OAcG;IACmB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAe9C;;;;;;;;;;;;;;;OAeG;YACW,eAAe;IAkB7B;;;;;;;;;;;;;;OAcG;YACW,gCAAgC;IAkD9C,gGAAgG;IAChG,OAAO,KAAK,EAAE,GAEb;CACJ;AAED,yDAAyD;AACzD,wBAAgB,4CAA4C,IAAI,IAAI,CAEnE"}
1
+ {"version":3,"file":"ContractTemplateModificationEntityServer.d.ts","sourceRoot":"","sources":["../src/ContractTemplateModificationEntityServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAKH,KAAK,WAAW,EAGhB,gBAAgB,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAkB,kCAAkC,EAAE,MAAM,iCAAiC,CAAC;AAKrG;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,CAmD9F;AASD,qBACa,wCAAyC,SAAQ,kCAAkC;IAC5F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACmB,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAqChE;;;;;;;;;;;;;;OAcG;YACW,qBAAqB;IAuBnC;;;;;;;;;;;;;;OAcG;IACmB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAe9C;;;;;;;;;;;;;;;OAeG;YACW,eAAe;IAkB7B;;;;;;;;;;;;;;OAcG;YACW,gCAAgC;IA2B9C,gGAAgG;IAChG,OAAO,KAAK,EAAE,GAEb;CACJ;AAED,yDAAyD;AACzD,wBAAgB,4CAA4C,IAAI,IAAI,CAEnE"}
@@ -20,6 +20,68 @@ import { RegisterClass } from '@memberjunction/global';
20
20
  import { ContractTemplateModificationEntity } from '@mj-biz-apps/contracts-entities';
21
21
  /** Guards an ID before it is interpolated into the ancestor walk. */
22
22
  const UUID_SHAPE = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
23
+ /**
24
+ * The provision's template against the templates on the contract's ancestor chain, one form per
25
+ * database.
26
+ *
27
+ * PostgreSQL needs `WITH RECURSIVE` and quoted identifiers. Its aliases are quoted too: unquoted,
28
+ * `InTree` would come back as `intree`, the caller's `row.InTree === 1` would never hold, and every
29
+ * modification under a templated tree would be refused.
30
+ *
31
+ * Callers check both IDs against `UUID_SHAPE` first.
32
+ */
33
+ export function provisionTemplateCheckSQL(contractID, provisionID) {
34
+ return {
35
+ default: `WITH ancestry AS (
36
+ SELECT [ID], [ParentContractID], [ContractTemplateID], 1 AS Depth
37
+ FROM __mj_BizAppsContracts.[Contract]
38
+ WHERE [ID] = '${contractID}'
39
+ UNION ALL
40
+ SELECT c.[ID], c.[ParentContractID], c.[ContractTemplateID], a.Depth + 1
41
+ FROM __mj_BizAppsContracts.[Contract] c
42
+ JOIN ancestry a ON c.[ID] = a.[ParentContractID]
43
+ WHERE a.Depth < 50
44
+ ),
45
+ tmpl AS (
46
+ SELECT DISTINCT t.[ID], t.[Name]
47
+ FROM ancestry a
48
+ JOIN __mj_BizAppsContracts.[ContractTemplate] t ON t.[ID] = a.[ContractTemplateID]
49
+ )
50
+ SELECT
51
+ CAST(pt.[ID] AS NVARCHAR(36)) AS ProvisionTemplateID,
52
+ pt.[Name] AS ProvisionTemplate,
53
+ (SELECT STRING_AGG(x.[Name], N', ') FROM tmpl x) AS AncestorTemplates,
54
+ CASE WHEN EXISTS (SELECT 1 FROM tmpl x WHERE x.[ID] = pt.[ID])
55
+ THEN 1 ELSE 0 END AS InTree
56
+ FROM __mj_BizAppsContracts.[ContractTemplateProvision] p
57
+ JOIN __mj_BizAppsContracts.[ContractTemplate] pt ON pt.[ID] = p.[ContractTemplateID]
58
+ WHERE p.[ID] = '${provisionID}';`,
59
+ postgresql: `WITH RECURSIVE ancestry AS (
60
+ SELECT "ID", "ParentContractID", "ContractTemplateID", 1 AS "Depth"
61
+ FROM __mj_BizAppsContracts."Contract"
62
+ WHERE "ID" = '${contractID}'
63
+ UNION ALL
64
+ SELECT c."ID", c."ParentContractID", c."ContractTemplateID", a."Depth" + 1
65
+ FROM __mj_BizAppsContracts."Contract" c
66
+ JOIN ancestry a ON c."ID" = a."ParentContractID"
67
+ WHERE a."Depth" < 50
68
+ ),
69
+ tmpl AS (
70
+ SELECT DISTINCT t."ID", t."Name"
71
+ FROM ancestry a
72
+ JOIN __mj_BizAppsContracts."ContractTemplate" t ON t."ID" = a."ContractTemplateID"
73
+ )
74
+ SELECT
75
+ pt."ID"::text AS "ProvisionTemplateID",
76
+ pt."Name" AS "ProvisionTemplate",
77
+ (SELECT STRING_AGG(x."Name", ', ') FROM tmpl x) AS "AncestorTemplates",
78
+ CASE WHEN EXISTS (SELECT 1 FROM tmpl x WHERE x."ID" = pt."ID")
79
+ THEN 1 ELSE 0 END AS "InTree"
80
+ FROM __mj_BizAppsContracts."ContractTemplateProvision" p
81
+ JOIN __mj_BizAppsContracts."ContractTemplate" pt ON pt."ID" = p."ContractTemplateID"
82
+ WHERE p."ID" = '${provisionID}';`,
83
+ };
84
+ }
23
85
  /*
24
86
  * EXTENDS THE SHARED SUBCLASS, not the generated one. It used to extend the generated class directly,
25
87
  * which meant the server was the one tier that did NOT get the shared class's rules: a modification
@@ -193,30 +255,7 @@ let ContractTemplateModificationEntityServer = class ContractTemplateModificatio
193
255
  throw new Error(`Refusing to check the provision's template: '${this.ContractID}' or ` +
194
256
  `'${this.ContractTemplateProvisionID}' is not a UUID.`);
195
257
  }
196
- const rows = await this.db.ExecuteSQL(`WITH ancestry AS (
197
- SELECT [ID], [ParentContractID], [ContractTemplateID], 1 AS Depth
198
- FROM __mj_BizAppsContracts.[Contract]
199
- WHERE [ID] = '${this.ContractID}'
200
- UNION ALL
201
- SELECT c.[ID], c.[ParentContractID], c.[ContractTemplateID], a.Depth + 1
202
- FROM __mj_BizAppsContracts.[Contract] c
203
- JOIN ancestry a ON c.[ID] = a.[ParentContractID]
204
- WHERE a.Depth < 50
205
- ),
206
- tmpl AS (
207
- SELECT DISTINCT t.[ID], t.[Name]
208
- FROM ancestry a
209
- JOIN __mj_BizAppsContracts.[ContractTemplate] t ON t.[ID] = a.[ContractTemplateID]
210
- )
211
- SELECT
212
- CAST(pt.[ID] AS NVARCHAR(36)) AS ProvisionTemplateID,
213
- pt.[Name] AS ProvisionTemplate,
214
- (SELECT STRING_AGG(x.[Name], N', ') FROM tmpl x) AS AncestorTemplates,
215
- CASE WHEN EXISTS (SELECT 1 FROM tmpl x WHERE x.[ID] = pt.[ID])
216
- THEN 1 ELSE 0 END AS InTree
217
- FROM __mj_BizAppsContracts.[ContractTemplateProvision] p
218
- JOIN __mj_BizAppsContracts.[ContractTemplate] pt ON pt.[ID] = p.[ContractTemplateID]
219
- WHERE p.[ID] = '${this.ContractTemplateProvisionID}';`, undefined, { isMutation: false, description: 'R-4 provision-in-ancestor-templates check' }, this.ContextCurrentUser);
258
+ const rows = await this.db.ExecuteSQL(this.db.ResolveSQL(provisionTemplateCheckSQL(this.ContractID, this.ContractTemplateProvisionID)), undefined, { isMutation: false, description: 'R-4 provision-in-ancestor-templates check' }, this.ContextCurrentUser);
220
259
  const row = rows?.[0];
221
260
  // No provision row, or it is inside the tree: nothing to say.
222
261
  if (!row || row.InTree === 1)
@@ -1 +1 @@
1
- {"version":3,"file":"ContractTemplateModificationEntityServer.js","sourceRoot":"","sources":["../src/ContractTemplateModificationEntityServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ContractTemplateModificationEntityServer.js","sourceRoot":"","sources":["../src/ContractTemplateModificationEntityServer.ts"],"names":[],"mappings":"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"}
@@ -16,11 +16,11 @@
16
16
  * @module @mj-biz-apps/contracts-core-entities-server
17
17
  */
18
18
  import { type EntityDeleteOptions } from '@memberjunction/core';
19
- import { mjBizAppsContractsContractTemplateTypeEntity, mjBizAppsContractsContractTypeEntity } from '@mj-biz-apps/contracts-entities';
20
- export declare class ContractTypeEntityServer extends mjBizAppsContractsContractTypeEntity {
19
+ import { ContractTemplateTypeEntity, ContractTypeEntity } from '@mj-biz-apps/contracts-entities';
20
+ export declare class ContractTypeEntityServer extends ContractTypeEntity {
21
21
  Delete(options?: EntityDeleteOptions): Promise<boolean>;
22
22
  }
23
- export declare class ContractTemplateTypeEntityServer extends mjBizAppsContractsContractTemplateTypeEntity {
23
+ export declare class ContractTemplateTypeEntityServer extends ContractTemplateTypeEntity {
24
24
  Delete(options?: EntityDeleteOptions): Promise<boolean>;
25
25
  }
26
26
  /** Anti-tree-shake anchor — see the note in index.ts. */
@@ -1 +1 @@
1
- {"version":3,"file":"ContractTypeEntityServers.d.ts","sourceRoot":"","sources":["../src/ContractTypeEntityServers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EACH,4CAA4C,EAC5C,oCAAoC,EACvC,MAAM,iCAAiC,CAAC;AAMzC,qBACa,wBAAyB,SAAQ,oCAAoC;IACxD,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;CAehF;AAED,qBACa,gCAAiC,SAAQ,4CAA4C;IACxE,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;CAehF;AAED,yDAAyD;AACzD,wBAAgB,6BAA6B,IAAI,IAAI,CAGpD"}
1
+ {"version":3,"file":"ContractTypeEntityServers.d.ts","sourceRoot":"","sources":["../src/ContractTypeEntityServers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EACH,0BAA0B,EAC1B,kBAAkB,EACrB,MAAM,iCAAiC,CAAC;AAMzC,qBACa,wBAAyB,SAAQ,kBAAkB;IACtC,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;CAehF;AAED,qBACa,gCAAiC,SAAQ,0BAA0B;IACtD,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;CAehF;AAED,yDAAyD;AACzD,wBAAgB,6BAA6B,IAAI,IAAI,CAGpD"}
@@ -23,11 +23,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
23
23
  */
24
24
  import { BaseEntity } from '@memberjunction/core';
25
25
  import { RegisterClass } from '@memberjunction/global';
26
- import { mjBizAppsContractsContractTemplateTypeEntity, mjBizAppsContractsContractTypeEntity, } from '@mj-biz-apps/contracts-entities';
26
+ import { ContractTemplateTypeEntity, ContractTypeEntity, } from '@mj-biz-apps/contracts-entities';
27
27
  import { GuardedDelete, plural } from './delete-guard.js';
28
28
  /** How to retire instead of deleting — the same advice in both messages, written once. */
29
29
  const RETIRE_INSTEAD = `Retiring is what you want: set Status to Inactive, which stops it being offered for new records and leaves the existing ones working.`;
30
- let ContractTypeEntityServer = class ContractTypeEntityServer extends mjBizAppsContractsContractTypeEntity {
30
+ let ContractTypeEntityServer = class ContractTypeEntityServer extends ContractTypeEntity {
31
31
  async Delete(options) {
32
32
  return GuardedDelete(this, options, `Contract type "${this.Name ?? this.ID}" cannot be deleted.`, [
33
33
  {
@@ -42,7 +42,7 @@ ContractTypeEntityServer = __decorate([
42
42
  RegisterClass(BaseEntity, 'MJ_BizApps_Contracts: Contract Types')
43
43
  ], ContractTypeEntityServer);
44
44
  export { ContractTypeEntityServer };
45
- let ContractTemplateTypeEntityServer = class ContractTemplateTypeEntityServer extends mjBizAppsContractsContractTemplateTypeEntity {
45
+ let ContractTemplateTypeEntityServer = class ContractTemplateTypeEntityServer extends ContractTemplateTypeEntity {
46
46
  async Delete(options) {
47
47
  return GuardedDelete(this, options, `Template type "${this.Name ?? this.ID}" cannot be deleted.`, [
48
48
  {
@@ -1 +1 @@
1
- {"version":3,"file":"ContractTypeEntityServers.js","sourceRoot":"","sources":["../src/ContractTypeEntityServers.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,UAAU,EAA4B,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EACH,4CAA4C,EAC5C,oCAAoC,GACvC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE1D,0FAA0F;AAC1F,MAAM,cAAc,GAAG,uIAAuI,CAAC;AAGxJ,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,oCAAoC;IAC9D,KAAK,CAAC,MAAM,CAAC,OAA6B;QACtD,OAAO,aAAa,CAChB,IAAI,EACJ,OAAO,EACP,kBAAkB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,sBAAsB,EAC5D;YACI;gBACI,UAAU,EAAE,iCAAiC;gBAC7C,MAAM,EAAE,qBAAqB,IAAI,CAAC,EAAE,GAAG;gBACvC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,kBAAkB,cAAc,EAAE;aACxG;SACJ,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CACzB,CAAC;IACN,CAAC;CACJ,CAAA;AAhBY,wBAAwB;IADpC,aAAa,CAAC,UAAU,EAAE,sCAAsC,CAAC;GACrD,wBAAwB,CAgBpC;;AAGM,IAAM,gCAAgC,GAAtC,MAAM,gCAAiC,SAAQ,4CAA4C;IAC9E,KAAK,CAAC,MAAM,CAAC,OAA6B;QACtD,OAAO,aAAa,CAChB,IAAI,EACJ,OAAO,EACP,kBAAkB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,sBAAsB,EAC5D;YACI;gBACI,UAAU,EAAE,0CAA0C;gBACtD,MAAM,EAAE,6BAA6B,IAAI,CAAC,EAAE,GAAG;gBAC/C,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,kBAAkB,cAAc,EAAE;aACxG;SACJ,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CACzB,CAAC;IACN,CAAC;CACJ,CAAA;AAhBY,gCAAgC;IAD5C,aAAa,CAAC,UAAU,EAAE,+CAA+C,CAAC;GAC9D,gCAAgC,CAgB5C;;AAED,yDAAyD;AACzD,MAAM,UAAU,6BAA6B;IACzC,KAAK,wBAAwB,CAAC;IAC9B,KAAK,gCAAgC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"ContractTypeEntityServers.js","sourceRoot":"","sources":["../src/ContractTypeEntityServers.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,UAAU,EAA4B,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EACH,0BAA0B,EAC1B,kBAAkB,GACrB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE1D,0FAA0F;AAC1F,MAAM,cAAc,GAAG,uIAAuI,CAAC;AAGxJ,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,kBAAkB;IAC5C,KAAK,CAAC,MAAM,CAAC,OAA6B;QACtD,OAAO,aAAa,CAChB,IAAI,EACJ,OAAO,EACP,kBAAkB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,sBAAsB,EAC5D;YACI;gBACI,UAAU,EAAE,iCAAiC;gBAC7C,MAAM,EAAE,qBAAqB,IAAI,CAAC,EAAE,GAAG;gBACvC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,kBAAkB,cAAc,EAAE;aACxG;SACJ,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CACzB,CAAC;IACN,CAAC;CACJ,CAAA;AAhBY,wBAAwB;IADpC,aAAa,CAAC,UAAU,EAAE,sCAAsC,CAAC;GACrD,wBAAwB,CAgBpC;;AAGM,IAAM,gCAAgC,GAAtC,MAAM,gCAAiC,SAAQ,0BAA0B;IAC5D,KAAK,CAAC,MAAM,CAAC,OAA6B;QACtD,OAAO,aAAa,CAChB,IAAI,EACJ,OAAO,EACP,kBAAkB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,sBAAsB,EAC5D;YACI;gBACI,UAAU,EAAE,0CAA0C;gBACtD,MAAM,EAAE,6BAA6B,IAAI,CAAC,EAAE,GAAG;gBAC/C,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,kBAAkB,cAAc,EAAE;aACxG;SACJ,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CACzB,CAAC;IACN,CAAC;CACJ,CAAA;AAhBY,gCAAgC;IAD5C,aAAa,CAAC,UAAU,EAAE,+CAA+C,CAAC;GAC9D,gCAAgC,CAgB5C;;AAED,yDAAyD;AACzD,MAAM,UAAU,6BAA6B;IACzC,KAAK,wBAAwB,CAAC;IAC9B,KAAK,gCAAgC,CAAC;AAC1C,CAAC"}
package/dist/index.js CHANGED
@@ -11,11 +11,11 @@
11
11
  * HARD dependency pinned to the same version (all app packages version together via changesets
12
12
  * `fixed`); every @memberjunction/* package is a PEER (^X.Y.Z).
13
13
  *
14
- * TWO SUBCLASSES, and that is the whole server surface. v1 had nine of these plus ContractsEngine,
15
- * ChildCollection, BillingDraft and seven remote operations — the billing engine wholesale. v2 is a
16
- * record-keeping app and MJ 6's graph save replaced the composition machinery, so what is left is
17
- * the contract number (needs a lock) and two modification invariants (need cross-entity reads).
18
- * **Zero remote operations.**
14
+ * A SMALL SERVER SURFACE. v1 had nine server subclasses plus ContractsEngine, ChildCollection,
15
+ * BillingDraft and seven remote operations — the billing engine wholesale. v2 is a record-keeping app
16
+ * and MJ 6's graph save replaced the composition machinery, so what is left is the server subclasses
17
+ * loaded below (the contract number, server-side defaults, and the rules that need cross-entity
18
+ * reads) and ONE remote operation, `Contracts.Supersede` (`SupersedeOperation.ts`).
19
19
  */
20
20
  import { LoadContractEntityServer } from './ContractEntityServer.js';
21
21
  import { LoadContractTemplateEntityServer } from './ContractTemplateEntityServer.js';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "mjdevManaged": "MJDEV-MANAGED: mjdev owns parts of this file — the \"packages/dev-apps/*\" workspaces glob, any dev-linked open-app dependencies (e.g. \"@mj-biz-apps/*\"), and the Angular \"overrides\" pin set. Do not hand-edit those; the tool wires and reverts them. They are left visible in git status, but the git-tree guard blocks committing them. See .mjdev-docs/MANAGED-FILES.md; revert with `mjdev git:stage-clean <slug> package.json`.",
3
3
  "name": "@mj-biz-apps/contracts-core-entities-server",
4
- "version": "0.7.2",
4
+ "version": "0.8.0",
5
5
  "type": "module",
6
6
  "description": "Server-side entity subclass overrides (validation, computed fields, save hooks). TODO(template): rename.",
7
7
  "main": "dist/index.js",
@@ -12,15 +12,19 @@
12
12
  },
13
13
  "license": "BUSL-1.1",
14
14
  "dependencies": {
15
- "@mj-biz-apps/contracts-entities": "^0.7.2"
15
+ "@mj-biz-apps/contracts-entities": "^0.8.0"
16
16
  },
17
17
  "peerDependencies": {
18
- "@memberjunction/core": "~6.1.5",
19
- "@memberjunction/core-entities": "~6.1.5",
20
- "@memberjunction/global": "~6.1.5",
21
- "@memberjunction/sqlserver-dataprovider": "~6.1.5"
18
+ "@memberjunction/core": "^6.1.6",
19
+ "@memberjunction/core-entities": "^6.1.6",
20
+ "@memberjunction/global": "^6.1.6",
21
+ "@memberjunction/sqlserver-dataprovider": "^6.1.6"
22
22
  },
23
23
  "devDependencies": {
24
+ "@memberjunction/core": "^6.1.6",
25
+ "@memberjunction/core-entities": "^6.1.6",
26
+ "@memberjunction/global": "^6.1.6",
27
+ "@memberjunction/sqlserver-dataprovider": "^6.1.6",
24
28
  "typescript": "^5.9.3",
25
29
  "vitest": "^4.0.18"
26
30
  },