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