src/protocols/models/core.py
changeset 142 56850f5c73f6
--- /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',]