|
1 ''' |
|
2 Created on Jul 17, 2014 |
|
3 Reworked in December, 2015 |
|
4 |
|
5 @author: tc, nd |
|
6 ''' |
|
7 import uuid |
|
8 |
|
9 from django.conf import settings |
|
10 from django.db import models |
|
11 from django.http import Http404 |
|
12 |
|
13 |
|
14 auth_user_model = getattr(settings, 'AUTH_USER_MODEL', 'auth.User') |
|
15 |
|
16 class Workspace(models.Model): |
|
17 |
|
18 workspace_guid = models.CharField(max_length=1024, default=uuid.uuid4, unique=True, blank=False, null=False) # typically UUID |
|
19 title = models.CharField(max_length=1024, null=True) |
|
20 creator = models.ForeignKey(auth_user_model, blank=True, null=True, related_name="workspace_creator") |
|
21 creation_date = models.DateTimeField(auto_now_add=True) |
|
22 |
|
23 @property |
|
24 def renkan_count(self): |
|
25 return Renkan.objects.filter(workspace_guid=self.workspace_guid).count() |
|
26 |
|
27 class Meta: |
|
28 app_label = 'renkanmanager' |
|
29 permissions = ( |
|
30 ('view_workspace', 'Can view workspace'), |
|
31 ) |
|
32 |
|
33 class Renkan(models.Model): |
|
34 |
|
35 renkan_guid = models.CharField(max_length=256, default=uuid.uuid4, unique=True, blank=False, null=False) # typically UUID |
|
36 workspace_guid = models.CharField(max_length=256, blank=True, null=True) |
|
37 current_revision_guid = models.CharField(max_length=256, blank=True, null=True) |
|
38 source_revision_guid = models.CharField(max_length=256, blank=True, null=True) |
|
39 creator = models.ForeignKey(auth_user_model, blank=True, null=True, related_name="renkan_creator") |
|
40 creation_date = models.DateTimeField(auto_now_add=True) |
|
41 state = models.IntegerField(default=1) |
|
42 |
|
43 @property |
|
44 def revision_count(self): |
|
45 return Revision.objects.filter(parent_renkan_guid=self.renkan_guid).count() |
|
46 |
|
47 @property |
|
48 def is_copy(self): |
|
49 return bool(self.source_revision_guid) |
|
50 |
|
51 # Current revision title |
|
52 @property |
|
53 def title(self): |
|
54 current_revision = Revision.objects.get(revision_guid = self.current_revision_guid) |
|
55 return current_revision.title |
|
56 |
|
57 # Current revision content |
|
58 @property |
|
59 def content(self): |
|
60 current_revision = Revision.objects.get(revision_guid = self.current_revision_guid) |
|
61 return current_revision.content |
|
62 |
|
63 class Meta: |
|
64 app_label = 'renkanmanager' |
|
65 permissions = ( |
|
66 ('view_renkan', 'Can view renkan'), |
|
67 ) |
|
68 |
|
69 class Revision(models.Model): |
|
70 |
|
71 revision_guid = models.CharField(max_length=256, default=uuid.uuid4, unique=True) # typically UUID |
|
72 parent_renkan_guid = models.CharField(max_length=256) |
|
73 title = models.CharField(max_length=1024, null=True, blank=True) |
|
74 content = models.TextField(blank=True, null=True) |
|
75 creator = models.ForeignKey(auth_user_model, blank=True, null=True, related_name="revision_creator") |
|
76 last_updated_by = models.ForeignKey(auth_user_model, blank=True, null=True, related_name="revision_last_updated_by") |
|
77 creation_date = models.DateTimeField(auto_now_add=True) |
|
78 modification_date = models.DateTimeField(auto_now=True) |
|
79 |
|
80 @property |
|
81 def is_current_revision(self): |
|
82 try: |
|
83 parent_project = Renkan.objects.get(renkan_guid=self.parent_renkan_guid) |
|
84 except Renkan.DoesNotExist: # SHOULD NOT HAPPEN! |
|
85 raise Http404 |
|
86 return parent_project.current_revision_guid == self.revision_guid |
|
87 |
|
88 class Meta: |
|
89 app_label = 'renkanmanager' |
|
90 permissions = ( |
|
91 ('view_revision', 'Can view revision'), |
|
92 ) |
|
93 |