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 |