server/python/django2/renkanmanager/models.py
changeset 589 0ae11aa255a3
parent 588 95536fa18d0d
child 609 854a027c80ff
equal deleted inserted replaced
588:95536fa18d0d 589:0ae11aa255a3
       
     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