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