first commit
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* Copyright (c) 2026 Niolla
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is proprietary and confidential.
|
||||
* Unauthorized copying, modification, distribution, or use
|
||||
* of this file, via any medium, is strictly prohibited.
|
||||
*/
|
||||
|
||||
// app/utils/validation/validateSupplier.util.js
|
||||
|
||||
|
||||
const db = require("../../models");
|
||||
const Supplier = db.Vendor;
|
||||
|
||||
const extractCellValue = (value) => {
|
||||
if (value && typeof value === "object") {
|
||||
return value.text || value.result || "";
|
||||
}
|
||||
return value?.toString().trim() || "";
|
||||
};
|
||||
|
||||
const validateSupplierColumn = async (worksheet, columns) => {
|
||||
const supplierIdCol =
|
||||
columns.findIndex((col) => col.column_name === "supplier_id") + 1;
|
||||
|
||||
if (!supplierIdCol) return;
|
||||
|
||||
const supplierIds = new Set();
|
||||
const errors = [];
|
||||
|
||||
// 🔹 Extract values (ONLY collect non-empty)
|
||||
for (let i = 2; i <= worksheet.rowCount; i++) {
|
||||
let value = extractCellValue(
|
||||
worksheet.getRow(i).getCell(supplierIdCol).value
|
||||
);
|
||||
|
||||
if (value) {
|
||||
supplierIds.add(value);
|
||||
}
|
||||
}
|
||||
|
||||
if (supplierIds.size === 0) return [];
|
||||
|
||||
// 🔹 Batch DB validation
|
||||
const suppliers = await Supplier.findAll({
|
||||
where: {
|
||||
vendor_id: [...supplierIds],
|
||||
},
|
||||
});
|
||||
|
||||
const validIds = new Set(suppliers.map((s) => s.vendor_id));
|
||||
|
||||
// 🔹 Validate ONLY non-empty values
|
||||
for (let i = 2; i <= worksheet.rowCount; i++) {
|
||||
let value = extractCellValue(
|
||||
worksheet.getRow(i).getCell(supplierIdCol).value
|
||||
);
|
||||
|
||||
if (value && !validIds.has(value)) {
|
||||
errors.push({
|
||||
row: i,
|
||||
column: "supplier_id",
|
||||
message: `Invalid supplier ID: ${value}`,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return errors;
|
||||
};
|
||||
|
||||
module.exports = { validateSupplierColumn };
|
||||
Reference in New Issue
Block a user