Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pandas as pd | |
| import sqlite3 | |
| from datetime import datetime | |
| # Database Setup | |
| db_file = "outputs/attendance_records.db" | |
| # Helper Functions | |
| def get_db_connection(): | |
| """Create a new database connection.""" | |
| conn = sqlite3.connect(db_file) | |
| return conn | |
| def log_attendance(name, day, date, status): | |
| conn = get_db_connection() | |
| cursor = conn.cursor() | |
| cursor.execute(""" | |
| CREATE TABLE IF NOT EXISTS attendance ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| name TEXT, | |
| day TEXT, | |
| date TEXT, | |
| status TEXT | |
| ) | |
| """) | |
| conn.commit() | |
| cursor.execute(""" | |
| INSERT INTO attendance (name, day, date, status) | |
| VALUES (?, ?, ?, ?) | |
| """, (name, day, date, status)) | |
| conn.commit() | |
| conn.close() | |
| return "Attendance logged successfully!" | |
| def calculate_fees(): | |
| conn = get_db_connection() | |
| cursor = conn.cursor() | |
| # Calculate attendance fees | |
| cursor.execute(""" | |
| SELECT name, COUNT(*) * (1000 / 12) AS fees | |
| FROM attendance | |
| WHERE status = 'Present' | |
| GROUP BY name | |
| """) | |
| fees_data = cursor.fetchall() | |
| fees_dict = {row[0]: row[1] for row in fees_data} | |
| conn.close() | |
| return fees_dict | |
| def create_end_of_month_table(): | |
| today = datetime.now() | |
| if today.day != pd.Period(today.strftime("%Y-%m")).days_in_month: | |
| return "It's not the end of the month yet." | |
| conn = get_db_connection() | |
| cursor = conn.cursor() | |
| # Create end-of-month table | |
| month = today.strftime("%Y-%m") | |
| table_name = f"fees_{month.replace('-', '_')}" | |
| cursor.execute(f""" | |
| CREATE TABLE IF NOT EXISTS {table_name} ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| name TEXT, | |
| email TEXT, | |
| fees REAL | |
| ) | |
| """) | |
| # Load participant data | |
| participant_file = "participants_form.xlsx" | |
| participants = pd.read_excel(participant_file) | |
| # Calculate fees | |
| fees_dict = calculate_fees() | |
| # Populate table | |
| for _, row in participants.iterrows(): | |
| name = row["Name"] | |
| email = row["Email"] | |
| fees = fees_dict.get(name, 0) | |
| cursor.execute(f""" | |
| INSERT INTO {table_name} (name, email, fees) | |
| VALUES (?, ?, ?) | |
| """, (name, email, fees)) | |
| conn.commit() | |
| conn.close() | |
| return f"End-of-month table '{table_name}' created successfully!" | |
| def submit_attendance(name, day, date, status): | |
| return log_attendance(name, day, date, status) | |
| def is_month_end(): | |
| today = datetime.now() | |
| return today.day == pd.Period(today.strftime("%Y-%m")).days_in_month | |
| # Gradio Interface | |
| def get_dropdown_options(file_path, column_name): | |
| df = pd.read_excel(file_path) | |
| options = df["Name"].dropna().unique().tolist() | |
| options.sort() | |
| return options | |
| with gr.Blocks() as app: | |
| gr.Markdown("# Attendance Tracker") | |
| with gr.Row(): | |
| file_path = "participants_form.xlsx" | |
| column_name = "Name" | |
| options = get_dropdown_options(file_path, column_name) | |
| name = gr.Dropdown(choices=options, label="Select an Option") | |
| day = gr.Textbox(label="Day") | |
| date = gr.Textbox(label="Date (YYYY-MM-DD)") | |
| status = gr.Radio(["Present", "Absent"], label="Status") | |
| submit_button = gr.Button("Submit Attendance") | |
| submit_message = gr.Textbox(label="Message", interactive=False) | |
| submit_button.click(submit_attendance, inputs=[name, day, date, status], outputs=[submit_message]) | |
| def update_end_of_month(): | |
| return create_end_of_month_table() | |
| app.load(update_end_of_month) | |
| app.launch() | |