rishirajpathak commited on
Commit
d694796
Β·
1 Parent(s): 7917bda

Feature: Add remove user functionality

Browse files
Files changed (2) hide show
  1. app.py +32 -0
  2. task_manager.py +28 -0
app.py CHANGED
@@ -132,6 +132,28 @@ def add_user(name):
132
  except Exception as e:
133
  return f"Error: {str(e)}"
134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  def add_task(task_type, complexity, deadline):
136
  """Add new task"""
137
  try:
@@ -274,6 +296,16 @@ with gr.Blocks(title="🧠 AI Task Assignment System") as app:
274
  add_user_output = gr.Markdown()
275
  add_user_btn.click(add_user, inputs=user_name, outputs=add_user_output)
276
 
 
 
 
 
 
 
 
 
 
 
277
  # Add Task Tab
278
  with gr.Tab("πŸ“‹ Add Task"):
279
  gr.Markdown("### Create a new task")
 
132
  except Exception as e:
133
  return f"Error: {str(e)}"
134
 
135
+ def remove_user(user_id):
136
+ """Remove a user"""
137
+ try:
138
+ if user_id is None or user_id <= 0:
139
+ return "❌ Please enter a valid User ID"
140
+
141
+ success, user_name = tm.remove_user(int(user_id))
142
+
143
+ if not success:
144
+ return f"❌ User ID {int(user_id)} not found!"
145
+
146
+ # Return updated user list
147
+ if len(tm.engine.users) > 0:
148
+ user_list = "\n".join([f"- ID {u['user_id']}: {u['name']}" for _, u in tm.engine.users.iterrows()])
149
+ else:
150
+ user_list = "No users remaining"
151
+
152
+ return f"βœ… Removed user: **{user_name}** (ID: {int(user_id)})\n\n**Current Users:**\n{user_list}"
153
+
154
+ except Exception as e:
155
+ return f"Error: {str(e)}"
156
+
157
  def add_task(task_type, complexity, deadline):
158
  """Add new task"""
159
  try:
 
296
  add_user_output = gr.Markdown()
297
  add_user_btn.click(add_user, inputs=user_name, outputs=add_user_output)
298
 
299
+ # Remove User Tab
300
+ with gr.Tab("πŸ—‘οΈ Remove User"):
301
+ gr.Markdown("### Remove a team member")
302
+ gr.Markdown("*Enter the User ID to remove. Check the Dashboard for User IDs.*")
303
+ gr.Markdown("⚠️ **Warning:** This will also remove all task history for this user.")
304
+ remove_user_id = gr.Number(label="User ID to Remove", precision=0, minimum=1)
305
+ remove_user_btn = gr.Button("πŸ—‘οΈ Remove User", variant="stop")
306
+ remove_user_output = gr.Markdown()
307
+ remove_user_btn.click(remove_user, inputs=remove_user_id, outputs=remove_user_output)
308
+
309
  # Add Task Tab
310
  with gr.Tab("πŸ“‹ Add Task"):
311
  gr.Markdown("### Create a new task")
task_manager.py CHANGED
@@ -80,6 +80,34 @@ class TaskManager:
80
  self.engine.tasks.to_csv("tasks.csv", index=False)
81
  print(f"βœ… Added task: {task_type} (ID: {new_id}, Complexity: {complexity}, Deadline: {deadline}h)")
82
  return new_id
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
 
84
  if __name__ == "__main__":
85
  # Example usage
 
80
  self.engine.tasks.to_csv("tasks.csv", index=False)
81
  print(f"βœ… Added task: {task_type} (ID: {new_id}, Complexity: {complexity}, Deadline: {deadline}h)")
82
  return new_id
83
+
84
+ def remove_user(self, user_id):
85
+ """Remove a user by ID"""
86
+ user_id = int(user_id)
87
+ user_df = self.engine.users[self.engine.users['user_id'] == user_id]
88
+
89
+ if len(user_df) == 0:
90
+ print(f"❌ User ID {user_id} not found")
91
+ return False, None
92
+
93
+ user_name = user_df['name'].iloc[0]
94
+
95
+ # Remove user from dataframe
96
+ self.engine.users = self.engine.users[self.engine.users['user_id'] != user_id]
97
+ self.engine.users.to_csv("users.csv", index=False)
98
+
99
+ # Also remove user's results (optional - keeps data integrity)
100
+ self.engine.results = self.engine.results[self.engine.results['user_id'] != user_id]
101
+ self.engine.results.to_csv(self.engine.results_file, index=False)
102
+
103
+ # Remove from progress tracking
104
+ keys_to_remove = [k for k in self.engine.progress_data.keys() if f"_{user_id}" in k]
105
+ for key in keys_to_remove:
106
+ del self.engine.progress_data[key]
107
+ self.engine.save_progress_data()
108
+
109
+ print(f"βœ… Removed user: {user_name} (ID: {user_id})")
110
+ return True, user_name
111
 
112
  if __name__ == "__main__":
113
  # Example usage