Spaces:
Sleeping
Sleeping
File size: 6,962 Bytes
c0dc777 3583bfe 3d0782b c0dc777 3d0782b c0dc777 3583bfe 3d0782b 3583bfe c0dc777 3583bfe c0dc777 c5b4e8c c0dc777 3583bfe c5b4e8c c0dc777 620ac76 c0dc777 620ac76 c0dc777 3d0782b c0dc777 3583bfe c0dc777 3583bfe c5b4e8c 3583bfe f55b52b 3583bfe 2d2332b c0dc777 3d0782b 2d2332b 3583bfe 2d2332b c0dc777 2d2332b 3583bfe 2d2332b 3583bfe 2d2332b c0dc777 3583bfe 2d2332b c0dc777 2d2332b 3583bfe 2d2332b 3583bfe 2d2332b 3583bfe 3d0782b f55b52b 2d2332b 3583bfe c5b4e8c 3583bfe 620ac76 | 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 | import gradio as gr
import pandas as pd
from datetime import datetime, timedelta
import json
import os
# Simulaci贸n de base de datos
users = {
'TAMA': {'password': 'DDOGI', 'role': 'admin'},
'RODIELYS': {'password': 'CRISTOVIVE', 'role': 'editor'},
'SHERLYN': {'password': 'CRISTOVIVE', 'role': 'publisher'}
}
# Inicializaci贸n de tareas
tasks = pd.DataFrame({
'id': range(1, 4),
'title': ['Desarrollar API', 'Dise帽ar UI', 'Escribir documentaci贸n'],
'assignee': ['RODIELYS', 'SHERLYN', 'RODIELYS'],
'status': ['Trabajando', 'Trabajando', 'Atrasado'],
'due_date': [(datetime.now() + timedelta(days=i)).strftime('%Y-%m-%d') for i in range(3, 6)]
})
def load_data():
global tasks
if os.path.exists('tasks.json'):
with open('tasks.json', 'r') as f:
tasks = pd.DataFrame(json.load(f))
def save_data():
with open('tasks.json', 'w') as f:
json.dump(tasks.to_dict('records'), f)
load_data()
def login(username, password):
if username in users and users[username]['password'] == password:
return users[username]['role'], f"Bienvenido, {username}", gr.update(visible=True), gr.update(visible=False)
return None, "Usuario o contrase帽a incorrectos", gr.update(visible=False), gr.update(visible=True)
def get_tasks(username, role):
if role == 'admin':
return tasks.to_dict('records')
return tasks[tasks['assignee'] == username].to_dict('records')
def update_task_status(task_id, new_status, username, role):
global tasks
if role != 'admin' and tasks.loc[tasks['id'] == task_id, 'assignee'].iloc[0] != username:
return "No tienes permiso para actualizar esta tarea", tasks.to_dict('records')
tasks.loc[tasks['id'] == task_id, 'status'] = new_status
save_data()
return "Estado de la tarea actualizado", tasks.to_dict('records')
def add_user(new_username, new_password, new_role, admin_username):
if users[admin_username]['role'] != 'admin':
return "Solo el administrador puede agregar usuarios"
if new_username in users:
return "El usuario ya existe"
users[new_username] = {'password': new_password, 'role': new_role}
return f"Usuario {new_username} agregado exitosamente"
def add_task(title, assignee, due_date, admin_username):
global tasks
if users[admin_username]['role'] != 'admin':
return "Solo el administrador puede agregar tareas"
new_id = tasks['id'].max() + 1 if not tasks.empty else 1
new_task = pd.DataFrame({
'id': [new_id],
'title': [title],
'assignee': [assignee],
'status': ['Trabajando'],
'due_date': [due_date]
})
tasks = pd.concat([tasks, new_task], ignore_index=True)
save_data()
return f"Tarea '{title}' agregada exitosamente"
def get_calendar_data(username, role):
if role == 'admin':
data = tasks
else:
data = tasks[tasks['assignee'] == username]
calendar_data = []
for _, task in data.iterrows():
due_date = datetime.strptime(task['due_date'], '%Y-%m-%d')
days_left = (due_date - datetime.now()).days
color = 'green' if days_left > 3 else 'yellow' if days_left > 0 else 'red'
calendar_data.append({
'title': f"{task['title']} ({task['assignee']})",
'start': task['due_date'],
'color': color,
'extendedProps': {'status': task['status'], 'id': task['id']}
})
return calendar_data
with gr.Blocks() as demo:
gr.Markdown("# Sistema de Gesti贸n de Tareas")
with gr.Row(visible=True) as login_row:
username_input = gr.Textbox(label="Usuario", elem_id="username")
password_input = gr.Textbox(label="Contrase帽a", type="password", elem_id="password")
login_button = gr.Button("Iniciar Sesi贸n", elem_id="login-button")
login_output = gr.Textbox(label="Mensaje", elem_id="login-message")
role_output = gr.Textbox(label="Rol", visible=False, elem_id="user-role")
with gr.Tabs(visible=False) as main_tabs:
with gr.Tab("Tareas"):
refresh_button = gr.Button("Actualizar Tareas", elem_id="refresh-tasks")
tasks_table = gr.DataFrame(label="Tareas", elem_id="tasks-table")
with gr.Row():
task_id_input = gr.Number(label="ID de Tarea", elem_id="task-id")
new_status_input = gr.Dropdown(["Trabajando", "Atrasado", "Cumplido"], label="Nuevo Estado", elem_id="new-status")
update_status_button = gr.Button("Actualizar Estado", elem_id="update-status")
update_status_output = gr.Textbox(label="Mensaje", elem_id="update-status-message")
with gr.Tab("Cronograma"):
calendar = gr.JSON(label="Datos del Calendario", elem_id="calendar-data")
refresh_calendar_button = gr.Button("Actualizar Calendario", elem_id="refresh-calendar")
with gr.Tab("Administraci贸n", visible=False) as admin_tab:
gr.Markdown("## Agregar Usuario")
new_username = gr.Textbox(label="Nuevo Usuario", elem_id="new-username")
new_password = gr.Textbox(label="Nueva Contrase帽a", type="password", elem_id="new-password")
new_role = gr.Dropdown(["editor", "publisher"], label="Rol", elem_id="new-role")
add_user_button = gr.Button("Agregar Usuario", elem_id="add-user")
add_user_output = gr.Textbox(label="Mensaje", elem_id="add-user-message")
gr.Markdown("## Agregar Tarea")
task_title = gr.Textbox(label="T铆tulo de la Tarea", elem_id="task-title")
task_assignee = gr.Dropdown(list(users.keys()), label="Asignado a", elem_id="task-assignee")
task_due_date = gr.Textbox(label="Fecha de Vencimiento (YYYY-MM-DD)", elem_id="task-due-date")
add_task_button = gr.Button("Agregar Tarea", elem_id="add-task")
add_task_output = gr.Textbox(label="Mensaje", elem_id="add-task-message")
login_button.click(
login,
inputs=[username_input, password_input],
outputs=[role_output, login_output, main_tabs, login_row]
).then(
lambda role: gr.update(visible=role == 'admin'),
inputs=[role_output],
outputs=[admin_tab]
)
refresh_button.click(get_tasks, inputs=[username_input, role_output], outputs=tasks_table)
update_status_button.click(update_task_status, inputs=[task_id_input, new_status_input, username_input, role_output], outputs=[update_status_output, tasks_table])
add_user_button.click(add_user, inputs=[new_username, new_password, new_role, username_input], outputs=add_user_output)
add_task_button.click(add_task, inputs=[task_title, task_assignee, task_due_date, username_input], outputs=add_task_output)
refresh_calendar_button.click(get_calendar_data, inputs=[username_input, role_output], outputs=calendar)
demo.launch(share=True) |