Working a lot on issues stats

remotes/origin/enhancement/email-actions
Jesús Espino 2013-11-13 09:59:19 +01:00
parent 8081652208
commit 0965e65ac0
1 changed files with 44 additions and 1 deletions

View File

@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
from django.db.models import Q, Count
import datetime
import copy
def _get_milestones_stats_for_backlog(project):
@ -98,9 +100,16 @@ def get_stats_for_project_issues(project):
'issues_per_severity': {},
'issues_per_owner': {},
'issues_per_assigned_to': {},
'last_four_weeks_days': {
'by_open_closed': {'open': [], 'closed': []},
'by_severity': {},
'by_priority': {},
'open_progress': [],
}
for issue in project.issues.all():
}
for issue in project.issues.all().prefetch_related('status', 'priority', 'type', 'severity', 'owner', 'assigned_to'):
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'])
@ -109,6 +118,40 @@ def get_stats_for_project_issues(project):
_count_owned_object(issue.owner, project_issues_stats['issues_per_owner'])
_count_owned_object(issue.assigned_to, project_issues_stats['issues_per_assigned_to'])
for severity in project_issues_stats['issues_per_severity'].values():
project_issues_stats['last_four_weeks_days']['by_severity'][severity['id']] = copy.copy(severity)
del(project_issues_stats['last_four_weeks_days']['by_severity'][severity['id']]['count'])
project_issues_stats['last_four_weeks_days']['by_severity'][severity['id']]['data'] = []
for priority in project_issues_stats['issues_per_priority'].values():
project_issues_stats['last_four_weeks_days']['by_priority'][priority['id']] = copy.copy(priority)
del(project_issues_stats['last_four_weeks_days']['by_priority'][priority['id']]['count'])
project_issues_stats['last_four_weeks_days']['by_priority'][priority['id']]['data'] = []
for x in range(27, -1, -1):
day = datetime.date.today() - datetime.timedelta(days=x)
next_day = day + datetime.timedelta(days=1)
project_issues_stats['last_four_weeks_days']['by_open_closed']['open'].append(
project.issues.filter(created_date__gte=day, created_date__lt=next_day).count()
)
project_issues_stats['last_four_weeks_days']['by_open_closed']['closed'].append(
project.issues.filter(finished_date__gte=day, finished_date__lt=next_day).count()
)
open_this_day = project.issues.filter(created_date__lt=next_day).filter(Q(finished_date__gt=day) | Q(finished_date__isnull=True))
for severity in project_issues_stats['last_four_weeks_days']['by_severity']:
project_issues_stats['last_four_weeks_days']['by_severity'][severity]['data'].append(
open_this_day.filter(severity_id=severity).count()
)
for priority in project_issues_stats['last_four_weeks_days']['by_priority']:
project_issues_stats['last_four_weeks_days']['by_priority'][priority]['data'].append(
open_this_day.filter(priority_id=priority).count()
)
project_issues_stats['last_four_weeks_days']['open_progress'].append(
open_this_day.count()
)
return project_issues_stats