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')), |