Besteladvies berekeningen referentie
Dit document beschrijft alle functies, data en objecten die beschikbaar zijn binnen een besteladvies-berekeningsscript (PurchaseAdvice Calculation Script).
Scripts worden geschreven in C# en worden gecompileerd en uitgevoerd door de PurchaseAdviceScriptRunner. Binnen het script zijn de volgende namespaces beschikbaar:
SystemSystem.MathSystem.GlobalizationReflexNG.Scripting.PurchaseAdvices
Beschikbare Data (Properties)
Article — Het artikel waarvoor berekend wordt
| Property | Type | Beschrijving |
|---|---|---|
Article.Id | Guid | Unieke identifier van het artikel |
Article.Code | long | Artikelcode |
Article.Name | string | Artikelnaam |
Article.Purchase | ScriptArticlePurchase | Inkoop-eigenschappen (zie hieronder) |
Article.Dynamic | dynamic | Dynamische velden van het artikel |
Article.Purchase — Inkoop-eigenschappen
| Property | Type | Beschrijving |
|---|---|---|
Article.Purchase.OrderUnit | decimal? | Besteleenheid |
Article.Purchase.PortionWeight | decimal | Portiegewicht (voor conversie stuks ↔ gewicht) |
Article.Purchase.QuantityType | QuantityType | Type hoeveelheid (Pieces, Weight, PiecesWithKgPrice) |
Supplier — De leverancier
| Property | Type | Beschrijving |
|---|---|---|
Supplier.Id | Guid | Unieke identifier van de leverancier |
Supplier.Code | long | Relatiecode |
Supplier.Name | string | Naam van de leverancier |
Supplier.Dynamic | dynamic | Dynamische velden van de leverancier |
OrderDate — Besteldatum
| Property | Type | Beschrijving |
|---|---|---|
OrderDate | DateTime | De datum/tijd waarop de bestelling geplaatst wordt |
DeliveryDate — Leverdatum
| Property | Type | Beschrijving |
|---|---|---|
DeliveryDate | DateOnly | De berekende leverdatum (kan gezet worden met SetDeliveryDate()) |
Functies
Voorraad & Reserveringen
TechnicalStock()
Retourneert de huidige technische voorraad van het artikel.
QuantityOrWeight TechnicalStock()
QuantityOrWeight TechnicalStock(ScriptArticle purchaseArticle) PurchaseStockReservations()
Retourneert de inkoopvoorraadreserveringen (openstaande inkooporders).
QuantityOrWeight PurchaseStockReservations()
QuantityOrWeight PurchaseStockReservations(ScriptArticle purchaseArticle)
QuantityOrWeight PurchaseStockReservations(TimeFrame timeFrame)
QuantityOrWeight PurchaseStockReservations(ScriptArticle purchaseArticle, TimeFrame timeFrame)
QuantityOrWeight PurchaseStockReservations(int from, int to)
QuantityOrWeight PurchaseStockReservations(ScriptArticle purchaseArticle, int from, int to)
QuantityOrWeight PurchaseStockReservations(DateTime fromDate, DateTime untilDate)
QuantityOrWeight PurchaseStockReservations(ScriptArticle purchaseArticle, DateTime fromDate, DateTime untilDate) - Zonder parameters: reserveringen tot de
SecondDeliveryDateTimevan het huidige TimeFrame. - Met
TimeFrame: reserveringen tot deSecondDeliveryDateTimevan dat TimeFrame. - Met
from/to(int): relatieve dagen vanafOrderDate. - Met
DateTime: absolute datums.
SalesStockReservations()
Retourneert de verkoopvoorraadreserveringen (openstaande verkooporders).
QuantityOrWeight SalesStockReservations()
QuantityOrWeight SalesStockReservations(ScriptArticle purchaseArticle)
QuantityOrWeight SalesStockReservations(TimeFrame timeFrame)
QuantityOrWeight SalesStockReservations(ScriptArticle purchaseArticle, TimeFrame timeFrame)
QuantityOrWeight SalesStockReservations(int from, int to)
QuantityOrWeight SalesStockReservations(ScriptArticle purchaseArticle, int from, int to)
QuantityOrWeight SalesStockReservations(DateTime fromDate, DateTime untilDate)
QuantityOrWeight SalesStockReservations(ScriptArticle purchaseArticle, DateTime fromDate, DateTime untilDate) Zelfde overload-structuur als PurchaseStockReservations().
Min/Max Voorraad
MinimumStock()
Retourneert de ingestelde minimumvoorraad.
decimal MinimumStock()
decimal MinimumStock(ScriptArticle purchaseArticle)
bool HasMinimumStock()
bool HasMinimumStock(ScriptArticle purchaseArticle) MaximumStock()
Retourneert de ingestelde maximumvoorraad.
decimal MaximumStock()
decimal MaximumStock(ScriptArticle purchaseArticle)
bool HasMaximumStock()
bool HasMaximumStock(ScriptArticle purchaseArticle) Historische Verkopen
Sales()
Retourneert de totale verkopen over een periode.
QuantityOrWeight Sales(int from, int to)
QuantityOrWeight Sales(ScriptArticle purchaseArticle, int from, int to)
QuantityOrWeight Sales(DateTime fromDate, DateTime untilDate)
QuantityOrWeight Sales(ScriptArticle purchaseArticle, DateTime fromDate, DateTime untilDate) from/to: relatieve dagen ten opzichte vanOrderDate(negatief = verleden).
Voorbeeld: Sales(-28, 0) — verkopen van de afgelopen 28 dagen.
AverageSales()
Retourneert het gemiddelde verkopen per dag over een periode.
QuantityOrWeight AverageSales(int from, int to)
QuantityOrWeight AverageSales(ScriptArticle purchaseArticle, int from, int to)
QuantityOrWeight AverageSales(DateTime fromDate, DateTime untilDate)
QuantityOrWeight AverageSales(ScriptArticle purchaseArticle, DateTime fromDate, DateTime untilDate) Berekening: Sales(from, to) / |from - to|
AverageSalesOnWorkingDays()
Gemiddelde verkopen per werkdag over een periode.
QuantityOrWeight AverageSalesOnWorkingDays(int from, int to)
QuantityOrWeight AverageSalesOnWorkingDays(ScriptArticle purchaseArticle, int from, int to)
QuantityOrWeight AverageSalesOnWorkingDays(DateTime fromDate, DateTime untilDate)
QuantityOrWeight AverageSalesOnWorkingDays(ScriptArticle purchaseArticle, DateTime fromDate, DateTime untilDate) Berekening: Sales(from, to) / WorkingDays(from, to)
AverageSalesOnSaleDays()
Gemiddelde verkopen per verkoopdag (alleen dagen waarop daadwerkelijk verkocht is).
QuantityOrWeight AverageSalesOnSaleDays(int from, int to)
QuantityOrWeight AverageSalesOnSaleDays(ScriptArticle purchaseArticle, int from, int to)
QuantityOrWeight AverageSalesOnSaleDays(DateTime fromDate, DateTime untilDate)
QuantityOrWeight AverageSalesOnSaleDays(ScriptArticle purchaseArticle, DateTime fromDate, DateTime untilDate) Berekening: Sales(from, to) / aantal verkoopDagen
SaleDayRateWorkingDays()
Ratio van verkoopDagen ten opzichte van werkdagen. Geeft aan hoe vaak er verkocht wordt.
decimal SaleDayRateWorkingDays(int from, int to)
decimal SaleDayRateWorkingDays(ScriptArticle purchaseArticle, int from, int to)
decimal SaleDayRateWorkingDays(DateTime fromDate, DateTime untilDate)
decimal SaleDayRateWorkingDays(ScriptArticle purchaseArticle, DateTime fromDate, DateTime untilDate) Berekening: verkoopDagenOpWerkdagen / werkdagen (0.0 - 1.0)
Historische Inkopen
Purchases()
Retourneert de totale inkopen over een periode.
QuantityOrWeight Purchases(int from, int to)
QuantityOrWeight Purchases(ScriptArticle purchaseArticle, int from, int to)
QuantityOrWeight Purchases(DateTime fromDate, DateTime untilDate)
QuantityOrWeight Purchases(ScriptArticle purchaseArticle, DateTime fromDate, DateTime untilDate) AveragePurchases()
Gemiddelde inkopen per dag.
QuantityOrWeight AveragePurchases(int from, int to)
QuantityOrWeight AveragePurchases(ScriptArticle purchaseArticle, int from, int to)
QuantityOrWeight AveragePurchases(DateTime fromDate, DateTime untilDate)
QuantityOrWeight AveragePurchases(ScriptArticle purchaseArticle, DateTime fromDate, DateTime untilDate) AveragePurchasesWorkingDays()
Gemiddelde inkopen per werkdag.
QuantityOrWeight AveragePurchasesWorkingDays(int from, int to)
QuantityOrWeight AveragePurchasesWorkingDays(ScriptArticle purchaseArticle, int from, int to)
QuantityOrWeight AveragePurchasesWorkingDays(DateTime fromDate, DateTime untilDate)
QuantityOrWeight AveragePurchasesWorkingDays(ScriptArticle purchaseArticle, DateTime fromDate, DateTime untilDate) AveragePurchasesOnPurchaseDays()
Gemiddelde inkopen per inkoopdag (alleen dagen waarop daadwerkelijk ingekocht is).
QuantityOrWeight AveragePurchasesOnPurchaseDays(int from, int to)
QuantityOrWeight AveragePurchasesOnPurchaseDays(ScriptArticle purchaseArticle, int from, int to)
QuantityOrWeight AveragePurchasesOnPurchaseDays(DateTime fromDate, DateTime untilDate)
QuantityOrWeight AveragePurchasesOnPurchaseDays(ScriptArticle purchaseArticle, DateTime fromDate, DateTime untilDate) PurchaseDayRateWorkingDays()
Ratio van inkoopdagen ten opzichte van werkdagen.
decimal PurchaseDayRateWorkingDays(int from, int to)
decimal PurchaseDayRateWorkingDays(ScriptArticle purchaseArticle, int from, int to)
decimal PurchaseDayRateWorkingDays(DateTime fromDate, DateTime untilDate)
decimal PurchaseDayRateWorkingDays(ScriptArticle purchaseArticle, DateTime fromDate, DateTime untilDate) Tijdframe & Werkdagen
TimeFrame()
Retourneert het berekende tijdframe voor de bestelling.
TimeFrame TimeFrame() TimeFrame-properties:
| Property | Type | Beschrijving |
|---|---|---|
ReferenceDate | DateTime | Referentiedatum |
FirstOrderDateTime | DateTime | Eerste besteldatum/tijd |
FirstDeliveryDateTime | DateTime | Eerste levermoment |
SecondOrderDateTime | DateTime | Tweede besteldatum/tijd |
SecondDeliveryDateTime | DateTime | Tweede levermoment |
TotalDays | int | Totaal dagen (SecondDelivery - Reference) |
OrderableDays | int | Bestelbare dagen (SecondDelivery - FirstDelivery) |
SetDefaultTimeFrameAsync()
Stelt het standaard tijdframe in op basis van leverancier/artikel/besteldatum.
await SetDefaultTimeFrameAsync() SetTimeFrame()
Stelt een handmatig tijdframe in.
void SetTimeFrame(int days)
void SetTimeFrame(DateTime referenceDate, int days) SetTimeFrameAsync()
Berekent het tijdframe opnieuw vanaf een andere referentiedatum.
await SetTimeFrameAsync(DateTime referenceDate) WorkingDays()
Berekent het aantal werkdagen in een periode (exclusief feestdagen).
int WorkingDays(int from, int to)
int WorkingDays(DateTime fromDate, DateTime untilDate) Standaard werkdagen: maandag t/m vrijdag. Configureerbaar via Workdays en Holidays.
TimeFrameWorkingDays()
Aantal werkdagen in het huidige tijdframe.
int TimeFrameWorkingDays() Leverancier & Bestelmoment
HasSupplier()
Controleert of er een leverancier gekoppeld is.
bool HasSupplier() HasOrderMomentAsync()
Controleert of er een bestelmoment is voor de leverancier op de besteldatum.
await HasOrderMomentAsync() // retourneert bool Eenheden & Conversie
OrderUnit()
Retourneert de besteleenheid (colli-grootte) voor de combinatie leverancier/artikel.
decimal OrderUnit()
decimal OrderUnit(ScriptArticle purchaseArticle)
bool HasOrderUnit()
bool HasOrderUnit(ScriptArticle purchaseArticle) PurchaseFactor()
Retourneert de inkoopfactor van het artikel.
int PurchaseFactor()
int PurchaseFactor(ScriptArticle purchaseArticle) ToOrderUnits()
Rondt een hoeveelheid naar boven af op hele besteleenheden, na conversie naar inkoopeenheden.
QuantityOrWeight ToOrderUnits(decimal quantityOrWeight)
QuantityOrWeight ToOrderUnits(QuantityOrWeight quantityOrWeight) Voorbeeld: Als OrderUnit = 6 en input = 14, retourneert 18 (3 × 6).
ToPurchaseUnits()
Converteert een hoeveelheid naar inkoopeenheden (deelt door PurchaseFactor).
QuantityOrWeight ToPurchaseUnits(QuantityOrWeight quantityOrWeight)
decimal ToPurchaseUnits(decimal quantity) Resultaat instellen
SetResult()
Stelt het besteladviesresultaat in. Dit is de verplichte aanroep om een advies te genereren. De waarde wordt automatisch afgerond op besteleenheden.
void SetResult(decimal quantityOrWeight)
void SetResult(QuantityOrWeight quantityOrWeight) Let op: HasResult wordt alleen true als het resultaat > 0 is.
IncludeInResult()
Markeert het artikel als “opnemen in resultaat” met hoeveelheid 0. Gebruik dit als je het artikel wilt tonen in het besteladvies maar geen hoeveelheid wilt adviseren.
void IncludeInResult() SetDeliveryDate()
Overschrijft de berekende leverdatum.
void SetDeliveryDate(DateTime date)
void SetDeliveryDate(DateOnly date) Regelwaarden instellen (voor weergave op de besteladviesregel)
SetLineDefaultStockValues()
Stelt alle regelwaarden in op de standaardwaarden (TimeFrame, Min/Max, TechnicalStock, Reserveringen).
void SetLineDefaultStockValues() Individuele regelwaarden
void SetLineTimeFrame(TimeFrame timeFrame)
void SetLineTimeFrame(int totalDays)
void SetLineMinimumStock(decimal minimumStock)
void SetLineMaximumStock(decimal maximumStock)
void SetLineTechnicalStock(decimal quantityOrWeight)
void SetLineTechnicalStock(QuantityOrWeight quantityOrWeight)
void SetPurchaseStockReservations(decimal quantityOrWeight)
void SetPurchaseStockReservations(QuantityOrWeight quantityOrWeight)
void SetSalesStockReservations(decimal quantityOrWeight)
void SetSalesStockReservations(QuantityOrWeight quantityOrWeight) Logging (Berekeningsstappen)
Log()
Logt een berekeningsstap. Deze stappen worden getoond in de UI bij het besteladvies.
void Log(string name, object value)
void Log(string name, QuantityOrWeight quantityOrWeight)
void Log(string name, TimeFrame timeFrame) Voorbeeld:
Log("Technische voorraad", TechnicalStock());
Log("Gem. verkoop/dag", AverageSales(-28, 0)); Dynamische Velden
GetDynamicFields()
Haal dynamische velden op van een domeinobject.
dynamic fields = await GetDynamicFields(Article);
dynamic supplierFields = await GetDynamicFields(Supplier); Of via de Dynamic property op Article/Supplier:
var value = Article.Dynamic.MijnVeld;
var supplierValue = Supplier.Dynamic.MijnVeld; Het QuantityOrWeight type
QuantityOrWeight is een duaal type dat zowel stuks als gewicht bevat. Afhankelijk van het QuantityType van het artikel wordt automatisch de juiste waarde gebruikt bij vergelijkingen en berekeningen.
Properties
| Property | Type | Beschrijving |
|---|---|---|
Quantity | decimal | Hoeveelheid in stuks |
Weight | decimal | Gewicht |
QuantityType | QuantityType | Het type (Pieces, Weight, PiecesWithKgPrice) |
PortionWeight | decimal | Portiegewicht voor conversie |
Operators
QuantityOrWeight ondersteunt alle rekenkundige en vergelijkingsoperators met zowel andere QuantityOrWeight-waarden als decimal:
- Rekenen:
+,-,*,/ - Vergelijken:
<,<=,>,>=,==,!= - Cast:
(decimal)quantityOrWeight— retourneert Weight of Quantity afhankelijk van QuantityType.
QuantityType enum
| Waarde | Beschrijving |
|---|---|
None | Niet ingesteld |
Pieces | Stuks (standaard) |
Weight | Gewicht |
PiecesWithKgPrice | Stuks met kilogramprijs |
Voorbeeldscript
// Stel het tijdframe in
await SetDefaultTimeFrameAsync();
// Controleer of er een leverancier en bestelmoment is
if (!HasSupplier() || !await HasOrderMomentAsync())
return;
// Bereken gemiddelde verkoop afgelopen 28 dagen
var gemVerkoop = AverageSalesOnWorkingDays(-28, 0);
// Bereken benodigde voorraad voor het tijdframe
var werkdagen = TimeFrameWorkingDays();
var behoefte = gemVerkoop * werkdagen;
// Tel minimumvoorraad op
var totaal = behoefte + MinimumStock();
// Trek huidige voorraad en openstaande orders af
var bestelhoeveelheid = totaal - TechnicalStock() - PurchaseStockReservations() + SalesStockReservations();
// Log berekeningsstappen
Log("Gem. verkoop/werkdag", gemVerkoop);
Log("Werkdagen in tijdframe", werkdagen);
Log("Behoefte", behoefte);
Log("Minimum voorraad", MinimumStock());
Log("Technische voorraad", TechnicalStock());
Log("Inkooporders", PurchaseStockReservations());
Log("Verkooporders", SalesStockReservations());
Log("Bestelhoeveelheid", bestelhoeveelheid);
// Stel regelwaarden in
SetLineDefaultStockValues();
// Stel resultaat in (wordt automatisch afgerond op besteleenheden)
SetResult(bestelhoeveelheid); Architectuur
| PurchaseAdviceScriptRunner.CalculateFor() |
|---|
| 1. Laad Artikel + Leverancier |
| 2. Bouw ScriptArticle & ScriptRelation |
| 3. Bouw PurchaseAdviceGlobals met alle data-functies |
| 4. Haal TimeFrame op via OrderTimeServant |
| 5. Haal gecompileerd script uit cache |
| 6. Voer script uit: script.RunAsync(globals |
| 7. Script roept functies aan → data uit repositories |
| 8. Script roept SetResult() aan |
| 9. Haal resultaat + berekeningsstappen op |
| 10. Bereken inkoopprijs |
| 11. Retourneer PurchaseAdviceCalculatedOrderQuantity |
Uitvoer: PurchaseAdviceCalculatedOrderQuantity
| Property | Type | Beschrijving |
|---|---|---|
Result | QuantityOrWeight | Geadviseerde bestelhoeveelheid |
HasResult | bool | Of de berekening een resultaat opleverde |
DeliveryDate | DateOnly | Verwachte leverdatum |
TimeFrame | int | Aantal dagen in het tijdframe |
MinimumStock | decimal? | Minimumvoorraad |
MaximumStock | decimal? | Maximumvoorraad |
TechnicalStock | decimal | Technische voorraad op moment van berekening |
PurchaseStockReservations | decimal | Inkoopvoorraadreserveringen |
SalesStockReservations | decimal | Verkoopvoorraadreserveringen |
PriceType | string | Type inkoopprijs |
Price | decimal | Inkoopprijs |
CalculationItems | List | Gelogde berekeningsstappen |
Error | string | Foutmelding bij scriptfout |