|
|
|
|
@ -85,26 +85,69 @@ class MemberAdmin(admin.ModelAdmin):
|
|
|
|
|
queryset = super().get_queryset(request)
|
|
|
|
|
one_year_ago = datetime.now() - timedelta(days=365)
|
|
|
|
|
queryset = queryset.annotate(
|
|
|
|
|
_jugendleiter_klettertreff_score=Sum(Case(
|
|
|
|
|
When(
|
|
|
|
|
klettertreff__date__gte=one_year_ago,
|
|
|
|
|
then=1),
|
|
|
|
|
default=0,
|
|
|
|
|
_jugendleiter_freizeit_score_calc=Subquery(
|
|
|
|
|
Freizeit.objects.filter(jugendleiter=OuterRef('pk'),
|
|
|
|
|
date__gte=one_year_ago)
|
|
|
|
|
.values('jugendleiter')
|
|
|
|
|
.annotate(cnt=Count('pk', distinct=True))
|
|
|
|
|
.values('cnt'),
|
|
|
|
|
output_field=IntegerField()
|
|
|
|
|
)),
|
|
|
|
|
_jugendleiter_freizeit_score=Sum(Case(
|
|
|
|
|
When(
|
|
|
|
|
freizeit__date__gte=one_year_ago,
|
|
|
|
|
then=1),
|
|
|
|
|
default=0,
|
|
|
|
|
),
|
|
|
|
|
# better solution but does not work in production apparently
|
|
|
|
|
#_jugendleiter_freizeit_score=Sum(Case(
|
|
|
|
|
# When(
|
|
|
|
|
# freizeit__date__gte=one_year_ago,
|
|
|
|
|
# then=1),
|
|
|
|
|
# default=0,
|
|
|
|
|
# output_field=IntegerField()
|
|
|
|
|
# ),
|
|
|
|
|
# distinct=True),
|
|
|
|
|
_jugendleiter_klettertreff_score_calc=Subquery(
|
|
|
|
|
Klettertreff.objects.filter(jugendleiter=OuterRef('pk'),
|
|
|
|
|
date__gte=one_year_ago)
|
|
|
|
|
.values('jugendleiter')
|
|
|
|
|
.annotate(cnt=Count('pk', distinct=True))
|
|
|
|
|
.values('cnt'),
|
|
|
|
|
output_field=IntegerField()
|
|
|
|
|
)),
|
|
|
|
|
),
|
|
|
|
|
# better solution but does not work in production apparently
|
|
|
|
|
#_jugendleiter_klettertreff_score=Sum(Case(
|
|
|
|
|
# When(
|
|
|
|
|
# klettertreff__date__gte=one_year_ago,
|
|
|
|
|
# then=1),
|
|
|
|
|
# default=0,
|
|
|
|
|
# output_field=IntegerField()
|
|
|
|
|
# ),
|
|
|
|
|
# distinct=True),
|
|
|
|
|
_freizeit_score_calc=Subquery(
|
|
|
|
|
Freizeit.objects.filter(membersonlist__member=OuterRef('pk'),
|
|
|
|
|
date__gte=one_year_ago)
|
|
|
|
|
.values('membersonlist__member')
|
|
|
|
|
.annotate(cnt=Count('pk', distinct=True))
|
|
|
|
|
.values('cnt'),
|
|
|
|
|
output_field=IntegerField()
|
|
|
|
|
),
|
|
|
|
|
_klettertreff_score_calc=Subquery(
|
|
|
|
|
KlettertreffAttendee.objects.filter(member=OuterRef('pk'),
|
|
|
|
|
klettertreff__date__gte=one_year_ago)
|
|
|
|
|
.values('member')
|
|
|
|
|
.annotate(cnt=Count('pk', distinct=True))
|
|
|
|
|
.values('cnt'),
|
|
|
|
|
output_field=IntegerField()))
|
|
|
|
|
queryset = queryset.annotate(
|
|
|
|
|
_jugendleiter_freizeit_score=Case(
|
|
|
|
|
When(
|
|
|
|
|
_jugendleiter_freizeit_score_calc=None,
|
|
|
|
|
then=0
|
|
|
|
|
),
|
|
|
|
|
default=F('_jugendleiter_freizeit_score_calc'),
|
|
|
|
|
output_field=IntegerField()),
|
|
|
|
|
_jugendleiter_klettertreff_score=Case(
|
|
|
|
|
When(
|
|
|
|
|
_jugendleiter_klettertreff_score_calc=None,
|
|
|
|
|
then=0
|
|
|
|
|
),
|
|
|
|
|
default=F('_jugendleiter_klettertreff_score_calc'),
|
|
|
|
|
output_field=IntegerField()),
|
|
|
|
|
_klettertreff_score=Case(
|
|
|
|
|
When(
|
|
|
|
|
@ -113,23 +156,17 @@ class MemberAdmin(admin.ModelAdmin):
|
|
|
|
|
),
|
|
|
|
|
default=F('_klettertreff_score_calc'),
|
|
|
|
|
output_field=IntegerField()),
|
|
|
|
|
_freizeit_score_calc=Subquery(
|
|
|
|
|
Freizeit.objects.filter(membersonlist__member=OuterRef('pk'),
|
|
|
|
|
date__gte=one_year_ago)
|
|
|
|
|
.values('membersonlist__member')
|
|
|
|
|
.annotate(cnt=Count('pk', distinct=True))
|
|
|
|
|
.values('cnt'),
|
|
|
|
|
output_field=IntegerField()
|
|
|
|
|
),
|
|
|
|
|
_freizeit_score=Case(
|
|
|
|
|
When(
|
|
|
|
|
_freizeit_score_calc=None,
|
|
|
|
|
then=0
|
|
|
|
|
),
|
|
|
|
|
default=F('_freizeit_score_calc'),
|
|
|
|
|
output_field=IntegerField()),
|
|
|
|
|
output_field=IntegerField()))
|
|
|
|
|
queryset = queryset.annotate(
|
|
|
|
|
#_activity_score=F('_jugendleiter_freizeit_score')
|
|
|
|
|
_activity_score=(F('_klettertreff_score') + 3 * F('_freizeit_score')
|
|
|
|
|
+ 2 * F('_jugendleiter_klettertreff_score') + 6 * F('_jugendleiter_freizeit_score'))
|
|
|
|
|
+ F('_jugendleiter_klettertreff_score') + 3 * F('_jugendleiter_freizeit_score'))
|
|
|
|
|
)
|
|
|
|
|
return queryset
|
|
|
|
|
|
|
|
|
|
|