diff options
Diffstat (limited to 'ishtar_common/models.py')
| -rw-r--r-- | ishtar_common/models.py | 34 | 
1 files changed, 20 insertions, 14 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index ee5ad0c8d..54381598e 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -59,31 +59,31 @@ post_save.connect(post_save_user, sender=User)  class HistoricalRecords(BaseHistoricalRecords):      def create_historical_record(self, instance, type): -        history_user = getattr(instance, '_history_user', None) +        history_modifier = getattr(instance, 'history_modifier', None)          manager = getattr(instance, self.manager_name)          attrs = {}          for field in instance._meta.fields:              attrs[field.attname] = getattr(instance, field.attname) -        q_history = instance.history.order_by('-history_date', -                                              '-history_id') +        q_history = instance.history.filter( +                                   history_modifier_id=history_modifier.pk +                                   ).order_by('-history_date', '-history_id')          if not q_history.count(): -            manager.create(history_type=type, history_user=history_user, -                           **attrs) +            manager.create(history_type=type, **attrs)              return -        old_instance = q_history.all()[0]          # multiple saving by the same user in a very short time are generaly          # caused by post_save signals it is not relevant to keep them -        history_date = datetime.datetime.now() -        if old_instance.history_date and \ -           history_date - old_instance.history_date \ -                                           < datetime.timedelta(seconds=20): +        min_history_date = datetime.datetime.now() \ +                           - datetime.timedelta(seconds=5) +        q = q_history.filter(history_date__isnull=False, +                             history_date__gt=min_history_date +                     ).order_by('-history_date', '-history_id') +        if q.count():              return          # record a new version only if data have been changed          for field in instance._meta.fields:              if getattr(old_instance, field.attname) != attrs[field.attname]: -                manager.create(history_type=type, history_user=history_user, -                               **attrs) +                manager.create(history_type=type, **attrs)                  return  # valid ID validator for models @@ -407,10 +407,10 @@ class BaseHistorizedItem(models.Model):          """          to_del, new_item = [], None          for item in self.history.all(): -            to_del.append(item)              if item.history_date == date:                  new_item = item                  break +            to_del.append(item)          if not new_item:              raise HistoryError(u"The date to rollback to doesn't exist.")          try: @@ -420,6 +420,11 @@ class BaseHistorizedItem(models.Model):                      if not hasattr(new_item, k):                          k = k + "_id"                      setattr(self, k, getattr(new_item, k)) +            try: +                self.history_modifier = User.objects.get( +                           pk=new_item.history_modifier_id) +            except User.ObjectDoesNotExist: +                pass              self.save()          except:              raise HistoryError(u"The rollback has failed.") @@ -740,7 +745,8 @@ class IshtarUser(User):                                         name=name, email=email,                                         history_modifier=user)          person.person_types.add(person_type) -        return IshtarUser.objects.create(user_ptr=user, person=person) +        return IshtarUser.objects.create(user_ptr=user, username=default, +                                         person=person)      def has_right(self, right_name):         return self.person.has_right(right_name) | 
