diff options
Diffstat (limited to 'chimere/models.py')
| -rw-r--r-- | chimere/models.py | 67 | 
1 files changed, 64 insertions, 3 deletions
| diff --git a/chimere/models.py b/chimere/models.py index 4f6d4e0..8f07576 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -25,6 +25,7 @@ import simplejson as json  from lxml import etree  from PIL import Image  from subprocess import Popen, PIPE +from BeautifulSoup import BeautifulSoup  from django.conf import settings  from django.contrib.gis.db import models @@ -194,6 +195,14 @@ class SubCategory(models.Model):          return [(category, sub_cats) for category, sub_cats \                                           in sub_categories.items()] +    @classmethod +    def getAvailableTuples(cls, area_name=None): +        cats = [] +        for cat, subcats in cls.getAvailable(area_name=area_name): +            cats.append((unicode(cat), +                        [(subcat.pk, subcat.name) for subcat in subcats])) +        return cats +  IMPORTERS = {'KML':KMLManager,               'OSM':OSMManager,               'SHP':ShapefileManager @@ -344,6 +353,29 @@ class Marker(GeographicItem):          if settings.CHIMERE_DAYS_BEFORE_EVENT:              return self.start_date +    @property +    def description_short(self): +        if not self.description: +            return '' +        if len(self.description) <= settings.CHIMERE_SHORT_DESC_LENGTH: +            return self.description +        desc = self.description[:settings.CHIMERE_SHORT_DESC_LENGTH] +        short_desc = "" +        # find a correct opportunity to cut +        for idx, c in enumerate(reversed(desc)): +            if c == '>': +                break +            if c == '<': +                short_desc = desc[:-(idx+1)] +                break +        if not short_desc: +            for idx, c in enumerate(reversed(desc)): +                if c == ' ' or c == '\n': +                    short_desc = desc[:-(idx+1)] +                    break +        short_desc += "..." +        return BeautifulSoup(short_desc).prettify() +      class Meta:          ordering = ('status', 'name')          verbose_name = _(u"Point of interest") @@ -962,11 +994,15 @@ class PropertyModel(models.Model):      TYPE = (('T', _('Text')),              ('L', _('Long text')),              ('P', _('Password')), -            ('D', _("Date"))) +            ('D', _("Date")), +            ('C', _("Choices")), +            )      TYPE_WIDGET = {'T':forms.TextInput,                     'L':TextareaWidget,                     'P':forms.PasswordInput, -                   'D':DatePickerWidget} +                   'D':DatePickerWidget, +                   'C':forms.Select +                   }      type = models.CharField(_(u"Type"), max_length=1, choices=TYPE)      def __unicode__(self):          return self.name @@ -979,6 +1015,19 @@ class PropertyModel(models.Model):          '''          return 'property_%d_%d' % (self.order, self.id) +class PropertyModelChoice(models.Model): +    '''Choices for property model +    ''' +    propertymodel = models.ForeignKey(PropertyModel, related_name='choices', +                                      verbose_name=_(u"Property model")) +    value = models.CharField(_(u"Value"), max_length=150) +    available = models.BooleanField(_(u"Available"), default=True) +    def __unicode__(self): +        return unicode(self.value) + +    class Meta: +        verbose_name = _(u"Model property choice") +  class Property(models.Model):      '''Property for a POI      ''' @@ -987,7 +1036,14 @@ class Property(models.Model):                                        verbose_name=_(u"Property model"))      value = models.TextField(_(u"Value"))      def __unicode__(self): -        return "%s : %s" % (str(self.propertymodel), self.value) +        if self.propertymodel.type == 'C': +            try: +                return unicode(PropertyModelChoice.objects.get( +                                                    pk=self.value).value) +            except self.DoesNotExist: +                return "" +        return unicode(self.value) +      class Meta:          verbose_name = _(u"Property") @@ -998,6 +1054,11 @@ class Property(models.Model):                  return datetime.date(*[int(val) for val in self.value.split('-')])              except:                  return "" +        if self.propertymodel.type == 'C': +            try: +                return PropertyModelChoice.objects.get(pk=self.value) +            except self.DoesNotExist: +                return None          else:              return self.value | 
