Spaces:
Sleeping
Sleeping
File size: 4,211 Bytes
f83e458 3c8c6ec b0b651f 2167bd6 b0b651f f83e458 3c8c6ec fc88781 3c8c6ec f83e458 3c8c6ec f83e458 3c8c6ec f83e458 dfe052f 4bef520 3c8c6ec f83e458 4bef520 3c8c6ec f83e458 3c8c6ec f83e458 dfe052f 3c8c6ec f83e458 3c8c6ec f83e458 dfe052f f83e458 |
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 |
import gradio as gr
import pandas as pd
import os
from datetime import datetime
# Attendance Tracker Setup
try:
if not os.path.exists("attendance_records"):
os.makedirs("attendance_records")
except error:
print(error)
# Helper Functions
def log_attendance(name, day, date, status):
month = datetime.strptime(date, "%Y-%m-%d").strftime("%Y-%m")
file_path = f"attendance_records/{month}.csv"
# Load or create attendance sheet for the month
if os.path.exists(file_path):
df = pd.read_csv(file_path)
else:
df = pd.DataFrame(columns=["Name", "Day", "Date", "Status"])
# Add new attendance record
new_entry = {"Name": name, "Day": day, "Date": date, "Status": status}
df = pd.concat([df, pd.DataFrame([new_entry])], ignore_index=True)
# Save back to the file
df.to_csv(file_path, index=False)
return "Attendance logged successfully!"
def calculate_fees():
attendance_summaries = []
for file in os.listdir("attendance_records"):
if file.endswith(".csv"):
file_path = os.path.join("attendance_records", file)
df = pd.read_csv(file_path)
# Calculate fees for each candidate
fees_summary = df[df["Status"] == "Present"].groupby("Name").size() * (1000 / 12) # Example: Monthly fees divided by 12
fees_summary.name = "Fees"
# Merge fees into the attendance sheet
df = df.merge(fees_summary, on="Name", how="left")
# Save updated file
df.to_csv(file_path, index=False)
# Summarize for all candidates
attendance_summaries.append(df[["Name", "Fees"]].drop_duplicates())
if attendance_summaries:
summary_df = pd.concat(attendance_summaries).drop_duplicates()
summary_df.to_csv("attendance_records/fees_summary.csv", index=False)
return "Fees calculated and updated successfully!"
return "No attendance records found for fees calculation."
# Gradio Interface
def submit_attendance(name, day, date, status):
return log_attendance(name, day, date, status)
def generate_fees():
return calculate_fees()
def is_month_end():
today = datetime.now()
return (today.day == (pd.Period(today.strftime("%Y-%m")).days_in_month))
# Function to extract data from Excel
def get_dropdown_options(file_path, column_name):
# Read the Excel file
df = pd.read_excel(file_path)
# Extract the unique values from the specified column
options = df["Name"].dropna().unique().tolist()
return options
# Define the Gradio interface
def dropdown_demo():
# File path and column to read
file_path = "participants_form.xlsx" # Replace with your Excel file path
column_name = "your_column" # Replace with your column name in the Excel file
# Populate dropdown options
options = get_dropdown_options(file_path, column_name)
# Define a Gradio app
with gr.Blocks() as demo:
dropdown = gr.Dropdown(choices=options, label="Select an Option")
output = gr.Textbox(label="You Selected")
def show_selection(choice):
return f"You selected: {choice}"
dropdown.change(show_selection, inputs=[dropdown], outputs=[output])
with gr.Blocks() as app:
gr.Markdown("# Attendance Tracker")
with gr.Row():
# name = gr.Textbox(label="Name")
name = dropdown_demo()
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)
calculate_button = gr.Button("Calculate Fees", interactive=is_month_end())
calculate_message = gr.Textbox(label="Fees Calculation Message", interactive=False)
submit_button.click(submit_attendance, inputs=[name, day, date, status], outputs=[submit_message])
calculate_button.click(generate_fees, outputs=[calculate_message])
def update_calculate_button():
return gr.update(interactive=is_month_end())
app.load(update_calculate_button, None, [calculate_button])
app.launch()
|