diff options
Diffstat (limited to 'ishtar/ishtar_base/models.py')
-rw-r--r-- | ishtar/ishtar_base/models.py | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/ishtar/ishtar_base/models.py b/ishtar/ishtar_base/models.py index 37af19f87..ee22b9973 100644 --- a/ishtar/ishtar_base/models.py +++ b/ishtar/ishtar_base/models.py @@ -74,7 +74,8 @@ def valid_ids(cls): try: cls.objects.get(pk=v) except ObjectDoesNotExist: - raise ValidationError(_(u"Not a valid item.")) + raise ValidationError( + _(u"An item selected is not a valid item.")) return func # unique validator for models @@ -150,11 +151,11 @@ class GeneralType(models.Model): return self.label @classmethod - def get_help(cls, dct={}): + def get_help(cls, dct={}, exclude=[]): help_text = cls.HELP_TEXT c_rank = -1 help_items = u"\n" - for item in cls.get_types(dct=dct, instances=True): + for item in cls.get_types(dct=dct, instances=True, exclude=exclude): if hasattr(item, '__iter__'): # TODO: manage multiple levels continue @@ -175,18 +176,21 @@ class GeneralType(models.Model): return u"" @classmethod - def get_types(cls, dct={}, instances=False): + def get_types(cls, dct={}, instances=False, exclude=[]): base_dct = dct.copy() if hasattr(cls, 'parent'): - return cls._get_parent_types(base_dct, instances) - return cls._get_types(base_dct, instances) + return cls._get_parent_types(base_dct, instances, exclude=exclude) + return cls._get_types(base_dct, instances, exclude=exclude) @classmethod - def _get_types(cls, dct={}, instances=False): + def _get_types(cls, dct={}, instances=False, exclude=[]): dct['available'] = True if not instances: yield ('', '--') - for item in cls.objects.filter(**dct).all(): + items = cls.objects.filter(**dct) + if exclude: + items = items.exclude(txt_idx__in=exclude) + for item in items.all(): if instances: item.rank = 0 yield item @@ -196,10 +200,12 @@ class GeneralType(models.Model): PREFIX = "› " @classmethod - def _get_childs(cls, item, dct, prefix=0, instances=False): + def _get_childs(cls, item, dct, prefix=0, instances=False, exclude=[]): prefix += 1 dct['parent'] = item childs = cls.objects.filter(**dct) + if exclude: + childs = childs.exclude(txt_idx__in=exclude) if hasattr(cls, 'order'): childs = childs.order_by('order') for child in childs.all(): @@ -209,16 +215,19 @@ class GeneralType(models.Model): else: yield (child.pk, SafeUnicode(prefix*cls.PREFIX + \ unicode(_(unicode(child))) )) - for sub_child in cls._get_childs(child, dct, prefix, instances): + for sub_child in cls._get_childs(child, dct, prefix, instances, + exclude=exclude): yield sub_child @classmethod - def _get_parent_types(cls, dct={}, instances=False): + def _get_parent_types(cls, dct={}, instances=False, exclude=[]): dct['available'] = True if not instances: yield ('', '--') dct['parent'] = None items = cls.objects.filter(**dct) + if exclude: + items = items.exclude(txt_idx__in=exclude) if hasattr(cls, 'order'): items = items.order_by('order') for item in items.all(): @@ -227,7 +236,7 @@ class GeneralType(models.Model): yield item else: yield (item.pk, unicode(item)) - for child in cls._get_childs(item, dct, instances): + for child in cls._get_childs(item, dct, instances, exclude=exclude): yield child class HistoryError(Exception): @@ -335,6 +344,10 @@ class LightHistorizedItem(BaseHistorizedItem): class Meta: abstract = True + def save(self, *args, **kwargs): + super(LightHistorizedItem, self).save(*args, **kwargs) + return True + class Departement(models.Model): label = models.CharField(_(u"Label"), max_length=30) number = models.CharField(_(u"Number"), unique=True, max_length=3) @@ -1129,6 +1142,12 @@ class Container(LightHistorizedItem): verbose_name = _(u"Container") verbose_name_plural = _(u"Containers") + def __unicode__(self): + lbl = self.reference + lbl += u" - %s" % unicode(self.container_type) + lbl += u" (%s)" % unicode(self.location) + return lbl + if settings.COUNTRY == 'fr': class Arrondissement(models.Model): name = models.CharField(u"Nom", max_length=30) |