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()