Files
smanab/Sistem-Pelanggaran-Siswa/public/templates/generate-templates.js

68 lines
3.9 KiB
JavaScript

import XLSX from 'xlsx';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// Template Kriteria Pelanggaran
const violationRulesData = [
{ Kode: 'A1', Deskripsi: 'Membawa/menggunakan senjata tajam/api', Kategori: 'Perilaku', Skor: 100, Sanksi: '' },
{ Kode: 'A2', Deskripsi: 'Membawa/menggunakan narkoba/miras', Kategori: 'Perilaku', Skor: 100, Sanksi: '' },
{ Kode: 'A3', Deskripsi: 'Berkelahi/tawuran', Kategori: 'Perilaku', Skor: 100, Sanksi: '' },
{ Kode: 'A4', Deskripsi: 'Merusak sarana sekolah', Kategori: 'Perilaku', Skor: 50, Sanksi: 'Mengganti sarana' },
{ Kode: 'A5', Deskripsi: 'Membuat gaduh di kelas', Kategori: 'Perilaku', Skor: 25, Sanksi: '' },
{ Kode: 'B1', Deskripsi: 'Absen tanpa keterangan (Alpha)', Kategori: 'Kerajinan', Skor: 5, Sanksi: '' },
{ Kode: 'B2', Deskripsi: 'Terlambat hadir ke sekolah', Kategori: 'Kerajinan', Skor: 5, Sanksi: '' },
{ Kode: 'B3', Deskripsi: 'Absen ulangan tanpa izin', Kategori: 'Kerajinan', Skor: 10, Sanksi: '' },
{ Kode: 'C1', Deskripsi: 'Seragam tidak sesuai ketentuan', Kategori: 'Kerapian', Skor: 20, Sanksi: '' },
{ Kode: 'C2', Deskripsi: 'Rambut gondrong/tidak rapi', Kategori: 'Kerapian', Skor: 10, Sanksi: '' },
];
const wsViolation = XLSX.utils.json_to_sheet(violationRulesData);
wsViolation['!cols'] = [
{ wch: 8 }, // Kode
{ wch: 50 }, // Deskripsi
{ wch: 15 }, // Kategori
{ wch: 8 }, // Skor
{ wch: 25 }, // Sanksi
];
const wbViolation = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wbViolation, wsViolation, 'Kriteria Pelanggaran');
XLSX.writeFile(wbViolation, path.join(__dirname, 'Template-Import-Kriteria-Pelanggaran.xlsx'));
console.log('✅ Template Kriteria Pelanggaran created!');
// Template Kriteria Prestasi
const achievementCriteriaData = [
{ Tingkat: 'Internasional', Prestasi: 'Juara I', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 50 },
{ Tingkat: 'Internasional', Prestasi: 'Juara II', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 45 },
{ Tingkat: 'Internasional', Prestasi: 'Juara III', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 40 },
{ Tingkat: 'Nasional', Prestasi: 'Juara I', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 40 },
{ Tingkat: 'Nasional', Prestasi: 'Juara II', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 35 },
{ Tingkat: 'Nasional', Prestasi: 'Juara III', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 30 },
{ Tingkat: 'Provinsi', Prestasi: 'Juara I', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 30 },
{ Tingkat: 'Provinsi', Prestasi: 'Juara II', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 25 },
{ Tingkat: 'Kabupaten/Kota', Prestasi: 'Juara I', Jenis: 'Perorangan', 'Ukuran Kelompok': '', Skor: 20 },
{ Tingkat: 'Kabupaten/Kota', Prestasi: 'Juara I', Jenis: 'Kelompok', 'Ukuran Kelompok': '1-3 orang', Skor: 18 },
{ Tingkat: 'Kabupaten/Kota', Prestasi: 'Juara I', Jenis: 'Kelompok', 'Ukuran Kelompok': '4-6 orang', Skor: 16 },
{ Tingkat: 'Kabupaten/Kota', Prestasi: 'Juara I', Jenis: 'Kelompok', 'Ukuran Kelompok': '7-12 orang', Skor: 14 },
{ Tingkat: 'Kabupaten/Kota', Prestasi: 'Juara I', Jenis: 'Kelompok', 'Ukuran Kelompok': 'Lebih dari 12 orang', Skor: 12 },
];
const wsAchievement = XLSX.utils.json_to_sheet(achievementCriteriaData);
wsAchievement['!cols'] = [
{ wch: 18 }, // Tingkat
{ wch: 15 }, // Prestasi
{ wch: 12 }, // Jenis
{ wch: 22 }, // Ukuran Kelompok
{ wch: 8 }, // Skor
];
const wbAchievement = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wbAchievement, wsAchievement, 'Kriteria Prestasi');
XLSX.writeFile(wbAchievement, path.join(__dirname, 'Template-Import-Kriteria-Prestasi.xlsx'));
console.log('✅ Template Kriteria Prestasi created!');
console.log('\n📁 Templates saved to public/templates/ folder');