Files
mayan-edms/mayan/apps/forms/models.py
Roberto Rosario 56c8e2741b Intial commit of the forms manager app
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
2019-05-22 03:37:14 -04:00

92 lines
2.7 KiB
Python

from __future__ import unicode_literals
import json
import logging
from django.core import mail
from django.db import models, transaction
from django.template import Context, Template
from django.utils.encoding import force_text, python_2_unicode_compatible
from django.utils.html import strip_tags
from django.utils.module_loading import import_string
from django.utils.translation import ugettext_lazy as _
logger = logging.getLogger(__name__)
@python_2_unicode_compatible
class FieldChoice(models.Model):
label = models.CharField(max_length=128, verbose_name=_('Label'))
dotted_path = models.CharField(
max_length=128, verbose_name=_('Dotted path')
)
class Meta:
ordering = ('label',)
verbose_name = _('Field choice')
verbose_name_plural = _('Field choices')
def __str__(self):
return self.label
class FormTemplate(models.Model):
name = models.CharField(max_length=32, verbose_name=_('Name'))
label = models.CharField(max_length=128, verbose_name=_('Label'))
enabled = models.BooleanField(default=True, verbose_name=_('Enabled'))
class Meta:
ordering = ('label',)
verbose_name = _('Form template')
verbose_name_plural = _('Form templates')
def get_fields_dictionary(self):
result = {}
for field in self.fields.all():
result[field.name] = {
'label': field.get_arguments().get('label', self.name),
'class': field.choice.dotted_path,
'kwargs': field.get_arguments(),
}
return result
class FormTemplateField(models.Model):
form_template = models.ForeignKey(
on_delete=models.CASCADE, related_name='fields', to=FormTemplate,
verbose_name=_('Form template field')
)
name = models.CharField(
max_length=128, verbose_name=_('Name')
)
choice = models.ForeignKey(
on_delete=models.CASCADE, related_name='forms', to=FieldChoice,
verbose_name=_('Choice')
)
arguments = models.TextField(
blank=True, verbose_name=_('Arguments')
)
widget = models.CharField(
blank=True, max_length=128, verbose_name=_('Widget')
)
widget_arguments = models.CharField(
blank=True, max_length=128, verbose_name=_('Widget arguments')
)
enabled = models.BooleanField(default=True, verbose_name=_('Enabled'))
class Meta:
verbose_name = _('Form template field')
verbose_name_plural = _('Form template fields')
def get_arguments(self):
return json.loads(self.arguments or '{}')
class FormInstance(models.Model):
form_template = models.ForeignKey(
on_delete=models.CASCADE, related_name='instances', to=FormTemplate,
verbose_name=_('Form template field')
)