diff options
Diffstat (limited to 'ishtar/furnitures/models.py')
-rw-r--r-- | ishtar/furnitures/models.py | 50 |
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"), |