diff options
Diffstat (limited to 'ishtar/furnitures/models.py')
| -rw-r--r-- | ishtar/furnitures/models.py | 67 | 
1 files changed, 52 insertions, 15 deletions
| diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py index 6dda192ea..3d6e12536 100644 --- a/ishtar/furnitures/models.py +++ b/ishtar/furnitures/models.py @@ -26,7 +26,7 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError  from django.core.validators import validate_slug  from django.utils.translation import ugettext_lazy as _, ugettext  from django.db.utils import DatabaseError -from django.utils.safestring import SafeUnicode +from django.utils.safestring import SafeUnicode, mark_safe  from django.db.models import Q, Max  from django.db.models.signals import m2m_changed @@ -130,6 +130,7 @@ class GeneralType(models.Model):                           validators=[validate_slug], max_length=30, unique=True)      comment = models.TextField(_(u"Comment"), blank=True, null=True)      available = models.BooleanField(_(u"Available")) +    HELP_TEXT = u""      class Meta:          abstract = True @@ -138,43 +139,79 @@ class GeneralType(models.Model):          return self.label      @classmethod -    def get_types(cls, dct={}): +    def get_help(cls, dct={}): +        help_text = cls.HELP_TEXT +        c_rank = -1 +        help_items = u"\n" +        for item in cls.get_types(dct=dct, instances=True): +            if not item.comment: +                continue +            if c_rank > item.rank: +                help_items += u"</dl>\n" +            elif c_rank < item.rank: +                help_items += u"<dl>\n" +            c_rank = item.rank +            help_items += u"<dt>%s</dt><dd>%s</dd>" % (item.label, +                                u"<br/>".join(item.comment.split('\n'))) +        c_rank += 1 +        if c_rank: +            help_items += c_rank*u"</dl>" +        return mark_safe(help_text + help_items) + +    @classmethod +    def get_types(cls, dct={}, instances=False):          base_dct = dct.copy()          if hasattr(cls, 'parent'): -            return cls._get_parent_types(base_dct) -        return cls._get_types(base_dct) +            return cls._get_parent_types(base_dct, instances) +        return cls._get_types(base_dct, instances)      @classmethod -    def _get_types(cls, dct={}): +    def _get_types(cls, dct={}, instances=False):          dct['available'] = True -        yield ('', '--') +        if not instances: +            yield ('', '--')          for item in cls.objects.filter(**dct).all(): -            yield (item.pk, _(unicode(item))) +            if instances: +                item.rank = 0 +                yield item +            else: +                yield (item.pk, _(unicode(item))) + +    PREFIX = "› "      @classmethod -    def _get_childs(cls, item, dct, prefix=""): -        prefix += "› " +    def _get_childs(cls, item, dct, prefix=0, instances=False): +        prefix += 1          dct['parent'] = item          childs = cls.objects.filter(**dct)          if hasattr(cls, 'order'):              childs = childs.order_by('order')          for child in childs.all(): -            yield (child.pk, SafeUnicode(prefix + \ +            if instances: +                child.rank = prefix +                yield child +            else: +                yield (child.pk, SafeUnicode(prefix*cls.PREFIX + \                                           unicode(_(unicode(child))) )) -            for sub_child in cls._get_childs(child, dct, prefix): +            for sub_child in cls._get_childs(child, dct, prefix, instances):                  yield sub_child      @classmethod -    def _get_parent_types(cls, dct={}): +    def _get_parent_types(cls, dct={}, instances=False):          dct['available'] = True -        yield ('', '--') +        if not instances: +            yield ('', '--')          dct['parent'] = None          items = cls.objects.filter(**dct)          if hasattr(cls, 'order'):              items = items.order_by('order')          for item in items.all(): -            yield (item.pk, unicode(item)) -            for child in cls._get_childs(item, dct): +            if instances: +                item.rank = 0 +                yield item +            else: +                yield (item.pk, unicode(item)) +            for child in cls._get_childs(item, dct, instances):                  yield child  class HistoryError(Exception): | 
