102 lines
3.0 KiB
Python
102 lines
3.0 KiB
Python
"""
|
|
Debug script untuk simulasi import tracer_responses
|
|
"""
|
|
import pandas as pd
|
|
import sys
|
|
sys.path.insert(0, r'c:\Users\syifa\TA-PROJEK\Backend')
|
|
|
|
from app.routers.import_data import get_year_mapping, find_column, konversi_jawaban
|
|
|
|
# Baca CSV
|
|
df = pd.read_csv(r'c:\Users\syifa\TA-PROJEK\Data_Tracerstudy\Data_2019_Tracer_study.csv', sep=';', encoding='utf-8-sig')
|
|
source_cols = list(df.columns)
|
|
|
|
# Get year mapping
|
|
tahun = '2019'
|
|
tracer_mapping = get_year_mapping(tahun, source_cols)
|
|
|
|
print('='*70)
|
|
print(f'DEBUG IMPORT TAHUN {tahun}')
|
|
print('='*70)
|
|
|
|
# Print tracer_mapping yang sebenarnya digunakan
|
|
print('\nTRACER MAPPING:')
|
|
for key in ['email', 'nama_perusahaan', 'jumlah_perusahaan', 'jabatan']:
|
|
if key in tracer_mapping:
|
|
print(f" {key}: {tracer_mapping[key]}")
|
|
else:
|
|
print(f" {key}: NOT IN MAPPING (akan di-skip)")
|
|
|
|
print()
|
|
|
|
# Process baris pertama
|
|
row = df.iloc[0]
|
|
print(f'NIM: {row["NIM/Nomor Mahasiswa"]}')
|
|
print(f'Nama: {row["Nama"]}')
|
|
print()
|
|
|
|
def get_val_debug(mapping_dict, key, default=None):
|
|
cols = mapping_dict.get(key, [])
|
|
col = find_column(source_cols, cols)
|
|
if col and pd.notna(row.get(col)):
|
|
val = row[col]
|
|
if isinstance(val, (int, float)):
|
|
return int(val) if val == int(val) else val
|
|
return str(val).strip()
|
|
return default
|
|
|
|
print('='*70)
|
|
print('SIMULASI BUILD TRACER_DATA')
|
|
print('='*70)
|
|
|
|
tracer_data = {}
|
|
numeric_fields = ['bulan_dapat_kerja', 'dapet_kerja_6_bulan', 'bulan_dapat_kerja_setelah',
|
|
'jumlah_perusahaan', 'bulan_cari_sebelum_lulus', 'bulan_cari_setelah_wisuda',
|
|
'jumlah_perusahaan_dilamar', 'jumlah_perusahaan_merespons', 'jumlah_perusahaan_wawancara']
|
|
|
|
for field, cols in tracer_mapping.items():
|
|
val = get_val_debug(tracer_mapping, field)
|
|
|
|
if val is None:
|
|
print(f'SKIP {field}: val is None')
|
|
continue
|
|
|
|
# Skip invalid string values
|
|
if isinstance(val, str) and val.strip() in ['', 'nan', 'None', '-', '_']:
|
|
print(f'SKIP {field}: invalid string "{val}"')
|
|
continue
|
|
|
|
# Get field code from mapping
|
|
field_code = None
|
|
if cols:
|
|
for col in cols:
|
|
if str(col).upper().startswith('F'):
|
|
field_code = str(col).upper()
|
|
break
|
|
|
|
# Convert value
|
|
converted_val = konversi_jawaban(field_code, val)
|
|
|
|
# Save to tracer_data
|
|
if field in numeric_fields:
|
|
try:
|
|
tracer_data[field] = int(val)
|
|
print(f'OK {field} (numeric): {val} -> {int(val)}')
|
|
except (ValueError, TypeError) as e:
|
|
print(f'SKIP {field}: cannot convert to int "{val}" - {e}')
|
|
elif converted_val is not None:
|
|
tracer_data[field] = converted_val
|
|
print(f'OK {field}: {repr(val)} -> {repr(converted_val)}')
|
|
else:
|
|
print(f'SKIP {field}: converted_val is None')
|
|
|
|
print()
|
|
print('='*70)
|
|
print('HASIL TRACER_DATA')
|
|
print('='*70)
|
|
for key in ['email', 'nama_perusahaan', 'jumlah_perusahaan', 'jabatan']:
|
|
if key in tracer_data:
|
|
print(f'{key}: {repr(tracer_data[key])}')
|
|
else:
|
|
print(f'{key}: NOT SAVED')
|