OVPAY-782 - Pseudo code.
This commit is contained in:
parent
d9ccbb8227
commit
dd7c4d1dcf
90
src/pseudo/ovpay782.js
Normal file
90
src/pseudo/ovpay782.js
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
let runDate = '2024-08-13'; // Datum van de run (instelbaar ivm herstartbaarheid)
|
||||||
|
let termDuration = 'P1M'; // Uitsluitend P1M of P1W
|
||||||
|
let billingDay;
|
||||||
|
|
||||||
|
// Bepaal de billingDay
|
||||||
|
if (termDuration = 'P1M') {
|
||||||
|
billingDay = runDate.getDayOfMonth();
|
||||||
|
} else {
|
||||||
|
billingDay = runDate.getDayOfWeek();
|
||||||
|
}
|
||||||
|
|
||||||
|
let contracts = API.findContracts([1,2], billingDay, termDuration, 2); // Resultaat van de API call
|
||||||
|
let invoiceDate = runDate.add(termDuration); // Factuurdatum is de rundatum + 1 termijnduur
|
||||||
|
|
||||||
|
contracts.forEach(function(contract) {
|
||||||
|
|
||||||
|
// Bepaal de einddatum van de hoogste contractversie
|
||||||
|
let endDate = contract.contractVersions.sort('contractVersionId', 'DESC')[0].end;
|
||||||
|
|
||||||
|
// Controleer of het contract binnenkort afloopt (obv de laatste contractVersion)
|
||||||
|
if (endDate != null && endDate < invoiceDate) {
|
||||||
|
// Dit contract eindigt nog voor de termijn die we willen factureren
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bepaal de laatste factuur die geen creditfactuur is
|
||||||
|
let latestInvoice = contract.contractInvoices.filter(invoice.status != 8).sort('created')[0];
|
||||||
|
let contractInvoiceId;
|
||||||
|
|
||||||
|
// Controleer of er al een factuur bestaat voor dit contract voor deze termijn
|
||||||
|
if (latestInvoice.createDate != invoiceDate) {
|
||||||
|
// Er bestaat nog geen factuur voor deze termijn, maak deze aan in de database met status 'pending'
|
||||||
|
contractInvoiceId = API.createContractInvoice(contract, contract.highestInvoiceTerm + 1, invoiceDate, 'pending');
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Er bestaat al wel een factuur met deze factuurdatum. Controleer de status
|
||||||
|
if (!(latestInvoice.state == 'pending' || latestInvoice.state == 'failed')) {
|
||||||
|
// De factuur is reeds aangemaakt en verwerkt
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// De factuur heeft state 'pending' of 'failed', vervolg de flow
|
||||||
|
}
|
||||||
|
|
||||||
|
// Controleer of de factuur al bestaat in WeFact
|
||||||
|
let searchAt = 'referenceNumber';
|
||||||
|
let searchFor = contract.contractNumber + '-' + contract.highestInvoiceTerm + 1;
|
||||||
|
let invoices = API.getInvoices(searchAt, searchFor);
|
||||||
|
|
||||||
|
// Filter alle credit nota's eruit
|
||||||
|
let debitInvoices = invoices.filter(invoice.status != 8);
|
||||||
|
|
||||||
|
let externalReference;
|
||||||
|
let state;
|
||||||
|
|
||||||
|
if (debitInvoices.count() == 0) {
|
||||||
|
// Er zijn geen facturen gevonden in WeFact. Maak factuur aan
|
||||||
|
let result = API.createInvoice(/* invoice-object */);
|
||||||
|
|
||||||
|
if (result.code == 201) {
|
||||||
|
// Call naar WeFact ging goed
|
||||||
|
externalReference = result.externalReference;
|
||||||
|
state = "created";
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Callnaar WeFact is gefaald
|
||||||
|
externalReference = "null";
|
||||||
|
state = "failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (debitInvoices.count == 1) {
|
||||||
|
// Er is precies 1 debitfactuur gevonden in WeFact. Haal de factuurreferentie uit het resultaat
|
||||||
|
externalReference = debitInvoices[0].invoiceCode;
|
||||||
|
state = "created";
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Debitfactuur bestaat meermaals in WeFact. Registreer een fout en ga door met de volgende
|
||||||
|
log.error("Factuur bestaat meermaals in WeFact");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sla de factuurreferentie op
|
||||||
|
API.updateContractInvoice(contactInvoiceId, state, externalReference);
|
||||||
|
|
||||||
|
// Werk het contract bij
|
||||||
|
API.updateContract(contract, contract.highestInvoiceTerm + 1);
|
||||||
|
|
||||||
|
// Maak een contractAction aan
|
||||||
|
API.createContractAction(contract, "invoice", Date.now(), /* payload */);
|
||||||
|
});
|
||||||
Loading…
Reference in New Issue
Block a user