diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 124 |
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) |