added new graph : Rencontre par lieu to 'statistiques' module

This commit is contained in:
artus40
2017-10-25 16:34:22 +02:00
parent 569916abd0
commit 821732af1c
5 changed files with 45 additions and 4 deletions

View File

@@ -1,4 +1,8 @@
from django.contrib import admin
from .models import GroupeLieux
# Register your models here.
@admin.register(GroupeLieux)
class GroupLieuxAdmin(admin.ModelAdmin):
model = GroupeLieux
filter_horizontal = ["lieux"]

View File

@@ -9,6 +9,7 @@ from graphos.sources.simple import SimpleDataSource
from graphos.renderers import gchart
from notes.models import Sujet
from .models import GroupeLieux
NOM_MOIS = {
1: "Janvier",
@@ -274,3 +275,24 @@ class RencontreParHeureChart(gchart.AreaChart):
data[intervalle] += 1
return data
class RencontreParLieuChart(PieWrapper):
@property
def labels(self):
for groupe_lieux in GroupeLieux.objects.all():
yield (groupe_lieux.label,
tuple(groupe_lieux.lieux.values_list('pk', flat=True))
)
def get_count_for_group(self, lieu_pks):
return self.queryset.filter(rencontre__lieu__pk__in=lieu_pks).count()
def __init__(self, queryset):
self.queryset = queryset
data = [('Lieu de rencontre', 'Nombre de rencontres')]
if self.queryset:
data += [(label, self.get_count_for_group(lieu_pks)) for label, lieu_pks in self.labels]
super().__init__(data=data,
title="Fréquentation par lieu")

View File

@@ -90,3 +90,17 @@ class FicheStatistique(models.Model):
class Meta:
verbose_name = "Fiche statistique"
class GroupeLieux(models.Model):
label = models.CharField(max_length=128, primary_key=True)
lieux = models.ManyToManyField("maraudes.Lieu")
def __str__(self):
return "<Groupe: %s (n=%i)>" % (self.label, self.lieux.count())
class Meta:
verbose_name = "Groupe de lieux"
verbose_name_plural = "Groupes de lieux"

View File

@@ -141,6 +141,7 @@ class FrequentationChartsView(MultipleChartsView):
('Par mois', charts.RencontreParMoisChart),
('Par heure', charts.RencontreParHeureChart),
('Par sujet', charts.RencontreParSujetChart),
('Par lieu', charts.RencontreParLieuChart)
])
def get_queryset(self):