From 1b0c3c3bfca05adebfea6f63d83a13a08e11de9f Mon Sep 17 00:00:00 2001 From: iAddz Date: Thu, 4 May 2017 15:39:03 +0100 Subject: [PATCH] Corp member view for fat stats (#785) Additionally fixes 500's from showing when - a corporation object has been deleted - an account doesn't have a main char set Add Math tooltips --- alliance_auth/urls.py | 3 + .../fatlinkstatisticscorpview.html | 48 ++++++++++++++ .../fatlinkstatisticsview.html | 10 ++- fleetactivitytracking/views.py | 62 +++++++++++++++++-- 4 files changed, 116 insertions(+), 7 deletions(-) create mode 100644 fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticscorpview.html diff --git a/alliance_auth/urls.py b/alliance_auth/urls.py index ec817f45..0e4c792d 100755 --- a/alliance_auth/urls.py +++ b/alliance_auth/urls.py @@ -194,6 +194,9 @@ urlpatterns += i18n_patterns( # FleetActivityTracking (FAT) url(r'^fat/$', fleetactivitytracking.views.fatlink_view, name='auth_fatlink_view'), url(r'^fat/statistics/$', fleetactivitytracking.views.fatlink_statistics_view, name='auth_fatlink_view_statistics'), + url(r'^fat/statistics/corp/(\w+)$', fleetactivitytracking.views.fatlink_statistics_corp_view, name='auth_fatlink_view_statistics_corp'), + url(r'^fat/statistics/corp/(?P\w+)/(?P[0-9]+)/(?P[0-9]+)/', fleetactivitytracking.views.fatlink_statistics_corp_view, + name='auth_fatlink_view_statistics_corp_month'), url(r'^fat/statistics/(?P[0-9]+)/(?P[0-9]+)/$', fleetactivitytracking.views.fatlink_statistics_view, name='auth_fatlink_view_statistics_month'), url(r'^fat/user/statistics/$', fleetactivitytracking.views.fatlink_personal_statistics_view, diff --git a/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticscorpview.html b/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticscorpview.html new file mode 100644 index 00000000..2c086155 --- /dev/null +++ b/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticscorpview.html @@ -0,0 +1,48 @@ +{% extends "public/base.html" %} +{% load bootstrap %} +{% load staticfiles %} +{% load i18n %} + +{% block title %}Alliance Auth{% endblock %} +{% block page_title %}{% trans "Fatlink Corp Statistics" %}{% endblock page_title %} + +{% block content %} +
+

{% blocktrans %}Participation data statistics for {{ month }}, {{ year }}{% endblocktrans %} +
+ {% trans "Previous month" %} + {% if next_month %} + {% trans "Next month" %} + {% endif %} +
+

+ {% if fatStats %} + + + + + + + + + {% for memberStat in fatStats %} + + + + + + + + {% endfor %} +
{% trans "Main Character" %}{% trans "Characters" %}{% trans "Fats" %}{% trans "Average fats" %} + +
+ + {{ memberStat.mainchar.character_name }}{{ memberStat.n_chars }}{{ memberStat.n_fats }}{{ memberStat.avg_fat }}
+ {% endif %} +
+{% endblock content %} +{% block extra_script %} +$(document).ready(function(){ + $("[rel=tooltip]").tooltip(); +{% endblock extra_script %} diff --git a/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html b/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html index 436f1be0..6327bee8 100644 --- a/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html +++ b/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html @@ -24,14 +24,16 @@ {% trans "Corp" %} {% trans "Members" %} {% trans "Fats" %} - {% trans "Average fats" %} + {% trans "Average fats" %} + + {% for corpStat in fatStats %} - [{{ corpStat.corp.corporation_ticker }}] + [{{ corpStat.corp.corporation_ticker }}] {{ corpStat.corp.corporation_name }} {{ corpStat.corp.member_count }} {{ corpStat.n_fats }} @@ -42,3 +44,7 @@ {% endif %} {% endblock content %} +{% block extra_script %} +$(document).ready(function(){ + $("[rel=tooltip]").tooltip(); +{% endblock extra_script %} diff --git a/fleetactivitytracking/views.py b/fleetactivitytracking/views.py index 4d53ab0e..ed2ef119 100644 --- a/fleetactivitytracking/views.py +++ b/fleetactivitytracking/views.py @@ -13,6 +13,7 @@ from django.db.models import Q from eveonline.models import EveCharacter from eveonline.models import EveCorporationInfo from eveonline.managers import EveManager +from authentication.models import AuthServicesInfo from fleetactivitytracking.forms import FatlinkForm from fleetactivitytracking.models import Fatlink, Fat @@ -56,6 +57,24 @@ class CorpStat(object): return "%.2f" % (float(self.n_fats) / float(self.corp.member_count)) +class MemberStat(object): + def __init__(self, member, start_of_month, start_of_next_month, mainchid=None): + if mainchid: + self.mainchid = mainchid + else: + self.mainchid = AuthServicesInfo.objects.get(user_id=member['user_id']).main_char_id + self.mainchar = EveCharacter.objects.get(character_id=self.mainchid) + nchars = 0 + for alliance_id in settings.STR_ALLIANCE_IDS: + nchars += EveCharacter.objects.filter(user_id=member['user_id']).filter(alliance_id=alliance_id).count() + self.n_chars = nchars + self.n_fats = Fat.objects.filter(user_id=member['user_id']).filter( + fatlink__fatdatetime__gte=start_of_month).filter(fatlink__fatdatetime__lte=start_of_next_month).count() + + def avg_fat(self): + return "%.2f" % (float(self.n_fats) / float(self.n_chars)) + + def first_day_of_next_month(year, month): if month == 12: return datetime.datetime(year + 1, 1, 1) @@ -89,6 +108,41 @@ def fatlink_view(request): return render(request, 'fleetactivitytracking/fatlinkview.html', context=context) +@login_required +@permission_required('auth.fleetactivitytracking_statistics') +def fatlink_statistics_corp_view(request, corpid, year=None, month=None): + if year is None: + year = datetime.date.today().year + if month is None: + month = datetime.date.today().month + + year = int(year) + month = int(month) + start_of_month = datetime.datetime(year, month, 1) + start_of_next_month = first_day_of_next_month(year, month) + start_of_previous_month = first_day_of_previous_month(year, month) + fat_stats = {} + corp_members = EveCharacter.objects.filter(corporation_id=corpid).values('user_id').distinct() + + for member in corp_members: + try: + fat_stats[member['user_id']] = MemberStat(member, start_of_month, start_of_next_month) + except ObjectDoesNotExist: + continue + + # collect and sort stats + stat_list = [fat_stats[x] for x in fat_stats] + stat_list.sort(key=lambda stat: stat.mainchar.character_name) + stat_list.sort(key=lambda stat: (stat.n_fats, stat.n_fats / stat.n_chars), reverse=True) + + context = {'fatStats': stat_list, 'month': start_of_month.strftime("%B"), 'year': year, + 'previous_month': start_of_previous_month, 'corpid': corpid} + if datetime.datetime.now() > start_of_next_month: + context.update({'next_month': start_of_next_month}) + + return render(request, 'fleetactivitytracking/fatlinkstatisticscorpview.html', context=context) + + @login_required @permission_required('auth.fleetactivitytracking_statistics') def fatlink_statistics_view(request, year=datetime.date.today().year, month=datetime.date.today().month): @@ -119,12 +173,10 @@ def fatlink_statistics_view(request, year=datetime.date.today().year, month=date stat_list.sort(key=lambda stat: stat.corp.corporation_name) stat_list.sort(key=lambda stat: (stat.n_fats, stat.n_fats / stat.corp.member_count), reverse=True) + context = {'fatStats': stat_list, 'month': start_of_month.strftime("%B"), 'year': year, + 'previous_month': start_of_previous_month} if datetime.datetime.now() > start_of_next_month: - context = {'fatStats': stat_list, 'month': start_of_month.strftime("%B"), 'year': year, - 'previous_month': start_of_previous_month, 'next_month': start_of_next_month} - else: - context = {'fatStats': stat_list, 'month': start_of_month.strftime("%B"), 'year': year, - 'previous_month': start_of_previous_month} + context.update({'next_month': start_of_next_month}) return render(request, 'fleetactivitytracking/fatlinkstatisticsview.html', context=context)