@stamhoofd/structures 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 (181) hide show
  1. package/LICENSE.md +32 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +2 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/src/BalanceItem.d.ts +11 -0
  7. package/dist/src/BalanceItem.d.ts.map +1 -1
  8. package/dist/src/BalanceItem.js +41 -4
  9. package/dist/src/BalanceItem.js.map +1 -1
  10. package/dist/src/BalanceItemDetailed.d.ts +8 -0
  11. package/dist/src/BalanceItemDetailed.d.ts.map +1 -1
  12. package/dist/src/BalanceItemDetailed.js +11 -4
  13. package/dist/src/BalanceItemDetailed.js.map +1 -1
  14. package/dist/src/Company.d.ts +2 -0
  15. package/dist/src/Company.d.ts.map +1 -1
  16. package/dist/src/Company.js +26 -0
  17. package/dist/src/Company.js.map +1 -1
  18. package/dist/src/Organization.d.ts +5 -0
  19. package/dist/src/Organization.d.ts.map +1 -1
  20. package/dist/src/Organization.js +14 -0
  21. package/dist/src/Organization.js.map +1 -1
  22. package/dist/src/PaymentCustomer.d.ts +1 -0
  23. package/dist/src/PaymentCustomer.d.ts.map +1 -1
  24. package/dist/src/PaymentCustomer.js +23 -0
  25. package/dist/src/PaymentCustomer.js.map +1 -1
  26. package/dist/src/PriceBreakdown.d.ts +5 -0
  27. package/dist/src/PriceBreakdown.d.ts.map +1 -1
  28. package/dist/src/ReceivableBalance.d.ts +8 -0
  29. package/dist/src/ReceivableBalance.d.ts.map +1 -1
  30. package/dist/src/ReceivableBalance.js +11 -0
  31. package/dist/src/ReceivableBalance.js.map +1 -1
  32. package/dist/src/Version.d.ts +1 -1
  33. package/dist/src/Version.js +1 -1
  34. package/dist/src/addresses/Address.d.ts +1 -0
  35. package/dist/src/addresses/Address.d.ts.map +1 -1
  36. package/dist/src/addresses/Address.js +3 -0
  37. package/dist/src/addresses/Address.js.map +1 -1
  38. package/dist/src/billing/Invoice.d.ts +38 -2
  39. package/dist/src/billing/Invoice.d.ts.map +1 -1
  40. package/dist/src/billing/Invoice.js +250 -24
  41. package/dist/src/billing/Invoice.js.map +1 -1
  42. package/dist/src/billing/InvoicedBalanceItem.d.ts +13 -0
  43. package/dist/src/billing/InvoicedBalanceItem.d.ts.map +1 -1
  44. package/dist/src/billing/InvoicedBalanceItem.js +47 -5
  45. package/dist/src/billing/InvoicedBalanceItem.js.map +1 -1
  46. package/dist/src/billing/index.d.ts +1 -0
  47. package/dist/src/billing/index.d.ts.map +1 -1
  48. package/dist/src/billing/index.js +4 -0
  49. package/dist/src/billing/index.js.map +1 -1
  50. package/dist/src/email/Email.d.ts +2 -1
  51. package/dist/src/email/Email.d.ts.map +1 -1
  52. package/dist/src/email/Email.js +2 -1
  53. package/dist/src/email/Email.js.map +1 -1
  54. package/dist/src/email/EmailTemplate.d.ts +11 -0
  55. package/dist/src/email/EmailTemplate.d.ts.map +1 -1
  56. package/dist/src/email/EmailTemplate.js +41 -0
  57. package/dist/src/email/EmailTemplate.js.map +1 -1
  58. package/dist/src/endpoints/UitpasNumbersGetDetailsRequest.d.ts +10 -0
  59. package/dist/src/endpoints/UitpasNumbersGetDetailsRequest.d.ts.map +1 -0
  60. package/dist/src/endpoints/UitpasNumbersGetDetailsRequest.js +38 -0
  61. package/dist/src/endpoints/UitpasNumbersGetDetailsRequest.js.map +1 -0
  62. package/dist/src/filters/searchFilterFactories.js +1 -1
  63. package/dist/src/filters/searchFilterFactories.js.map +1 -1
  64. package/dist/src/members/MemberDetails.d.ts +4 -1
  65. package/dist/src/members/MemberDetails.d.ts.map +1 -1
  66. package/dist/src/members/MemberDetails.js +39 -10
  67. package/dist/src/members/MemberDetails.js.map +1 -1
  68. package/dist/src/members/MemberDetails.test.js +144 -0
  69. package/dist/src/members/MemberDetails.test.js.map +1 -1
  70. package/dist/src/members/Payment.d.ts +2 -0
  71. package/dist/src/members/Payment.d.ts.map +1 -1
  72. package/dist/src/members/Payment.js +8 -0
  73. package/dist/src/members/Payment.js.map +1 -1
  74. package/dist/src/members/PlatformMember.d.ts.map +1 -1
  75. package/dist/src/members/PlatformMember.js +1 -1
  76. package/dist/src/members/PlatformMember.js.map +1 -1
  77. package/dist/src/members/ReviewTime.d.ts.map +1 -1
  78. package/dist/src/members/ReviewTime.js +1 -1
  79. package/dist/src/members/ReviewTime.js.map +1 -1
  80. package/dist/src/members/UitpasNumberDetails.d.ts +40 -0
  81. package/dist/src/members/UitpasNumberDetails.d.ts.map +1 -0
  82. package/dist/src/members/UitpasNumberDetails.js +95 -0
  83. package/dist/src/members/UitpasNumberDetails.js.map +1 -0
  84. package/dist/src/members/checkout/RegisterItem.d.ts +0 -1
  85. package/dist/src/members/checkout/RegisterItem.d.ts.map +1 -1
  86. package/dist/src/members/checkout/RegisterItem.js +0 -4
  87. package/dist/src/members/checkout/RegisterItem.js.map +1 -1
  88. package/dist/src/webshops/Customer.d.ts +2 -0
  89. package/dist/src/webshops/Customer.d.ts.map +1 -1
  90. package/dist/src/webshops/Customer.js +9 -0
  91. package/dist/src/webshops/Customer.js.map +1 -1
  92. package/esm/dist/index.d.ts +2 -0
  93. package/esm/dist/index.d.ts.map +1 -1
  94. package/esm/dist/index.js +2 -0
  95. package/esm/dist/index.js.map +1 -1
  96. package/esm/dist/src/BalanceItem.d.ts +11 -0
  97. package/esm/dist/src/BalanceItem.d.ts.map +1 -1
  98. package/esm/dist/src/BalanceItem.js +41 -5
  99. package/esm/dist/src/BalanceItem.js.map +1 -1
  100. package/esm/dist/src/BalanceItemDetailed.d.ts +8 -0
  101. package/esm/dist/src/BalanceItemDetailed.d.ts.map +1 -1
  102. package/esm/dist/src/BalanceItemDetailed.js +11 -4
  103. package/esm/dist/src/BalanceItemDetailed.js.map +1 -1
  104. package/esm/dist/src/Company.d.ts +2 -0
  105. package/esm/dist/src/Company.d.ts.map +1 -1
  106. package/esm/dist/src/Company.js +26 -0
  107. package/esm/dist/src/Company.js.map +1 -1
  108. package/esm/dist/src/Organization.d.ts +5 -0
  109. package/esm/dist/src/Organization.d.ts.map +1 -1
  110. package/esm/dist/src/Organization.js +14 -0
  111. package/esm/dist/src/Organization.js.map +1 -1
  112. package/esm/dist/src/PaymentCustomer.d.ts +1 -0
  113. package/esm/dist/src/PaymentCustomer.d.ts.map +1 -1
  114. package/esm/dist/src/PaymentCustomer.js +23 -0
  115. package/esm/dist/src/PaymentCustomer.js.map +1 -1
  116. package/esm/dist/src/PriceBreakdown.d.ts +5 -0
  117. package/esm/dist/src/PriceBreakdown.d.ts.map +1 -1
  118. package/esm/dist/src/ReceivableBalance.d.ts +8 -0
  119. package/esm/dist/src/ReceivableBalance.d.ts.map +1 -1
  120. package/esm/dist/src/ReceivableBalance.js +11 -0
  121. package/esm/dist/src/ReceivableBalance.js.map +1 -1
  122. package/esm/dist/src/Version.d.ts +1 -1
  123. package/esm/dist/src/Version.js +1 -1
  124. package/esm/dist/src/addresses/Address.d.ts +1 -0
  125. package/esm/dist/src/addresses/Address.d.ts.map +1 -1
  126. package/esm/dist/src/addresses/Address.js +3 -0
  127. package/esm/dist/src/addresses/Address.js.map +1 -1
  128. package/esm/dist/src/billing/Invoice.d.ts +38 -2
  129. package/esm/dist/src/billing/Invoice.d.ts.map +1 -1
  130. package/esm/dist/src/billing/Invoice.js +249 -24
  131. package/esm/dist/src/billing/Invoice.js.map +1 -1
  132. package/esm/dist/src/billing/InvoicedBalanceItem.d.ts +13 -0
  133. package/esm/dist/src/billing/InvoicedBalanceItem.d.ts.map +1 -1
  134. package/esm/dist/src/billing/InvoicedBalanceItem.js +47 -5
  135. package/esm/dist/src/billing/InvoicedBalanceItem.js.map +1 -1
  136. package/esm/dist/src/billing/index.d.ts +1 -0
  137. package/esm/dist/src/billing/index.d.ts.map +1 -1
  138. package/esm/dist/src/billing/index.js +2 -0
  139. package/esm/dist/src/billing/index.js.map +1 -1
  140. package/esm/dist/src/email/Email.d.ts +2 -1
  141. package/esm/dist/src/email/Email.d.ts.map +1 -1
  142. package/esm/dist/src/email/Email.js +2 -1
  143. package/esm/dist/src/email/Email.js.map +1 -1
  144. package/esm/dist/src/email/EmailTemplate.d.ts +11 -0
  145. package/esm/dist/src/email/EmailTemplate.d.ts.map +1 -1
  146. package/esm/dist/src/email/EmailTemplate.js +41 -0
  147. package/esm/dist/src/email/EmailTemplate.js.map +1 -1
  148. package/esm/dist/src/endpoints/UitpasNumbersGetDetailsRequest.d.ts +10 -0
  149. package/esm/dist/src/endpoints/UitpasNumbersGetDetailsRequest.d.ts.map +1 -0
  150. package/esm/dist/src/endpoints/UitpasNumbersGetDetailsRequest.js +34 -0
  151. package/esm/dist/src/endpoints/UitpasNumbersGetDetailsRequest.js.map +1 -0
  152. package/esm/dist/src/filters/searchFilterFactories.js +1 -1
  153. package/esm/dist/src/filters/searchFilterFactories.js.map +1 -1
  154. package/esm/dist/src/members/MemberDetails.d.ts +4 -1
  155. package/esm/dist/src/members/MemberDetails.d.ts.map +1 -1
  156. package/esm/dist/src/members/MemberDetails.js +39 -10
  157. package/esm/dist/src/members/MemberDetails.js.map +1 -1
  158. package/esm/dist/src/members/Payment.d.ts +2 -0
  159. package/esm/dist/src/members/Payment.d.ts.map +1 -1
  160. package/esm/dist/src/members/Payment.js +8 -0
  161. package/esm/dist/src/members/Payment.js.map +1 -1
  162. package/esm/dist/src/members/PlatformMember.d.ts.map +1 -1
  163. package/esm/dist/src/members/PlatformMember.js +1 -1
  164. package/esm/dist/src/members/PlatformMember.js.map +1 -1
  165. package/esm/dist/src/members/ReviewTime.d.ts.map +1 -1
  166. package/esm/dist/src/members/ReviewTime.js +1 -1
  167. package/esm/dist/src/members/ReviewTime.js.map +1 -1
  168. package/esm/dist/src/members/UitpasNumberDetails.d.ts +40 -0
  169. package/esm/dist/src/members/UitpasNumberDetails.d.ts.map +1 -0
  170. package/esm/dist/src/members/UitpasNumberDetails.js +90 -0
  171. package/esm/dist/src/members/UitpasNumberDetails.js.map +1 -0
  172. package/esm/dist/src/members/checkout/RegisterItem.d.ts +0 -1
  173. package/esm/dist/src/members/checkout/RegisterItem.d.ts.map +1 -1
  174. package/esm/dist/src/members/checkout/RegisterItem.js +0 -4
  175. package/esm/dist/src/members/checkout/RegisterItem.js.map +1 -1
  176. package/esm/dist/src/webshops/Customer.d.ts +2 -0
  177. package/esm/dist/src/webshops/Customer.d.ts.map +1 -1
  178. package/esm/dist/src/webshops/Customer.js +9 -0
  179. package/esm/dist/src/webshops/Customer.js.map +1 -1
  180. package/package.json +2 -2
  181. package/LICENSE +0 -665
