|
import warnings |
|
warnings.simplefilter('default', DeprecationWarning) |
|
|
|
from fpdf import FPDF |
|
import pandas as pd |
|
import streamlit as st |
|
from datetime import datetime |
|
|
|
def generate_pdf(df): |
|
num_students = df.shape[0] |
|
page_body_list = [] |
|
for i in range(num_students): |
|
if(df.at[i, 'Exam Status'] == "Approved"): |
|
|
|
studentName = df.at[i, 'Student'] |
|
course = df.at[i, 'Course'] |
|
date = df.at[i, 'Date'] |
|
loc = df.at[i, 'Exam_Location'] |
|
scheduled_start_time = df.at[i, 'Time_Start'] |
|
scheduled_end_time = df.at[i, 'Time_End'] |
|
|
|
|
|
studentName = " ".join(["Student's Name:", studentName]) |
|
course = " ".join(["Course:", course]) |
|
date = " ".join(["Date:", date]) |
|
if loc == loc: |
|
loc = " ".join(["Location:", loc]) |
|
else: |
|
loc = "Location: __________________" |
|
scheduled_start_time = " ".join(["Scheduled Start Time:", scheduled_start_time]) |
|
scheduled_end_time = " ".join(["Scheduled End Time:", scheduled_end_time]) |
|
|
|
|
|
student_info = "\n".join([studentName, course, date, loc]) |
|
scheduled_time = "\n".join([scheduled_start_time, scheduled_end_time]) |
|
student_info_and_scheduled_time = "\n".join([student_info, scheduled_time]) |
|
notes = "Additional Information:\n____________________________________________________________________\n____________________________________________________________________\n____________________________________________________________________\n____________________________________________________________________" |
|
actual_time = "\n\n\n".join(["Actual Start Time: _____________________________________________________", "Estimated/Adjusted End Time: ___________________________________________", "Actual End Time: ______________________________________________________"]) |
|
proctor = "\n\nProctor's Signature: _______________________ Date: _______________________" |
|
|
|
|
|
body = "\n\n\n".join([student_info_and_scheduled_time, notes, actual_time, proctor]) |
|
|
|
|
|
page_body_list.append(body) |
|
|
|
pdf = FPDF() |
|
for i in range(len(page_body_list)): |
|
pdf.add_page() |
|
|
|
pdf.image("VandyStudentAccessLogo.png", 40, 10, w=120) |
|
|
|
pdf.set_font('helvetica', 'B', size=16) |
|
pdf.cell(w=210, h=9, text="\n", border=0, new_x="LMARGIN", new_y="NEXT", align='C', fill=False) |
|
|
|
pdf.set_font('helvetica', 'B', size=16) |
|
pdf.cell(w=210, h=9, text="\n", border=0, new_x="LMARGIN", new_y="NEXT", align='C', fill=False) |
|
|
|
pdf.set_font('helvetica', 'B', size=8) |
|
pdf.cell(w=210, h=9, text="\n", border=0, new_x="LMARGIN", new_y="NEXT", align='C', fill=False) |
|
|
|
pdf.set_font('helvetica', 'B', size=14) |
|
pdf.cell(w=210, h=9, text="Exam Check-in Form", border=0, new_x="LMARGIN", new_y="NEXT", align='C', fill=False) |
|
|
|
pdf.set_font('helvetica', 'B', size=10) |
|
pdf.multi_cell(w=0, h=7, text="This form is to be completed by the proctor. The student must return this \nform along with their seat ticket and all exam materials.\n", border=0, |
|
new_x="LMARGIN", new_y="NEXT", align='C', fill=False) |
|
|
|
pdf.set_font('helvetica', 'B', size=10) |
|
pdf.cell(w=210, h=9, text="\n", border=0, new_x="LMARGIN", new_y="NEXT", align='C', fill=False) |
|
|
|
pdf.set_font('helvetica', size=13) |
|
pdf.multi_cell(0, 7, page_body_list[i]) |
|
|
|
pdf.set_font('helvetica', 'B', size=10) |
|
pdf.set_xy(145, 270) |
|
pdf.cell(w=0, h=5, text="# of Exam Pages: _____") |
|
|
|
pdf.output("/tmp/GraySheets.pdf") |
|
return "/tmp/GraySheets.pdf" |
|
|
|
def main(): |
|
st.title("Gray Sheet Generator") |
|
|
|
|
|
uploaded_file = st.file_uploader("Choose a CSV file", type="csv") |
|
if uploaded_file is not None: |
|
|
|
df = pd.read_csv(uploaded_file) |
|
pdf_path = generate_pdf(df) |
|
todays_date = datetime.now().strftime("%m_%d_%Y") |
|
filename = f"GraySheets_{todays_date}.pdf" |
|
|
|
|
|
with open(pdf_path, "rb") as file: |
|
btn = st.download_button( |
|
label="Download Gray Sheet", |
|
data=file, |
|
file_name=filename, |
|
mime="application/octet-stream" |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
main() |