Redesign the stats of issues
parent
57763720c0
commit
b2c4f79d6d
|
@ -59,35 +59,56 @@ def _get_milestones_stats_for_backlog(project):
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def _get_issues_assigned_to_counter(issues):
|
def _count_status_object(status_obj, counting_storage):
|
||||||
issues_per_assigned_to = _get_issues_counter_per_field(issues, "assigned_to")
|
if status_obj.id in counting_storage:
|
||||||
if None in issues_per_assigned_to:
|
counting_storage[status_obj.id]['count'] += 1
|
||||||
del issues_per_assigned_to[None]
|
else:
|
||||||
|
counting_storage[status_obj.id] = {}
|
||||||
issues_per_assigned_to["Unassigned"] = issues.count() - sum(issues_per_assigned_to.values())
|
counting_storage[status_obj.id]['count'] = 1
|
||||||
return issues_per_assigned_to
|
counting_storage[status_obj.id]['name'] = status_obj.name
|
||||||
|
counting_storage[status_obj.id]['id'] = status_obj.id
|
||||||
|
counting_storage[status_obj.id]['color'] = status_obj.color
|
||||||
def _get_issues_counter_per_field(issues, field):
|
|
||||||
return dict(
|
|
||||||
map(
|
|
||||||
lambda x: (x[field], x[field+'__count']),
|
|
||||||
issues.values(field).order_by().annotate(Count(field))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
def _count_owned_object(user_obj, counting_storage):
|
||||||
|
if user_obj:
|
||||||
|
if user_obj.id in counting_storage:
|
||||||
|
counting_storage[user_obj.id]['count'] += 1
|
||||||
|
else:
|
||||||
|
counting_storage[user_obj.id] = {}
|
||||||
|
counting_storage[user_obj.id]['count'] = 1
|
||||||
|
counting_storage[user_obj.id]['username'] = user_obj.username
|
||||||
|
counting_storage[user_obj.id]['id'] = user_obj.id
|
||||||
|
counting_storage[user_obj.id]['color'] = user_obj.color
|
||||||
|
else:
|
||||||
|
if 0 in counting_storage:
|
||||||
|
counting_storage[0]['count'] += 1
|
||||||
|
else:
|
||||||
|
counting_storage[0] = {}
|
||||||
|
counting_storage[0]['count'] = 1
|
||||||
|
counting_storage[0]['username'] = 'Unassigned'
|
||||||
|
counting_storage[0]['id'] = 0
|
||||||
|
counting_storage[0]['color'] = 'black'
|
||||||
|
|
||||||
def get_stats_for_project_issues(project):
|
def get_stats_for_project_issues(project):
|
||||||
queryset = project.issues.all()
|
|
||||||
project_issues_stats = {
|
project_issues_stats = {
|
||||||
'total_issues': queryset.count(),
|
'total_issues': 0,
|
||||||
'issues_per_type': _get_issues_counter_per_field(queryset, "type__name"),
|
'issues_per_type': {},
|
||||||
'issues_per_status': _get_issues_counter_per_field(queryset, "status__name"),
|
'issues_per_status': {},
|
||||||
'issues_per_priority': _get_issues_counter_per_field(queryset, "priority__name"),
|
'issues_per_priority': {},
|
||||||
'issues_per_severity': _get_issues_counter_per_field(queryset, "severity__name"),
|
'issues_per_severity': {},
|
||||||
'issues_per_owner': _get_issues_counter_per_field(queryset, "owner"),
|
'issues_per_owner': {},
|
||||||
'issues_per_assigned_to': _get_issues_assigned_to_counter(queryset),
|
'issues_per_assigned_to': {},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for issue in project.issues.all():
|
||||||
|
project_issues_stats['total_issues'] += 1
|
||||||
|
_count_status_object(issue.type, project_issues_stats['issues_per_type'])
|
||||||
|
_count_status_object(issue.status, project_issues_stats['issues_per_status'])
|
||||||
|
_count_status_object(issue.priority, project_issues_stats['issues_per_priority'])
|
||||||
|
_count_status_object(issue.severity, project_issues_stats['issues_per_severity'])
|
||||||
|
_count_owned_object(issue.owner, project_issues_stats['issues_per_owner'])
|
||||||
|
_count_owned_object(issue.assigned_to, project_issues_stats['issues_per_assigned_to'])
|
||||||
|
|
||||||
return project_issues_stats
|
return project_issues_stats
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue