@stamhoofd/models 2.19.0 → 2.20.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.
- package/dist/src/models/Member.js.map +1 -1
- package/dist/src/models/MemberResponsibilityRecord.d.ts +5 -0
- package/dist/src/models/MemberResponsibilityRecord.d.ts.map +1 -1
- package/dist/src/models/MemberResponsibilityRecord.js +16 -1
- package/dist/src/models/MemberResponsibilityRecord.js.map +1 -1
- package/dist/src/models/Organization.d.ts +2 -0
- package/dist/src/models/Organization.d.ts.map +1 -1
- package/dist/src/models/Organization.js +19 -3
- package/dist/src/models/Organization.js.map +1 -1
- package/dist/src/models/RegisterCode.d.ts +0 -10
- package/dist/src/models/RegisterCode.d.ts.map +1 -1
- package/dist/src/models/RegisterCode.js +0 -86
- package/dist/src/models/RegisterCode.js.map +1 -1
- package/dist/src/models/STCredit.d.ts +0 -7
- package/dist/src/models/STCredit.d.ts.map +1 -1
- package/dist/src/models/STCredit.js +0 -69
- package/dist/src/models/STCredit.js.map +1 -1
- package/dist/src/models/STInvoice.d.ts +2 -20
- package/dist/src/models/STInvoice.d.ts.map +1 -1
- package/dist/src/models/STInvoice.js +0 -364
- package/dist/src/models/STInvoice.js.map +1 -1
- package/dist/src/models/STPendingInvoice.d.ts +1 -21
- package/dist/src/models/STPendingInvoice.d.ts.map +1 -1
- package/dist/src/models/STPendingInvoice.js +0 -213
- package/dist/src/models/STPendingInvoice.js.map +1 -1
- package/dist/src/models/UsedRegisterCode.d.ts +0 -5
- package/dist/src/models/UsedRegisterCode.d.ts.map +1 -1
- package/dist/src/models/UsedRegisterCode.js +0 -101
- package/dist/src/models/UsedRegisterCode.js.map +1 -1
- package/package.json +2 -2
- package/src/models/Member.ts +5 -5
- package/src/models/MemberResponsibilityRecord.ts +21 -2
- package/src/models/Organization.ts +23 -3
- package/src/models/RegisterCode.ts +0 -95
- package/src/models/STCredit.ts +0 -82
- package/src/models/STInvoice.ts +2 -433
- package/src/models/STPendingInvoice.ts +2 -247
- package/src/models/UsedRegisterCode.ts +0 -115
- package/dist/src/helpers/InvoiceBuilder.d.ts +0 -29
- package/dist/src/helpers/InvoiceBuilder.d.ts.map +0 -1
- package/dist/src/helpers/InvoiceBuilder.js +0 -407
- package/dist/src/helpers/InvoiceBuilder.js.map +0 -1
- package/dist/src/helpers/InvoiceBuilder.test.d.ts +0 -2
- package/dist/src/helpers/InvoiceBuilder.test.d.ts.map +0 -1
- package/dist/src/helpers/InvoiceBuilder.test.js +0 -52
- package/dist/src/helpers/InvoiceBuilder.test.js.map +0 -1
- package/src/helpers/InvoiceBuilder.test.ts +0 -57
- package/src/helpers/InvoiceBuilder.ts +0 -501
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.STCredit = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const simple_database_1 = require("@simonbackx/simple-database");
|
|
6
|
-
const structures_1 = require("@stamhoofd/structures");
|
|
7
6
|
const uuid_1 = require("uuid");
|
|
8
7
|
class STCredit extends simple_database_1.Model {
|
|
9
8
|
static table = "stamhoofd_credits";
|
|
@@ -16,74 +15,6 @@ class STCredit extends simple_database_1.Model {
|
|
|
16
15
|
createdAt;
|
|
17
16
|
expireAt = null;
|
|
18
17
|
updatedAt;
|
|
19
|
-
static async getForOrganization(organizationId) {
|
|
20
|
-
return await STCredit.where({ organizationId }, {
|
|
21
|
-
sort: [{
|
|
22
|
-
column: "createdAt",
|
|
23
|
-
direction: "DESC"
|
|
24
|
-
}]
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
static async getBalance(organizationId) {
|
|
28
|
-
const now = new Date();
|
|
29
|
-
const credits = await this.getForOrganization(organizationId);
|
|
30
|
-
credits.reverse();
|
|
31
|
-
let balance = 0;
|
|
32
|
-
let balanceTransactions = 0;
|
|
33
|
-
for (const credit of credits) {
|
|
34
|
-
if (credit.expireAt !== null && credit.expireAt <= now) {
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
// TODO: we can expire credits here
|
|
38
|
-
balance += credit.change;
|
|
39
|
-
if (balance < 0) {
|
|
40
|
-
// This is needed to make deleting credit and expiring credit work.
|
|
41
|
-
// At no point in time, the credits can get negative.
|
|
42
|
-
// E.g. Getting credits, using them, and later expiring 'getting the credits' won't have impact on future credits
|
|
43
|
-
balance = 0;
|
|
44
|
-
}
|
|
45
|
-
if (credit.allowTransactions || credit.change < 0) {
|
|
46
|
-
balanceTransactions += credit.change;
|
|
47
|
-
// No point in time we can have more balance for transactions
|
|
48
|
-
balanceTransactions = Math.min(Math.max(balanceTransactions, 0), balance);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return { balance: balance - balanceTransactions, balanceTransactions };
|
|
52
|
-
}
|
|
53
|
-
static async applyCredits(organizationId, invoice, dryRun) {
|
|
54
|
-
// Apply credits
|
|
55
|
-
const { balance, balanceTransactions } = await STCredit.getBalance(organizationId);
|
|
56
|
-
if (balance > 0 || balanceTransactions > 0) {
|
|
57
|
-
// Loop all items where you can use credits for
|
|
58
|
-
const maxCredits = invoice.meta.items.filter(i => i.canUseCredits).reduce((price, item) => price + item.price, 0);
|
|
59
|
-
let applyValue = Math.min(maxCredits, balance);
|
|
60
|
-
if (balanceTransactions > 0) {
|
|
61
|
-
// Can apply to all items
|
|
62
|
-
const maxTransactionsCredits = invoice.meta.items.reduce((price, item) => price + item.price, 0) - applyValue;
|
|
63
|
-
applyValue += Math.min(maxTransactionsCredits, balanceTransactions);
|
|
64
|
-
}
|
|
65
|
-
if (applyValue > 0) {
|
|
66
|
-
invoice.meta.items.push(structures_1.STInvoiceItem.create({
|
|
67
|
-
name: "Gebruikt tegoed",
|
|
68
|
-
unitPrice: -applyValue,
|
|
69
|
-
amount: 1,
|
|
70
|
-
date: new Date()
|
|
71
|
-
}));
|
|
72
|
-
if (!dryRun) {
|
|
73
|
-
const credit = new STCredit();
|
|
74
|
-
credit.organizationId = organizationId;
|
|
75
|
-
credit.change = -applyValue;
|
|
76
|
-
credit.description = "Tijdelijk vrijgehouden voor lopende betaling";
|
|
77
|
-
// Reserve for one week (direct debit can take a while)
|
|
78
|
-
credit.expireAt = new Date();
|
|
79
|
-
credit.expireAt.setDate(credit.expireAt.getDate() + 7);
|
|
80
|
-
credit.expireAt.setMilliseconds(0);
|
|
81
|
-
await credit.save();
|
|
82
|
-
invoice.creditId = credit.id;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
18
|
}
|
|
88
19
|
exports.STCredit = STCredit;
|
|
89
20
|
tslib_1.__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"STCredit.js","sourceRoot":"","sources":["../../../src/models/STCredit.ts"],"names":[],"mappings":";;;;AAAA,iEAA4D;AAC5D
|
|
1
|
+
{"version":3,"file":"STCredit.js","sourceRoot":"","sources":["../../../src/models/STCredit.ts"],"names":[],"mappings":";;;;AAAA,iEAA4D;AAC5D,+BAAoC;AAGpC,MAAa,QAAS,SAAQ,uBAAK;IAC/B,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;IAEnC,UAAU;IAMV,EAAE,CAAU;IAGZ,cAAc,CAAS;IAGvB,WAAW,CAAS;IAGpB,MAAM,CAAS;IAGf,iBAAiB,GAAG,KAAK,CAAA;IAYzB,SAAS,CAAM;IAGf,QAAQ,GAAgB,IAAI,CAAA;IAU5B,SAAS,CAAM;;AA9CnB,4BA+CC;AAtCG;IALC,IAAA,wBAAM,EAAC;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK;YAC3C,OAAO,KAAK,IAAI,IAAA,SAAM,GAAE,CAAC;QAC7B,CAAC;KACJ,CAAC;oCACU;AAGZ;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gDACJ;AAGvB;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;6CACP;AAGpB;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;wCACb;AAGf;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;mDACH;AAYzB;IAVC,IAAA,wBAAM,EAAC;QACJ,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,GAAS;YAClC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACpB,OAAO,GAAG,CAAC;YACf,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;YACvB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACvB,OAAO,IAAI,CAAA;QACf,CAAC;KACJ,CAAC;2CACa;AAGf;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;0CACjB;AAU5B;IARC,IAAA,wBAAM,EAAC;QACJ,IAAI,EAAE,UAAU,EAAE,UAAU;YACxB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;YACvB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACvB,OAAO,IAAI,CAAA;QACf,CAAC;QACD,UAAU,EAAE,IAAI;KACnB,CAAC;2CACa"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ManyToOneRelation, Model } from "@simonbackx/simple-database";
|
|
2
|
-
import {
|
|
3
|
-
import { Organization, Payment
|
|
2
|
+
import { STInvoiceMeta } from '@stamhoofd/structures';
|
|
3
|
+
import { Organization, Payment } from './';
|
|
4
4
|
export declare class STInvoice extends Model {
|
|
5
5
|
static table: string;
|
|
6
6
|
private static numberCache;
|
|
@@ -29,23 +29,5 @@ export declare class STInvoice extends Model {
|
|
|
29
29
|
reference: string | null;
|
|
30
30
|
static organization: ManyToOneRelation<"organization", Organization>;
|
|
31
31
|
static payment: ManyToOneRelation<"payment", Payment>;
|
|
32
|
-
static createFor(organization: Organization): STInvoice;
|
|
33
|
-
getStructure(): Promise<STInvoiceStruct>;
|
|
34
|
-
getPackages(): Promise<STPackage[]>;
|
|
35
|
-
getOrganizationActivePackages(): Promise<STPackage[]>;
|
|
36
|
-
activatePackages(paymentSucceeded?: boolean): Promise<void>;
|
|
37
|
-
/**
|
|
38
|
-
* WARNING: only call this in the correct queue!
|
|
39
|
-
*/
|
|
40
|
-
markPaid({ sendEmail }?: {
|
|
41
|
-
sendEmail: boolean;
|
|
42
|
-
}): Promise<void>;
|
|
43
|
-
assignNextNumber(): Promise<void>;
|
|
44
|
-
generatePdf(): Promise<void>;
|
|
45
|
-
/**
|
|
46
|
-
* WARNGING: only call this method in the correct queue!
|
|
47
|
-
*/
|
|
48
|
-
markFailed(payment: Payment, markFailed?: boolean): Promise<void>;
|
|
49
|
-
static getBillingStatus(organization: Organization, hideExpired?: boolean): Promise<STBillingStatus>;
|
|
50
32
|
}
|
|
51
33
|
//# sourceMappingURL=STInvoice.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"STInvoice.d.ts","sourceRoot":"","sources":["../../../src/models/STInvoice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,iBAAiB,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"STInvoice.d.ts","sourceRoot":"","sources":["../../../src/models/STInvoice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,iBAAiB,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE3C,qBAAa,SAAU,SAAQ,KAAK;IAChC,MAAM,CAAC,KAAK,SAAwB;IAEpC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAsB;IAQhD,EAAE,EAAG,MAAM,CAAC;IAEZ;;OAEG;IAEH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B;;;OAGG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAO;IAE9B;;OAEG;IAEH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAO;IAG/B,IAAI,EAAE,aAAa,CAAA;IAEnB;;OAEG;IAEH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAO;IAG5B,MAAM,EAAE,IAAI,GAAG,IAAI,CAAO;IAY1B,SAAS,EAAE,IAAI,CAAA;IAUf,SAAS,EAAE,IAAI,CAAA;IAGf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAO;IAE/B,MAAM,CAAC,YAAY,kDAAuD;IAC1E,MAAM,CAAC,OAAO,wCAA6C;CAC9D"}
|
|
@@ -3,12 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.STInvoice = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const simple_database_1 = require("@simonbackx/simple-database");
|
|
6
|
-
const email_1 = require("@stamhoofd/email");
|
|
7
|
-
const queues_1 = require("@stamhoofd/queues");
|
|
8
6
|
const structures_1 = require("@stamhoofd/structures");
|
|
9
|
-
const utility_1 = require("@stamhoofd/utility");
|
|
10
7
|
const uuid_1 = require("uuid");
|
|
11
|
-
const InvoiceBuilder_1 = require("../helpers/InvoiceBuilder");
|
|
12
8
|
const _1 = require("./");
|
|
13
9
|
class STInvoice extends simple_database_1.Model {
|
|
14
10
|
static table = "stamhoofd_invoices";
|
|
@@ -39,366 +35,6 @@ class STInvoice extends simple_database_1.Model {
|
|
|
39
35
|
reference = null;
|
|
40
36
|
static organization = new simple_database_1.ManyToOneRelation(_1.Organization, "organization");
|
|
41
37
|
static payment = new simple_database_1.ManyToOneRelation(_1.Payment, "payment");
|
|
42
|
-
static createFor(organization) {
|
|
43
|
-
const invoice = new STInvoice();
|
|
44
|
-
invoice.organizationId = organization.id;
|
|
45
|
-
const date = new Date();
|
|
46
|
-
invoice.meta = structures_1.STInvoiceMeta.create({
|
|
47
|
-
date,
|
|
48
|
-
companyName: organization.meta.companyName ?? organization.name,
|
|
49
|
-
companyContact: organization.privateMeta.billingContact ?? "",
|
|
50
|
-
companyAddress: organization.meta.companyAddress ?? organization.address,
|
|
51
|
-
companyVATNumber: organization.meta.VATNumber,
|
|
52
|
-
companyNumber: organization.meta.companyNumber,
|
|
53
|
-
VATPercentage: (0, structures_1.calculateVATPercentage)(organization.meta.companyAddress ?? organization.address, organization.meta.VATNumber)
|
|
54
|
-
});
|
|
55
|
-
return invoice;
|
|
56
|
-
}
|
|
57
|
-
async getStructure() {
|
|
58
|
-
let payment;
|
|
59
|
-
if (this.paymentId) {
|
|
60
|
-
payment = await _1.Payment.getByID(this.paymentId);
|
|
61
|
-
}
|
|
62
|
-
return structures_1.STInvoice.create(Object.assign({}, this, {
|
|
63
|
-
payment: payment ? structures_1.Payment.create(payment) : null
|
|
64
|
-
}));
|
|
65
|
-
}
|
|
66
|
-
async getPackages() {
|
|
67
|
-
const ids = new Set();
|
|
68
|
-
for (const item of this.meta.items) {
|
|
69
|
-
if (item.package) {
|
|
70
|
-
ids.add(item.package.id);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
if (ids.size > 0) {
|
|
74
|
-
const packages = await _1.STPackage.getByIDs(...ids);
|
|
75
|
-
if (packages.length !== ids.size) {
|
|
76
|
-
console.warn("Invoice contains invalid package ids " + this.id);
|
|
77
|
-
}
|
|
78
|
-
return packages;
|
|
79
|
-
}
|
|
80
|
-
return [];
|
|
81
|
-
}
|
|
82
|
-
async getOrganizationActivePackages() {
|
|
83
|
-
return this.organizationId ? (await _1.STPackage.getForOrganization(this.organizationId)) : [];
|
|
84
|
-
}
|
|
85
|
-
async activatePackages(paymentSucceeded = false) {
|
|
86
|
-
const packages = await this.getPackages();
|
|
87
|
-
// Search for all packages and activate them if needed (might be possible that they are already validated)
|
|
88
|
-
for (const p of packages) {
|
|
89
|
-
// It is possible that the meta of the package has changed in the previous loop call (in pack.activate), so we need to refetch it otherwise we get 'meta' conflicts
|
|
90
|
-
const pack = (await _1.STPackage.getByID(p.id)) ?? p;
|
|
91
|
-
console.log("Activating package " + pack.id);
|
|
92
|
-
// We'll never have multiple invoices for the same package that are awaiting payments
|
|
93
|
-
if (paymentSucceeded) {
|
|
94
|
-
pack.meta.firstFailedPayment = null;
|
|
95
|
-
pack.meta.paymentFailedCount = 0;
|
|
96
|
-
}
|
|
97
|
-
await pack.activate();
|
|
98
|
-
// Activate doesn't save always, so save if needed:
|
|
99
|
-
await pack.save();
|
|
100
|
-
// Deactivate demo packages
|
|
101
|
-
const remove = [];
|
|
102
|
-
if (pack.meta.type === structures_1.STPackageType.Members) {
|
|
103
|
-
// Remove demo
|
|
104
|
-
remove.push(structures_1.STPackageType.TrialMembers);
|
|
105
|
-
}
|
|
106
|
-
if (pack.meta.type === structures_1.STPackageType.SingleWebshop || pack.meta.type === structures_1.STPackageType.Webshops) {
|
|
107
|
-
// Remove demo
|
|
108
|
-
remove.push(structures_1.STPackageType.TrialWebshops);
|
|
109
|
-
}
|
|
110
|
-
if (remove.length > 0 && this.organizationId) {
|
|
111
|
-
// Get all packages
|
|
112
|
-
const all = await _1.STPackage.getForOrganization(this.organizationId);
|
|
113
|
-
for (const pack of all) {
|
|
114
|
-
if (remove.includes(pack.meta.type)) {
|
|
115
|
-
console.log("Disabling demo package " + pack.id + " because package is bought.");
|
|
116
|
-
// Stop
|
|
117
|
-
pack.removeAt = new Date();
|
|
118
|
-
pack.removeAt.setTime(pack.removeAt.getTime() - 1000);
|
|
119
|
-
await pack.save();
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* WARNING: only call this in the correct queue!
|
|
127
|
-
*/
|
|
128
|
-
async markPaid({ sendEmail } = { sendEmail: true }) {
|
|
129
|
-
// Schule on the queue because we are modifying pending invoices
|
|
130
|
-
if (this.paidAt !== null) {
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
this.paidAt = new Date();
|
|
134
|
-
if (this.meta.priceWithoutVAT > 0) {
|
|
135
|
-
// Only assign a number if it was an non empty invoice
|
|
136
|
-
await this.assignNextNumber();
|
|
137
|
-
}
|
|
138
|
-
if (this.creditId !== null) {
|
|
139
|
-
const credit = await _1.STCredit.getByID(this.creditId);
|
|
140
|
-
if (credit) {
|
|
141
|
-
// This credit was used to pay this invoice (partially)
|
|
142
|
-
credit.description = this.number !== null ? "Factuur " + this.number : "Betaling " + this.id;
|
|
143
|
-
credit.expireAt = null;
|
|
144
|
-
await credit.save();
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
const packages = await this.getPackages();
|
|
148
|
-
// Increase paid amounts and paid prices
|
|
149
|
-
for (const item of this.meta.items) {
|
|
150
|
-
if (item.package) {
|
|
151
|
-
const pack = packages.find(p => p.id === item.package?.id);
|
|
152
|
-
if (pack) {
|
|
153
|
-
// Increase paid amount
|
|
154
|
-
pack.meta.paidPrice += item.price;
|
|
155
|
-
pack.meta.paidAmount += item.amount;
|
|
156
|
-
await pack.save();
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
// Search for all packages and activate them if needed (might be possible that they are already validated)
|
|
161
|
-
await this.activatePackages(true);
|
|
162
|
-
if (packages.length === 0) {
|
|
163
|
-
// Mark payments succeeded
|
|
164
|
-
const orgPackages = await this.getOrganizationActivePackages();
|
|
165
|
-
for (const p of orgPackages) {
|
|
166
|
-
if (p.meta.firstFailedPayment) {
|
|
167
|
-
const pack = (await _1.STPackage.getByID(p.id)) ?? p;
|
|
168
|
-
pack.meta.firstFailedPayment = null;
|
|
169
|
-
pack.meta.paymentFailedCount = 0;
|
|
170
|
-
await pack.save();
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
// If needed: remove the invoice items from the pending invoice
|
|
175
|
-
if (this.organizationId) {
|
|
176
|
-
const pendingInvoice = await _1.STPendingInvoice.getForOrganization(this.organizationId);
|
|
177
|
-
if (pendingInvoice) {
|
|
178
|
-
// Remove all invoice items that were paid
|
|
179
|
-
const newItems = [];
|
|
180
|
-
for (const item of pendingInvoice.meta.items) {
|
|
181
|
-
const found = this.meta.items.find(i => i.id === item.id);
|
|
182
|
-
if (!found) {
|
|
183
|
-
newItems.push(item);
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
console.log("Removed invoice item " + item.id + " from pending invoice " + pendingInvoice.id);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
pendingInvoice.meta.items = newItems;
|
|
190
|
-
if (pendingInvoice.invoiceId === this.id) {
|
|
191
|
-
// Unlock the pending invoice: we allow new invoices to get created
|
|
192
|
-
pendingInvoice.invoiceId = null;
|
|
193
|
-
}
|
|
194
|
-
await pendingInvoice.save();
|
|
195
|
-
}
|
|
196
|
-
// Force regeneration of organization meta data
|
|
197
|
-
await _1.STPackage.updateOrganizationPackages(this.organizationId);
|
|
198
|
-
}
|
|
199
|
-
if (this.number !== null && !this.meta.pdf) {
|
|
200
|
-
await this.generatePdf();
|
|
201
|
-
}
|
|
202
|
-
if (this.organizationId && this.meta.pdf && this.number !== null && sendEmail) {
|
|
203
|
-
const organization = await _1.Organization.getByID(this.organizationId);
|
|
204
|
-
if (organization) {
|
|
205
|
-
const invoicingTo = await organization.getInvoicingToEmails();
|
|
206
|
-
if (invoicingTo) {
|
|
207
|
-
// Send the e-mail
|
|
208
|
-
email_1.Email.sendInternal({
|
|
209
|
-
to: invoicingTo,
|
|
210
|
-
bcc: "simon@stamhoofd.be",
|
|
211
|
-
subject: "Stamhoofd Factuur " + this.number + " voor " + organization.name,
|
|
212
|
-
text: "Dag " + organization.name + ", \n\nBedankt voor jullie vertrouwen in Stamhoofd. In bijlage vinden jullie factuur " + this.number + " voor jullie administratie. Deze werd al betaald, je hoeft dus geen actie meer te ondernemen. Neem gerust contact met ons op (via " + organization.i18n.$t("shared.emails.general") + ") als je denkt dat er iets fout is gegaan of als je nog bijkomende vragen zou hebben.\n\nMet vriendelijke groeten,\nStamhoofd\n\n",
|
|
213
|
-
attachments: [
|
|
214
|
-
{
|
|
215
|
-
filename: "factuur-" + this.number + ".pdf",
|
|
216
|
-
href: this.meta.pdf.getPublicPath(),
|
|
217
|
-
contentType: "application/pdf"
|
|
218
|
-
}
|
|
219
|
-
]
|
|
220
|
-
}, organization.i18n);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
// Reward if we have an open register code
|
|
225
|
-
if (this.meta.priceWithVAT >= 100 && this.organizationId) {
|
|
226
|
-
// We spend some money
|
|
227
|
-
const code = await _1.UsedRegisterCode.getFor(this.organizationId);
|
|
228
|
-
if (code && !code.creditId) {
|
|
229
|
-
console.log("Rewarding code " + code.id + " for payment");
|
|
230
|
-
// Deze code werd nog niet beloond
|
|
231
|
-
await code.reward();
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
// todo: link member_membership items to this newly created invoice
|
|
235
|
-
}
|
|
236
|
-
async assignNextNumber() {
|
|
237
|
-
return await queues_1.QueueHandler.schedule("billing/invoice-numbers", async () => {
|
|
238
|
-
// Get clone
|
|
239
|
-
const refreshed = await STInvoice.getByID(this.id);
|
|
240
|
-
if (!refreshed || refreshed.number !== null) {
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
// Removed the cache because not working across multiple instances
|
|
244
|
-
// if (STInvoice.numberCache) {
|
|
245
|
-
// this.number = STInvoice.numberCache + 1
|
|
246
|
-
// await this.save()
|
|
247
|
-
//
|
|
248
|
-
// // If save succeeded: increase it
|
|
249
|
-
// STInvoice.numberCache++;
|
|
250
|
-
// return
|
|
251
|
-
// }
|
|
252
|
-
const lastInvoice = await STInvoice.where({ number: { value: null, sign: "!=" } }, { sort: [{ column: "number", direction: "DESC" }], limit: 1 });
|
|
253
|
-
STInvoice.numberCache = lastInvoice[0]?.number ?? 0;
|
|
254
|
-
this.number = STInvoice.numberCache + 1;
|
|
255
|
-
this.meta.date = new Date();
|
|
256
|
-
await this.save();
|
|
257
|
-
// If save succeeded: increase it
|
|
258
|
-
STInvoice.numberCache++;
|
|
259
|
-
return;
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
async generatePdf() {
|
|
263
|
-
const builder = new InvoiceBuilder_1.InvoiceBuilder(this);
|
|
264
|
-
this.meta.pdf = await builder.build();
|
|
265
|
-
await this.save();
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* WARNGING: only call this method in the correct queue!
|
|
269
|
-
*/
|
|
270
|
-
async markFailed(payment, markFailed = true) {
|
|
271
|
-
console.log("Mark invoice as failed", this.id);
|
|
272
|
-
const packages = await this.getPackages();
|
|
273
|
-
if (markFailed && (payment.method === structures_1.PaymentMethod.DirectDebit || payment.method === structures_1.PaymentMethod.Transfer)) {
|
|
274
|
-
// Only mark failed payments for background payments
|
|
275
|
-
for (const pack of packages) {
|
|
276
|
-
console.log("Marking package with failed payment " + pack.id);
|
|
277
|
-
pack.meta.firstFailedPayment = pack.meta.firstFailedPayment ?? new Date();
|
|
278
|
-
pack.meta.paymentFailedCount++;
|
|
279
|
-
await pack.save();
|
|
280
|
-
}
|
|
281
|
-
if (packages.length == 0) {
|
|
282
|
-
// Mark all active packages as failed
|
|
283
|
-
const activePackages = await this.getOrganizationActivePackages();
|
|
284
|
-
for (const pack of activePackages) {
|
|
285
|
-
console.log("Marking package with failed payment " + pack.id);
|
|
286
|
-
pack.meta.firstFailedPayment = pack.meta.firstFailedPayment ?? new Date();
|
|
287
|
-
pack.meta.paymentFailedCount++;
|
|
288
|
-
await pack.save();
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
if (this.organizationId) {
|
|
293
|
-
const pendingInvoice = await _1.STPendingInvoice.getForOrganization(this.organizationId);
|
|
294
|
-
if (pendingInvoice && pendingInvoice.invoiceId === this.id) {
|
|
295
|
-
pendingInvoice.invoiceId = null;
|
|
296
|
-
// Also update the packages in the pending invoice itself
|
|
297
|
-
for (const item of pendingInvoice.meta.items) {
|
|
298
|
-
const pack = item.package;
|
|
299
|
-
if (pack) {
|
|
300
|
-
const pp = packages.find(p => p.id === pack.id);
|
|
301
|
-
if (pp) {
|
|
302
|
-
console.log("Updated package " + pp.id + " in pending invoice");
|
|
303
|
-
// Update reference to include new failed counts
|
|
304
|
-
item.package = structures_1.STPackage.create(pp);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
await pendingInvoice.save();
|
|
309
|
-
}
|
|
310
|
-
// Force regeneration of organization meta data
|
|
311
|
-
await _1.STPackage.updateOrganizationPackages(this.organizationId);
|
|
312
|
-
}
|
|
313
|
-
if (this.creditId !== null) {
|
|
314
|
-
const credit = await _1.STCredit.getByID(this.creditId);
|
|
315
|
-
if (credit && (credit.expireAt === null || credit.expireAt > new Date())) {
|
|
316
|
-
// Expire usage (do not delete to keep the relation for debugging and recovery)
|
|
317
|
-
credit.expireAt = new Date(new Date().getTime() - 1000);
|
|
318
|
-
await credit.save();
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
if (markFailed && this.organizationId && payment.method === structures_1.PaymentMethod.DirectDebit) {
|
|
322
|
-
const organization = await _1.Organization.getByID(this.organizationId);
|
|
323
|
-
if (organization) {
|
|
324
|
-
const invoicingTo = await organization.getInvoicingToEmails();
|
|
325
|
-
if (invoicingTo) {
|
|
326
|
-
// Send the e-mail
|
|
327
|
-
email_1.Email.sendInternal({
|
|
328
|
-
to: invoicingTo,
|
|
329
|
-
bcc: "simon@stamhoofd.be",
|
|
330
|
-
subject: "Betaling mislukt voor " + organization.name,
|
|
331
|
-
text: "Dag " + organization.name + ", \n\nDe automatische betaling via domiciliëring van jullie openstaande bedrag is mislukt (zie daarvoor onze vorige e-mail). Kijk even na wat er fout ging en betaal het openstaande bedrag manueel om te vermijden dat bepaalde diensten tijdelijk worden uitgeschakeld. Betalen kan via Stamhoofd > Instellingen > Facturen en betalingen > Openstaand bedrag > Afrekenen. Neem gerust contact met ons op als je bijkomende vragen hebt.\n\nMet vriendelijke groeten,\nStamhoofd\n\n",
|
|
332
|
-
}, organization.i18n);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
if (markFailed && this.organizationId && payment.method === structures_1.PaymentMethod.Transfer) {
|
|
337
|
-
const organization = await _1.Organization.getByID(this.organizationId);
|
|
338
|
-
if (organization) {
|
|
339
|
-
const invoicingTo = await organization.getInvoicingToEmails();
|
|
340
|
-
if (invoicingTo) {
|
|
341
|
-
// Send the e-mail
|
|
342
|
-
email_1.Email.sendInternal({
|
|
343
|
-
to: invoicingTo,
|
|
344
|
-
bcc: "simon@stamhoofd.be",
|
|
345
|
-
subject: "Betaling mislukt voor " + organization.name,
|
|
346
|
-
text: "Dag " + organization.name + ", \n\nBij nazicht blijkt dat we geen overschrijving hebben ontvangen voor jullie aankoop. Kijk even na wat er fout ging en betaal het openstaande bedrag om te vermijden dat de diensten worden uitgeschakeld. Betalen kan via Stamhoofd > Instellingen > Facturen en betalingen > Openstaand bedrag > Afrekenen. Neem gerust contact met ons op als je bijkomende vragen hebt.\n\nMet vriendelijke groeten,\nStamhoofd\n\n",
|
|
347
|
-
}, organization.i18n);
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
static async getBillingStatus(organization, hideExpired = true) {
|
|
353
|
-
// Get all packages
|
|
354
|
-
const packages = hideExpired ? (await _1.STPackage.getForOrganization(organization.id)) : (await _1.STPackage.getForOrganizationIncludingExpired(organization.id));
|
|
355
|
-
// GEt all invoices
|
|
356
|
-
const invoices = await STInvoice.where({ organizationId: organization.id, number: { sign: "!=", value: null } });
|
|
357
|
-
// Get the pending invoice if it exists
|
|
358
|
-
const pendingInvoice = await _1.STPendingInvoice.getForOrganization(organization.id);
|
|
359
|
-
// Generate temporary pending invoice items for the current state without adding them IRL
|
|
360
|
-
let notYetCreatedItems = [];
|
|
361
|
-
try {
|
|
362
|
-
notYetCreatedItems = await _1.STPendingInvoice.createItems(organization.id, pendingInvoice);
|
|
363
|
-
}
|
|
364
|
-
catch (e) {
|
|
365
|
-
console.error(e);
|
|
366
|
-
}
|
|
367
|
-
const pendingInvoiceStruct = pendingInvoice ? structures_1.STPendingInvoice.create(pendingInvoice) : (notYetCreatedItems.length > 0 ? structures_1.STPendingInvoice.create({
|
|
368
|
-
meta: structures_1.STInvoiceMeta.create({
|
|
369
|
-
companyName: organization.meta.companyName ?? organization.name,
|
|
370
|
-
companyContact: organization.privateMeta.billingContact ?? "",
|
|
371
|
-
companyAddress: organization.meta.companyAddress ?? organization.address,
|
|
372
|
-
companyVATNumber: organization.meta.VATNumber,
|
|
373
|
-
VATPercentage: (0, structures_1.calculateVATPercentage)(organization.meta.companyAddress ?? organization.address, organization.meta.VATNumber)
|
|
374
|
-
})
|
|
375
|
-
}) : null);
|
|
376
|
-
if (notYetCreatedItems.length > 0 && pendingInvoiceStruct) {
|
|
377
|
-
pendingInvoiceStruct.meta.items.push(...notYetCreatedItems);
|
|
378
|
-
}
|
|
379
|
-
if (pendingInvoiceStruct) {
|
|
380
|
-
// Compress
|
|
381
|
-
pendingInvoiceStruct.meta.items = structures_1.STInvoiceItem.compress(pendingInvoiceStruct.meta.items);
|
|
382
|
-
}
|
|
383
|
-
if (pendingInvoice?.invoiceId && pendingInvoiceStruct) {
|
|
384
|
-
const invoice = await STInvoice.getByID(pendingInvoice?.invoiceId);
|
|
385
|
-
if (invoice) {
|
|
386
|
-
pendingInvoiceStruct.invoice = await invoice.getStructure();
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
invoices.sort((a, b) => utility_1.Sorter.byDateValue(a.createdAt, b.createdAt));
|
|
390
|
-
const invoiceStructures = [];
|
|
391
|
-
for (const invoice of invoices) {
|
|
392
|
-
invoiceStructures.push(await invoice.getStructure());
|
|
393
|
-
}
|
|
394
|
-
const credits = await _1.STCredit.getForOrganization(organization.id);
|
|
395
|
-
return structures_1.STBillingStatus.create({
|
|
396
|
-
packages: packages.map(pack => structures_1.STPackage.create(pack)),
|
|
397
|
-
invoices: invoiceStructures,
|
|
398
|
-
pendingInvoice: pendingInvoiceStruct,
|
|
399
|
-
credits: credits.map(c => structures_1.STCredit.create(c))
|
|
400
|
-
});
|
|
401
|
-
}
|
|
402
38
|
}
|
|
403
39
|
exports.STInvoice = STInvoice;
|
|
404
40
|
tslib_1.__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"STInvoice.js","sourceRoot":"","sources":["../../../src/models/STInvoice.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"STInvoice.js","sourceRoot":"","sources":["../../../src/models/STInvoice.ts"],"names":[],"mappings":";;;;AAAA,iEAA+E;AAC/E,sDAAsD;AACtD,+BAAoC;AAEpC,yBAA2C;AAE3C,MAAa,SAAU,SAAQ,uBAAK;IAChC,MAAM,CAAC,KAAK,GAAG,oBAAoB,CAAC;IAE5B,MAAM,CAAC,WAAW,GAAkB,IAAI,CAAA;IAEhD,UAAU;IAMV,EAAE,CAAU;IAEZ;;OAEG;IAEH,cAAc,CAAgB;IAE9B;;;OAGG;IAEH,QAAQ,GAAkB,IAAI,CAAA;IAE9B;;OAEG;IAEH,SAAS,GAAkB,IAAI,CAAA;IAG/B,IAAI,CAAe;IAEnB;;OAEG;IAEH,MAAM,GAAkB,IAAI,CAAA;IAG5B,MAAM,GAAgB,IAAI,CAAA;IAY1B,SAAS,CAAM;IAUf,SAAS,CAAM;IAGf,SAAS,GAAkB,IAAI,CAAA;IAE/B,MAAM,CAAC,YAAY,GAAG,IAAI,mCAAiB,CAAC,eAAY,EAAE,cAAc,CAAC,CAAC;IAC1E,MAAM,CAAC,OAAO,GAAG,IAAI,mCAAiB,CAAC,UAAO,EAAE,SAAS,CAAC,CAAC;;AAtE/D,8BAuEC;AA5DG;IALC,IAAA,wBAAM,EAAC;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK;YAC3C,OAAO,KAAK,IAAI,IAAA,SAAM,GAAE,CAAC;QAC7B,CAAC;KACJ,CAAC;qCACU;AAMZ;IADC,IAAA,wBAAM,EAAC,EAAE,UAAU,EAAE,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;iDACjD;AAO9B;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;2CACb;AAM9B;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;4CAC3C;AAG/B;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,0BAAa,EAAE,CAAC;uCAC9B;AAMnB;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;yCAChB;AAG5B;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;yCACnB;AAY1B;IAVC,IAAA,wBAAM,EAAC;QACJ,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,GAAS;YAClC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACpB,OAAO,GAAG,CAAC;YACf,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;YACvB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACvB,OAAO,IAAI,CAAA;QACf,CAAC;KACJ,CAAC;4CACa;AAUf;IARC,IAAA,wBAAM,EAAC;QACJ,IAAI,EAAE,UAAU,EAAE,UAAU;YACxB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;YACvB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACvB,OAAO,IAAI,CAAA;QACf,CAAC;QACD,UAAU,EAAE,IAAI;KACnB,CAAC;4CACa;AAGf;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;4CACZ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ManyToOneRelation, Model } from "@simonbackx/simple-database";
|
|
2
|
-
import {
|
|
2
|
+
import { STInvoiceMeta } from '@stamhoofd/structures';
|
|
3
3
|
import { Organization } from './';
|
|
4
4
|
/**
|
|
5
5
|
* Things that should get paid, but are not yet invoiced yet because:
|
|
@@ -21,25 +21,5 @@ export declare class STPendingInvoice extends Model {
|
|
|
21
21
|
createdAt: Date;
|
|
22
22
|
updatedAt: Date;
|
|
23
23
|
static organization: ManyToOneRelation<"organization", Organization>;
|
|
24
|
-
static getForOrganization(organizationId: string): Promise<STPendingInvoice | undefined>;
|
|
25
|
-
/**
|
|
26
|
-
* Always run this in the queue!
|
|
27
|
-
*/
|
|
28
|
-
static addItems(organization: Organization, invoiceItems: STInvoiceItem[]): Promise<STPendingInvoice | undefined>;
|
|
29
|
-
/**
|
|
30
|
-
* Always run this in the queue!
|
|
31
|
-
*/
|
|
32
|
-
static addItemsTo(pendingInvoice: STPendingInvoice | undefined, organization: Organization, invoiceItems: STInvoiceItem[]): Promise<STPendingInvoice | undefined>;
|
|
33
|
-
/**
|
|
34
|
-
* Always run this in the queue!
|
|
35
|
-
*/
|
|
36
|
-
static addAutomaticItems(organization: Organization): Promise<STPendingInvoice | undefined>;
|
|
37
|
-
/**
|
|
38
|
-
* This method checks all the packages of the given organization and will return
|
|
39
|
-
* new invoice items that should get charged. You'll need to add them to
|
|
40
|
-
* the pending invoice yourself (always in a queue!)
|
|
41
|
-
*/
|
|
42
|
-
static createItems(organizationId: string, pendingInvoice?: STPendingInvoice): Promise<STInvoiceItem[]>;
|
|
43
|
-
static charge(organization: Organization): Promise<void>;
|
|
44
24
|
}
|
|
45
25
|
//# sourceMappingURL=STPendingInvoice.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"STPendingInvoice.d.ts","sourceRoot":"","sources":["../../../src/models/STPendingInvoice.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"STPendingInvoice.d.ts","sourceRoot":"","sources":["../../../src/models/STPendingInvoice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,iBAAiB,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC;;;;;;;;;;GAUG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACvC,MAAM,CAAC,KAAK,SAAgC;IAQ5C,EAAE,EAAG,MAAM,CAAC;IAGZ,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAG9B,IAAI,EAAE,aAAa,CAAA;IAKnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAO;IAY/B,SAAS,EAAE,IAAI,CAAA;IAUf,SAAS,EAAE,IAAI,CAAA;IAEf,MAAM,CAAC,YAAY,kDAAuD;CAC7E"}
|