mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-11 13:30:17 +02:00
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
This commit is contained in:
parent
aec013b93c
commit
1b0c3c3bfc
@ -194,6 +194,9 @@ urlpatterns += i18n_patterns(
|
|||||||
# FleetActivityTracking (FAT)
|
# FleetActivityTracking (FAT)
|
||||||
url(r'^fat/$', fleetactivitytracking.views.fatlink_view, name='auth_fatlink_view'),
|
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/$', 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<corpid>\w+)/(?P<year>[0-9]+)/(?P<month>[0-9]+)/', fleetactivitytracking.views.fatlink_statistics_corp_view,
|
||||||
|
name='auth_fatlink_view_statistics_corp_month'),
|
||||||
url(r'^fat/statistics/(?P<year>[0-9]+)/(?P<month>[0-9]+)/$', fleetactivitytracking.views.fatlink_statistics_view,
|
url(r'^fat/statistics/(?P<year>[0-9]+)/(?P<month>[0-9]+)/$', fleetactivitytracking.views.fatlink_statistics_view,
|
||||||
name='auth_fatlink_view_statistics_month'),
|
name='auth_fatlink_view_statistics_month'),
|
||||||
url(r'^fat/user/statistics/$', fleetactivitytracking.views.fatlink_personal_statistics_view,
|
url(r'^fat/user/statistics/$', fleetactivitytracking.views.fatlink_personal_statistics_view,
|
||||||
|
@ -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 %}
|
||||||
|
<div class="col-lg-12">
|
||||||
|
<h1 class="page-header text-center">{% blocktrans %}Participation data statistics for {{ month }}, {{ year }}{% endblocktrans %}
|
||||||
|
<div class="text-right">
|
||||||
|
<a href="{% url 'auth_fatlink_view_statistics_corp_month' corpid previous_month|date:"Y" previous_month|date:"m" %}" class="btn btn-info">{% trans "Previous month" %}</a>
|
||||||
|
{% if next_month %}
|
||||||
|
<a href="{% url 'auth_fatlink_view_statistics_corp_month' corpid next_month|date:"Y" next_month|date:"m" %}" class="btn btn-info">{% trans "Next month" %}</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</h1>
|
||||||
|
{% if fatStats %}
|
||||||
|
<table class="table table-responsive">
|
||||||
|
<tr>
|
||||||
|
<th class="col-md-1"></th>
|
||||||
|
<th class="col-md-2 text-center">{% trans "Main Character" %}</th>
|
||||||
|
<th class="col-md-2 text-center">{% trans "Characters" %}</th>
|
||||||
|
<th class="col-md-2 text-center">{% trans "Fats" %}</th>
|
||||||
|
<th class="col-md-2 text-center">{% trans "Average fats" %}
|
||||||
|
<i class="glyphicon glyphicon-question-sign" rel="tooltip" title="Fats ÷ Characters"></i>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
{% for memberStat in fatStats %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img src="https://image.eveonline.com/Character/{{ memberStat.mainchid }}_32.jpg" class="ra-avatar img-responsive">
|
||||||
|
</td>
|
||||||
|
<td class="text-center">{{ memberStat.mainchar.character_name }}</td>
|
||||||
|
<td class="text-center">{{ memberStat.n_chars }}</td>
|
||||||
|
<td class="text-center">{{ memberStat.n_fats }}</td>
|
||||||
|
<td class="text-center">{{ memberStat.avg_fat }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
|
{% block extra_script %}
|
||||||
|
$(document).ready(function(){
|
||||||
|
$("[rel=tooltip]").tooltip();
|
||||||
|
{% endblock extra_script %}
|
@ -24,14 +24,16 @@
|
|||||||
<th class="col-md-5 text-center">{% trans "Corp" %}</th>
|
<th class="col-md-5 text-center">{% trans "Corp" %}</th>
|
||||||
<th class="col-md-2 text-center">{% trans "Members" %}</th>
|
<th class="col-md-2 text-center">{% trans "Members" %}</th>
|
||||||
<th class="col-md-2 text-center">{% trans "Fats" %}</th>
|
<th class="col-md-2 text-center">{% trans "Fats" %}</th>
|
||||||
<th class="col-md-2 text-center">{% trans "Average fats" %}</th>
|
<th class="col-md-2 text-center">{% trans "Average fats" %}
|
||||||
|
<i class="glyphicon glyphicon-question-sign" rel="tooltip" title="Fats ÷ Characters"></i>
|
||||||
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
{% for corpStat in fatStats %}
|
{% for corpStat in fatStats %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<img src="https://image.eveonline.com/Corporation/{{ corpStat.corp.corporation_id }}_32.png" class="ra-avatar img-responsive">
|
<img src="https://image.eveonline.com/Corporation/{{ corpStat.corp.corporation_id }}_32.png" class="ra-avatar img-responsive">
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center">[{{ corpStat.corp.corporation_ticker }}]</td>
|
<td class="text-center"><a href="{% url 'auth_fatlink_view_statistics_corp' corpStat.corp.corporation_id %}">[{{ corpStat.corp.corporation_ticker }}]</td>
|
||||||
<td class="text-center">{{ corpStat.corp.corporation_name }}</td>
|
<td class="text-center">{{ corpStat.corp.corporation_name }}</td>
|
||||||
<td class="text-center">{{ corpStat.corp.member_count }}</td>
|
<td class="text-center">{{ corpStat.corp.member_count }}</td>
|
||||||
<td class="text-center">{{ corpStat.n_fats }}</td>
|
<td class="text-center">{{ corpStat.n_fats }}</td>
|
||||||
@ -42,3 +44,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
{% block extra_script %}
|
||||||
|
$(document).ready(function(){
|
||||||
|
$("[rel=tooltip]").tooltip();
|
||||||
|
{% endblock extra_script %}
|
||||||
|
@ -13,6 +13,7 @@ from django.db.models import Q
|
|||||||
from eveonline.models import EveCharacter
|
from eveonline.models import EveCharacter
|
||||||
from eveonline.models import EveCorporationInfo
|
from eveonline.models import EveCorporationInfo
|
||||||
from eveonline.managers import EveManager
|
from eveonline.managers import EveManager
|
||||||
|
from authentication.models import AuthServicesInfo
|
||||||
from fleetactivitytracking.forms import FatlinkForm
|
from fleetactivitytracking.forms import FatlinkForm
|
||||||
from fleetactivitytracking.models import Fatlink, Fat
|
from fleetactivitytracking.models import Fatlink, Fat
|
||||||
|
|
||||||
@ -56,6 +57,24 @@ class CorpStat(object):
|
|||||||
return "%.2f" % (float(self.n_fats) / float(self.corp.member_count))
|
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):
|
def first_day_of_next_month(year, month):
|
||||||
if month == 12:
|
if month == 12:
|
||||||
return datetime.datetime(year + 1, 1, 1)
|
return datetime.datetime(year + 1, 1, 1)
|
||||||
@ -89,6 +108,41 @@ def fatlink_view(request):
|
|||||||
return render(request, 'fleetactivitytracking/fatlinkview.html', context=context)
|
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
|
@login_required
|
||||||
@permission_required('auth.fleetactivitytracking_statistics')
|
@permission_required('auth.fleetactivitytracking_statistics')
|
||||||
def fatlink_statistics_view(request, year=datetime.date.today().year, month=datetime.date.today().month):
|
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.corp.corporation_name)
|
||||||
stat_list.sort(key=lambda stat: (stat.n_fats, stat.n_fats / stat.corp.member_count), reverse=True)
|
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:
|
if datetime.datetime.now() > start_of_next_month:
|
||||||
context = {'fatStats': stat_list, 'month': start_of_month.strftime("%B"), 'year': year,
|
context.update({'next_month': start_of_next_month})
|
||||||
'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}
|
|
||||||
|
|
||||||
return render(request, 'fleetactivitytracking/fatlinkstatisticsview.html', context=context)
|
return render(request, 'fleetactivitytracking/fatlinkstatisticsview.html', context=context)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user