OVPAY-782 - Pseudo code.

This commit is contained in:
Bas Boterman 2024-09-03 10:07:33 +02:00
parent d9ccbb8227
commit dd7c4d1dcf

90
src/pseudo/ovpay782.js Normal file
View 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 */);
});