summaryrefslogtreecommitdiff
path: root/lib/vendor-candidates/table/excel-template-download.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/vendor-candidates/table/excel-template-download.tsx')
-rw-r--r--lib/vendor-candidates/table/excel-template-download.tsx94
1 files changed, 94 insertions, 0 deletions
diff --git a/lib/vendor-candidates/table/excel-template-download.tsx b/lib/vendor-candidates/table/excel-template-download.tsx
new file mode 100644
index 00000000..b69ab821
--- /dev/null
+++ b/lib/vendor-candidates/table/excel-template-download.tsx
@@ -0,0 +1,94 @@
+"use client"
+
+import { type Table } from "@tanstack/react-table"
+import ExcelJS from "exceljs"
+import { VendorCandidates } from "@/db/schema/vendors"
+
+/**
+ * Export an empty template for vendor candidates with column headers
+ * matching the expected import format
+ */
+export async function exportVendorCandidateTemplate() {
+ // Create a new workbook and worksheet
+ const workbook = new ExcelJS.Workbook()
+ const worksheet = workbook.addWorksheet("Vendor Candidates")
+
+ // Define the columns with expected headers
+ const columns = [
+ { header: "Company Name", key: "companyName", width: 30 },
+ { header: "Contact Email", key: "contactEmail", width: 30 },
+ { header: "Contact Phone", key: "contactPhone", width: 20 },
+ { header: "Country", key: "country", width: 20 },
+ { header: "Source", key: "source", width: 20 },
+ { header: "Status", key: "status", width: 15 },
+ ]
+
+ // Add columns to the worksheet
+ worksheet.columns = columns
+
+ // Style the header row
+ const headerRow = worksheet.getRow(1)
+ headerRow.font = { bold: true }
+ headerRow.alignment = { horizontal: "center" }
+ headerRow.eachCell((cell) => {
+ cell.fill = {
+ type: "pattern",
+ pattern: "solid",
+ fgColor: { argb: "FFCCCCCC" },
+ }
+ })
+
+ // Add example data rows
+ const exampleData = [
+ {
+ companyName: "ABC Corporation",
+ contactEmail: "contact@abc.com",
+ contactPhone: "+1-123-456-7890",
+ country: "US",
+ source: "Website",
+ status: "COLLECTED",
+ },
+ {
+ companyName: "XYZ Ltd.",
+ contactEmail: "info@xyz.com",
+ contactPhone: "+44-987-654-3210",
+ country: "GB",
+ source: "Referral",
+ status: "COLLECTED",
+ },
+ ]
+
+ // Add the example rows to the worksheet
+ exampleData.forEach((data) => {
+ worksheet.addRow(data)
+ })
+
+ // Add data validation for Status column
+ const statusValues = ["COLLECTED", "INVITED", "DISCARDED"]
+ for (let i = 2; i <= 100; i++) { // Apply to rows 2-100
+ worksheet.getCell(`F${i}`).dataValidation = {
+ type: 'list',
+ allowBlank: true,
+ formulae: [`"${statusValues.join(',')}"`]
+ }
+ }
+
+ // Add instructions row
+ worksheet.insertRow(1, ["Please fill in the data below. Required fields: Company Name, Contact Email"])
+ worksheet.mergeCells("A1:F1")
+ const instructionRow = worksheet.getRow(1)
+ instructionRow.font = { bold: true, color: { argb: "FF0000FF" } }
+ instructionRow.alignment = { horizontal: "center" }
+
+ // Download the workbook
+ const buffer = await workbook.xlsx.writeBuffer()
+ const blob = new Blob([buffer], {
+ type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+ })
+ const url = URL.createObjectURL(blob)
+ const link = document.createElement("a")
+ link.href = url
+ link.download = "vendor-candidates-template.xlsx"
+ link.click()
+ URL.revokeObjectURL(url)
+} \ No newline at end of file