summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py34
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)