diff -r cd5e8fb64b74 -r 56850f5c73f6 src/protocols/models/core.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/protocols/models/core.py Wed Jul 18 17:32:09 2018 +0200 @@ -0,0 +1,94 @@ +import uuid + +from concurrency.fields import AutoIncVersionField +from django.conf import settings +from django.core.exceptions import ValidationError +from django.db import models +from django.utils.translation import ugettext_lazy as _ + +from .managers import MetacategoryManager, ProtocolManager + +# Create your models here. + +class Protocol(models.Model): + ext_id = models.UUIDField( + unique=True, default=uuid.uuid4, verbose_name=_('Model|ext_id')) + owner = models.CharField(max_length=512, verbose_name=_('Protocol|owner')) + app = models.ForeignKey( + settings.AUTH_USER_MODEL, + on_delete=models.CASCADE, + null=True, + blank=True + ) + + def last_revision(self): + return self.revisions.first() + + objects = ProtocolManager() + + +class ProtocolRevision(models.Model): + ext_id = models.UUIDField( + unique=True, default=uuid.uuid4, verbose_name=_('Model|ext_id')) + protocol = models.ForeignKey(Protocol, on_delete=models.CASCADE, + related_name="revisions", verbose_name=_('ProtocolRevision|protocol')) + version = AutoIncVersionField(verbose_name=_('Model|version'), db_index=True) + title = models.CharField(max_length=512, null=True, + blank=True, verbose_name=_('ProtocolRevision|title')) + description = models.TextField( + null=True, + blank=True, + verbose_name=_('ProtocolRevision|description') + ) + metacategories = models.ManyToManyField('protocols.MetacategoryRevision', related_name="protocols") + + class Meta: + ordering = ['-version',] + +class Metacategory(models.Model): + + objects = MetacategoryManager() + + ext_id = models.UUIDField( + unique=True, default=uuid.uuid4, verbose_name=_('Model|ext_id')) + app = models.ForeignKey( + settings.AUTH_USER_MODEL, + on_delete=models.SET_NULL, + null=True, + blank=True + ) + label = models.CharField(max_length=512, verbose_name=_('Metacategory|label')) + title = models.CharField(max_length=512, verbose_name=_('Metacategory|title')) + description = models.TextField( + null=True, + blank=True, + verbose_name=_('Metacategory|description') + ) + color = models.CharField(max_length=18, verbose_name=_('Metacategory|color')) + has_comment = models.BooleanField() + is_default = models.BooleanField() + + def last_revision(self): + return self.revisions.first() + + + +class MetacategoryRevision(models.Model): + ext_id = models.UUIDField( + unique=True, default=uuid.uuid4, verbose_name=_('Model|ext_id')) + version = AutoIncVersionField(verbose_name=_('Model|version'), db_index=True) + # protocol = models.ForeignKey(ProtocolRevision, on_delete=models.CASCADE) + base = models.ForeignKey(Metacategory, on_delete=models.CASCADE, + related_name="revisions", verbose_name=_('MetacategoryRevision|base')) + label = models.CharField(max_length=512, verbose_name=_('Metacategory|label')) + title = models.CharField(max_length=512, verbose_name=_('Metacategory|title')) + description = models.TextField( + null=True, + blank=True, + verbose_name=_('Metacategory|description') + ) + color = models.CharField(max_length=18, verbose_name=_('Metacategory|color')) + has_comment = models.BooleanField() + + class Meta: + ordering = ['-version',]