@stamhoofd/models 2.129.3 → 2.131.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.
@@ -6,6 +6,7 @@ declare class Options {
6
6
  groups: Group[];
7
7
  status?: DocumentStatus;
8
8
  updatesEnabled?: boolean;
9
+ isLocked?: boolean;
9
10
  minPricePaid?: number | null;
10
11
  maxAge?: number | null;
11
12
  year?: number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentTemplateFactory.d.ts","sourceRoot":"","sources":["../../src/factories/DocumentTemplateFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAA6C,cAAc,EAA8G,MAAM,uBAAuB,CAAC;AAC9M,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,cAAM,OAAO;IACT,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,uBAAwB,SAAQ,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACrE,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAsI9C,MAAM,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAK5C"}
1
+ {"version":3,"file":"DocumentTemplateFactory.d.ts","sourceRoot":"","sources":["../../src/factories/DocumentTemplateFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAA6C,cAAc,EAA8G,MAAM,uBAAuB,CAAC;AAC9M,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,cAAM,OAAO;IACT,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,uBAAwB,SAAQ,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACrE,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAsI9C,MAAM,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAU5C"}
@@ -6,6 +6,7 @@ class Options {
6
6
  groups;
7
7
  status;
8
8
  updatesEnabled;
9
+ isLocked;
9
10
  minPricePaid;
10
11
  maxAge;
11
12
  year;
@@ -139,6 +140,11 @@ export class DocumentTemplateFactory extends Factory {
139
140
  async create() {
140
141
  const documentTemplate = await this.createWithoutSave();
141
142
  await documentTemplate.save();
143
+ if (this.options.isLocked) {
144
+ // A locked template can no longer be saved normally, so lock it after the initial save.
145
+ documentTemplate.isLocked = true;
146
+ await documentTemplate.save({ forceSave: true });
147
+ }
142
148
  return documentTemplate;
143
149
  }
144
150
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentTemplateFactory.js","sourceRoot":"","sources":["../../src/factories/DocumentTemplateFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DocumentTemplateFactory.js","sourceRoot":"","sources":["../../src/factories/DocumentTemplateFactory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { Factory } from '@simonbackx/simple-database';
2
+ import { OrderData, OrderStatus } from '@stamhoofd/structures';
3
+ import { Order } from '../models/index.js';
4
+ import type { Webshop } from '../models/index.js';
5
+ declare class Options {
6
+ /** The webshop the order belongs to (provides the organization and numbering). */
7
+ webshop: Webshop;
8
+ firstName?: string;
9
+ lastName?: string;
10
+ email?: string;
11
+ /** Order number. Defaults to the next sequential number of the webshop. */
12
+ number?: number;
13
+ status?: OrderStatus;
14
+ /**
15
+ * Force a specific updatedAt. Stored with a one-second resolution (like the model itself), so
16
+ * milliseconds are zeroed. Applied with a raw update because the model always overwrites
17
+ * updatedAt on save.
18
+ */
19
+ updatedAt?: Date;
20
+ /** Full OrderData override. Takes precedence over the firstName/lastName/email options. */
21
+ data?: OrderData;
22
+ }
23
+ export declare class OrderFactory extends Factory<Options, Order> {
24
+ create(): Promise<Order>;
25
+ }
26
+ export {};
27
+ //# sourceMappingURL=OrderFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderFactory.d.ts","sourceRoot":"","sources":["../../src/factories/OrderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAkB,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAG/E,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,cAAM,OAAO;IACT,kFAAkF;IAClF,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,2FAA2F;IAC3F,IAAI,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,qBAAa,YAAa,SAAQ,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;IAC/C,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC;CA8BjC"}
@@ -0,0 +1,51 @@
1
+ import { Database, Factory } from '@simonbackx/simple-database';
2
+ import { Cart, Customer, OrderData, OrderStatus } from '@stamhoofd/structures';
3
+ import { WebshopCounter } from '../helpers/WebshopCounter.js';
4
+ import { Order } from '../models/index.js';
5
+ class Options {
6
+ /** The webshop the order belongs to (provides the organization and numbering). */
7
+ webshop;
8
+ firstName;
9
+ lastName;
10
+ email;
11
+ /** Order number. Defaults to the next sequential number of the webshop. */
12
+ number;
13
+ status;
14
+ /**
15
+ * Force a specific updatedAt. Stored with a one-second resolution (like the model itself), so
16
+ * milliseconds are zeroed. Applied with a raw update because the model always overwrites
17
+ * updatedAt on save.
18
+ */
19
+ updatedAt;
20
+ /** Full OrderData override. Takes precedence over the firstName/lastName/email options. */
21
+ data;
22
+ }
23
+ export class OrderFactory extends Factory {
24
+ async create() {
25
+ const webshop = this.options.webshop;
26
+ const data = this.options.data ?? OrderData.create({
27
+ customer: Customer.create({
28
+ firstName: this.options.firstName ?? 'John',
29
+ lastName: this.options.lastName ?? 'Doe',
30
+ email: this.options.email ?? 'john.doe@example.com',
31
+ }),
32
+ cart: Cart.create({}),
33
+ });
34
+ const order = new Order();
35
+ order.organizationId = webshop.organizationId;
36
+ order.webshopId = webshop.id;
37
+ order.data = data;
38
+ order.number = this.options.number ?? await WebshopCounter.getNextNumber(webshop);
39
+ order.status = this.options.status ?? OrderStatus.Created;
40
+ order.validAt = new Date();
41
+ await order.save();
42
+ if (this.options.updatedAt) {
43
+ const forced = new Date(this.options.updatedAt);
44
+ forced.setMilliseconds(0);
45
+ await Database.update('UPDATE `webshop_orders` SET `updatedAt` = ? WHERE `id` = ?', [forced, order.id]);
46
+ order.updatedAt = forced;
47
+ }
48
+ return order;
49
+ }
50
+ }
51
+ //# sourceMappingURL=OrderFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderFactory.js","sourceRoot":"","sources":["../../src/factories/OrderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,MAAM,OAAO;IACT,kFAAkF;IAClF,OAAO,CAAU;IACjB,SAAS,CAAU;IACnB,QAAQ,CAAU;IAClB,KAAK,CAAU;IACf,2EAA2E;IAC3E,MAAM,CAAU;IAChB,MAAM,CAAe;IACrB;;;;OAIG;IACH,SAAS,CAAQ;IACjB,2FAA2F;IAC3F,IAAI,CAAa;CACpB;AAED,MAAM,OAAO,YAAa,SAAQ,OAAuB;IACrD,KAAK,CAAC,MAAM;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAErC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC;YAC/C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;gBACtB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM;gBAC3C,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK;gBACxC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,sBAAsB;aACtD,CAAC;YACF,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;SACxB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC9C,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAClF,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC;QAC1D,KAAK,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QAEnB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChD,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,QAAQ,CAAC,MAAM,CAAC,4DAA4D,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACxG,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAC7B,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
@@ -0,0 +1,20 @@
1
+ import { Factory } from '@simonbackx/simple-database';
2
+ import { Ticket } from '../models/index.js';
3
+ import type { Order } from '../models/index.js';
4
+ declare class Options {
5
+ /** The order the ticket belongs to (provides the organization, webshop and order id). */
6
+ order: Order;
7
+ index?: number;
8
+ total?: number;
9
+ /**
10
+ * Force a specific updatedAt. Stored with a one-second resolution (like the model itself), so
11
+ * milliseconds are zeroed. Applied with a raw update because the model always overwrites
12
+ * updatedAt on save.
13
+ */
14
+ updatedAt?: Date;
15
+ }
16
+ export declare class TicketFactory extends Factory<Options, Ticket> {
17
+ create(): Promise<Ticket>;
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=TicketFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TicketFactory.d.ts","sourceRoot":"","sources":["../../src/factories/TicketFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,cAAM,OAAO;IACT,yFAAyF;IACzF,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,qBAAa,aAAc,SAAQ,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;IACjD,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;CAqBlC"}
@@ -0,0 +1,35 @@
1
+ import { Database, Factory } from '@simonbackx/simple-database';
2
+ import { Ticket } from '../models/index.js';
3
+ class Options {
4
+ /** The order the ticket belongs to (provides the organization, webshop and order id). */
5
+ order;
6
+ index;
7
+ total;
8
+ /**
9
+ * Force a specific updatedAt. Stored with a one-second resolution (like the model itself), so
10
+ * milliseconds are zeroed. Applied with a raw update because the model always overwrites
11
+ * updatedAt on save.
12
+ */
13
+ updatedAt;
14
+ }
15
+ export class TicketFactory extends Factory {
16
+ async create() {
17
+ const order = this.options.order;
18
+ const ticket = new Ticket();
19
+ ticket.organizationId = order.organizationId;
20
+ ticket.webshopId = order.webshopId;
21
+ ticket.orderId = order.id;
22
+ ticket.itemId = null;
23
+ ticket.index = this.options.index ?? 1;
24
+ ticket.total = this.options.total ?? 1;
25
+ await ticket.save();
26
+ if (this.options.updatedAt) {
27
+ const forced = new Date(this.options.updatedAt);
28
+ forced.setMilliseconds(0);
29
+ await Database.update('UPDATE `webshop_tickets` SET `updatedAt` = ? WHERE `id` = ?', [forced, ticket.id]);
30
+ ticket.updatedAt = forced;
31
+ }
32
+ return ticket;
33
+ }
34
+ }
35
+ //# sourceMappingURL=TicketFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TicketFactory.js","sourceRoot":"","sources":["../../src/factories/TicketFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,MAAM,OAAO;IACT,yFAAyF;IACzF,KAAK,CAAQ;IACb,KAAK,CAAU;IACf,KAAK,CAAU;IACf;;;;OAIG;IACH,SAAS,CAAQ;CACpB;AAED,MAAM,OAAO,aAAc,SAAQ,OAAwB;IACvD,KAAK,CAAC,MAAM;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAEjC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;QAC7C,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACnC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QACvC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChD,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,QAAQ,CAAC,MAAM,CAAC,6DAA6D,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1G,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;QAC9B,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
@@ -2,7 +2,9 @@ export * from './AddressFactory.js';
2
2
  export * from './EmergencyContactFactory.js';
3
3
  export * from './GroupFactory.js';
4
4
  export * from './MemberFactory.js';
5
+ export * from './OrderFactory.js';
5
6
  export * from './OrganizationFactory.js';
7
+ export * from './TicketFactory.js';
6
8
  export * from './ParentFactory.js';
7
9
  export * from './RecordFactory.js';
8
10
  export * from './RegisterCodeFactory.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factories/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factories/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC"}
@@ -2,7 +2,9 @@ export * from './AddressFactory.js';
2
2
  export * from './EmergencyContactFactory.js';
3
3
  export * from './GroupFactory.js';
4
4
  export * from './MemberFactory.js';
5
+ export * from './OrderFactory.js';
5
6
  export * from './OrganizationFactory.js';
7
+ export * from './TicketFactory.js';
6
8
  export * from './ParentFactory.js';
7
9
  export * from './RecordFactory.js';
8
10
  export * from './RegisterCodeFactory.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/factories/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/factories/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stamhoofd/models",
3
- "version": "2.129.3",
3
+ "version": "2.131.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -42,7 +42,7 @@
42
42
  },
43
43
  "devDependencies": {
44
44
  "@simonbackx/simple-database": "1.37.1",
45
- "@stamhoofd/test-utils": "2.129.3",
45
+ "@stamhoofd/test-utils": "2.131.0",
46
46
  "@types/luxon": "3.7.1",
47
47
  "@types/uuid": "8.3.4",
48
48
  "vitest": "4.1.8"
@@ -61,5 +61,5 @@
61
61
  "publishConfig": {
62
62
  "access": "public"
63
63
  },
64
- "gitHead": "982b7912b141d0149eb2ad89cd2120e073251e66"
64
+ "gitHead": "51de524c831dac65960440d9a5aabe9cad1feae8"
65
65
  }
@@ -9,6 +9,7 @@ class Options {
9
9
  groups: Group[];
10
10
  status?: DocumentStatus;
11
11
  updatesEnabled?: boolean;
12
+ isLocked?: boolean;
12
13
  minPricePaid?: number | null;
13
14
  maxAge?: number | null;
14
15
  year?: number | null;
@@ -156,6 +157,11 @@ export class DocumentTemplateFactory extends Factory<Options, DocumentTemplate>
156
157
  async create(): Promise<DocumentTemplate> {
157
158
  const documentTemplate = await this.createWithoutSave();
158
159
  await documentTemplate.save();
160
+ if (this.options.isLocked) {
161
+ // A locked template can no longer be saved normally, so lock it after the initial save.
162
+ documentTemplate.isLocked = true;
163
+ await documentTemplate.save({ forceSave: true });
164
+ }
159
165
  return documentTemplate;
160
166
  }
161
167
  }
@@ -0,0 +1,58 @@
1
+ import { Database, Factory } from '@simonbackx/simple-database';
2
+ import { Cart, Customer, OrderData, OrderStatus } from '@stamhoofd/structures';
3
+
4
+ import { WebshopCounter } from '../helpers/WebshopCounter.js';
5
+ import { Order } from '../models/index.js';
6
+ import type { Webshop } from '../models/index.js';
7
+
8
+ class Options {
9
+ /** The webshop the order belongs to (provides the organization and numbering). */
10
+ webshop: Webshop;
11
+ firstName?: string;
12
+ lastName?: string;
13
+ email?: string;
14
+ /** Order number. Defaults to the next sequential number of the webshop. */
15
+ number?: number;
16
+ status?: OrderStatus;
17
+ /**
18
+ * Force a specific updatedAt. Stored with a one-second resolution (like the model itself), so
19
+ * milliseconds are zeroed. Applied with a raw update because the model always overwrites
20
+ * updatedAt on save.
21
+ */
22
+ updatedAt?: Date;
23
+ /** Full OrderData override. Takes precedence over the firstName/lastName/email options. */
24
+ data?: OrderData;
25
+ }
26
+
27
+ export class OrderFactory extends Factory<Options, Order> {
28
+ async create(): Promise<Order> {
29
+ const webshop = this.options.webshop;
30
+
31
+ const data = this.options.data ?? OrderData.create({
32
+ customer: Customer.create({
33
+ firstName: this.options.firstName ?? 'John',
34
+ lastName: this.options.lastName ?? 'Doe',
35
+ email: this.options.email ?? 'john.doe@example.com',
36
+ }),
37
+ cart: Cart.create({}),
38
+ });
39
+
40
+ const order = new Order();
41
+ order.organizationId = webshop.organizationId;
42
+ order.webshopId = webshop.id;
43
+ order.data = data;
44
+ order.number = this.options.number ?? await WebshopCounter.getNextNumber(webshop);
45
+ order.status = this.options.status ?? OrderStatus.Created;
46
+ order.validAt = new Date();
47
+ await order.save();
48
+
49
+ if (this.options.updatedAt) {
50
+ const forced = new Date(this.options.updatedAt);
51
+ forced.setMilliseconds(0);
52
+ await Database.update('UPDATE `webshop_orders` SET `updatedAt` = ? WHERE `id` = ?', [forced, order.id]);
53
+ order.updatedAt = forced;
54
+ }
55
+
56
+ return order;
57
+ }
58
+ }
@@ -0,0 +1,41 @@
1
+ import { Database, Factory } from '@simonbackx/simple-database';
2
+
3
+ import { Ticket } from '../models/index.js';
4
+ import type { Order } from '../models/index.js';
5
+
6
+ class Options {
7
+ /** The order the ticket belongs to (provides the organization, webshop and order id). */
8
+ order: Order;
9
+ index?: number;
10
+ total?: number;
11
+ /**
12
+ * Force a specific updatedAt. Stored with a one-second resolution (like the model itself), so
13
+ * milliseconds are zeroed. Applied with a raw update because the model always overwrites
14
+ * updatedAt on save.
15
+ */
16
+ updatedAt?: Date;
17
+ }
18
+
19
+ export class TicketFactory extends Factory<Options, Ticket> {
20
+ async create(): Promise<Ticket> {
21
+ const order = this.options.order;
22
+
23
+ const ticket = new Ticket();
24
+ ticket.organizationId = order.organizationId;
25
+ ticket.webshopId = order.webshopId;
26
+ ticket.orderId = order.id;
27
+ ticket.itemId = null;
28
+ ticket.index = this.options.index ?? 1;
29
+ ticket.total = this.options.total ?? 1;
30
+ await ticket.save();
31
+
32
+ if (this.options.updatedAt) {
33
+ const forced = new Date(this.options.updatedAt);
34
+ forced.setMilliseconds(0);
35
+ await Database.update('UPDATE `webshop_tickets` SET `updatedAt` = ? WHERE `id` = ?', [forced, ticket.id]);
36
+ ticket.updatedAt = forced;
37
+ }
38
+
39
+ return ticket;
40
+ }
41
+ }
@@ -2,7 +2,9 @@ export * from './AddressFactory.js';
2
2
  export * from './EmergencyContactFactory.js';
3
3
  export * from './GroupFactory.js';
4
4
  export * from './MemberFactory.js';
5
+ export * from './OrderFactory.js';
5
6
  export * from './OrganizationFactory.js';
7
+ export * from './TicketFactory.js';
6
8
  export * from './ParentFactory.js';
7
9
  export * from './RecordFactory.js';
8
10
  export * from './RegisterCodeFactory.js';