import streamlit as st import os import mysql.connector import math # Fungsi untuk mendapatkan gambar sebagai base64 def get_image_as_base64(image_path): import base64 with open(image_path, "rb") as img_file: return base64.b64encode(img_file.read()).decode("utf-8") # Fungsi untuk menampilkan navbar def navbar(): current_page = st.session_state.get("page", "Home") logo_path = os.path.join(os.path.dirname(__file__), "../asset/logo.png") # Cek status login if 'logged_in' in st.session_state and st.session_state['logged_in']: login_button_text = "Logout" login_button_link = "?page=Login&logout=true" # Tambahkan parameter logout else: login_button_text = "Logout" login_button_link = "?page=Login" st.markdown( f""" """, unsafe_allow_html=True, ) def connect_to_db(): try: conn = mysql.connector.connect( host=st.secrets["mysql"]["host"], user=st.secrets["mysql"]["user"], password=st.secrets["mysql"]["password"], database=st.secrets["mysql"]["dbname"], port=st.secrets["mysql"]["port"] ) return conn except mysql.connector.Error as e: st.error(f"Koneksi ke database gagal: {e}") return None def check_employee_in_db(employee_id): conn = connect_to_db() if conn: try: cursor = conn.cursor(dictionary=True) query = "SELECT * FROM data_employee_db WHERE employee_id = %s" cursor.execute(query, (employee_id,)) result = cursor.fetchone() conn.close() return result # Mengembalikan data karyawan jika ditemukan except mysql.connector.Error as e: st.error(f"Terjadi kesalahan saat mengakses database: {e}") return None return None def save_job_satisfaction(employee_id, responses): conn = connect_to_db() if conn: try: # Hitung skor akhir total_score = sum([responses[q] for q in range(len(responses))]) average_score = total_score / len(responses) final_score = min(max(round(average_score), 1), 4) # Batas 1-4 # Simpan ke tabel employee_job_sas cursor = conn.cursor() query = """ INSERT INTO employee_job_sas ( employee_id, question_1, question_2, question_3, question_4, question_5, question_6, question_7, question_8, skor_akhir ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) """ cursor.execute(query, (employee_id, *responses, final_score)) conn.commit() # Update kolom job_satisfaction di tabel data_employee_db update_query = """ UPDATE data_employee_db SET job_satisfaction = %s WHERE employee_id = %s """ cursor.execute(update_query, (final_score, employee_id)) conn.commit() conn.close() return final_score except mysql.connector.Error as e: st.error(f"Terjadi kesalahan saat menyimpan data: {e}") conn.close() return None def show_karyawan_form(): navbar() st.markdown(""" """, unsafe_allow_html=True) st.markdown( """

Form Kepuasan Kerja Karyawan

""", unsafe_allow_html=True ) # Inisialisasi session state if "employee_id" not in st.session_state: st.session_state.employee_id = None # Awalnya kosong if "submit_success" not in st.session_state: st.session_state.submit_success = False # Awalnya False # Input Employee ID if not st.session_state.employee_id: # Jika belum ada ID yang tersimpan employee_id = st.text_input("Masukkan ID Karyawan", placeholder="Contoh: EM12345") # Tombol untuk mencocokkan employee_id if st.button("Isi Form"): if not employee_id: st.error("Harap masukkan Employee ID terlebih dahulu.") return # Cek apakah employee_id ada di database employee_data = check_employee_in_db(employee_id) if not employee_data: st.error("Employee ID tidak ditemukan di database.") return # Jika ditemukan, simpan Employee ID di session_state st.session_state.employee_id = employee_id # Jika Employee ID sudah disimpan if st.session_state.employee_id: st.success(f"Employee ID ditemukan!") st.markdown( """

Isi Form Kepuasan Kerja

""", unsafe_allow_html=True ) questions = [ "Bagaimana tingkat kepuasan Anda terhadap lingkungan kerja saat ini?", "Seberapa puas Anda dengan keseimbangan antara pekerjaan dan kehidupan pribadi?", "Bagaimana pendapat Anda tentang kompensasi atau benefit yang Anda terima?", "Bagaimana penilaian Anda terhadap hubungan dengan rekan kerja?", "Seberapa puas Anda dengan kesempatan pengembangan karier atau pelatihan yang disediakan perusahaan?", "Bagaimana penilaian Anda terhadap kejelasan tugas dan tanggung jawab di pekerjaan Anda?", "Seberapa puas Anda dengan penghargaan atau pengakuan atas pencapaian kerja Anda?", "Bagaimana tingkat kepuasan Anda terhadap kepemimpinan dan arahan dari manajer Anda?" ] options = {"Sangat Tidak Puas": 1, "Tidak Puas": 2, "Puas": 3, "Sangat Puas": 4} # Buat dua kolom col1, col2 = st.columns(2) responses = [] for idx, question in enumerate(questions): if idx % 2 == 0: with col1: response = st.selectbox(question, list(options.keys()), key=f"q{idx}") responses.append(options[response]) else: with col2: response = st.selectbox(question, list(options.keys()), key=f"q{idx}") responses.append(options[response]) # Tombol Submit if st.button("Submit") and not st.session_state.submit_success: final_score = save_job_satisfaction(st.session_state.employee_id, responses) if final_score is not None: st.session_state.submit_success = True # Tandai data berhasil disimpan st.success(f"Data berhasil disimpan! Skor Akhir: {final_score}") # Jika data berhasil disimpan, tampilkan tombol kembali if st.session_state.submit_success: if st.button("Kembali ke Form Awal"): # Reset Employee ID dan status submit st.session_state.employee_id = None st.session_state.submit_success = False st.rerun() st.markdown( """ """, unsafe_allow_html=True ) if __name__ == "__main__": show_karyawan_form()