diff options
Diffstat (limited to 'ishtar_common/models.py')
| -rw-r--r-- | ishtar_common/models.py | 57 | 
1 files changed, 56 insertions, 1 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 89fbd1589..8d153f120 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -24,6 +24,7 @@ from cStringIO import StringIO  import datetime  from PIL import Image  import os +import tempfile  from django.conf import settings  from django.core.exceptions import ObjectDoesNotExist, ValidationError @@ -43,6 +44,8 @@ from django.contrib import admin  from simple_history.models import HistoricalRecords as BaseHistoricalRecords +from ooo_replace import ooo_replace +  def post_save_user(sender, **kwargs):      user = kwargs['instance']      ishtaruser = None @@ -57,6 +60,22 @@ def post_save_user(sender, **kwargs):                                                     txt_idx='administrator'))  post_save.connect(post_save_user, sender=User) +class ValueGetter(object): +    _prefix = "" +    def get_values(self, prefix=''): +        if not prefix: +            prefix = self._prefix +        values = {} +        for field_name in self._meta.get_all_field_names(): +            if not hasattr(self, field_name): +                continue +            value = getattr(self, field_name) +            if hasattr(value, 'get_values'): +                values.update(value.get_values(prefix + field_name + '_')) +            else: +                values[prefix + field_name] = value +        return values +  class HistoricalRecords(BaseHistoricalRecords):      def create_historical_record(self, instance, type):          history_modifier = getattr(instance, 'history_modifier', None) @@ -592,6 +611,41 @@ class Dashboard:              if vals[v] == mx:                  return v +class DocumentTemplate(models.Model): +    CLASSNAMES = (('archaeological_operations.models.AdministrativeAct', +                  _(u"Administrative Act")),) +    name = models.CharField(_(u"Name"), max_length=100) +    template = models.FileField(_(u"Template"), upload_to="upload/templates/") +    associated_object_name = models.CharField(_(u"Associated object"), +                                             max_length=100, choices=CLASSNAMES) +    available = models.BooleanField(_(u"Available"), default=True) + +    class Meta: +        verbose_name = _(u"Document template") +        verbose_name_plural = _(u"Document templates") +        ordering = ['associated_object_name'] + +    def __unicode__(self): +        return self.name + +    @classmethod +    def get_tuples(cls, dct={}, empty_first=True): +        dct['available'] = True +        if empty_first: +            yield ('', '--') +        items = cls.objects.filter(**dct) +        for item in items.order_by(*cls._meta.ordering).all(): +            yield (item.pk, _(unicode(item))) + +    def publish(self, c_object): +        tempdir = tempfile.mkdtemp("-ishtardocs") +        output_name = tempdir + os.path.sep + \ +            self.name.replace(' ', '_').lower() + u'-' +\ +            datetime.date.today().strftime('%Y-%m-%d') +\ +            u"." + self.template.name.split('.')[-1] +        missing = ooo_replace(self.template, output_name, c_object.get_values()) +        return output_name +  class Department(models.Model):      label = models.CharField(_(u"Label"), max_length=30)      number = models.CharField(_(u"Number"), unique=True, max_length=3) @@ -654,7 +708,8 @@ class PersonType(GeneralType):          verbose_name_plural = _(u"Person types")          ordering = ('label',) -class Person(Address, OwnPerms) : +class Person(Address, OwnPerms, ValueGetter) : +    _prefix = 'person_'      TYPE = (('Mr', _(u'Mr')),              ('Ms', _(u'Miss')),              ('Md', _(u'Mrs')), | 
