51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
from fellchensammlung.models import User, AdoptionNotice, AdoptionNoticeStatus
|
|
|
|
|
|
def gather_metrics_data():
|
|
"""USERS"""
|
|
num_user = User.objects.count()
|
|
num_staff = User.objects.filter(is_staff=True).count()
|
|
|
|
"""Adoption notices"""
|
|
num_adoption_notices = AdoptionNotice.objects.count()
|
|
adoption_notices_active = AdoptionNotice.objects.filter(
|
|
adoptionnoticestatus__major_status=AdoptionNoticeStatus.ACTIVE)
|
|
num_adoption_notices_active = adoption_notices_active.count()
|
|
num_adoption_notices_closed = AdoptionNotice.objects.filter(
|
|
adoptionnoticestatus__major_status=AdoptionNoticeStatus.CLOSED).count()
|
|
num_adoption_notices_disabled = AdoptionNotice.objects.filter(
|
|
adoptionnoticestatus__major_status=AdoptionNoticeStatus.DISABLED).count()
|
|
num_adoption_notices_awaiting_action = AdoptionNotice.objects.filter(
|
|
adoptionnoticestatus__major_status=AdoptionNoticeStatus.AWAITING_ACTION).count()
|
|
|
|
adoption_notices_without_location = AdoptionNotice.objects.filter(location__isnull=True).count()
|
|
|
|
active_animals = 0
|
|
active_animals_per_sex = {}
|
|
for adoption_notice in adoption_notices_active:
|
|
nps = adoption_notice.num_per_sex
|
|
for sex in nps:
|
|
number_of_animals = nps[sex]
|
|
try:
|
|
active_animals_per_sex[sex] += number_of_animals
|
|
except KeyError:
|
|
active_animals_per_sex[sex] = number_of_animals
|
|
active_animals += number_of_animals
|
|
|
|
data = {
|
|
'users': num_user,
|
|
'staff': num_staff,
|
|
|
|
'adoption_notices': num_adoption_notices,
|
|
'adoption_notices_by_status': {
|
|
'active': num_adoption_notices_active,
|
|
'closed': num_adoption_notices_closed,
|
|
'disabled': num_adoption_notices_disabled,
|
|
'awaiting_action': num_adoption_notices_awaiting_action,
|
|
},
|
|
'adoption_notices_without_location': adoption_notices_without_location,
|
|
'active_animals': active_animals,
|
|
'active_animals_per_sex': active_animals_per_sex
|
|
}
|
|
return data
|