summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py32
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