You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

124 lines
3.4 KiB

from django.contrib.auth.models import User
from django.contrib import admin
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Profile(models.Model):
"""
eDivorce specific user information
"""
user = models.OneToOneField(User)
""" Django user """
bceid = models.CharField(max_length=100)
""" BCEID identifier for user """
def __str__(self):
return '%s\'s profile' % self.user.username
@python_2_unicode_compatible
class Question(models.Model):
"""
Questions being asked of the user, later assembled into LegalForms.
NOTE: The content and interaction of the question is defined in the
template; the name and description field here are for admin use.
"""
key = models.TextField(primary_key=True)
""" Unique question identifier """
name = models.TextField(blank=True)
""" Readable name of question (n.b., NOT content) """
description = models.TextField(blank=True)
""" Extended description (n.b., NOT content) """
class Meta:
ordering = ('key', )
def __str__(self):
return '%s: %s' % (self.key, self.name)
@python_2_unicode_compatible
class LegalForm(models.Model):
"""
A defined legal filing composed of a template and mapped response values
"""
key = models.TextField(primary_key=True)
""" Form ID (e.g., 'f1') """
name = models.TextField()
""" Full name of form (e.g., 'Notice of Joint Family Claim') """
questions = models.ManyToManyField(Question, through='FormQuestions')
""" Responses needed to complete the form, mapped through the question """
order = models.PositiveIntegerField(default=0)
""" Convenience for listing these in the admin """
class Meta:
verbose_name_plural = 'Legal Forms'
ordering = ('order', )
def __str__(self):
return '%s: %s' % (str(self.key).upper(), self.name)
@python_2_unicode_compatible
class FormQuestions(models.Model):
"""
Through class mapping questions to forms using their responses.
This is an explicitly defined through model mainly to provide an opening
for a transformational step on rendering per form. The presence of a
mapping here is for including the user's data during template rendering,
not to logically connect/require the question be present or used.
"""
legal_form = models.ForeignKey(LegalForm)
""" The LegalForm """
question = models.ForeignKey(Question)
""" The Question """
transformation = models.TextField()
""" Transformations done on the value as part of rendering it in a form """
class Meta:
verbose_name_plural = 'Form Questions'
def __str__(self):
return '%s -> %s' % (self.legal_form.key.upper(), self.question.key)
@python_2_unicode_compatible
class Response(models.Model):
"""
User input
"""
user = models.ForeignKey(User)
""" User providing response """
question = models.ForeignKey(Question)
""" Originating question """
value = models.TextField(blank=True)
""" The question's response from the user """
def __str__(self):
return '%s -> %s' % (self.user.username, self.question.key)
admin.site.register(Profile)
admin.site.register(Question)
admin.site.register(LegalForm)
admin.site.register(Response)
admin.site.register(FormQuestions)