This commit is contained in:
Randa Firman Putra
2025-09-16 14:22:37 +07:00
parent f2d15b38e3
commit 886fc59d28
17 changed files with 2386 additions and 30 deletions

View File

@@ -120,7 +120,10 @@ function processData(headers: string[], rows: any[][]) {
ipk: ['ipk', 'gpa'],
kelompok_keahlian: ['kelompok_keahlian', 'kk', 'keahlian', 'id_kk'],
status_kuliah: ['status_kuliah', 'status', 'status_mahasiswa'],
semester: ['semester', 'sem']
semester: ['semester', 'sem'],
pembimbing_1_nip: ['pembimbing_1_nip', 'nip_pembimbing_1', 'pembimbing1_nip', 'dosen_pembimbing_1'],
pembimbing_2_nip: ['pembimbing_2_nip', 'nip_pembimbing_2', 'pembimbing2_nip', 'dosen_pembimbing_2'],
status_bimbingan: ['status_bimbingan', 'status_guidance', 'bimbingan_status']
};
// Map actual headers to expected headers
@@ -205,6 +208,22 @@ function processData(headers: string[], rows: any[][]) {
}
}
// Handle pembimbing NIP
const pembimbing_1_nip = headerMap.pembimbing_1_nip !== undefined ? String(values[headerMap.pembimbing_1_nip] || '') || null : null;
const pembimbing_2_nip = headerMap.pembimbing_2_nip !== undefined ? String(values[headerMap.pembimbing_2_nip] || '') || null : null;
// Handle status bimbingan
let status_bimbingan = 'Belum Selesai'; // Default value
if (headerMap.status_bimbingan !== undefined && values[headerMap.status_bimbingan] !== undefined) {
const statusValue = String(values[headerMap.status_bimbingan] || '').trim();
if (statusValue) {
const mappedStatus = mapStatusBimbingan(statusValue);
if (mappedStatus) {
status_bimbingan = mappedStatus;
}
}
}
// Validate required fields
if (!nim || !nama || !jenis_kelamin || !tahun_angkatan) {
errors.push(`Row ${i+1}: Missing required fields`);
@@ -241,14 +260,17 @@ function processData(headers: string[], rows: any[][]) {
nama,
jk: jenis_kelamin,
agama,
kabupaten,
kabupaten,
provinsi,
jenis_pendaftaran,
tahun_angkatan,
ipk,
kelompok_keahlian_id,
status_kuliah,
semester
semester,
pembimbing_1_nip,
pembimbing_2_nip,
status_bimbingan
});
} catch (error) {
@@ -301,6 +323,23 @@ function mapStatus(value: string): 'Aktif' | 'Cuti' | 'Lulus' | 'Non-Aktif' | nu
return null;
}
// Function to map status bimbingan values to standardized format
function mapStatusBimbingan(value: string): 'Selesai' | 'Belum Selesai' | null {
if (!value) return null;
const lowerValue = value.toLowerCase();
if (['selesai', 'completed', 'done', 'finished', 's', '1'].includes(lowerValue)) {
return 'Selesai';
}
if (['belum selesai', 'belum_selesai', 'not completed', 'incomplete', 'ongoing', 'in progress', 'b', '0'].includes(lowerValue)) {
return 'Belum Selesai';
}
return null;
}
// Fungsi untuk insert data ke database
async function insertDataToDatabase(data: any[]) {
let insertedCount = 0;
@@ -315,6 +354,28 @@ async function insertDataToDatabase(data: any[]) {
.eq('nim', item.nim)
.single();
// Lookup pembimbing berdasarkan NIP
let pembimbing_1_id = null;
let pembimbing_2_id = null;
if (item.pembimbing_1_nip) {
const { data: dosen1 } = await supabase
.from('dosen')
.select('id_dosen')
.eq('nip', item.pembimbing_1_nip)
.single();
pembimbing_1_id = dosen1?.id_dosen || null;
}
if (item.pembimbing_2_nip) {
const { data: dosen2 } = await supabase
.from('dosen')
.select('id_dosen')
.eq('nip', item.pembimbing_2_nip)
.single();
pembimbing_2_id = dosen2?.id_dosen || null;
}
const mahasiswaData = {
nama: item.nama,
jk: item.jk,
@@ -326,7 +387,10 @@ async function insertDataToDatabase(data: any[]) {
ipk: item.ipk,
id_kelompok_keahlian: item.kelompok_keahlian_id,
status_kuliah: item.status_kuliah,
semester: item.semester
semester: item.semester,
pembimbing_1: pembimbing_1_id,
pembimbing_2: pembimbing_2_id,
status_bimbingan: item.status_bimbingan
};
if (existingData) {