diff options
Diffstat (limited to 'pgcommitfest/commitfest/reports.py')
-rw-r--r-- | pgcommitfest/commitfest/reports.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/pgcommitfest/commitfest/reports.py b/pgcommitfest/commitfest/reports.py new file mode 100644 index 0000000..20be18f --- /dev/null +++ b/pgcommitfest/commitfest/reports.py @@ -0,0 +1,45 @@ +from django.shortcuts import render_to_response, get_object_or_404 +from django.http import Http404 +from django.contrib.auth.decorators import login_required +from django.db import connection + +from models import CommitFest + +@login_required +def authorstats(request, cfid): + cf = get_object_or_404(CommitFest, pk=cfid) + if not request.user.is_staff: + raise Http404("Only CF Managers can do that.") + + cursor = connection.cursor() + cursor.execute("""WITH patches(id,name) AS ( + SELECT p.id, name + FROM commitfest_patch p + INNER JOIN commitfest_patchoncommitfest poc ON poc.patch_id=p.id AND poc.commitfest_id=%(cid)s +), +authors(userid, authorpatches) AS ( + SELECT pa.user_id, array_agg(array_to_json(ARRAY[p.id::text, p.name])) + FROM commitfest_patch_authors pa + INNER JOIN patches p ON p.id=pa.patch_id + GROUP BY pa.user_id +), +reviewers(userid, reviewerpatches) AS ( + SELECT pr.user_id, array_agg(array_to_json(ARRAY[p.id::text, p.name])) + FROM commitfest_patch_reviewers pr + INNER JOIN patches p ON p.id=pr.patch_id + GROUP BY pr.user_id +) +SELECT first_name || ' ' || last_name || ' (' || username ||')', authorpatches, reviewerpatches +FROM (authors FULL OUTER JOIN reviewers ON authors.userid=reviewers.userid) +INNER JOIN auth_user u ON u.id=COALESCE(authors.userid, reviewers.userid) +ORDER BY last_name, first_name +""", { + 'cid': cf.id, +}) + + return render_to_response('report_authors.html', { + 'cf': cf, + 'report': cursor.fetchall(), + 'title': 'Author stats', + 'breadcrumbs': [{'title': cf.title, 'href': '/%s/' % cf.pk},], + }) |