52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
|
|
class GDPR_Event(models.Model):
|
|
"""
|
|
Model to log GDPR-related events for auditing purposes.
|
|
"""
|
|
|
|
EVENT_TYPES = [
|
|
("DATA_EXPORT", _("Export de données")),
|
|
("DATA_ANONYMIZATION", _("Anonymisation de données")),
|
|
("CONSENT_WITHDRAWAL", _("Consentement retiré")),
|
|
]
|
|
|
|
EVENT_REASON = [
|
|
("USER_REQUEST", _("Demande utilisateur")),
|
|
("RETENTION_POLICY", _("Politique de conservation")),
|
|
]
|
|
|
|
event_type = models.CharField(
|
|
max_length=50, choices=EVENT_TYPES, verbose_name=_("type d'événement")
|
|
)
|
|
subject_reference = models.CharField(
|
|
max_length=255,
|
|
verbose_name=_("objet concerné"),
|
|
help_text=_("Objet concerné par l'événement : Class:id"),
|
|
)
|
|
fields_touched = models.JSONField(
|
|
blank=True,
|
|
verbose_name=_("champs affectés"),
|
|
help_text=_("Liste des champs affectés par l'événement."),
|
|
)
|
|
reason = models.CharField(
|
|
max_length=50, verbose_name=_("raison"), choices=EVENT_REASON
|
|
)
|
|
done_at = models.DateTimeField(auto_now_add=True, verbose_name=_("date et heure"))
|
|
done_by = models.ForeignKey(
|
|
"users.User",
|
|
null=True,
|
|
blank=True,
|
|
on_delete=models.SET_NULL,
|
|
verbose_name=_("Effectué par"),
|
|
)
|
|
|
|
class Meta:
|
|
verbose_name = _("Événement RGPD")
|
|
verbose_name_plural = _("Événements RGPD")
|
|
|
|
def __str__(self):
|
|
return f"{self.get_event_type_display()} - {self.done_at} - {self.subject_reference}"
|