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