File size: 10,198 Bytes
e4fe207
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
597ff7e
e4fe207
 
 
 
 
 
 
 
 
 
 
597ff7e
e4fe207
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
597ff7e
e4fe207
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
597ff7e
e4fe207
 
 
 
 
 
 
 
 
597ff7e
e4fe207
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
597ff7e
e4fe207
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
import streamlit as st
import time
from app5_selectbox import academic_list, class_tbl, instructor, program, student, subject, subj_inst, evaluation, evaluation_fac
from app5_selectbox.database_con import cursor, db_connection


def student_login(username, password):
    cursor.execute(f"SELECT s.stud_id, s.stud_name, s.class_id, s.user_type FROM student s WHERE s.stud_username='{username}' AND s.stud_password='{password}'")
    return cursor.fetchone()

def instructor_login(username, password):
    cursor.execute(f"SELECT i.inst_id, i.inst_name, i.prog_id FROM instructor i WHERE i.inst_username='{username}' AND i.inst_password='{password}'")
    return cursor.fetchone()


def app5():
    st.title("Student-Faculty Evaluation")
    
    if not hasattr(st.session_state, "logged_in") or not st.session_state.logged_in:
        st.subheader("User Login")
        username = st.text_input("Username")
        password = st.text_input("Password", type="password")
        
        if st.button("Login", type="primary"):
            student_info = student_login(username, password)
            
            if student_info:
                st.success(f"Hello, {student_info[1]}! Login Successful")
                st.session_state.logged_in = True
                st.session_state.student_id = student_info[0]
                st.session_state.class_id = student_info[2]
                st.session_state.user_type = student_info[3]
                time.sleep(1)
                st.rerun()
                
            elif not student_info:
                instructor_info = instructor_login(username, password)
                if instructor_info:
                    st.success(f"Hello, {instructor_info[1]}! Login Successful")
                    st.session_state.logged_in = True
                    st.session_state.inst_id = instructor_info[0]
                    st.session_state.inst_name = instructor_info[1]
                    st.session_state.prog_id = instructor_info[2] 
                    st.session_state.user_type = 'faculty'
                    time.sleep(1)
                    st.rerun()
                else:
                    st.error("Invalid Credentials")
            
            else:
                st.error("Invalid Credentials")
    else:
        if st.session_state.user_type == 'student':
            cursor.execute(f"SELECT s.stud_name, c.class_year, c.class_section FROM student s JOIN class c ON s.class_id = c.class_id WHERE s.stud_id='{st.session_state.student_id}'")
            student_info = cursor.fetchone()
            student_name, class_year, class_section = student_info
            
            st.subheader(f"Hello, {student_name} (Class Year: {class_year}, Section: {class_section}) - Student Evaluation")

            cursor.execute(f"""
                SELECT si.subj_inst_id, si.sub_id_code, sub.sub_name, i.inst_name
                FROM subj_inst si
                LEFT JOIN evaluation e ON e.subj_inst_id = si.subj_inst_id AND e.stud_id = {st.session_state.student_id}
                INNER JOIN subject sub ON sub.sub_id_code = si.sub_id_code
                INNER JOIN instructor i ON i.inst_id = si.inst_id
                WHERE e.stud_id IS NULL AND si.class_id = '{st.session_state.class_id}'
            """)

            subjects = cursor.fetchall()
            subject_names = [f"{subject[2]} with Instructor: {subject[3]}" for subject in subjects]
            if not subjects:
                st.warning("You have evaluated all available subjects. Thank you!")
                st.balloons()
                
                progress_text = "logging-out . ..."
                my_bar = st.progress(0, text=progress_text)
                for percent_complete in range(100):
                    time.sleep(0.01)
                    my_bar.progress(percent_complete + 1, text=progress_text)
                
                cursor.execute(f"UPDATE student SET is_eval='TRUE' WHERE stud_id =  '{st.session_state.student_id}'")
                db_connection.commit()
                st.session_state.pop("logged_in", None)
                st.session_state.pop("student_id", None)
                st.session_state.pop("class_id", None)
                st.rerun()
                
            else:
                selected_subject = st.selectbox("Select a Subject to Evaluate", subject_names)
                selected_subject_id = None

                for sel_subject in subjects:
                    if f"{sel_subject[2]} with Instructor: {sel_subject[3]}" == selected_subject:
                        selected_subject_id = sel_subject[0]
                        
                keys = {}
                if selected_subject_id:
                    st.write(f"You are evaluating the {selected_subject}.")
                    criteria_list = [
                        "Teaching Effectiveness",
                        "Course Organization",
                        "Accessibility and Communication",
                        "Assessment and Grading",
                        "Respect and Inclusivity",
                        "Engagement and Interactivity",
                        "Feedback and Improvement",
                        "Accessibility of Learning Resources",
                        "Passion and Enthusiasm",
                        "Professionalism and Ethical Conduct",
                    ]
                    criteria = {}
                    
                    for i in range(10):
                        criteria_key = f"criteria_{i}_{selected_subject_id}"
                        criteria_text = f"{criteria_list[i]} (1-5)"
                        criteria[i] = st.slider(criteria_text, 1.00, 5.00, 1.00, step=0.05, key=criteria_key)
                        keys[f"criteria_{i}"] = criteria_key
                        
                    feedback_comment_key = f"feedback_comment_{selected_subject_id}"
                    feedback_comment = st.text_area("Feedback/Comments", key=feedback_comment_key)
                    
                    if st.button("Submit Evaluation"):
                        if not feedback_comment:
                            st.warning("Please provide feedback comments.")
                        else:
                            cursor.execute(f"SELECT si.inst_id FROM subj_inst si WHERE si.subj_inst_id = '{selected_subject_id}'")
                            instructor_id = cursor.fetchone()

                            if instructor_id:
                                instructor_id = instructor_id[0]

                                cursor.execute(f"""INSERT INTO evaluation (
                                        stud_id,
                                        subj_inst_id, 
                                        inst_id, 
                                        Teaching_Effectiveness, 
                                        Course_Organization, 
                                        Accessibility_and_Communication, 
                                        Assessment_and_Grading, 
                                        Respect_and_Inclusivity, 
                                        Engagement_and_Interactivity, 
                                        Feedback_and_Improvement, 
                                        Accessibility_of_Learning_Resources, 
                                        Passion_and_Enthusiasm, 
                                        Professionalism_and_Ethical_Conduct, 
                                        comments, 
                                        eval_timestamp)
                                        VALUES ('{st.session_state.student_id}', '{selected_subject_id}', '{instructor_id}', '{criteria[0]}', '{criteria[1]}', '{criteria[2]}', '{criteria[3]}', '{criteria[4]}', '{criteria[5]}', '{criteria[6]}', '{criteria[7]}', '{criteria[8]}', '{criteria[9]}','{feedback_comment}', strftime('%Y-%m-%d %H:%M:%S','now'))""")
                                db_connection.commit()

                                with st.empty():
                                    st.write("Submitting evaluation...")
                                    time.sleep(0.3)
                                    st.success("Evaluation submitted successfully")
                                    time.sleep(0.4)

                                feedback_comment = ""

                                st.rerun()
                else:
                    for i in keys.keys():
                        keys[i] = None
                    feedback_comment = None

            if st.button("Log Out"):
                st.session_state.pop("logged_in", None)
                st.session_state.pop("student_id", None)
                st.session_state.pop("class_id", None)
                st.rerun()
        elif st.session_state.user_type == 'faculty':
            evaluation_fac.evaluation()
            
        elif st.session_state.user_type == 'admin':
            table_name = st.sidebar.selectbox("Select Table", ("academic_list", "class", "instructor", "program", "student", "subject", "subj_inst", "evaluation"))

            if table_name == "academic_list":
                academic_list.academic_list(table_name)
            elif table_name == "class":
                class_tbl.class_tbl(table_name)
            elif table_name == "instructor":
                instructor.instructor(table_name)
            elif table_name == "program":
                program.program(table_name)
            elif table_name == "student":
                student.student(table_name)
            elif table_name == "subject":
                subject.subject(table_name)
            elif table_name == "subj_inst":
                subj_inst.subj_inst(table_name)
            elif table_name == "evaluation":
                evaluation.evaluation()
            else:
                st.error("Select a valid table from the sidebar.")
            
            if st.button("Log Out"):
                st.session_state.pop("logged_in", None)
                st.session_state.pop("student_id", None)
                st.session_state.pop("class_id", None)
                st.rerun()


# Call the main function
if __name__ == "__main__":
    app5()