parent
17bc54685d
commit
d267642268
@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.9 on 2024-10-30 14:31
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('agenda_culturel', '0091_duplicatedevents_fixed_event_masked'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='categorisationrule',
|
||||
name='weight',
|
||||
field=models.IntegerField(default=1, help_text='The lower is the weight, the earlier the filter is applied', verbose_name='Weight'),
|
||||
),
|
||||
]
|
@ -1561,7 +1561,7 @@ class CategorisationRule(models.Model):
|
||||
weight = models.IntegerField(
|
||||
verbose_name=_("Weight"),
|
||||
help_text=_("The lower is the weight, the earlier the filter is applied"),
|
||||
default=0,
|
||||
default=1,
|
||||
)
|
||||
|
||||
category = models.ForeignKey(
|
||||
@ -1643,14 +1643,18 @@ class CategorisationRule(models.Model):
|
||||
return 1
|
||||
|
||||
def get_category_from_rules(event):
|
||||
cats = defaultdict(lambda: 0)
|
||||
if CategorisationRule.rules is None:
|
||||
CategorisationRule.rules = CategorisationRule.objects.all().order_by("weight", "pk").prefetch_related("category").prefetch_related("place")
|
||||
CategorisationRule.rules = CategorisationRule.objects.all().prefetch_related("category").prefetch_related("place")
|
||||
|
||||
for rule in CategorisationRule.rules:
|
||||
if rule.match(event):
|
||||
return rule.category
|
||||
cats[rule.category] += rule.weight
|
||||
|
||||
if len(cats) == 0:
|
||||
return None
|
||||
else:
|
||||
return max(cats, key=cats.get)
|
||||
|
||||
def match(self, event):
|
||||
if self.description_contains and self.description_contains != "":
|
||||
|
@ -22,9 +22,9 @@
|
||||
<a href="{% url 'add_catrule'%}" role="button">Ajouter {% picto_from_name "plus-circle" %}</a>
|
||||
</div>
|
||||
<h1>Règles de catégorisation</h1>
|
||||
<p>Chaque règle est considérée dans l'ordre croissant des poids. La première règle satisfaite est appliquée par un changement de catégorie, et on les suivantes ne sont pas appliquées.</p>
|
||||
<p>Une règle est satisfaite si toutes ses conditions sont satisfaites.</p>
|
||||
<p>Les règles sont appliquées à l'import sur tous les événements, et à la demande sur les événements sans catégorie.</p>
|
||||
<p>Pour chaque catégorie, on calcule la somme des poids de chaque règle satisfaite sur un événement. La catégorie retenue pour un événement correspond à la somme la plus grande.</p>
|
||||
<p>Les règles sont appliquées à l'import sur tous les événements, et à la demande sur tous les événements, avec confirmation dans le cas d'événements déjà catégorisés.</p>
|
||||
</header>
|
||||
|
||||
<table role="grid">
|
||||
|
@ -1638,7 +1638,7 @@ def set_duplicate(request, year, month, day, pk):
|
||||
@login_required(login_url="/accounts/login/")
|
||||
@permission_required("agenda_culturel.view_categorisationrule")
|
||||
def categorisation_rules(request):
|
||||
paginator = Paginator(CategorisationRule.objects.all().order_by("weight", "pk"), 10)
|
||||
paginator = Paginator(CategorisationRule.objects.all().order_by("pk").prefetch_related("category").prefetch_related("place"), 100)
|
||||
page = request.GET.get("page")
|
||||
|
||||
try:
|
||||
|
Loading…
Reference in New Issue
Block a user