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.py124
1 files changed, 124 insertions, 0 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 09aec0cdb..b0751f661 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -887,6 +887,7 @@ class HistoryError(Exception):
def __str__(self):
return repr(self.value)
+
PRIVATE_FIELDS = ('id', 'history_modifier', 'order')
@@ -1447,6 +1448,7 @@ def get_external_id(key, item):
dct[initial_key] = filtr(dct[initial_key])
return formula.format(**dct)
+
CURRENCY = ((u"€", _(u"Euro")),
(u"$", _(u"US dollar")))
FIND_INDEX_SOURCE = ((u"O", _(u"Operations")),
@@ -1629,6 +1631,80 @@ post_save.connect(cached_site_changed, sender=IshtarSiteProfile)
post_delete.connect(cached_site_changed, sender=IshtarSiteProfile)
+class CustomForm(models.Model):
+ name = models.CharField(_(u"Name"), max_length=250)
+ form = models.CharField(_(u"Form"), max_length=250)
+ available = models.BooleanField(_(u"Available"), default=True)
+ enabled = models.BooleanField(
+ _(u"Enable this form"), default=True,
+ help_text=_(u"Disable with caution: disabling a form with mandatory "
+ u"fields may lead to database errors."))
+ apply_to_all = models.BooleanField(
+ _(u"Apply to all"), default=False,
+ help_text=_(u"Apply this form to all users. If set to True, selecting "
+ u"user and user type is useless."))
+ users = models.ManyToManyField('IshtarUser', blank=True)
+ user_types = models.ManyToManyField('PersonType', blank=True)
+
+ class Meta:
+ verbose_name = _(u"Custom form")
+ verbose_name_plural = _(u"Custom forms")
+ ordering = ['name', 'form']
+
+ def users_lbl(self):
+ users = [unicode(user) for user in self.users.all()]
+ return " ; ".join(users)
+
+ users_lbl.short_description = _(u"Users")
+
+ def user_types_lbl(self):
+ user_types = [unicode(u) for u in self.user_types.all()]
+ return " ; ".join(user_types)
+
+ user_types_lbl.short_description = _(u"User types")
+
+ @classmethod
+ def register(cls):
+ if hasattr(cls, '_register'):
+ return cls._register
+ cache_key, value = get_cache(cls.__class__, ['dct-forms'],
+ app_label='ishtar_common')
+ if value:
+ cls._register = value
+ return cls._register
+ cls._register = {}
+ # ideally should be improved but only used in admin
+ from ishtar_common.admin import ISHTAR_FORMS
+ from ishtar_common.forms import CustomForm
+
+ for app_form in ISHTAR_FORMS:
+ for form in dir(app_form):
+ if 'Form' not in form:
+ # not very clean... but do not treat inappropriate items
+ continue
+ form = getattr(app_form, form)
+ if not issubclass(form, CustomForm) \
+ or not getattr(form, 'form_slug', None):
+ continue
+ cls._register[form.form_slug] = form
+ return cls._register
+
+ def get_form_class(self):
+ register = self.register()
+ if self.form not in self._register:
+ return
+ return register[self.form]
+
+
+class ExcludedField(models.Model):
+ custom_form = models.ForeignKey(CustomForm, related_name='excluded_fields')
+ field = models.CharField(_(u"Field"), max_length=250)
+
+ class Meta:
+ verbose_name = _(u"Excluded field")
+ verbose_name_plural = _(u"Excluded fields")
+
+
class GlobalVar(models.Model, Cached):
slug = models.SlugField(_(u"Variable name"), unique=True)
description = models.TextField(_(u"Description of the variable"),
@@ -1651,6 +1727,7 @@ def cached_globalvar_changed(sender, **kwargs):
cache_key, value = get_cache(GlobalVar, var.slug)
cache.set(cache_key, var.value, settings.CACHE_TIMEOUT)
+
post_save.connect(cached_globalvar_changed, sender=GlobalVar)
@@ -2146,6 +2223,8 @@ class OrganizationType(GeneralType):
verbose_name = _(u"Organization type")
verbose_name_plural = _(u"Organization types")
ordering = ('label',)
+
+
post_save.connect(post_save_cache, sender=OrganizationType)
post_delete.connect(post_save_cache, sender=OrganizationType)
@@ -2577,6 +2656,8 @@ class AuthorType(GeneralType):
verbose_name = _(u"Author type")
verbose_name_plural = _(u"Author types")
ordering = ['order', 'label']
+
+
post_save.connect(post_save_cache, sender=AuthorType)
post_delete.connect(post_save_cache, sender=AuthorType)
@@ -2635,6 +2716,8 @@ class Format(GeneralType):
verbose_name = _(u"Format type")
verbose_name_plural = _(u"Format types")
ordering = ['label']
+
+
post_save.connect(post_save_cache, sender=Format)
post_delete.connect(post_save_cache, sender=Format)
@@ -2696,6 +2779,45 @@ class Source(OwnPerms, ImageModel, models.Model):
return slugify(u"-".join(values))
+class LicenseType(GeneralType):
+ class Meta:
+ verbose_name = _(u"License type")
+ verbose_name_plural = _(u"License types")
+ ordering = ('label',)
+
+
+class ImageType(GeneralType):
+ class Meta:
+ verbose_name = _(u"Image type")
+ verbose_name_plural = _(u"Image types")
+ ordering = ('label',)
+
+
+class IshtarImage(ImageModel):
+ name = models.CharField(_(u"Name"), max_length=250)
+ description = models.TextField(_(u"Description"), blank=True, null=True)
+ licenses = models.ManyToManyField(LicenseType, verbose_name=_(u"License"),
+ blank=True)
+ authors = models.ManyToManyField(Author, verbose_name=_(u"Authors"),
+ blank=True)
+ authors_raw = models.CharField(verbose_name=_(u"Authors (raw)"),
+ blank=True, null=True, max_length=250)
+
+ image_type = models.ForeignKey(ImageType, verbose_name=_(u"Type"),
+ blank=True, null=True)
+ creation_date = models.DateField(blank=True, null=True,
+ verbose_name=_(u"Creation date"))
+ reference = models.CharField(_(u"Ref."), max_length=250, null=True,
+ blank=True)
+ internal_reference = models.CharField(
+ _(u"Internal ref."), max_length=250, null=True, blank=True)
+
+ class Meta:
+ verbose_name = _(u"Image")
+ verbose_name_plural = _(u"Images")
+ ordering = ('name',)
+
+
if settings.COUNTRY == 'fr':
class Arrondissement(models.Model):
name = models.CharField(u"Nom", max_length=30)
@@ -2893,6 +3015,8 @@ class OperationType(GeneralType):
if not key:
return op_type.preventive
return key == op_type.txt_idx
+
+
post_save.connect(post_save_cache, sender=OperationType)
post_delete.connect(post_save_cache, sender=OperationType)