@stamhoofd/models 2.111.0 → 2.113.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.
Files changed (48) hide show
  1. package/LICENSE.md +32 -0
  2. package/dist/src/factories/GroupFactory.d.ts +3 -2
  3. package/dist/src/factories/GroupFactory.d.ts.map +1 -1
  4. package/dist/src/factories/GroupFactory.js +2 -1
  5. package/dist/src/factories/GroupFactory.js.map +1 -1
  6. package/dist/src/helpers/MemberMerger.d.ts.map +1 -1
  7. package/dist/src/helpers/MemberMerger.js +13 -1
  8. package/dist/src/helpers/MemberMerger.js.map +1 -1
  9. package/dist/src/helpers/MemberMerger.test.js +25 -9
  10. package/dist/src/helpers/MemberMerger.test.js.map +1 -1
  11. package/dist/src/migrations/1769087807-invoices-table.sql +33 -0
  12. package/dist/src/migrations/1769087808-invoiced-balance-items-table.sql +24 -0
  13. package/dist/src/migrations/1769087809-payments-invoice-id.sql +3 -0
  14. package/dist/src/migrations/1769621227-payments-rounding-amount.sql +2 -0
  15. package/dist/src/models/BalanceItem.js +3 -3
  16. package/dist/src/models/BalanceItem.js.map +1 -1
  17. package/dist/src/models/Invoice.d.ts +12 -0
  18. package/dist/src/models/Invoice.d.ts.map +1 -1
  19. package/dist/src/models/Invoice.js +33 -0
  20. package/dist/src/models/Invoice.js.map +1 -1
  21. package/dist/src/models/InvoicedBalanceItem.d.ts.map +1 -1
  22. package/dist/src/models/InvoicedBalanceItem.js +1 -1
  23. package/dist/src/models/InvoicedBalanceItem.js.map +1 -1
  24. package/dist/src/models/Member.js +1 -1
  25. package/dist/src/models/Member.js.map +1 -1
  26. package/dist/src/models/Payment.d.ts +2 -0
  27. package/dist/src/models/Payment.d.ts.map +1 -1
  28. package/dist/src/models/Payment.js +8 -2
  29. package/dist/src/models/Payment.js.map +1 -1
  30. package/dist/src/models/UitpasClientCredential.d.ts +1 -0
  31. package/dist/src/models/UitpasClientCredential.d.ts.map +1 -1
  32. package/dist/src/models/UitpasClientCredential.js +6 -0
  33. package/dist/src/models/UitpasClientCredential.js.map +1 -1
  34. package/package.json +2 -2
  35. package/src/factories/GroupFactory.ts +3 -2
  36. package/src/helpers/MemberMerger.test.ts +28 -9
  37. package/src/helpers/MemberMerger.ts +19 -1
  38. package/src/migrations/1769087807-invoices-table.sql +33 -0
  39. package/src/migrations/1769087808-invoiced-balance-items-table.sql +24 -0
  40. package/src/migrations/1769087809-payments-invoice-id.sql +3 -0
  41. package/src/migrations/1769621227-payments-rounding-amount.sql +2 -0
  42. package/src/models/BalanceItem.ts +4 -4
  43. package/src/models/Invoice.ts +32 -0
  44. package/src/models/InvoicedBalanceItem.ts +1 -1
  45. package/src/models/Member.ts +1 -1
  46. package/src/models/Payment.ts +5 -2
  47. package/src/models/UitpasClientCredential.ts +7 -0
  48. package/LICENSE +0 -665
@@ -103,6 +103,29 @@ export class Invoice extends QueryableModel {
103
103
  @column({ type: 'boolean' })
104
104
  didSendPeppol = false;
105
105
 
106
+ /**
107
+ * Official invoice date. Set when a number has been generated.
108
+ */
109
+ @column({
110
+ type: 'datetime',
111
+ nullable: true,
112
+ beforeSave(old?: any) {
113
+ if (old !== undefined || !this.number) {
114
+ return old;
115
+ }
116
+ const date = new Date();
117
+ date.setMilliseconds(0);
118
+ return date;
119
+ },
120
+ })
121
+ invoicedAt: Date | null = null;
122
+
123
+ /**
124
+ * If null, invoicedAt is used
125
+ */
126
+ @column({ type: 'datetime', nullable: true })
127
+ dueAt: Date | null = null;
128
+
106
129
  @column({
107
130
  type: 'datetime', beforeSave(old?: any) {
108
131
  if (old !== undefined) {
@@ -186,4 +209,13 @@ export class Invoice extends QueryableModel {
186
209
  throw e;
187
210
  }
188
211
  }
212
+
213
+ static async loadBalanceItems(invoices: Invoice[]) {
214
+ if (invoices.length === 0) {
215
+ return { invoicedBalanceItems: [] };
216
+ }
217
+ // Load all the related models from the database so we can build the structures
218
+ const invoicedBalanceItems = await InvoicedBalanceItem.select().where('invoiceId', invoices.map(i => i.id)).fetch();
219
+ return { invoicedBalanceItems };
220
+ }
189
221
  }
@@ -11,7 +11,7 @@ import { VATExcemptReason } from '@stamhoofd/structures';
11
11
  * and also how it was invoiced (since the unit price, quantity etc can't always match the balance items invoiced price due to rounding)
12
12
  */
13
13
  export class InvoicedBalanceItem extends QueryableModel {
14
- static table = 'balance_item_invoices';
14
+ static table = 'invoiced_balance_items';
15
15
 
16
16
  @column({
17
17
  primary: true, type: 'string', beforeSave(value) {
@@ -367,7 +367,7 @@ export class Member extends QueryableModel {
367
367
  return false;
368
368
  }
369
369
 
370
- if (this.details.uitpasNumber) {
370
+ if (this.details.uitpasNumberDetails) {
371
371
  return false;
372
372
  }
373
373
 
@@ -86,8 +86,8 @@ export class Payment extends QueryableModel {
86
86
  *
87
87
  * E.g. total price to pay is 0,242 because of VAT, then we round this to 0,24. The roundingAmount will be -0,002 in this case.
88
88
  */
89
- // @column({ type: 'integer' })
90
- // roundingAmount = 0;
89
+ @column({ type: 'integer' })
90
+ roundingAmount = 0;
91
91
 
92
92
  /**
93
93
  * Fee paid to the payment provider (if available, otherwise set to 0)
@@ -131,6 +131,9 @@ export class Payment extends QueryableModel {
131
131
  @column({ type: 'json', nullable: true, decoder: TransferSettings })
132
132
  transferSettings: TransferSettings | null = null;
133
133
 
134
+ @column({ type: 'string', nullable: true })
135
+ invoiceId: string | null = null;
136
+
134
137
  @column({
135
138
  type: 'datetime', beforeSave(old?: any) {
136
139
  if (old !== undefined) {
@@ -46,4 +46,11 @@ export class UitpasClientCredential extends QueryableModel {
46
46
  skipUpdate: true,
47
47
  })
48
48
  updatedAt: Date;
49
+
50
+ async save() {
51
+ if (this.organizationId === null) {
52
+ throw new Error('Not allowed to save uitpas client credentials for platform (organizationId = null)');
53
+ }
54
+ return await super.save();
55
+ }
49
56
  }