diff options
Diffstat (limited to 'ishtar_common/models.py')
| -rw-r--r-- | ishtar_common/models.py | 32 | 
1 files changed, 30 insertions, 2 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 51cb16157..6228ea1d0 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -850,6 +850,13 @@ class LightHistorizedItem(BaseHistorizedItem):  PARSE_FORMULA = re.compile("{([^}]*)}") +FORMULA_FILTERS = { +    'upper': lambda x: x.upper(), +    'lower': lambda x: x.lower(), +    'capitalize': lambda x: x.capitalize(), +    'slug': lambda x: slugify(x) +} +  def get_external_id(key, item):      profile = get_current_profile() @@ -858,6 +865,13 @@ def get_external_id(key, item):      formula = getattr(profile, key)      dct = {}      for fkey in PARSE_FORMULA.findall(formula): +        filtered = fkey.split(u'|') +        initial_key = fkey[:] +        fkey = filtered[0] +        filters = [] +        for filtr in filtered[1:]: +            if filtr in FORMULA_FILTERS: +                filters.append(FORMULA_FILTERS[filtr])          if fkey.startswith('settings__'):              dct[fkey] = getattr(settings, fkey[len('settings__'):]) or ''              continue @@ -872,9 +886,11 @@ def get_external_id(key, item):              if obj is None:                  break          if obj is None: -            dct[fkey] = '' +            dct[initial_key] = ''          else: -            dct[fkey] = obj +            dct[initial_key] = unicode(obj) +        for filtr in filters: +            dct[initial_key] = filtr(dct[initial_key])      return formula.format(**dct)  CURRENCY = ((u"€", _(u"Euro")), @@ -934,6 +950,13 @@ class IshtarSiteProfile(models.Model, Cached):                      u"Change this with care. With incorrect formula, the "                      u"application might be unusable and import of external "                      u"data can be destructive.")) +    person_raw_name = models.TextField( +        _(u"Raw name for person"), +        default="{name|upper} {surname}", +        help_text=_(u"Formula to manage person raw_name. " +                    u"Change this with care. With incorrect formula, the " +                    u"application might be unusable and import of external " +                    u"data can be destructive."))      active = models.BooleanField(_(u"Current active"), default=False)      currency = models.CharField(_(u"Currency"), default=u"€",                                  choices=CURRENCY, max_length='5') @@ -2364,6 +2387,11 @@ class Person(Address, Merge, OwnPerms, ValueGetter):      def save(self, *args, **kwargs):          super(Person, self).save(*args, **kwargs) +        if not self.raw_name: +            self.raw_name = get_external_id( +                'person_raw_name', self) +            if self.raw_name: +                self.save()          if hasattr(self, 'responsible_town_planning_service'):              for fle in self.responsible_town_planning_service.all():                  fle.save()  # force update of raw_town_planning_service | 
