summaryrefslogtreecommitdiff
path: root/lib/procurement-items/table/procurement-items-excel-template.tsx
blob: d72af26a94352c34959532c5e93cae9e43ee7b34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import * as ExcelJS from 'exceljs';
import { saveAs } from "file-saver";

/**
 * 품목 데이터 가져오기를 위한 Excel 템플릿 파일 생성 및 다운로드
 */
export async function exportProcurementItemTemplate() {
  // 워크북 생성
  const workbook = new ExcelJS.Workbook();
  workbook.creator = 'Procurement Item Management System';
  workbook.created = new Date();

  // 워크시트 생성
  const worksheet = workbook.addWorksheet('품목');

  // 컬럼 헤더 정의 및 스타일 적용
  worksheet.columns = [
    { header: '품목코드', key: 'itemCode', width: 15 },
    { header: '품목명', key: 'itemName', width: 30 },
    { header: '재질', key: 'material', width: 20 },
    { header: '규격', key: 'specification', width: 25 },
    { header: '단위', key: 'unit', width: 10 },
    { header: '활성화여부', key: 'isActive', width: 12 },
  ];

  // 헤더 스타일 적용
  const headerRow = worksheet.getRow(1);
  headerRow.font = { bold: true };
  headerRow.fill = {
    type: 'pattern',
    pattern: 'solid',
    fgColor: { argb: 'FFE0E0E0' }
  };
  headerRow.alignment = { vertical: 'middle', horizontal: 'center' };

  // 테두리 스타일 적용
  headerRow.eachCell((cell) => {
    cell.border = {
      top: { style: 'thin' },
      left: { style: 'thin' },
      bottom: { style: 'thin' },
      right: { style: 'thin' }
    };
  });

  // 샘플 데이터 행 추가
  const sampleRow = worksheet.addRow({
    itemCode: 'ITEM001',
    itemName: '강관',
    material: 'SS400',
    specification: '50x50x2.3T',
    unit: 'EA',
    isActive: 'Y'
  });

  // 샘플 행 스타일 적용
  sampleRow.eachCell((cell) => {
    cell.fill = {
      type: 'pattern',
      pattern: 'solid',
      fgColor: { argb: 'FFF5F5F5' }
    };
    cell.border = {
      top: { style: 'thin' },
      left: { style: 'thin' },
      bottom: { style: 'thin' },
      right: { style: 'thin' }
    };
  });

  // 설명 행 추가
  const descriptionRow = worksheet.addRow([
    '※ 품목코드: 필수, 중복 불가',
    '※ 품목명: 필수',
    '※ 재질: 선택사항',
    '※ 규격: 선택사항',
    '※ 단위: 선택사항 (예: EA, M, KG)',
    '※ 활성화여부: Y(활성) 또는 N(비활성)'
  ]);

  descriptionRow.font = { italic: true, color: { argb: 'FF666666' } };
  descriptionRow.eachCell((cell) => {
    cell.fill = {
      type: 'pattern',
      pattern: 'solid',
      fgColor: { argb: 'FFFFE0E0' }
    };
  });

  // 워크시트 설정
  worksheet.views = [
    { state: 'frozen', ySplit: 1 } // 헤더 행 고정
  ];

  // 파일 저장
  const buffer = await workbook.xlsx.writeBuffer();
  const blob = new Blob([buffer], {
    type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
  });
  saveAs(blob, 'procurement_items_template.xlsx');
}