heissepreise/stores/utils.js
Matthias Hochsteger 505b3c75b3 fallback argument in convertUnit
Fixes #70
2023-06-05 14:26:42 +02:00

68 lines
2.3 KiB
JavaScript

exports.globalUnits = {
"stk.": { unit: "stk", factor: 1 },
blatt: { unit: "stk", factor: 1 },
paar: { unit: "stk", factor: 1 },
stk: { unit: "stk", factor: 1 },
st: { unit: "stk", factor: 1 },
stück: { unit: "stk", factor: 1 },
mm: { unit: "cm", factor: 0.1 },
cm: { unit: "cm", factor: 1 },
zentimeter: { unit: "cm", factor: 1 },
m: { unit: "cm", factor: 100 },
meter: { unit: "cm", factor: 100 },
g: { unit: "g", factor: 1 },
gramm: { unit: "g", factor: 1 },
dag: { unit: "g", factor: 10 },
kg: { unit: "g", factor: 1000 },
kilogramm: { unit: "g", factor: 1000 },
ml: { unit: "ml", factor: 1 },
milliliter: { unit: "ml", factor: 1 },
dl: { unit: "ml", factor: 10 },
cl: { unit: "ml", factor: 100 },
l: { unit: "ml", factor: 1000 },
liter: { unit: "ml", factor: 1000 },
wg: { unit: "wg", factor: 1 },
};
exports.convertUnit = function (item, units, store, fallback) {
if (typeof item.quantity == "string") item.quantity = parseFloat(item.quantity.replace(",", "."));
let unit = item.unit;
if (typeof unit === "string") unit = unit.toLowerCase();
const conv = unit in exports.globalUnits ? exports.globalUnits[unit] : units[unit];
if (conv === undefined) {
if (fallback) {
item.quantity = fallback.quantity;
item.unit = fallback.unit;
} else {
console.error(`Unknown unit in ${store}: '${unit}' in item ${item.name}`);
}
return item;
}
item.quantity = conv.factor * item.quantity;
item.unit = conv.unit;
return item;
};
exports.parseUnitAndQuantityAtEnd = function (name) {
let unit,
quantity = 1;
const nameTokens = name.trim().replaceAll("(", "").replaceAll(")", "").replaceAll(",", ".").split(" ");
const lastToken = nameTokens[nameTokens.length - 1];
const secondLastToken = nameTokens.length >= 2 ? nameTokens[nameTokens.length - 2] : null;
const token = parseFloat(lastToken) ? lastToken : secondLastToken + lastToken;
const regex = /^([0-9.x]+)(.*)$/;
const matches = token.match(regex);
if (matches) {
matches[1].split("x").forEach((q) => {
quantity = quantity * parseFloat(q);
});
unit = matches[2];
return [quantity, unit.toLowerCase()];
}
return [undefined, undefined];
};