src/protocols/models/core.py
author ymh <ymh.work@gmail.com>
Wed, 18 Jul 2018 17:32:09 +0200
changeset 142 56850f5c73f6
permissions -rw-r--r--
- upgrade libraries - python 3.7 compatibility - First protocol management implementation

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',]