|
import gradio as gr |
|
import pandas as pd |
|
import sqlite3 |
|
from datetime import datetime |
|
|
|
|
|
db_file = "outputs/attendance_records.db" |
|
|
|
|
|
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() |
|
|
|
|
|
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() |
|
|
|
|
|
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 |
|
) |
|
""") |
|
|
|
|
|
participant_file = "participants_form.xlsx" |
|
participants = pd.read_excel(participant_file) |
|
|
|
|
|
fees_dict = calculate_fees() |
|
|
|
|
|
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 |
|
|
|
|
|
|
|
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() |
|
|