Skip to content
Snippets Groups Projects
Commit 7ad7cac9 authored by Timothee P's avatar Timothee P :sunflower:
Browse files

Merge branch 'redmine-issues/25337' into 'develop'

REDMINE_ISSUE-25337 | Notifications et signalement à l'état de brouillon

See merge request !520
parents f46519bf 74047555
No related branches found
No related tags found
1 merge request!520REDMINE_ISSUE-25337 | Notifications et signalement à l'état de brouillon
Pipeline #37263 passed with warnings
...@@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. ...@@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [6.4.1] - 2024-12-24
### Correctifs
- Redmine 23954 : Saisie de lignes et polygones - clic gauche pas toujours enregistré
- Redmine 25337 : Notifications et signalement à l'état de brouillon
## [6.4.0] - 2024-11-28 ## [6.4.0] - 2024-11-28
### Evolutions ### Evolutions
......
...@@ -13,7 +13,7 @@ Celle-ci n'est plus disponible dans le répertoire /docs du dépôt à partir de ...@@ -13,7 +13,7 @@ Celle-ci n'est plus disponible dans le répertoire /docs du dépôt à partir de
La version stable de GéoContrib est une version qui a été testée et validée par la communauté GéoContrib. Nous recommandons l'installation de cette version dans le cas d'une utilisation optimale et sans instabilité. La version stable de GéoContrib est une version qui a été testée et validée par la communauté GéoContrib. Nous recommandons l'installation de cette version dans le cas d'une utilisation optimale et sans instabilité.
La version actuellement stabilisée est la version **6.4.0**. La version actuellement stabilisée est la version **6.4.1**.
## Installation ## Installation
...@@ -302,14 +302,16 @@ Notre système de notifications est conçu pour informer les utilisateurs des é ...@@ -302,14 +302,16 @@ Notre système de notifications est conçu pour informer les utilisateurs des é
#### - Notifications groupées #### - Notifications groupées
- **Objectif** : Informer tous les abonnés des différents projets sur les événements variés tels que les mises à jour, les suppressions et les créations de signalement, les évolutions du projet, ainsi que la publication de commentaires ou de pièces jointes. - **Objectif** : Informer tous les abonnés des différents projets sur les événements variés tels que les mises à jour, les suppressions et les créations de signalement, les évolutions du projet, ainsi que la publication de commentaires ou de pièces jointes.
- **Fonctionnement** : Les notifications sont regroupées grâce aux instances `StackedEvent`, crées par un Signal - **Fonctionnement** : Les notifications sont regroupées grâce aux instances `StackedEvent`, crées par un Signal
- **Filtre** : Uniqement les événements pour les signalements dont le statut n'est pas à brouillon au moment de la génération de la notification sont envoyés.
- **Déclencheur** : Les notifications sont regroupées grâce aux instances `StackedEvent` et envoyées périodiquement selon la configuration de la tâche périodique associée. - **Déclencheur** : Les notifications sont regroupées grâce aux instances `StackedEvent` et envoyées périodiquement selon la configuration de la tâche périodique associée.
- **Caractéristiques Configurables** : - **Caractéristiques Configurables** :
- **Niveau d'envoi des notifications** : Les administrateurs peuvent configurer l'envoi des notifications pour les documents clés à un niveau globale ou par projet. Ceci est géré par le champ `per_project` dans le modèle `NotificationModel`. - **Niveau d'envoi des notifications** : Les administrateurs peuvent configurer l'envoi des notifications groupées à un niveau globale ou par projet. Ceci est géré par le champ `per_project` dans le modèle `NotificationModel`.
- **Désactivation des notifications** : Vous pouvez désactiver les notifications pour un type de signalement via l'interface d'administration ou la configuration d'affichage de signalement dans l'application frontend. L'envoi des notifications de publication de documents clés ne sont pas impactés par ce pramétrage. - **Désactivation des notifications** : Vous pouvez désactiver les notifications pour un type de signalement via l'interface d'administration ou la configuration d'affichage de signalement dans l'application frontend. L'envoi des notifications de publication de documents clés ne sont pas impactés par ce pramétrage.
#### - Notifications de publications de documents clés #### - Notifications de publications de documents clés
- **Objectif** : Informer tous les abonnés des différents projets sur les publications importantes de documents au sein de leurs projets. - **Objectif** : Informer tous les abonnés des différents projets sur les publications importantes de documents au sein de leurs projets.
- **Fonctionnement** : Les notifications sont regroupées grâce aux instances `StackedEvent` spécifiques, en utilisant la propriété `only_key_document`. Les piles d'événements sont crées par un Signal, lors de la publication d'une pièce jointe avec le paramètre `is_key_document`. - **Fonctionnement** : Les notifications sont regroupées grâce aux instances `StackedEvent` spécifiques, en utilisant la propriété `only_key_document`. Les piles d'événements sont crées par un Signal, lors de la publication d'une pièce jointe avec le paramètre `is_key_document`.
- **Filtre** : Uniqement les événements pour les signalements dont le statut n'est pas à brouillon au moment de la génération de la notification sont envoyés.
- **Déclencheur** : Les notifications sont envoyées périodiquement selon la configuration de la tâche périodique associée. - **Déclencheur** : Les notifications sont envoyées périodiquement selon la configuration de la tâche périodique associée.
- **Caractéristiques Configurables** : - **Caractéristiques Configurables** :
- **Activation des Notifications** : Les administrateurs peuvent activer ou désactiver les notifications pour les documents clés au niveau d'un type de signalement. Ceci est géré par le champ booléen `enable_key_doc_notif` dans le modèle `FeatureType`. - **Activation des Notifications** : Les administrateurs peuvent activer ou désactiver les notifications pour les documents clés au niveau d'un type de signalement. Ceci est géré par le champ booléen `enable_key_doc_notif` dans le modèle `FeatureType`.
......
...@@ -336,8 +336,9 @@ class FeatureEventSerializer(serializers.ModelSerializer): ...@@ -336,8 +336,9 @@ class FeatureEventSerializer(serializers.ModelSerializer):
class StackedEventSerializer(serializers.ModelSerializer): class StackedEventSerializer(serializers.ModelSerializer):
""" """
Serializer for StackedEvent objects. This serializer dynamically groups and serializes events Serializer for StackedEvent objects. This serializer dynamically groups and serializes events
associated with a StackedEvent instance. The events are grouped by feature type and feature title, associated with a StackedEvent instance. Events related to features with a draft status are excluded.
and each group is further processed to include only those events whose feature types have notifications enabled. The events are grouped by feature type and feature title, and each group is further processed
to include only those events whose feature types have notifications enabled.
The serializer performs several key operations: The serializer performs several key operations:
- Retrieves and groups all events related to the stacked event instance. - Retrieves and groups all events related to the stacked event instance.
...@@ -362,8 +363,8 @@ class StackedEventSerializer(serializers.ModelSerializer): ...@@ -362,8 +363,8 @@ class StackedEventSerializer(serializers.ModelSerializer):
# Gather all unique feature IDs from the events to minimize database queries # Gather all unique feature IDs from the events to minimize database queries
feature_ids = {event.feature_id for event in events if event.feature_id} feature_ids = {event.feature_id for event in events if event.feature_id}
# Retrieve all corresponding Feature objects in a single query, including their types # Retrieve all corresponding Feature objects in a single query, excluding feature with draft status, including their types
features = Feature.objects.filter(feature_id__in=feature_ids).select_related('feature_type') features = Feature.objects.filter(feature_id__in=feature_ids).exclude(status='draft').select_related('feature_type')
# Map feature IDs to Feature objects for quick access # Map feature IDs to Feature objects for quick access
feature_map = {feature.feature_id: feature for feature in features} feature_map = {feature.feature_id: feature for feature in features}
...@@ -383,8 +384,9 @@ class StackedEventSerializer(serializers.ModelSerializer): ...@@ -383,8 +384,9 @@ class StackedEventSerializer(serializers.ModelSerializer):
# Get notification settings with default fallback if slug is not in the dictionary # Get notification settings with default fallback if slug is not in the dictionary
notification_settings = slug_to_title_and_notification.get(feature_type_slug, ('Type inconnu', False)) notification_settings = slug_to_title_and_notification.get(feature_type_slug, ('Type inconnu', False))
# Check if feature_type slug is found and if notifications are not disabled in case it is not a key document # Check if feature is not excluded (if draft) and if feature_type slug is found
if feature_type_slug and (event.object_type == 'key_document' or not notification_settings[1]): # and if notifications are not disabled, only in case it is not a key document
if event.feature_id in feature_map and feature_type_slug and (event.object_type == 'key_document' or not notification_settings[1]):
# Assign a title from the feature map or use 'Élément inconnu' if missing # Assign a title from the feature map or use 'Élément inconnu' if missing
feature_title = feature_map[event.feature_id].title if event.feature_id in feature_map else 'Élément inconnu' feature_title = feature_map[event.feature_id].title if event.feature_id in feature_map else 'Élément inconnu'
# Use the feature type title from the map, fallback to 'Type inconnu' if not found # Use the feature type title from the map, fallback to 'Type inconnu' if not found
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment