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}) | 
