-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
135 lines (122 loc) · 5.13 KB
/
Copy pathmain.py
File metadata and controls
135 lines (122 loc) · 5.13 KB
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
import pandas as pd
import Person
import Team
from tkinter import filedialog
def calculate_feedback_givers():
# Prompt user to select file
file_path = filedialog.askopenfilename(title="Select a project csv file", filetypes=[("CSV files", ".csv")])
if file_path and ".csv" == file_path[-4:]:
print("File " + file_path + " received.")
# Extract and sanitise columns
df = pd.read_csv(file_path, skiprows=5)
df_name_grade = df[["Customer Role", "Scott Logic Grade", "Who"]]
df_name_grade.fillna("", inplace=True) # Replace any N/A or zeroes with empty string to avoid errors
df_name_grade = df_name_grade.astype('string')
teams = extract_teams(df_name_grade)
make_calculation(teams)
else:
print("You must select a valid CSV file for analysis.")
def extract_teams(df_name_grade):
print("Analysing teams from file...")
teams = []
current_team = Team.Team([])
for index, row in df_name_grade.iterrows():
person = Person.Person(row.Who, row["Scott Logic Grade"], get_role(row["Customer Role"]), [])
if "" == person.name or "" == person.sl_grade:
if len(current_team.person_list) > 0:
teams.append(current_team)
current_team = Team.Team([])
elif person.sl_grade != "":
current_team.person_list.append(person)
print("---------------------------------------------------")
print("Team analysis done. " + str(len(teams)) + " teams found:")
print("---------------------------------------------------")
for index, team in enumerate(teams):
print("Team " + str(index) + ": ")
for person in team.person_list:
print(person.name)
print("---------------------------------------------------")
return teams
def make_calculation(teams):
project_lead = Person.Person("", "", "", [])
valid_name = False
while not valid_name:
print("Please give the name of the project lead: ")
name = input()
if name != "":
result = find_person_by_name(name, teams)
if result.name == "":
print(name + " not found in this project.")
else:
project_lead = result
valid_name = True
print("Calculating feedback assignments...")
for team in teams:
for index, person in enumerate(team.person_list):
# Everyone else's precedence: Lead -> Del. manager -> Principal -> Nominee
# Lead precedence: Delivery manager -> Principal -> Nominee
# Delivery Manager precedence: Principal -> Nominee
# Principal precedence: Nominee
grade = person.sl_grade
if grade != "Lead" and person.proj_role != "Delivery Manager" and grade != "Principal":
lead = get_lead(person, team.person_list)
if lead.name != "":
lead.assigned_people.append(person)
continue
if person.proj_role != "Delivery Manager" and grade != "Principal":
delivery_manager = get_delivery_manager(team.person_list)
if delivery_manager.name != "":
delivery_manager.assigned_people.append(person)
continue
if grade != "Principal":
principal = get_principal(team.person_list)
if principal.name != "":
principal.assigned_people.append(person)
continue
project_lead.assigned_people.append(person)
print("Done.")
# Print all feedback assignments
for team in teams:
for person in team.person_list:
if len(person.assigned_people) > 0:
print("-------------------------------------------------")
print(person.name + " needs to give feedback for: ")
for assignment in person.assigned_people:
print(assignment.name)
def get_role(role):
if "Test" in role:
return "Tester"
if "Delivery Manager" in role:
return "Delivery Manager"
if "Product" in role:
return "Product"
else:
return "Developer"
def get_lead(input_person, person_list):
for person in person_list:
if person.sl_grade == "Lead" and person.proj_role == input_person.proj_role:
return person
return Person.Person("", "", "", [])
def get_principal(person_list):
for person in person_list:
if person.sl_grade == "Principal":
return person
return Person.Person("", "", "", [])
def has_delivery_manager(person_list):
for person in person_list:
if person.proj_role == "Delivery Manager":
return True
return False
def get_delivery_manager(person_list):
for person in person_list:
if person.proj_role == "Delivery Manager":
return person
return Person.Person("", "", "", [])
def find_person_by_name(name, teams):
for team in teams:
for person in team.person_list:
if person.name == name:
return person
return Person.Person("", "", "", [])
if __name__ == '__main__':
calculate_feedback_givers()