File size: 5,567 Bytes
a7d2fe5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7917bda
 
 
 
a7d2fe5
 
 
 
7917bda
a7d2fe5
 
 
7917bda
 
 
 
a7d2fe5
 
 
 
 
 
 
 
 
7917bda
d694796
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61ac5f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a7d2fe5
 
 
 
 
 
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
from assignment_engine import TaskAssignmentEngine
import pandas as pd

class TaskManager:
    def __init__(self):
        self.engine = TaskAssignmentEngine()
        self.setup()
        
    def setup(self):
        """Initialize the system"""
        print("πŸš€ TASK ASSIGNMENT SYSTEM STARTING...")
        self.engine.load_data()
        self.engine.load_model()  # Load existing model if available
        
    def assign_tasks(self):
        """Assign all pending tasks"""
        print("\n🎯 ASSIGNING TASKS...")
        
        for _, task in self.engine.tasks.iterrows():
            task_id = task['task_id']
            
            # Check if task already completed
            completed = self.engine.results[self.engine.results['task_id'] == task_id]
            if len(completed) > 0:
                print(f"Task {task_id} already completed")
                continue
                
            user_id, user_name = self.engine.assign_task(task_id)
            
    def enter_result(self, task_id, user_id, time_taken, quality):
        """Enter task completion result"""
        self.engine.add_result(task_id, user_id, time_taken, quality)
        
    def update_progress(self, task_id, user_id, progress_percent, notes=""):
        """Update task progress"""
        self.engine.update_task_progress(task_id, user_id, progress_percent, notes)
        
    def retrain_ai(self):
        """Retrain the AI with new data"""
        print("\n🧠 RETRAINING AI...")
        self.engine.train_model()
        
    def show_dashboard(self):
        """Show system dashboard"""
        print("\n" + "="*50)
        print("πŸ“‹ TASK ASSIGNMENT DASHBOARD")
        print("="*50)
        
        self.engine.show_stats()
        self.engine.get_user_skills()
        self.engine.show_active_tasks()
        
        print(f"\nπŸ€– AI Status: {'Trained' if self.engine.is_trained else 'Random Assignment'}")
        
    def add_user(self, name):
        """Add new user"""
        if len(self.engine.users) == 0:
            new_id = 1
        else:
            new_id = int(self.engine.users['user_id'].max()) + 1
        new_user = pd.DataFrame({'user_id': [new_id], 'name': [name]})
        self.engine.users = pd.concat([self.engine.users, new_user], ignore_index=True)
        self.engine.users.to_csv("users.csv", index=False)
        print(f"βœ… Added user: {name} (ID: {new_id})")
        return new_id
        
    def add_task(self, task_type, complexity, deadline):
        """Add new task"""
        if len(self.engine.tasks) == 0:
            new_id = 1
        else:
            new_id = int(self.engine.tasks['task_id'].max()) + 1
        new_task = pd.DataFrame({
            'task_id': [new_id], 
            'type': [task_type], 
            'complexity': [complexity], 
            'deadline': [deadline]
        })
        self.engine.tasks = pd.concat([self.engine.tasks, new_task], ignore_index=True)
        self.engine.tasks.to_csv("tasks.csv", index=False)
        print(f"βœ… Added task: {task_type} (ID: {new_id}, Complexity: {complexity}, Deadline: {deadline}h)")
        return new_id
    
    def remove_user(self, user_id):
        """Remove a user by ID"""
        user_id = int(user_id)
        user_df = self.engine.users[self.engine.users['user_id'] == user_id]
        
        if len(user_df) == 0:
            print(f"❌ User ID {user_id} not found")
            return False, None
            
        user_name = user_df['name'].iloc[0]
        
        # Remove user from dataframe
        self.engine.users = self.engine.users[self.engine.users['user_id'] != user_id]
        self.engine.users.to_csv("users.csv", index=False)
        
        # Also remove user's results (optional - keeps data integrity)
        self.engine.results = self.engine.results[self.engine.results['user_id'] != user_id]
        self.engine.results.to_csv(self.engine.results_file, index=False)
        
        # Remove from progress tracking
        keys_to_remove = [k for k in self.engine.progress_data.keys() if f"_{user_id}" in k]
        for key in keys_to_remove:
            del self.engine.progress_data[key]
        self.engine.save_progress_data()
        
        print(f"βœ… Removed user: {user_name} (ID: {user_id})")
        return True, user_name
    
    def remove_task(self, task_id):
        """Remove a task by ID"""
        task_id = int(task_id)
        task_df = self.engine.tasks[self.engine.tasks['task_id'] == task_id]
        
        if len(task_df) == 0:
            print(f"❌ Task ID {task_id} not found")
            return False, None
            
        task_name = task_df['type'].iloc[0]
        
        # Remove task from dataframe
        self.engine.tasks = self.engine.tasks[self.engine.tasks['task_id'] != task_id]
        self.engine.tasks.to_csv("tasks.csv", index=False)
        
        # Also remove task's results
        self.engine.results = self.engine.results[self.engine.results['task_id'] != task_id]
        self.engine.results.to_csv(self.engine.results_file, index=False)
        
        # Remove from progress tracking
        keys_to_remove = [k for k in self.engine.progress_data.keys() if k.startswith(f"{task_id}_")]
        for key in keys_to_remove:
            del self.engine.progress_data[key]
        self.engine.save_progress_data()
        
        print(f"βœ… Removed task: {task_name} (ID: {task_id})")
        return True, task_name

if __name__ == "__main__":
    # Example usage
    tm = TaskManager()
    tm.show_dashboard()
    tm.assign_tasks()