diff options
Diffstat (limited to 'ishtar_common/models.py')
| -rw-r--r-- | ishtar_common/models.py | 129 | 
1 files changed, 129 insertions, 0 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 2c8240a72..aab532cfc 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -23,6 +23,7 @@ Models description  from cStringIO import StringIO  import copy  import datetime +import inspect  from PIL import Image  import logging  import os @@ -887,6 +888,7 @@ class HistoryError(Exception):      def __str__(self):          return repr(self.value) +  PRIVATE_FIELDS = ('id', 'history_modifier', 'order') @@ -1447,6 +1449,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 +1632,84 @@ 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 __unicode__(self): +        return u"{} - {}".format(self.name, self.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 inspect.isclass(form) \ +                        or 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 +1732,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 +2228,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 +2661,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 +2721,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 +2784,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 +3020,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) | 
