u
This commit is contained in:
@@ -52,3 +52,38 @@ export function netFromGross(gross, taxRate) {
|
||||
if (factor <= 0) return null;
|
||||
return Math.round((gross / factor) * 10000) / 10000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves or calculates the gross price (Bruttopreis) for an article.
|
||||
* Supports:
|
||||
* - Direct gross price (`article.gross`)
|
||||
* - Net price with tax rate (`article.net`, `article.taxRate`)
|
||||
* - Nested prices array (`article.prices`)
|
||||
*
|
||||
* @param {object|null} article
|
||||
* @param {number} [defaultTaxRate=0] Fallback tax rate if not present on article/price
|
||||
* @returns {number|null} Gross price rounded to 2 decimal places, or null
|
||||
*/
|
||||
export function getArticleGross(article, defaultTaxRate = 0) {
|
||||
if (!article) return null;
|
||||
if (article.gross != null && Number.isFinite(Number(article.gross))) {
|
||||
return Number(article.gross);
|
||||
}
|
||||
let net = article.net ?? article.price ?? article.vknetto;
|
||||
let taxRate = article.taxRate;
|
||||
if (net == null && Array.isArray(article.prices) && article.prices.length > 0) {
|
||||
const base = article.prices.find((p) => p.minmultiplier === 1) ?? article.prices[0];
|
||||
if (base?.gross != null && Number.isFinite(Number(base.gross))) {
|
||||
return Number(base.gross);
|
||||
}
|
||||
net = base?.net;
|
||||
if (taxRate == null) taxRate = base?.taxRate;
|
||||
}
|
||||
if (net == null || !Number.isFinite(Number(net))) return null;
|
||||
const rate = taxRate != null && Number.isFinite(Number(taxRate))
|
||||
? Number(taxRate)
|
||||
: Number(defaultTaxRate ?? 0);
|
||||
const gross = Number(net) * (1 + rate / 100);
|
||||
return Math.round((gross + Number.EPSILON) * 100) / 100;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user