MENG21's picture
Upload 68 files
e4fe207 verified
# subject.py
import streamlit as st
import pandas as pd
from app5_selectbox.database_con import cursor, db_connection
from app5_selectbox.app5_selectbox_func import display_table, generate_unique_4
# Existing code for adding subjects
def subject(table_name):
sub_id_code = generate_unique_4(cursor, "sub_id_code", table_name)
sub_name = st.text_input("Subject Name", key="sub_name").upper()
# Fetch program options from the database
cursor.execute("SELECT prog_id, prog_name FROM program")
program_options = cursor.fetchall()
prog_id_options = {str(prog[0]): prog[1] for prog in program_options}
# Fetch academic year options from the database, including sem_num
cursor.execute("SELECT acad_id, ' - Semester ' || sem_num FROM academic_list")
academic_options = cursor.fetchall()
acad_id_options = {str(acad[0]): acad[1] for acad in academic_options}
prog_id = st.selectbox("Program", list(prog_id_options.keys()), format_func=lambda x: prog_id_options[x])
acad_id = st.selectbox("Academic Year and Semester", list(acad_id_options.keys()), format_func=lambda x: acad_id_options[x])
if st.button("Insert Subject Record"):
# Check if sub_name, prog_id, and acad_id are provided
if not sub_name or not prog_id or not acad_id:
st.error("Subject Name, Program, and Academic Year and Semester are required. Please provide values for all fields.")
else:
try:
# Check for duplicates
cursor.execute("SELECT sub_id_code FROM subject WHERE sub_name = ? AND prog_id = ? AND acad_id = ?",
(sub_name, prog_id, acad_id))
duplicate_check = cursor.fetchone()
if duplicate_check:
st.error("A subject with the same name, program, and academic year and semester already exists.")
else:
# Insert a record into the subject table
cursor.execute("INSERT INTO subject (sub_id_code, sub_name, prog_id, acad_id) VALUES (?, ?, ?, ?)",
(sub_id_code, sub_name, prog_id, acad_id))
db_connection.commit()
st.success("Record inserted successfully.")
except Exception as e:
st.error(f"An error occurred: {str(e)}")
# New code for displaying the DataFrame
st.header("Filtered Subjects")
if prog_id and acad_id:
cursor.execute("SELECT sub_id_code, sub_name FROM subject WHERE prog_id = ? AND acad_id = ?",
(prog_id, acad_id))
subject_data = cursor.fetchall()
if subject_data:
df = pd.DataFrame(subject_data, columns=["sub_id_code", "sub_name"])
st.dataframe(df.style.set_properties(**{'text-align': 'center'}))
else:
st.warning("No subjects found for the selected Program and Academic Year/Semester.")
display_table(cursor, table_name)