ayo bisa
This commit is contained in:
@@ -13,7 +13,9 @@ export async function GET(request: NextRequest) {
|
||||
.from('mahasiswa')
|
||||
.select(`
|
||||
*,
|
||||
kelompok_keahlian!id_kelompok_keahlian(id_kk, nama_kelompok)
|
||||
kelompok_keahlian!id_kelompok_keahlian(id_kk, nama_kelompok),
|
||||
dosen_pembimbing_1:dosen!pembimbing_1(id_dosen, nama_dosen),
|
||||
dosen_pembimbing_2:dosen!pembimbing_2(id_dosen, nama_dosen)
|
||||
`)
|
||||
.eq('nim', nim)
|
||||
.single();
|
||||
@@ -25,9 +27,13 @@ export async function GET(request: NextRequest) {
|
||||
// Transformasi data untuk meratakan field yang di-join
|
||||
const transformedData = {
|
||||
...data,
|
||||
nama_kelompok_keahlian: data.kelompok_keahlian?.nama_kelompok || null
|
||||
nama_kelompok_keahlian: data.kelompok_keahlian?.nama_kelompok || null,
|
||||
nama_pembimbing_1: data.dosen_pembimbing_1?.nama_dosen || null,
|
||||
nama_pembimbing_2: data.dosen_pembimbing_2?.nama_dosen || null
|
||||
};
|
||||
delete transformedData.kelompok_keahlian;
|
||||
delete transformedData.dosen_pembimbing_1;
|
||||
delete transformedData.dosen_pembimbing_2;
|
||||
|
||||
return NextResponse.json(transformedData);
|
||||
} else {
|
||||
@@ -36,7 +42,9 @@ export async function GET(request: NextRequest) {
|
||||
.from('mahasiswa')
|
||||
.select(`
|
||||
*,
|
||||
kelompok_keahlian!id_kelompok_keahlian(id_kk, nama_kelompok)
|
||||
kelompok_keahlian!id_kelompok_keahlian(id_kk, nama_kelompok),
|
||||
dosen_pembimbing_1:dosen!pembimbing_1(id_dosen, nama_dosen),
|
||||
dosen_pembimbing_2:dosen!pembimbing_2(id_dosen, nama_dosen)
|
||||
`)
|
||||
.order('nim');
|
||||
|
||||
@@ -48,8 +56,10 @@ export async function GET(request: NextRequest) {
|
||||
// Transformasi data untuk meratakan field yang di-join
|
||||
const transformedData = data.map(item => ({
|
||||
...item,
|
||||
nama_kelompok_keahlian: item.kelompok_keahlian?.nama_kelompok || null
|
||||
})).map(({ kelompok_keahlian, ...rest }) => rest);
|
||||
nama_kelompok_keahlian: item.kelompok_keahlian?.nama_kelompok || null,
|
||||
nama_pembimbing_1: item.dosen_pembimbing_1?.nama_dosen || null,
|
||||
nama_pembimbing_2: item.dosen_pembimbing_2?.nama_dosen || null
|
||||
})).map(({ kelompok_keahlian, dosen_pembimbing_1, dosen_pembimbing_2, ...rest }) => rest);
|
||||
|
||||
return NextResponse.json(transformedData);
|
||||
}
|
||||
@@ -75,7 +85,10 @@ export async function POST(request: NextRequest) {
|
||||
ipk,
|
||||
id_kelompok_keahlian,
|
||||
status_kuliah,
|
||||
semester
|
||||
semester,
|
||||
pembimbing_1,
|
||||
pembimbing_2,
|
||||
status_bimbingan
|
||||
} = body;
|
||||
|
||||
// Validasi field yang wajib diisi
|
||||
@@ -115,7 +128,10 @@ export async function POST(request: NextRequest) {
|
||||
ipk: ipk || null,
|
||||
id_kelompok_keahlian: id_kelompok_keahlian || null,
|
||||
status_kuliah: status_kuliah || "Aktif",
|
||||
semester: semester || 1
|
||||
semester: semester || 1,
|
||||
pembimbing_1: pembimbing_1 || null,
|
||||
pembimbing_2: pembimbing_2 || null,
|
||||
status_bimbingan: status_bimbingan || "Belum Selesai"
|
||||
})
|
||||
.select()
|
||||
.single();
|
||||
@@ -157,7 +173,10 @@ export async function PUT(request: NextRequest) {
|
||||
ipk,
|
||||
id_kelompok_keahlian,
|
||||
status_kuliah,
|
||||
semester
|
||||
semester,
|
||||
pembimbing_1,
|
||||
pembimbing_2,
|
||||
status_bimbingan
|
||||
} = body;
|
||||
|
||||
// Cek apakah mahasiswa ada
|
||||
@@ -185,7 +204,10 @@ export async function PUT(request: NextRequest) {
|
||||
ipk: ipk || existing.ipk,
|
||||
id_kelompok_keahlian: id_kelompok_keahlian || existing.id_kelompok_keahlian,
|
||||
status_kuliah: status_kuliah || existing.status_kuliah,
|
||||
semester: semester || existing.semester
|
||||
semester: semester || existing.semester,
|
||||
pembimbing_1: pembimbing_1 !== undefined ? pembimbing_1 : existing.pembimbing_1,
|
||||
pembimbing_2: pembimbing_2 !== undefined ? pembimbing_2 : existing.pembimbing_2,
|
||||
status_bimbingan: status_bimbingan || existing.status_bimbingan
|
||||
})
|
||||
.eq('nim', nim);
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user