mirror of
https://github.com/christianvidalwolf-prog/CrazeAnalytix.git
synced 2026-08-03 13:15:24 +02:00
Integrate stock availability data and StockBadge component across all views
This commit is contained in:
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user