/** * 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/utills/excel/confirmOrder.excel.js const ExcelJS = require("exceljs"); /** * Generate Excel template buffer */ exports.generateTemplate = async (items) => { const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet("Confirm Order"); sheet.columns = [ { header: "Item ID", key: "id", width: 25 }, { header: "Item Name", key: "item_name", width: 30 }, { header: "Original Quantity", key: "quantity", width: 20 }, { header: "Confirmed Quantity", key: "confirmed_quantity", width: 20 }, ]; const headerRow = sheet.getRow(1); headerRow.eachCell((cell) => { cell.fill = { type: "pattern", pattern: "solid", fgColor: { argb: "1F4E78" }, }; cell.font = { bold: true, color: { argb: "FFFFFF" }, }; cell.alignment = { vertical: "middle", horizontal: "center", }; cell.border = { top: { style: "thin" }, left: { style: "thin" }, bottom: { style: "thin" }, right: { style: "thin" }, }; }); items.forEach((item) => { sheet.addRow({ id: item.data_id, item_name: item.item_name, quantity: item.quantity, confirmed_quantity: item.quantity, }); }); return workbook.xlsx.writeBuffer(); }; /** * Parse uploaded Excel buffer */ exports.parseExcel = async (buffer) => { const workbook = new ExcelJS.Workbook(); await workbook.xlsx.load(buffer); const sheet = workbook.getWorksheet("Confirm Order"); if (!sheet) throw new Error("Invalid sheet name"); const confirmedMap = new Map(); sheet.eachRow((row, rowNumber) => { if (rowNumber === 1) return; const itemId = row.getCell(1).value; const confirmedQty = Number(row.getCell(4).value); if (itemId) { confirmedMap.set(itemId, confirmedQty); } }); return confirmedMap; };