diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index a5bf6cf3a..b31338a2d 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -2792,6 +2792,7 @@ post_delete.connect(post_save_cache, sender=ProfileType) class UserProfile(models.Model): + name = models.CharField(_(u"Name"), blank=True, default=u"", max_length=100) profile_type = models.ForeignKey( ProfileType, verbose_name=_(u"Profile type")) areas = models.ManyToManyField("Area", verbose_name=_(u"Areas"), @@ -2803,9 +2804,10 @@ class UserProfile(models.Model): class Meta: verbose_name = _(u"User profile") verbose_name_plural = _(u"User profiles") + unique_together = (('name', 'profile_type', 'person'),) def __unicode__(self): - lbl = unicode(self.profile_type) + lbl = self.name or unicode(self.profile_type) if not self.areas.count(): return lbl return u"{} ({})".format(lbl, u", ".join( @@ -2824,6 +2826,34 @@ class UserProfile(models.Model): def area_labels(self): return u", ".join([unicode(area) for area in self.areas.all()]) + def duplicate(self, **kwargs): + areas = [area for area in self.areas.all()] + new_item = self + new_item.pk = None + for key in kwargs: + setattr(new_item, key, kwargs[key]) + new_item.save() + for area in areas: + new_item.areas.add(area) + return new_item + + def save(self, force_insert=False, force_update=False, using=None, + update_fields=None): + super(UserProfile, self).save( + force_insert=force_insert, force_update=force_update, using=using, + update_fields=update_fields) + + # only one current profile per user + if not self.current: + return + q = UserProfile.objects.filter( + person=self.person, current=True).exclude(pk=self.pk) + if not q.count(): + return + for p in q.all(): + p.current = False + p.save() + class IshtarUser(FullSearch): TABLE_COLS = ('username', 'person__name', 'person__surname', @@ -2864,8 +2894,8 @@ class IshtarUser(FullSearch): def current_profile_name(self): q = UserProfile.objects.filter(current=True, person__ishtaruser=self) if q.count(): - return q.values('profile_type__label').all()[0][ - 'profile_type__label'] + vals = q.values('profile_type__label', 'name').all()[0] + return vals['name'] or vals['profile_type__label'] profile = self.person.current_profile if not profile: return u"" @@ -2885,6 +2915,9 @@ class IshtarUser(FullSearch): admin, created = ProfileType.objects.get_or_create( txt_idx='administrator') if user.is_superuser: + if UserProfile.objects.filter( + profile_type=admin, person=person).count(): + return UserProfile.objects.get_or_create( profile_type=admin, person=person, defaults={'current': True}) |