@@ -1,14 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Invoice = exports.VATSubtotal = void 0;
3
+ exports.Invoice = exports.InvoiceTypeHelper = exports.InvoiceType = exports.VATSubtotal = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const simple_encoding_1 = require("@simonbackx/simple-encoding");
6
+ const simple_errors_1 = require("@simonbackx/simple-errors");
6
7
  const uuid_1 = require("uuid");
8
+ const BalanceItem_js_1 = require("../BalanceItem.js");
7
9
  const Company_js_1 = require("../Company.js");
8
10
  const PaymentCustomer_js_1 = require("../PaymentCustomer.js");
9
11
  const File_js_1 = require("../files/File.js");
12
+ const PaymentGeneral_js_1 = require("../members/PaymentGeneral.js");
10
13
  const InvoicedBalanceItem_js_1 = require("./InvoicedBalanceItem.js");
11
- const BalanceItem_js_1 = require("../BalanceItem.js");
14
+ const utility_1 = require("@stamhoofd/utility");
12
15
  class VATSubtotal extends simple_encoding_1.AutoEncoder {
13
16
  constructor() {
14
17
  super(...arguments);
@@ -37,6 +40,20 @@ tslib_1.__decorate([
37
40
  tslib_1.__decorate([
38
41
  (0, simple_encoding_1.field)({ decoder: simple_encoding_1.IntegerDecoder })
39
42
  ], VATSubtotal.prototype, "VAT", void 0);
43
+ var InvoiceType;
44
+ (function (InvoiceType) {
45
+ InvoiceType["Invoice"] = "Invoice";
46
+ InvoiceType["CreditNote"] = "CreditNote";
47
+ })(InvoiceType || (exports.InvoiceType = InvoiceType = {}));
48
+ class InvoiceTypeHelper {
49
+ static getName(type) {
50
+ switch (type) {
51
+ case InvoiceType.Invoice: return $t('fbf8fca6-33f0-4ecc-8317-0033f256827e');
52
+ case InvoiceType.CreditNote: return $t('4578aaf4-a15a-4c53-ad46-768b91d96a4e');
53
+ }
54
+ }
55
+ }
56
+ exports.InvoiceTypeHelper = InvoiceTypeHelper;
40
57
  class Invoice extends simple_encoding_1.AutoEncoder {
41
58
  constructor() {
42
59
  super(...arguments);
@@ -55,6 +72,14 @@ class Invoice extends simple_encoding_1.AutoEncoder {
55
72
  * The balance items that are invoiced, with their original price. This does not always correspond to the total price of the invoice, or the item prices on the invoice because prices are converted to prices excluding VAT and with PEPPOL rounding rules.
56
73
  */
57
74
  this.items = [];
75
+ /**
76
+ * The total sum of an invoice should always match the total sum of the payments connected to it.
77
+ * On top of that, the amounts related to each balance item in the payments, should match the invoiced balance amount in each item in the invoice.
78
+ *
79
+ * Note, that this is a limitation. A payment can only be related to a single invoice. But an invoice can be for multiple payments.
80
+ * More flexibility is often unneeded and makes reconciliation unnecessary complex.
81
+ */
82
+ this.payments = [];
58
83
  /**
59
84
  * This is the rounding amount in cents that is applied to the normal calculation of the invoiced balance items (prices exluding VAT) to come to the actual total price of the invoice.
60
85
  *
@@ -86,6 +111,10 @@ class Invoice extends simple_encoding_1.AutoEncoder {
86
111
  this.xml = null;
87
112
  this.negativeInvoiceId = null;
88
113
  this.didSendPeppol = false;
114
+ this.invoicedAt = null;
115
+ this.dueAt = null;
116
+ this.createdAt = new Date();
117
+ this.updatedAt = new Date();
89
118
  }
90
119
  get totalWithoutVAT() {
91
120
  return this.items.reduce((sum, item) => sum + item.totalWithoutVAT, 0);
@@ -93,6 +122,9 @@ class Invoice extends simple_encoding_1.AutoEncoder {
93
122
  get totalBalanceInvoicedAmount() {
94
123
  return this.items.reduce((sum, item) => sum + item.balanceInvoicedAmount, 0);
95
124
  }
125
+ get totalPaymentsAmount() {
126
+ return this.payments.reduce((sum, item) => sum + item.price, 0);
127
+ }
96
128
  /**
97
129
  * The difference between the totalWithVAT of the invoice and the sum of all balanceInvoicedAmount of the invoiced balance items.
98
130
  * totalBalanceInvoicedAmount + balanceRoundingAmount = totalWithVAT
@@ -100,7 +132,7 @@ class Invoice extends simple_encoding_1.AutoEncoder {
100
132
  * Best viewed as a virtual extra balance item linked to the invoice to compensate.
101
133
  *
102
134
  * This is used to explain and report why there is a difference between the sum of the balance item's prices and the actually invoiced price, comparable with roundingAmount on payments.
103
- * - Say we invoice 3 items of 0,242 euro. The sum would be 0,726. The invoice total price might be 0,73 because of rounding rules. Then the balanceRoundingAmount would be -0,004.
135
+ * - Say we invoice 3 items of 0,242 euro. The sum would be 0,726. The invoice total price might be 0,73 because of rounding rules. Then the balanceRoundingAmount would be 0,004.
104
136
  */
105
137
  get balanceRoundingAmount() {
106
138
  return this.totalWithVAT - this.totalBalanceInvoicedAmount;
@@ -118,41 +150,220 @@ class Invoice extends simple_encoding_1.AutoEncoder {
118
150
  get totalWithVAT() {
119
151
  return this.totalWithoutVAT + this.VATTotalAmount + this.payableRoundingAmount;
120
152
  }
121
- calculateVAT() {
122
- // For every VAT category, calculate the taxable amount and VAT amount
123
- const categories = new Map();
124
- for (const item of this.items) {
125
- let key;
126
- if (item.VATExcempt === null) {
127
- key = `vat_${item.VATPercentage}`;
153
+ validateVATRates() {
154
+ let intra = false;
155
+ if (this.customer.company && this.customer.company.VATNumber && this.customer.company.address) {
156
+ if (this.seller.VATNumber && this.seller.address) {
157
+ // Reverse charged vat applicable?
158
+ if (this.customer.company.address.country !== this.seller.address.country) {
159
+ intra = true;
160
+ }
128
161
  }
129
- else {
130
- key = `excempt_${item.VATExcempt}_${item.VATExcempt}`;
162
+ }
163
+ if (intra) {
164
+ for (const item of this.items) {
165
+ if (item.VATExcempt !== BalanceItem_js_1.VATExcemptReason.IntraCommunity) {
166
+ throw new simple_errors_1.SimpleError({
167
+ code: 'missing_vat_excemption',
168
+ message: 'Missing IntraCommunity VAT excemption',
169
+ human: $t('8b562a1d-e7c0-4110-b320-db535f0ea0e9'),
170
+ });
171
+ }
131
172
  }
132
- let category = categories.get(key);
133
- if (!category) {
134
- category = new VATSubtotal();
135
- category.VATPercentage = item.VATExcempt === null ? item.VATPercentage : 0;
136
- category.VATExcempt = item.VATExcempt;
137
- categories.set(key, category);
173
+ }
174
+ else {
175
+ for (const item of this.items) {
176
+ if (item.VATExcempt === BalanceItem_js_1.VATExcemptReason.IntraCommunity) {
177
+ throw new simple_errors_1.SimpleError({
178
+ code: 'erroneous_vat_excemption',
179
+ message: 'IntraCommunity VAT excemption should not apply to this item',
180
+ human: $t('d2c3f57f-ffae-45ea-97ce-3f4f30839cd6'),
181
+ });
182
+ }
138
183
  }
139
- category.taxablePrice += item.totalWithoutVAT;
140
184
  }
141
- // Calculate VAT amount for each category and round to 1 cent
142
- for (const category of categories.values()) {
185
+ }
186
+ calculateVAT() {
187
+ // For every VAT category, calculate the taxable amount and VAT amount
188
+ this.VATTotal = InvoicedBalanceItem_js_1.InvoicedBalanceItem.groupPerVATCategory(this.items).map((items) => {
189
+ const category = new VATSubtotal();
190
+ category.VATPercentage = items[0].VATExcempt === null ? items[0].VATPercentage : 0;
191
+ category.VATExcempt = items[0].VATExcempt;
192
+ category.taxablePrice = items.reduce((a, b) => a + b.totalWithoutVAT, 0);
143
193
  if (!category.VATExcempt) {
144
- category.VAT = Math.round(category.taxablePrice * category.VATPercentage / 10000) * 100;
194
+ category.VAT = utility_1.STMath.round(category.taxablePrice * category.VATPercentage / 10000) * 100;
145
195
  }
146
196
  else {
147
197
  category.VAT = 0;
148
198
  }
149
- }
150
- this.VATTotal = Array.from(categories.values());
199
+ return category;
200
+ });
151
201
  }
152
202
  addItem(item) {
153
203
  this.items.push(item);
154
204
  this.calculateVAT();
155
205
  }
206
+ get type() {
207
+ if (this.totalWithVAT < 0) {
208
+ return InvoiceType.CreditNote;
209
+ }
210
+ return InvoiceType.Invoice;
211
+ }
212
+ get theme() {
213
+ if (this.type === InvoiceType.CreditNote) {
214
+ return 'theme-error';
215
+ }
216
+ }
217
+ get priceBreakdown() {
218
+ return this.getPriceBreakdown();
219
+ }
220
+ getPriceBreakdown(options) {
221
+ return [
222
+ {
223
+ name: $t(`d642f190-1607-4f54-8530-7af2f15c651b`),
224
+ price: this.totalWithoutVAT,
225
+ },
226
+ {
227
+ name: $t(`13c04b8f-80f5-4274-9ea1-badb0f88a091`) + (this.VATTotal.length === 1 ? ' (' + utility_1.Formatter.percentage(this.VATTotal[0].VATPercentage * 100) + ')' : ''),
228
+ description: this.VATTotal.length === 1 && this.VATTotal[0].VATExcempt ? (0, BalanceItem_js_1.getVATExcemptInvoiceNote)(this.VATTotal[0].VATExcempt) : undefined,
229
+ price: this.VATTotalAmount,
230
+ action: this.VATTotal.length > 1 ? options === null || options === void 0 ? void 0 : options.vatAction : undefined,
231
+ },
232
+ ...(this.payableRoundingAmount !== 0
233
+ ? [
234
+ {
235
+ name: $t(`dafd5091-0698-4117-bc5a-db8ba05cefcd`),
236
+ price: this.payableRoundingAmount,
237
+ },
238
+ ]
239
+ : []),
240
+ {
241
+ name: $t(`0376551a-9af8-44b7-8ab3-d343384dc900`),
242
+ price: this.totalWithVAT,
243
+ },
244
+ ];
245
+ }
246
+ updatePayableRoundingAmount() {
247
+ // Calculate difference between the invoice price and the payments price
248
+ const difference = this.totalPaymentsAmount - (this.totalWithVAT - this.payableRoundingAmount);
249
+ if (Math.abs(difference) < 500) { // Correct maximum 5 cents
250
+ this.payableRoundingAmount = difference;
251
+ }
252
+ else {
253
+ this.payableRoundingAmount = 0;
254
+ }
255
+ }
256
+ /** */
257
+ correctRoundingByUpdatingPrices() {
258
+ console.log('correctRoundingByUpdatingPrices');
259
+ const difference = this.totalPaymentsAmount - (this.totalWithVAT - this.payableRoundingAmount);
260
+ if (difference === 0) {
261
+ // No need to do any magic
262
+ return;
263
+ }
264
+ // For each VAT group, we start with the expected total without VAT.
265
+ // We calculate the difference and try to correct for it within the same VAT group.
266
+ // We first try to apply extra cents (or removal of cents) to the items with the highest difference
267
+ for (const items of InvoicedBalanceItem_js_1.InvoicedBalanceItem.groupPerVATCategory(this.items)) {
268
+ console.log('Calculating for group', items);
269
+ const current = items.reduce((a, b) => a + b.totalWithoutVAT, 0);
270
+ const precise = items.reduce((a, b) => a + b.preciseTotalWithoutVAT, 0);
271
+ const toAddToTaxablePrice = utility_1.STMath.round((precise - current) / 100) * 100;
272
+ console.log('toAddToTaxablePrice', toAddToTaxablePrice);
273
+ if (toAddToTaxablePrice === 0) {
274
+ // Less than 1 cent difference, we cannot apply this
275
+ continue;
276
+ }
277
+ // If toAddToTaxablePrice > 0 -> te weinig aangerekend - difference moet worden toegevoegd aan taxableprice
278
+ // If toAddToTaxablePrice < 0 -> te veel aangerekend - difference moet worden toegevoegd aan taxableprice
279
+ function getNext() {
280
+ // Rank items by difference
281
+ items.sort((a, b) => {
282
+ const aDiff = a.preciseTotalWithoutVAT - a.totalWithoutVAT;
283
+ const bDiff = b.preciseTotalWithoutVAT - b.totalWithoutVAT;
284
+ if (toAddToTaxablePrice < 0) {
285
+ // We need to subtract, so sort ascending (largest negative items first)
286
+ return aDiff - bDiff;
287
+ }
288
+ return bDiff - aDiff; // Sort descending
289
+ });
290
+ const next = items[0];
291
+ if (!next) {
292
+ return;
293
+ }
294
+ return next;
295
+ }
296
+ let next = getNext();
297
+ let loops = 0;
298
+ while (next && loops < 100) {
299
+ loops++;
300
+ const current = items.reduce((a, b) => a + b.totalWithoutVAT, 0);
301
+ const currentToAddToTaxablePrice = utility_1.STMath.round((precise - current) / 100) * 100;
302
+ if (currentToAddToTaxablePrice === 0 || Math.sign(currentToAddToTaxablePrice) !== Math.sign(toAddToTaxablePrice)) {
303
+ console.log('Stopped group calculation because currentToAddToTaxablePrice is zero or switched sign', currentToAddToTaxablePrice);
304
+ break;
305
+ }
306
+ // Change prices in steps of 0.005 (total price, so divided by quantity)
307
+ let step = Math.round(50 * 10000 / Math.abs(next.quantity));
308
+ if (step <= 1) {
309
+ step = 1; // Might jump further than expected / wanted
310
+ }
311
+ const addition = Math.sign(currentToAddToTaxablePrice) * Math.sign(next.quantity) * step;
312
+ next.unitPrice += addition;
313
+ next.addedToUnitPriceToCorrectVAT += addition;
314
+ console.log('Increasing unit price of ', next, 'with ' + addition);
315
+ // todo
316
+ next = getNext();
317
+ }
318
+ console.log('Done calculating group');
319
+ }
320
+ console.log('Done correctRoundingByUpdatingPrices');
321
+ }
322
+ /**
323
+ * Call this method after changing the payments related to an invoice.
324
+ */
325
+ buildFromPayments() {
326
+ if (this.number) {
327
+ throw new simple_errors_1.SimpleError({
328
+ code: 'invoice_has_number',
329
+ message: 'An invoice is immutable after it has been generated',
330
+ });
331
+ }
332
+ // Keep the sum of all balance items.
333
+ const balanceItemsMap = new Map();
334
+ for (const payment of this.payments) {
335
+ for (const item of payment.balanceItemPayments) {
336
+ let data = balanceItemsMap.get(item.balanceItem.id);
337
+ if (!data) {
338
+ data = {
339
+ balanceItem: item.balanceItem,
340
+ amount: 0,
341
+ };
342
+ balanceItemsMap.set(item.balanceItem.id, data);
343
+ }
344
+ data.amount += item.price;
345
+ }
346
+ }
347
+ const invoicedItems = [];
348
+ for (const item of balanceItemsMap.values()) {
349
+ const invoiced = InvoicedBalanceItem_js_1.InvoicedBalanceItem.createFor(item.balanceItem, item.amount);
350
+ invoicedItems.push(invoiced);
351
+ }
352
+ invoicedItems.sort((a, b) => {
353
+ return utility_1.Sorter.stack(utility_1.Sorter.byNumberValue(a.totalWithoutVAT, b.totalWithoutVAT), utility_1.Sorter.byStringValue(a.name || a.description, b.name || b.description));
354
+ });
355
+ this.items = invoicedItems;
356
+ this.correctRoundingByUpdatingPrices();
357
+ this.calculateVAT();
358
+ this.updatePayableRoundingAmount();
359
+ if (this.totalWithVAT !== this.totalPaymentsAmount) {
360
+ throw new simple_errors_1.SimpleError({
361
+ code: 'price_difference',
362
+ message: 'The price of the generated invoice did not match the price of the corresponding payments. Possibly caused by rounding that could not be corrected automatically.',
363
+ human: $t('8de3f0d6-3bbe-4668-a357-1fbf3d698177'),
364
+ });
365
+ }
366
+ }
156
367
  }
157
368
  exports.Invoice = Invoice;
158
369
  tslib_1.__decorate([
@@ -176,6 +387,9 @@ tslib_1.__decorate([
176
387
  tslib_1.__decorate([
177
388
  (0, simple_encoding_1.field)({ decoder: new simple_encoding_1.ArrayDecoder(InvoicedBalanceItem_js_1.InvoicedBalanceItem) })
178
389
  ], Invoice.prototype, "items", void 0);
390
+ tslib_1.__decorate([
391
+ (0, simple_encoding_1.field)({ decoder: new simple_encoding_1.ArrayDecoder(PaymentGeneral_js_1.PaymentGeneral) })
392
+ ], Invoice.prototype, "payments", void 0);
179
393
  tslib_1.__decorate([
180
394
  (0, simple_encoding_1.field)({ decoder: simple_encoding_1.IntegerDecoder })
181
395
  ], Invoice.prototype, "payableRoundingAmount", void 0);
@@ -206,4 +420,16 @@ tslib_1.__decorate([
206
420
  tslib_1.__decorate([
207
421
  (0, simple_encoding_1.field)({ decoder: simple_encoding_1.BooleanDecoder, optional: true })
208
422
  ], Invoice.prototype, "didSendPeppol", void 0);
423
+ tslib_1.__decorate([
424
+ (0, simple_encoding_1.field)({ decoder: simple_encoding_1.DateDecoder, nullable: true })
425
+ ], Invoice.prototype, "invoicedAt", void 0);
426
+ tslib_1.__decorate([
427
+ (0, simple_encoding_1.field)({ decoder: simple_encoding_1.DateDecoder, nullable: true })
428
+ ], Invoice.prototype, "dueAt", void 0);
429
+ tslib_1.__decorate([
430
+ (0, simple_encoding_1.field)({ decoder: simple_encoding_1.DateDecoder })
431
+ ], Invoice.prototype, "createdAt", void 0);
432
+ tslib_1.__decorate([
433
+ (0, simple_encoding_1.field)({ decoder: simple_encoding_1.DateDecoder })
434
+ ], Invoice.prototype, "updatedAt", void 0);
209
435
  //# sourceMappingURL=Invoice.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Invoice.js","sourceRoot":"","sources":["../../../src/billing/Invoice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Invoice.js","sourceRoot":"","sources":["../../../src/billing/Invoice.ts"],"names":[],"mappings":"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"}
@@ -48,6 +48,14 @@ export declare class InvoicedBalanceItem extends AutoEncoder {
48
48
  * = LineExtensionAmount
49
49
  */
50
50
  get totalWithoutVAT(): number;
51
+ /**
52
+ * Total without VAT, but not rounded
53
+ */
54
+ get preciseTotalWithoutVAT(): number;
55
+ /**
56
+ * Debug helper
57
+ */
58
+ addedToUnitPriceToCorrectVAT: number;
51
59
  /**
52
60
  * Creates a default configuration for a balance item that needs to be invoiced. The result can still be adjusted to correct rounding issues, because
53
61
  * a balanace item cannot always be perfectly represented on an invoice (on an invoice rounding happens on invoice level, while balance items can have any price that is not really rounded at any time unless when paid).
@@ -56,5 +64,10 @@ export declare class InvoicedBalanceItem extends AutoEncoder {
56
64
  * @param amount paid (or to be paid) price, should always include VAT if there is VAT
57
65
  */
58
66
  static createFor(balanceItem: BalanceItem, amount: number): InvoicedBalanceItem;
67
+ /**
68
+ * Important, this influences VAT calculatio. Items are grouped by key and VAT is calculated per group.
69
+ */
70
+ static getVATUniqueKey(item: InvoicedBalanceItem): string;
71
+ static groupPerVATCategory(items: InvoicedBalanceItem[]): InvoicedBalanceItem[][];
59
72
  }
60
73
  //# sourceMappingURL=InvoicedBalanceItem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InvoicedBalanceItem.d.ts","sourceRoot":"","sources":["../../../src/billing/InvoicedBalanceItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqE,MAAM,6BAA6B,CAAC;AAE7H,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGlE,qBAAa,mBAAoB,SAAQ,WAAW;IAEhD,EAAE,EAAE,MAAM,CAAC;IAGX,aAAa,SAAM;IAGnB,IAAI,SAAM;IAGV,WAAW,SAAM;IAEjB;;;;;;;;;;OAUG;IAEH,qBAAqB,SAAK;IAE1B;;;;;OAKG;IAEH,QAAQ,SAAW;IAEnB;;;OAGG;IAEH,SAAS,SAAK;IAEd;;;OAGG;IAEH,aAAa,EAAE,MAAM,CAAK;IAE1B;;OAEG;IAEH,WAAW,UAAS;IAEpB;;;OAGG;IAEH,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAE3C;;;OAGG;IACH,IAAI,eAAe,WAElB;IAED;;;;;;OAMG;IACH,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM;CA2C5D"}
1
+ {"version":3,"file":"InvoicedBalanceItem.d.ts","sourceRoot":"","sources":["../../../src/billing/InvoicedBalanceItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqE,MAAM,6BAA6B,CAAC;AAE7H,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIlE,qBAAa,mBAAoB,SAAQ,WAAW;IAEhD,EAAE,EAAE,MAAM,CAAC;IAGX,aAAa,SAAM;IAGnB,IAAI,SAAM;IAGV,WAAW,SAAM;IAEjB;;;;;;;;;;OAUG;IAEH,qBAAqB,SAAK;IAE1B;;;;;OAKG;IAEH,QAAQ,SAAW;IAEnB;;;OAGG;IAEH,SAAS,SAAK;IAEd;;;OAGG;IAEH,aAAa,EAAE,MAAM,CAAK;IAE1B;;OAEG;IAEH,WAAW,UAAS;IAEpB;;;OAGG;IAEH,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAE3C;;;OAGG;IACH,IAAI,eAAe,WAElB;IAED;;OAEG;IACH,IAAI,sBAAsB,WAKzB;IAED;;OAEG;IACH,4BAA4B,SAAK;IAEjC;;;;;;OAMG;IACH,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM;IAkDzD;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,mBAAmB;IAOhD,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,EAAE,EAAE;CAgBpF"}
@@ -6,6 +6,7 @@ const simple_encoding_1 = require("@simonbackx/simple-encoding");
6
6
  const uuid_1 = require("uuid");
7
7
  const BalanceItem_js_1 = require("../BalanceItem.js");
8
8
  const simple_errors_1 = require("@simonbackx/simple-errors");
9
+ const utility_1 = require("@stamhoofd/utility");
9
10
  class InvoicedBalanceItem extends simple_encoding_1.AutoEncoder {
10
11
  constructor() {
11
12
  super(...arguments);
@@ -50,13 +51,26 @@ class InvoicedBalanceItem extends simple_encoding_1.AutoEncoder {
50
51
  * mistakes can be corrected and credited.
51
52
  */
52
53
  this.VATExcempt = null;
54
+ /**
55
+ * Debug helper
56
+ */
57
+ this.addedToUnitPriceToCorrectVAT = 0;
53
58
  }
54
59
  /**
55
60
  * This should be rounded to 2 decimals to match PEPPOL requirements
56
61
  * = LineExtensionAmount
57
62
  */
58
63
  get totalWithoutVAT() {
59
- return Math.round(this.unitPrice * this.quantity / 1000000) * 100;
64
+ return utility_1.STMath.round(this.unitPrice * this.quantity / 1000000) * 100;
65
+ }
66
+ /**
67
+ * Total without VAT, but not rounded
68
+ */
69
+ get preciseTotalWithoutVAT() {
70
+ if (this.VATExcempt) {
71
+ return this.balanceInvoicedAmount;
72
+ }
73
+ return this.balanceInvoicedAmount * 100 / (100 + this.VATPercentage);
60
74
  }
61
75
  /**
62
76
  * Creates a default configuration for a balance item that needs to be invoiced. The result can still be adjusted to correct rounding issues, because
@@ -83,9 +97,9 @@ class InvoicedBalanceItem extends simple_encoding_1.AutoEncoder {
83
97
  item.VATExcempt = balanceItem.VATExcempt;
84
98
  item.VATIncluded = balanceItem.VATIncluded;
85
99
  // Calculate amount and unit price
86
- const balanceItemUnitPriceWithVAT = Math.round(balanceItem.priceWithVAT / balanceItem.quantity);
87
- const quantity = Math.round(item.balanceInvoicedAmount * 10000 / balanceItemUnitPriceWithVAT); // Amount per ten thousand
88
- if (quantity <= 0) {
100
+ const balanceItemUnitPriceWithVAT = utility_1.STMath.round(balanceItem.priceWithVAT / balanceItem.quantity);
101
+ const quantity = utility_1.STMath.round(item.balanceInvoicedAmount * 10000 / balanceItemUnitPriceWithVAT); // Amount per ten thousand
102
+ if (quantity === 0) {
89
103
  throw new simple_errors_1.SimpleError({
90
104
  message: 'Invoiced amount is too low to create an invoiced balance item',
91
105
  human: $t('551f6cc0-0b1a-4a62-8e09-cef159f5f7d5'),
@@ -102,9 +116,37 @@ class InvoicedBalanceItem extends simple_encoding_1.AutoEncoder {
102
116
  // so this is disabled for now. Rounding will happen on line level though
103
117
  // item.unitPrice = Math.round(item.unitPrice / 100) * 100;
104
118
  // round as integer instead (0.0001):
105
- item.unitPrice = Math.round(item.unitPrice);
119
+ item.unitPrice = utility_1.STMath.round(item.unitPrice);
120
+ // Make sure unit price is always positive, and quantity is negative instead
121
+ if (item.unitPrice < 0) {
122
+ item.unitPrice = -item.unitPrice;
123
+ item.quantity = -item.quantity;
124
+ }
106
125
  return item;
107
126
  }
127
+ /**
128
+ * Important, this influences VAT calculatio. Items are grouped by key and VAT is calculated per group.
129
+ */
130
+ static getVATUniqueKey(item) {
131
+ if (item.VATExcempt === null) {
132
+ return `vat_${item.VATPercentage}`;
133
+ }
134
+ return `excempt_${item.VATExcempt}_${item.VATExcempt}`;
135
+ }
136
+ static groupPerVATCategory(items) {
137
+ // For every VAT category, calculate the taxable amount and VAT amount
138
+ const categories = new Map();
139
+ for (const item of items) {
140
+ const key = this.getVATUniqueKey(item);
141
+ let category = categories.get(key);
142
+ if (!category) {
143
+ category = [];
144
+ categories.set(key, category);
145
+ }
146
+ category.push(item);
147
+ }
148
+ return [...categories.values()];
149
+ }
108
150
  }
109
151
  exports.InvoicedBalanceItem = InvoicedBalanceItem;
110
152
  tslib_1.__decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"InvoicedBalanceItem.js","sourceRoot":"","sources":["../../../src/billing/InvoicedBalanceItem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InvoicedBalanceItem.js","sourceRoot":"","sources":["../../../src/billing/InvoicedBalanceItem.ts"],"names":[],"mappings":";;;;AAAA,iEAA6H;AAC7H,+BAAoC;AACpC,sDAAkE;AAClE,6DAAwD;AACxD,gDAA4C;AAE5C,MAAa,mBAAoB,SAAQ,6BAAW;IAApD;;QAKI,kBAAa,GAAG,EAAE,CAAC;QAGnB,SAAI,GAAG,EAAE,CAAC;QAGV,gBAAW,GAAG,EAAE,CAAC;QAEjB;;;;;;;;;;WAUG;QAEH,0BAAqB,GAAG,CAAC,CAAC;QAE1B;;;;;WAKG;QAEH,aAAQ,GAAG,KAAO,CAAC;QAEnB;;;WAGG;QAEH,cAAS,GAAG,CAAC,CAAC;QAEd;;;WAGG;QAEH,kBAAa,GAAW,CAAC,CAAC;QAE1B;;WAEG;QAEH,gBAAW,GAAG,KAAK,CAAC;QAEpB;;;WAGG;QAEH,eAAU,GAA4B,IAAI,CAAC;QAoB3C;;WAEG;QACH,iCAA4B,GAAG,CAAC,CAAC;IAqFrC,CAAC;IA1GG;;;OAGG;IACH,IAAI,eAAe;QACf,OAAO,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAU,CAAC,GAAG,GAAG,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,IAAI,sBAAsB;QACtB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC,qBAAqB,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACzE,CAAC;IAOD;;;;;;OAMG;IACH,MAAM,CAAC,SAAS,CAAC,WAAwB,EAAE,MAAc;;QACrD,IAAI,WAAW,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,IAAI,2BAAW,CAAC;gBAClB,OAAO,EAAE,2EAA2E;gBACpF,KAAK,EAAE,EAAE,CAAC,sCAAsC,CAAC;gBACjD,IAAI,EAAE,qCAAqC;aAC9C,CAAC,CAAC;QACP,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,MAAA,WAAW,CAAC,eAAe,mCAAI,EAAE,CAAC;QACrD,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;QAE3C,kCAAkC;QAClC,MAAM,2BAA2B,GAAG,gBAAM,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAClG,MAAM,QAAQ,GAAG,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,GAAG,KAAO,GAAG,2BAA2B,CAAC,CAAC,CAAC,0BAA0B;QAC7H,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,2BAAW,CAAC;gBAClB,OAAO,EAAE,+DAA+D;gBACxE,KAAK,EAAE,EAAE,CAAC,sCAAsC,CAAC;gBACjD,IAAI,EAAE,yBAAyB;aAClC,CAAC,CAAC;QACP,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,KAAO,GAAG,QAAQ,CAAC;QAE7C,uCAAuC;QACvC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;QAC9E,CAAC;QAED,gEAAgE;QAChE,yEAAyE;QACzE,2DAA2D;QAC3D,qCAAqC;QACrC,IAAI,CAAC,SAAS,GAAG,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE9C,4EAA4E;QAC5E,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACjC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnC,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAyB;QAC5C,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,CAAC;QACD,OAAO,WAAW,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,KAA4B;QACnD,sEAAsE;QACtE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAiC,CAAC;QAC5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAEvC,IAAI,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,QAAQ,GAAG,EAAE,CAAC;gBACd,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAClC,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACpC,CAAC;CACJ;AAzKD,kDAyKC;AAvKG;IADC,IAAA,uBAAK,EAAC,EAAE,OAAO,EAAE,+BAAa,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,IAAA,SAAM,GAAE,EAAE,CAAC;+CACrD;AAGX;IADC,IAAA,uBAAK,EAAC,EAAE,OAAO,EAAE,+BAAa,EAAE,CAAC;0DACf;AAGnB;IADC,IAAA,uBAAK,EAAC,EAAE,OAAO,EAAE,+BAAa,EAAE,CAAC;iDACxB;AAGV;IADC,IAAA,uBAAK,EAAC,EAAE,OAAO,EAAE,+BAAa,EAAE,CAAC;wDACjB;AAcjB;IADC,IAAA,uBAAK,EAAC,EAAE,OAAO,EAAE,gCAAc,EAAE,CAAC;kEACT;AAS1B;IADC,IAAA,uBAAK,EAAC,EAAE,OAAO,EAAE,gCAAc,EAAE,CAAC;qDAChB;AAOnB;IADC,IAAA,uBAAK,EAAC,EAAE,OAAO,EAAE,gCAAc,EAAE,CAAC;sDACrB;AAOd;IADC,IAAA,uBAAK,EAAC,EAAE,OAAO,EAAE,gCAAc,EAAE,CAAC;0DACT;AAM1B;IADC,IAAA,uBAAK,EAAC,EAAE,OAAO,EAAE,gCAAc,EAAE,CAAC;wDACf;AAOpB;IADC,IAAA,uBAAK,EAAC,EAAE,OAAO,EAAE,IAAI,6BAAW,CAAC,iCAAgB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;uDAC3B"}
@@ -11,5 +11,6 @@ export * from './STPackageBundle.js';
11
11
  export * from './OrganizationPackagesStatus.js';
12
12
  export * from './STPendingInvoice.js';
13
13
  export * from './Invoice.js';
14
+ export { Invoice as InvoiceStruct } from './Invoice.js';
14
15
  export * from './InvoicedBalanceItem.js';
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/billing/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AAEtC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/billing/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AAEtC,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,cAAc,CAAC;AAExD,cAAc,0BAA0B,CAAC"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InvoiceStruct = void 0;
3
4
  const tslib_1 = require("tslib");
4
5
  tslib_1.__exportStar(require("./OrganizationPaymentMandate.js"), exports);
5
6
  tslib_1.__exportStar(require("./STBillingStatus.js"), exports);
@@ -14,5 +15,8 @@ tslib_1.__exportStar(require("./STPackageBundle.js"), exports);
14
15
  tslib_1.__exportStar(require("./OrganizationPackagesStatus.js"), exports);
15
16
  tslib_1.__exportStar(require("./STPendingInvoice.js"), exports);
16
17
  tslib_1.__exportStar(require("./Invoice.js"), exports);
18
+ // Alias
19
+ var Invoice_js_1 = require("./Invoice.js");
20
+ Object.defineProperty(exports, "InvoiceStruct", { enumerable: true, get: function () { return Invoice_js_1.Invoice; } });
17
21
  tslib_1.__exportStar(require("./InvoicedBalanceItem.js"), exports);
18
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/billing/index.ts"],"names":[],"mappings":";;;AAAA,0EAAgD;AAChD,+DAAqC;AACrC,wDAA8B;AAC9B,yDAA+B;AAC/B,6DAAmC;AACnC,6DAAmC;AACnC,+DAAqC;AACrC,gEAAsC;AACtC,yDAA+B;AAC/B,+DAAqC;AACrC,0EAAgD;AAChD,gEAAsC;AAEtC,uDAA6B;AAC7B,mEAAyC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/billing/index.ts"],"names":[],"mappings":";;;;AAAA,0EAAgD;AAChD,+DAAqC;AACrC,wDAA8B;AAC9B,yDAA+B;AAC/B,6DAAmC;AACnC,6DAAmC;AACnC,+DAAqC;AACrC,gEAAsC;AACtC,yDAA+B;AAC/B,+DAAqC;AACrC,0EAAgD;AAChD,gEAAsC;AAEtC,uDAA6B;AAC7B,QAAQ;AACR,2CAAwD;AAA/C,2GAAA,OAAO,OAAiB;AAEjC,mEAAyC"}
@@ -16,7 +16,8 @@ export declare enum EmailRecipientFilterType {
16
16
  MemberParents = "MemberParents",
17
17
  MemberUnverified = "MemberUnverified",
18
18
  Orders = "Orders",
19
- ReceivableBalances = "ReceivableBalances"
19
+ ReceivableBalances = "ReceivableBalances",
20
+ Documents = "Documents"
20
21
  }
21
22
  export declare function getExampleRecipient(type?: EmailRecipientFilterType | null): EmailRecipient;
22
23
  export declare enum EmailStatus {
@@ -1 +1 @@
1
- {"version":3,"file":"Email.d.ts","sourceRoot":"","sources":["../../../src/email/Email.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Email.d.ts","sourceRoot":"","sources":["../../../src/email/Email.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@ var EmailRecipientFilterType;
26
26
  EmailRecipientFilterType["MemberUnverified"] = "MemberUnverified";
27
27
  EmailRecipientFilterType["Orders"] = "Orders";
28
28
  EmailRecipientFilterType["ReceivableBalances"] = "ReceivableBalances";
29
+ EmailRecipientFilterType["Documents"] = "Documents";
29
30
  })(EmailRecipientFilterType || (exports.EmailRecipientFilterType = EmailRecipientFilterType = {}));
30
31
  function getExampleRecipient(type = null) {
31
32
  return MemberWithRegistrationsBlob_js_1.MemberWithRegistrationsBlob.create({
@@ -92,7 +93,7 @@ class EmailRecipientFilter extends simple_encoding_1.AutoEncoder {
92
93
  }
93
94
  get canShowInMemberPortal() {
94
95
  for (const filter of this.filters) {
95
- if (filter.type === EmailRecipientFilterType.Members || filter.type === EmailRecipientFilterType.MemberParents || filter.type === EmailRecipientFilterType.MemberUnverified || filter.type === EmailRecipientFilterType.RegistrationMembers || filter.type === EmailRecipientFilterType.RegistrationParents || filter.type === EmailRecipientFilterType.RegistrationUnverified) {
96
+ if (filter.type === EmailRecipientFilterType.Members || filter.type === EmailRecipientFilterType.MemberParents || filter.type === EmailRecipientFilterType.MemberUnverified || filter.type === EmailRecipientFilterType.RegistrationMembers || filter.type === EmailRecipientFilterType.RegistrationParents || filter.type === EmailRecipientFilterType.RegistrationUnverified || filter.type === EmailRecipientFilterType.Documents) {
96
97
  return true;
97
98
  }
98
99
  }