dms/evolus/models.py

88 lines
2.3 KiB
Python

"""
This module defines the structure and properties of documents.
"""
from django.db import models
from closuretree.models import ClosureModel
from simple_history.models import HistoricalRecords
from jci.models import Standard
class Audience(ClosureModel):
name = models.CharField(max_length=50)
parent = models.ForeignKey('self', related_name='children', null=True, blank=True)
def __str__(self):
return self.name
class Meta:
ordering = ('name',)
class Site(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Meta:
ordering = ['name']
class Structure(ClosureModel):
name = models.CharField(max_length=50)
acronym = models.CharField(max_length=20, null=True, blank=True)
parent = models.ForeignKey('self', related_name='children', null=True, blank=True)
def __str__(self):
return self.name
class DocumentType(models.Model):
name = models.CharField(max_length=50)
level = models.IntegerField()
template = models.FileField(upload_to='documents_templates/', null=True, blank=True)
def __str__(self):
return self.name
class Meta:
ordering = ['level']
class Document(models.Model):
audiences = models.ManyToManyField(Audience)
sites = models.ManyToManyField(Site)
standards = models.ManyToManyField(Standard, related_name='documents')
structures = models.ManyToManyField(Structure)
title = models.CharField(max_length=255)
overview = models.TextField(blank=True, null=True)
type = models.ForeignKey(DocumentType, null=True)
created_at = models.DateTimeField(auto_now_add=True)
revised_at = models.DateTimeField(null=True, blank=True)
history = HistoricalRecords()
def __str__(self):
return self.title
def update_version(self, document):
pass
def publish(self):
pass
class Version(models.Model):
document = models.ForeignKey(Document)
major = models.IntegerField()
minor = models.IntegerField()
patch = models.IntegerField()
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
unique_together = ('document', 'major', 'minor', 'patch')
def __str__(self):
return '{} v{}.{}.{}'.format(self.document, self.major, self.minor, self.patch)