Orderkosten berekeningen voorbeelden
Onderstaand behandelen we enkele voorbeelden van orderkosten berekeningen scripts.
Voorbeeld 1: Eenvoudig een orderkostartikel toevoegen
Doel
Dit script voegt een vaste orderkostregel toe aan de order.
Wanneer gebruiken?
Gebruik dit script wanneer altijd hetzelfde artikel als orderkost moet worden toegevoegd, ongeacht de inhoud van de order. Dit is bijvoorbeeld geschikt voor:
- Administratiekosten
- Dossierkosten
- Vaste verwerkingstoeslagen
- Algemene servicekosten
Werking
Het script maakt een nieuwe orderregel aan en voegt artikel 99999901 één keer toe aan de orderkosten. Het artikel moet reeds bestaan in de administratie.
Script
CreateOrderLine()
.WithArticleCode(99999901) // Artikel dat als orderkost wordt toegevoegd
.WithQuantity(1) // Altijd één exemplaar toevoegen
.Build(); // Regel toevoegen aan de orderkosten Voorbeeld 2: Orderkostartikel toevoegen met configureerbare variabelen
Doel
Dit script voegt een orderkostartikel toe waarbij artikelnummer en hoeveelheid eenvoudig aangepast kunnen worden.
Wanneer gebruiken?
Gebruik dit script wanneer dezelfde logica wordt gebruikt voor meerdere klanten of situaties waarbij artikelnummer of hoeveelheid regelmatig wijzigen.
Werking
Het script:
- Definieert een artikelnummer. Het artikel moet reeds bestaan in de administratie.
- Definieert een hoeveelheid.
- Maakt een orderregel aan.
- Voegt deze toe aan de orderkosten.
Script
var ARTICLE_CODE = 13600; // Artikelnummer van het orderkostartikel
var ARTICLE_QUANTITY = 1; // Hoeveelheid die toegevoegd moet worden
CreateOrderLine()
.WithArticleCode(ARTICLE_CODE) // Artikelnummer instellen
.WithQuantity(ARTICLE_QUANTITY) // Hoeveelheid instellen
.Build(); // Regel toevoegen aan de orderkosten Voorbeeld 3: Orderkost toevoegen met vaste prijs en aangepaste omschrijving
Doel
Dit script voegt een orderkostregel toe met een vaste prijs en een aangepaste omschrijving.
Wanneer gebruiken?
Gebruik dit script wanneer een specifieke dienst of toeslag gefactureerd moet worden tegen een vast bedrag.
Voorbeelden:
- Extra service
- Verwerkingskosten
- Certificeringskosten
- Administratieve toeslagen
Werking
Het script:
- Definieert het artikelnummer. Het artikel moet reeds bestaan in de administratie.
- Definieert een omschrijving.
- Definieert een vaste prijs.
- Voegt de regel toe aan de order.
Script
var ARTICLE_CODE = 10000; // Artikelnummer van de toeslag
var ARTICLE_DESCRIPTION = "Extra service"; // Omschrijving op de orderregel
var ARTICLE_PRICE = 50.00m; // Vast bedrag
var ARTICLE_QUANTITY = 1; // Hoeveelheid
CreateOrderLine()
.WithArticleCode(ARTICLE_CODE) // Artikelnummer instellen
.WithDescription(ARTICLE_DESCRIPTION) // Omschrijving overschrijven
.WithPrice(ARTICLE_PRICE) // Vaste prijs instellen
.WithQuantity(ARTICLE_QUANTITY) // Hoeveelheid instellen
.Build(); // Regel toevoegen aan de orderkosten Voorbeeld 4: Automatisch verzendkosten toevoegen onder een minimumbedrag
Doel
Dit script voegt automatisch verzendkosten toe wanneer het totale orderbedrag onder een ingestelde grens ligt.
Wanneer gebruiken?
Gebruik dit script wanneer klanten gratis verzending ontvangen vanaf een bepaald orderbedrag.
Voorbeeld:
- Orders vanaf €150 → gratis verzending
- Orders onder €150 → €15 verzendkosten
Daarnaast wordt route 40 uitgesloten van deze berekening.
Werking
Het script:
- Berekent het totale orderbedrag.
- Controleert de route van de eerste order.
- Slaat route 40 over.
- Controleert of het totaalbedrag lager is dan €150.
- Voegt verzendkosten toe indien nodig.
Script
const decimal MAXIMUM_AMOUNT_TO_APPLY_SHIPPING_COST = 150; // Minimumbedrag voor gratis verzending
const long SHIPPING_ARTICLE = 9990520; // Artikelnummer voor verzendkosten. Het artikel moet reeds bestaan in de administratie.
const decimal SHIPPING_COST = 15; // Vast bedrag aan verzendkosten
var firstOrder = Orders.First(); // Eerste order ophalen
var route = firstOrder.Route; // Route van de order ophalen
decimal totalAmount =
Orders.Sum(x => x.DeliveredTotalAmounts.TotalAmountIncludingInvoiceDiscount); // Totaal orderbedrag berekenen
if (route is not null && route.Code == 40) // Route 40 krijgt geen verzendkosten
{
return;
}
if (totalAmount < MAXIMUM_AMOUNT_TO_APPLY_SHIPPING_COST && totalAmount > 0) // Alleen toepassen onder de drempel
{
CreateOrderLine()
.WithArticleCode(SHIPPING_ARTICLE) // Verzendkostenartikel toevoegen
.WithPrice(SHIPPING_COST) // Vast verzendbedrag instellen
.WithQuantity(1) // Eén verzendregel toevoegen
.Build(); // Regel toevoegen aan de orderkosten
} Behalve variabelen in het script zelf kan je ook gebruik maken van dynamische velden bij entiteiten zoals artikelen en relaties, en die uitlezen in het script om zo dynamisch en op maat de orderkosten te berekenen.
Voorbeeld 5: IVK berekenen per BTW-tarief
Doel
Dit script berekent automatisch IVK-kosten (Indirecte Verpakkingskosten) op basis van het geregistreerde nettogewicht van artikelen.
Wanneer gebruiken?
Gebruik dit script wanneer IVK-kosten afhankelijk zijn van:
- Het gewicht van artikelen
- Een IVK-groep
- Het BTW-tarief van het artikel
De berekende IVK-kosten worden opgesplitst in een aparte regel voor laag en hoog BTW.
Werking
Het script:
- Doorloopt alle orderregels.
- Leest de IVK-groep van het artikel uit.
- Haalt het IVK-bedrag per kilogram op.
- Vermenigvuldigt dit bedrag met het geregistreerde gewicht.
- Telt de kosten op per BTW-tarief.
- Maakt afzonderlijke orderregels voor laag en hoog BTW.
Script
const long IVK_ARTICLE_CODE_LOW = 10; // Artikel voor IVK laag BTW
const long IVK_ARTICLE_CODE_HIGH = 11; // Artikel voor IVK hoog BTW
decimal ivkCostHighVat = 0; // Totaalbedrag IVK hoog BTW
decimal ivkCostLowVat = 0; // Totaalbedrag IVK laag BTW
foreach (var line in Lines)
{
var article = line.Article; // Artikel ophalen
var articleDynamicFields = article.Dynamic; // Dynamische velden ophalen
var ivkGroep = articleDynamicFields.Sales.Common.IVK_GROEP; // IVK-groep bepalen
if (ivkGroep is null)
continue;
var ivkGroepDynamicFields = await GetDynamicFields(ivkGroep); // IVK-configuratie ophalen
var ivkCostPerKg = ivkGroepDynamicFields.Common.Common.IVK_BEDRAG ?? 0; // Bedrag per kilogram
switch (article.VatType)
{
case VatType.Low:
ivkCostLowVat += (line.RegisteredNetWeight * ivkCostPerKg); // Kosten optellen voor laag BTW
break;
case VatType.High:
ivkCostHighVat += (line.RegisteredNetWeight * ivkCostPerKg); // Kosten optellen voor hoog BTW
break;
default:
continue;
}
}
if (ivkCostLowVat != 0)
{
CreateOrderLine()
.WithArticleCode(IVK_ARTICLE_CODE_LOW) // Artikel voor laag BTW
.WithQuantity(1) // Eén regel toevoegen
.WithPrice(ivkCostLowVat) // Berekend totaalbedrag
.Build();
}
if (ivkCostHighVat != 0)
{
CreateOrderLine()
.WithArticleCode(IVK_ARTICLE_CODE_HIGH) // Artikel voor hoog BTW
.WithQuantity(1) // Eén regel toevoegen
.WithPrice(ivkCostHighVat) // Berekend totaalbedrag
.Build();
} Voorbeeld 6: IVK berekenen en groeperen op BTW-tarief én IVK-prijs
Doel
Dit script berekent IVK-kosten en groepeert deze op basis van zowel BTW-tarief als IVK-prijs per kilogram.
Wanneer gebruiken?
Gebruik dit script wanneer:
- Verschillende IVK-groepen bestaan.
- Verschillende IVK-tarieven gebruikt worden.
- Elke combinatie afzonderlijk zichtbaar moet zijn op de factuur.
Werking
Het script:
- Doorloopt alle orderregels.
- Leest de IVK-prijs per kilogram uit.
- Groepeert artikelen op BTW-tarief en IVK-prijs.
- Telt het gewicht per groep op.
- Berekent het totaalbedrag per groep.
- Maakt per groep een afzonderlijke orderregel.
Script
using System.Collections.Generic;
var IVK_ARTICLE_LOW = (90000146, "IVK laag"); // Artikel voor laag BTW. Het artikel moet reeds bestaan in de administratie.
var IVK_ARTICLE_HIGH = (90000147, "IVK hoog"); // Artikel voor hoog BTW. Het artikel moet reeds bestaan in de administratie.
var ivkCosts = new Dictionary<(VatType vatType, decimal ivkCostPerKg), decimal>(); // Opslag per combinatie BTW en IVK-prijs
foreach (var line in Lines)
{
var article = line.Article; // Artikel ophalen
var articleDynamicFields = article.Dynamic; // Dynamische velden ophalen
var ivkGroep = articleDynamicFields.Sales.Common.IVK_GROEP; // IVK-groep bepalen
if (ivkGroep is null)
continue;
var ivkGroepDynamicFields = await GetDynamicFields(ivkGroep); // IVK-configuratie ophalen
var ivkCostPerKgDynamicFieldValue = ivkGroepDynamicFields.Common.Common.IVK_BEDRAG; // Tarief per kilogram ophalen
if (ivkCostPerKgDynamicFieldValue is not (decimal ivkCostPerKg and > 0m))
continue;
var lookupKey = (article.VatType, ivkCostPerKg); // Groeperingssleutel maken
ivkCosts.TryGetValue(lookupKey, out var weight); // Bestaand gewicht ophalen
weight += line.RegisteredNetWeight; // Gewicht optellen
ivkCosts[lookupKey] = weight; // Nieuw totaalgewicht bewaren
}
foreach (var costs in ivkCosts)
{
var (vatType, ivkCostPerKg) = costs.Key; // BTW-tarief en IVK-prijs ophalen
var weight = costs.Value; // Totaalgewicht ophalen
var article = vatType == VatType.High ? IVK_ARTICLE_HIGH : IVK_ARTICLE_LOW; // Correct artikel kiezen
CreateOrderLine()
.WithArticleCode(article.Item1) // Artikelcode instellen
.WithQuantity(1) // Eén regel toevoegen
.WithDescription(article.Item2 + $" {weight:N3} kg, {ivkCostPerKg} p/kg") // Detailinformatie tonen
.WithPrice(ivkCostPerKg * weight) // Totaalprijs berekenen
.Build(); // Regel toevoegen aan de orderkosten
}