src/protocols/models/core.py
author salimr <riwad.salim@yahoo.fr>
Tue, 14 Aug 2018 20:39:55 +0200
changeset 144 8b950885ddae
parent 142 56850f5c73f6
permissions -rw-r--r--
Add local font and assets. Override Bootstrap css varriables. Add specific css files

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