diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 35c59a94e..8cb59be3e 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -3218,7 +3218,7 @@ GDPR_ACTIVITY_DICT = dict(GDPR_ACTIVITY) class GDPRPerson(models.Model): person = models.ForeignKey(Person, verbose_name=_("Person"), on_delete=models.SET_NULL, - blank=True, null=True) + blank=True, null=True, related_name="gdpr_person") raw_name = models.CharField(_("Raw name"), max_length=300, default="-") class Meta: @@ -3245,8 +3245,8 @@ class GDPRLog(models.Model): @property def activity_lbl(self): if self.activity not in GDPR_ACTIVITY_DICT: - return str(_("Unknown activity :")) + self.activity - return GDPR_ACTIVITY_DICT[self.activity] + return str(_("Unknown activity :")) + str(self.activity) + return GDPR_ACTIVITY_DICT[str(self.activity)] @property def persons_lbl(self): @@ -3259,6 +3259,27 @@ class GDPRLog(models.Model): def __str__(self): return f"{self.user.username} - {self.date} - {self.activity_lbl}" + @classmethod + def create_log(cls, user_id, ip, activity, person_query): + log = cls.objects.create(user_id=user_id, ip=ip, activity=activity) + person_query = person_query.exclude(raw_name__isnull=True).exclude(raw_name="") + + # create all missing GDPRPerson + missing_gdpr_person_q = person_query.filter(gdpr_person=None) + gdpr_persons_creation = [] + values = missing_gdpr_person_q.values_list("id", "raw_name") + for person_id, raw_name in values: + gdpr_persons_creation.append(GDPRPerson(person_id=person_id, raw_name=raw_name)) + GDPRPerson.objects.bulk_create(gdpr_persons_creation) + + # attach gdpr persons + gdpr_persons = [] + values = person_query.values_list("gdpr_person__pk", flat=True) + for pk in values: + gdpr_persons.append(cls.persons.through(gdprperson_id=pk, gdprlog_id=log.pk)) + cls.persons.through.objects.bulk_create(gdpr_persons) + + class ProfileType(GeneralType): groups = models.ManyToManyField(Group, verbose_name=_("Groups"), blank=True) |