Integrate stock availability data and StockBadge component across all views

This commit is contained in:
Christian Vidal Wolf
2026-01-27 16:51:38 +01:00
parent 219d050bf2
commit 0d1d2c77d4
9 changed files with 634 additions and 470 deletions
+37
View File
@@ -1619,3 +1619,40 @@ export const calculateForecastViewData = (
};
});
};
export const processStockExcel = async (fileOrBuffer: File | ArrayBuffer): Promise<Map<string, number>> => {
try {
const arrayBuffer = fileOrBuffer instanceof File
? await fileOrBuffer.arrayBuffer()
: fileOrBuffer;
const workbook = XLSX.read(arrayBuffer, { type: 'array' });
const sheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[sheetName];
const jsonData: any[][] = XLSX.utils.sheet_to_json(worksheet, { header: 1 });
const stockMap = new Map<string, number>();
// Skip headers (index 0)
for (let i = 1; i < jsonData.length; i++) {
const row = jsonData[i];
const rawSku = String(row[0] || '').trim();
if (!rawSku) continue;
// Normalize SKU: Remove trailing EN or DE
const normalizedSku = rawSku.replace(/(DE|EN)$/i, '');
// User requested Column I which is index 8 (After Assembly Orders GMBH)
const stockValue = Number(row[8] || 0);
if (!isNaN(stockValue)) {
const current = stockMap.get(normalizedSku) || 0;
stockMap.set(normalizedSku, current + stockValue);
}
}
return stockMap;
} catch (error) {
console.error("Error processing Stock Excel:", error);
throw error;
}
};