src/protocols/models/core.py
changeset 142 56850f5c73f6
equal deleted inserted replaced
141:cd5e8fb64b74 142:56850f5c73f6
       
     1 import uuid
       
     2 
       
     3 from concurrency.fields import AutoIncVersionField
       
     4 from django.conf import settings
       
     5 from django.core.exceptions import ValidationError
       
     6 from django.db import models
       
     7 from django.utils.translation import ugettext_lazy as _
       
     8 
       
     9 from .managers import MetacategoryManager, ProtocolManager
       
    10 
       
    11 # Create your models here.
       
    12 
       
    13 class Protocol(models.Model):
       
    14     ext_id = models.UUIDField(
       
    15         unique=True, default=uuid.uuid4, verbose_name=_('Model|ext_id'))
       
    16     owner = models.CharField(max_length=512, verbose_name=_('Protocol|owner'))
       
    17     app = models.ForeignKey(
       
    18         settings.AUTH_USER_MODEL,
       
    19         on_delete=models.CASCADE,
       
    20         null=True,
       
    21         blank=True
       
    22     )
       
    23 
       
    24     def last_revision(self):
       
    25         return self.revisions.first()
       
    26 
       
    27     objects = ProtocolManager()
       
    28 
       
    29 
       
    30 class ProtocolRevision(models.Model):
       
    31     ext_id = models.UUIDField(
       
    32         unique=True, default=uuid.uuid4, verbose_name=_('Model|ext_id'))
       
    33     protocol = models.ForeignKey(Protocol, on_delete=models.CASCADE,
       
    34                                  related_name="revisions", verbose_name=_('ProtocolRevision|protocol'))
       
    35     version = AutoIncVersionField(verbose_name=_('Model|version'), db_index=True)
       
    36     title = models.CharField(max_length=512, null=True,
       
    37                              blank=True, verbose_name=_('ProtocolRevision|title'))
       
    38     description = models.TextField(
       
    39         null=True,
       
    40         blank=True,
       
    41         verbose_name=_('ProtocolRevision|description')
       
    42     )
       
    43     metacategories = models.ManyToManyField('protocols.MetacategoryRevision', related_name="protocols")
       
    44 
       
    45     class Meta:
       
    46         ordering = ['-version',]
       
    47 
       
    48 class Metacategory(models.Model):
       
    49 
       
    50     objects = MetacategoryManager()
       
    51 
       
    52     ext_id = models.UUIDField(
       
    53         unique=True, default=uuid.uuid4, verbose_name=_('Model|ext_id'))
       
    54     app = models.ForeignKey(
       
    55         settings.AUTH_USER_MODEL,
       
    56         on_delete=models.SET_NULL,
       
    57         null=True,
       
    58         blank=True
       
    59     )
       
    60     label = models.CharField(max_length=512, verbose_name=_('Metacategory|label'))
       
    61     title = models.CharField(max_length=512, verbose_name=_('Metacategory|title'))
       
    62     description = models.TextField(
       
    63         null=True,
       
    64         blank=True,
       
    65         verbose_name=_('Metacategory|description')
       
    66     )
       
    67     color = models.CharField(max_length=18, verbose_name=_('Metacategory|color'))
       
    68     has_comment = models.BooleanField()
       
    69     is_default = models.BooleanField()
       
    70 
       
    71     def last_revision(self):
       
    72         return self.revisions.first()
       
    73 
       
    74 
       
    75 
       
    76 class MetacategoryRevision(models.Model):
       
    77     ext_id = models.UUIDField(
       
    78         unique=True, default=uuid.uuid4, verbose_name=_('Model|ext_id'))
       
    79     version = AutoIncVersionField(verbose_name=_('Model|version'), db_index=True)
       
    80     # protocol = models.ForeignKey(ProtocolRevision, on_delete=models.CASCADE)
       
    81     base = models.ForeignKey(Metacategory, on_delete=models.CASCADE,
       
    82                              related_name="revisions", verbose_name=_('MetacategoryRevision|base'))
       
    83     label = models.CharField(max_length=512, verbose_name=_('Metacategory|label'))
       
    84     title = models.CharField(max_length=512, verbose_name=_('Metacategory|title'))
       
    85     description = models.TextField(
       
    86         null=True,
       
    87         blank=True,
       
    88         verbose_name=_('Metacategory|description')
       
    89     )
       
    90     color = models.CharField(max_length=18, verbose_name=_('Metacategory|color'))
       
    91     has_comment = models.BooleanField()
       
    92 
       
    93     class Meta:
       
    94         ordering = ['-version',]