summaryrefslogtreecommitdiff
path: root/ishtar/furnitures/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar/furnitures/models.py')
-rw-r--r--ishtar/furnitures/models.py50
1 files changed, 42 insertions, 8 deletions
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py
index 144ada31a..3571256cf 100644
--- a/ishtar/furnitures/models.py
+++ b/ishtar/furnitures/models.py
@@ -157,19 +157,53 @@ class GeneralType(models.Model):
for child in cls._get_childs(item, dct):
yield child
+class HistoryError(Exception):
+ def __init__(self, value):
+ self.value = value
+ def __str__(self):
+ return repr(self.value)
+
class BaseHistorizedItem(models.Model):
history_modifier = models.ForeignKey(User, related_name='+',
verbose_name=_(u"Last modifier"))
+ class Meta:
+ abstract = True
+
def save(self, *args, **kwargs):
- try:
- self.history_modifier
- except ObjectDoesNotExist:
- return
+ assert hasattr(self, 'history_modifier') == True
super(BaseHistorizedItem, self).save(*args, **kwargs)
return True
- class Meta:
- abstract = True
+ def rollback(self, date):
+ to_del, new_item = [], None
+ for item in self.history.all():
+ to_del.append(item)
+ if item.history_date == date:
+ new_item = item
+ break
+ if not new_item:
+ raise HistoryError(u"The date to rollback to doesn't exist.")
+ try:
+ for f in self._meta.fields:
+ k = f.name
+ if k != 'id' and hasattr(self, k):
+ if not hasattr(new_item, k):
+ k = k + "_id"
+ setattr(self, k, getattr(new_item, k))
+ self.save()
+ except:
+ raise HistoryError(u"The rollback has failed.")
+ # clean the non necessary steps
+ for historized_item in to_del:
+ historized_item.delete()
+
+ def values(self):
+ values = {}
+ for f in self._meta.fields:
+ k = f.name
+ if k != 'id':
+ values[k] = getattr(self, k)
+ return values
class LightHistorizedItem(BaseHistorizedItem):
history_date = models.DateTimeField(default=datetime.datetime.now)
@@ -266,7 +300,7 @@ class Person(Address, OwnPerms) :
lbl = u"%s %s - " % (self.name, self.surname)
if self.attached_to:
lbl += unicode(self.attached_to)
- else:
+ elif self.email:
lbl += self.email
return lbl
@@ -331,7 +365,7 @@ class File(BaseHistorizedItem, OwnPerms):
is_active = models.BooleanField(_(u"Is active?"), default=True)
towns = models.ManyToManyField("Town", verbose_name=_(u"Towns"))
creation_date = models.DateField(_(u"Creation date"),
- default=datetime.datetime.now)
+ default=datetime.date.today)
reception_date = models.DateField(_(u'Reception date'), blank=True,
null=True)
related_file = models.ForeignKey("File", verbose_name=_(u"Related file"),