init
This commit is contained in:
57
frontend/components/upload-form/action.ts
Normal file
57
frontend/components/upload-form/action.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
"use server";
|
||||
import { main, OrderData } from "./orderUpdateBillbee";
|
||||
|
||||
export async function uploadFile(formData: FormData) {
|
||||
const file = formData.get("file") as File;
|
||||
|
||||
// Check if the file is a CSV
|
||||
if (!file || (file.type !== "text/csv" && !file.name.endsWith(".csv"))) {
|
||||
return { message: "Ausgewählte Datei ist keine CSV", status: false };
|
||||
}
|
||||
const arrayBuffer = await file.arrayBuffer();
|
||||
const buffer = new Uint8Array(arrayBuffer);
|
||||
|
||||
// Decode the buffer to a string
|
||||
const decoder: TextDecoder = new TextDecoder("utf-8");
|
||||
const csvContent: string = decoder.decode(buffer);
|
||||
|
||||
// Determine the delimiter (comma or semicolon)
|
||||
const delimiter = csvContent.includes(";") ? ";" : ",";
|
||||
|
||||
// Parse the CSV content using the detected delimiter
|
||||
const rows: string[][] = csvContent
|
||||
.split("\n")
|
||||
.map((row) => row.split(delimiter));
|
||||
|
||||
const requiredHeaders = ["Bestellnummer", "Sendungsnummer"];
|
||||
const headers: string[] = rows[0].map((header) =>
|
||||
header.trim().replace(/\r/g, "")
|
||||
);
|
||||
// Check if CSV containes required Headers
|
||||
const allHeadersPresent: boolean = requiredHeaders.every((header) =>
|
||||
headers.includes(header)
|
||||
);
|
||||
if (!allHeadersPresent) {
|
||||
return {
|
||||
message:
|
||||
'CSV enthält nicht die notwendigen Header "Bestellnummer" und "Sendungsnummer"',
|
||||
status: false,
|
||||
};
|
||||
}
|
||||
|
||||
// Get the indices of the required headers
|
||||
const indices: number[] = requiredHeaders.map((header) =>
|
||||
headers.indexOf(header)
|
||||
);
|
||||
|
||||
// Create an array of objects with only the required headers
|
||||
const filteredData: OrderData[] = rows.slice(1).map((row) => {
|
||||
const orderData: OrderData = {
|
||||
Bestellnummer: row[indices[0]] ? row[indices[0]].trim() : null,
|
||||
Sendungsnummer: row[indices[1]] ? row[indices[1]].trim() : null,
|
||||
};
|
||||
return orderData;
|
||||
});
|
||||
|
||||
return { data: await main(filteredData), status: true };
|
||||
}
|
||||
Reference in New Issue
Block a user