Refactor blank, null and verbose names, review related fields

remotes/origin/enhancement/email-actions
Andrés Moya 2013-04-16 18:31:34 +02:00
parent 93daf68420
commit 30ec03b196
5 changed files with 400 additions and 249 deletions

View File

@ -21,11 +21,11 @@ def attach_uuid(sender, instance, **kwargs):
fields = sender._meta.init_name_map()
#fields = sender._meta.get_all_field_names()
if "modified_date" in fields:
if 'modified_date' in fields:
instance.modified_date = now()
# if sender class does not have uuid field.
if "uuid" in fields:
if 'uuid' in fields:
if not instance.uuid:
instance.uuid = unicode(uuid.uuid1())
@ -46,21 +46,31 @@ def attach_unique_reference(sender, instance, **kwargs):
class User(AbstractUser):
color = models.CharField(max_length=9)
description = models.TextField(blank=True)
photo = models.FileField(upload_to="files/msg", max_length=500, null=True, blank=True)
default_language = models.CharField(max_length=20, null=True, blank=True, default=None)
default_timezone = models.CharField(max_length=20, null=True, blank=True, default=None)
token = models.CharField(max_length=200, unique=True, null=True, blank=True, default=None)
colorize_tags = models.BooleanField(default=False)
color = models.CharField(max_length=9, null=False, blank=False,
verbose_name=_('color'))
description = models.TextField(null=False, blank=True,
verbose_name=_('description'))
photo = models.FileField(upload_to='files/msg', max_length=500, null=True, blank=True,
verbose_name=_('photo'))
default_language = models.CharField(max_length=20, null=False, blank=True, default='',
verbose_name=_('default language'))
default_timezone = models.CharField(max_length=20, null=False, blank=True, default='',
verbose_name=_('default timezone'))
token = models.CharField(max_length=200, unique=True, null=False, blank=True, default='',
verbose_name=_('token'))
colorize_tags = models.BooleanField(null=False, blank=True, default=False,
verbose_name=_('colorize tags'))
objects = UserManager()
class Role(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=250, unique=True, blank=True)
name = models.CharField(max_length=200, null=False, blank=False,
verbose_name=_('name'))
slug = models.SlugField(max_length=250, unique=True, null=False, blank=True,
verbose_name=_('slug'))
permissions = models.ManyToManyField('auth.Permission',
verbose_name=_('permissions'), blank=True)
related_name='roles')
verbose_name=_('permissions'))
class Meta:
verbose_name = u'role'

View File

@ -6,19 +6,27 @@ from greenmine.base.fields import DictField
class Document(models.Model):
slug = models.SlugField(unique=True, max_length=200, blank=True)
title = models.CharField(max_length=150)
description = models.TextField(blank=True)
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now_add=True)
project = models.ForeignKey('scrum.Project', related_name='documents')
owner = models.ForeignKey('base.User', related_name='documents')
attached_file = models.FileField(upload_to="documents", max_length=1000,
null=True, blank=True)
tags = DictField()
slug = models.SlugField(unique=True, max_length=200, null=False, blank=True,
verbose_name=_('slug'))
title = models.CharField(max_length=150, null=False, blank=False,
verbose_name=_('title'))
description = models.TextField(null=False, blank=True,
verbose_name=_('description'))
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('created date'))
modified_date = models.DateTimeField(auto_now=True, null=False, blank=False,
verbose_name=_('modified date'))
project = models.ForeignKey('scrum.Project', null=False, blank=False,
related_name='documents',
verbose_name=_('project'))
owner = models.ForeignKey('base.User', null=False, blank=False,
related_name='owned_documents',
verbose_name=_('owner'))
attached_file = models.FileField(max_length=1000, null=True, blank=True,
upload_to='documents',
verbose_name=_('attached_file'))
tags = DictField(null=False, blank=True,
verbose_name=_('tags'))
class Meta:
verbose_name = u'document'

View File

@ -5,26 +5,36 @@ from greenmine.base.fields import DictField
class Question(models.Model):
subject = models.CharField(max_length=150)
slug = models.SlugField(unique=True, max_length=250, blank=True)
content = models.TextField(blank=True)
closed = models.BooleanField(default=False)
attached_file = models.FileField(upload_to="messages", max_length=500,
null=True, blank=True)
project = models.ForeignKey('scrum.Project', related_name='questions')
milestone = models.ForeignKey('scrum.Milestone', related_name='questions',
null=True, default=None, blank=True)
assigned_to = models.ForeignKey("base.User")
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey('base.User', related_name='questions')
watchers = models.ManyToManyField('base.User',
related_name='question_watch', null=True,
blank=True)
tags = DictField()
subject = models.CharField(max_length=150, null=False, blank=False,
verbose_name=_('subject'))
slug = models.SlugField(unique=True, max_length=250, null=False, blank=True,
verbose_name=_('slug'))
content = models.TextField(null=False, blank=True,
verbose_name=_('content'))
closed = models.BooleanField(default=False, null=False, blank=True,
verbose_name=_('closed'))
attached_file = models.FileField(max_length=500, null=True, blank=True,
upload_to='messages',
verbose_name=_('attached_file'))
project = models.ForeignKey('scrum.Project', null=False, blank=False,
related_name='questions')
milestone = models.ForeignKey('scrum.Milestone', null=True, blank=True, default=None,
related_name='questions',
verbose_name=_('milestone'))
assigned_to = models.ForeignKey('base.User', null=False, blank=False,
related_name='questions_assigned_to_me',
verbose_name=_('assigned_to'))
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('created date'))
modified_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('modified date'))
owner = models.ForeignKey('base.User', null=False, blank=False,
related_name='owned_questions')
watchers = models.ManyToManyField('base.User', null=True, blank=True,
related_name='watched_questions',
verbose_name=_('watchers'))
tags = DictField(null=False, blank=True,
verbose_name=_('tags'))
class Meta:
verbose_name = u'question'
@ -45,15 +55,22 @@ class Question(models.Model):
class QuestionResponse(models.Model):
content = models.TextField()
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now_add=True)
attached_file = models.FileField(upload_to="messages", max_length=500,
null=True, blank=True)
question = models.ForeignKey('Question', related_name='responses')
owner = models.ForeignKey('base.User', related_name='questions_responses')
tags = DictField()
content = models.TextField(null=False, blank=False,
verbose_name=_('content'))
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('created date'))
modified_date = models.DateTimeField(auto_now=True, null=False, blank=False,
verbose_name=_('modified date'))
attached_file = models.FileField(max_length=500, null=True, blank=True,
upload_to='messages',
verbose_name=_('attached file'))
question = models.ForeignKey('Question', null=False, blank=False,
related_name='responses',
verbose_name=_('question'))
owner = models.ForeignKey('base.User', null=False, blank=False,
related_name='question_responses')
tags = DictField(null=False, blank=True,
verbose_name=_('tags'))
class Meta:
verbose_name = u'question response'

View File

@ -17,9 +17,13 @@ from greenmine.scrum.choices import (ISSUESTATUSES, TASKSTATUSES, USSTATUSES,
class Severity(models.Model):
name = models.CharField(max_length=255)
order = models.IntegerField(default=10)
project = models.ForeignKey("Project", related_name="severities")
name = models.CharField(max_length=255, null=False, blank=False,
verbose_name=_('name'))
order = models.IntegerField(default=10, null=False, blank=False,
verbose_name=_('order'))
project = models.ForeignKey('Project', null=False, blank=False,
related_name='severities',
verbose_name=_('project'))
class Meta:
verbose_name = u'severity'
@ -28,14 +32,19 @@ class Severity(models.Model):
unique_together = ('project', 'name')
def __unicode__(self):
return u"project {0} - {1}".format(self.project_id, self.name)
return u'project {0} - {1}'.format(self.project_id, self.name)
class IssueStatus(models.Model):
name = models.CharField(max_length=255)
order = models.IntegerField(default=10)
is_closed = models.BooleanField(default=False)
project = models.ForeignKey("Project", related_name="issuestatuses")
name = models.CharField(max_length=255, null=False, blank=False,
verbose_name=_('name'))
order = models.IntegerField(default=10, null=False, blank=False,
verbose_name=_('order'))
is_closed = models.BooleanField(default=False, null=False, blank=True,
verbose_name=_('is closed'))
project = models.ForeignKey('Project', null=False, blank=False,
related_name='issue_statuses',
verbose_name=_('project'))
class Meta:
verbose_name = u'issue status'
@ -44,15 +53,21 @@ class IssueStatus(models.Model):
unique_together = ('project', 'name')
def __unicode__(self):
return u"project {0} - {1}".format(self.project_id, self.name)
return u'project {0} - {1}'.format(self.project_id, self.name)
class TaskStatus(models.Model):
name = models.CharField(max_length=255)
order = models.IntegerField(default=10)
is_closed = models.BooleanField(default=False)
color = models.CharField(max_length=20, default="#999999")
project = models.ForeignKey("Project", related_name="taskstatuses")
name = models.CharField(max_length=255, null=False, blank=False,
verbose_name=_('name'))
order = models.IntegerField(default=10, null=False, blank=False,
verbose_name=_('order'))
is_closed = models.BooleanField(default=False, null=False, blank=True,
verbose_name=_('is closed'))
color = models.CharField(max_length=20, null=False, blank=False, default='#999999',
verbose_name=_('color'))
project = models.ForeignKey('Project', null=False, blank=False,
related_name='task_statuses',
verbose_name=_('project'))
class Meta:
verbose_name = u'task status'
@ -61,14 +76,19 @@ class TaskStatus(models.Model):
unique_together = ('project', 'name')
def __unicode__(self):
return u"project {0} - {1}".format(self.project_id, self.name)
return u'project {0} - {1}'.format(self.project_id, self.name)
class UserStoryStatus(models.Model):
name = models.CharField(max_length=255)
order = models.IntegerField(default=10)
is_closed = models.BooleanField(default=False)
project = models.ForeignKey("Project", related_name="usstatuses")
name = models.CharField(max_length=255, null=False, blank=False,
verbose_name=_('name'))
order = models.IntegerField(default=10, null=False, blank=False,
verbose_name=_('order'))
is_closed = models.BooleanField(default=False, null=False, blank=True,
verbose_name=_('is closed'))
project = models.ForeignKey('Project', null=False, blank=False,
related_name='us_statuses',
verbose_name=_('project'))
class Meta:
verbose_name = u'user story status'
@ -77,13 +97,17 @@ class UserStoryStatus(models.Model):
unique_together = ('project', 'name')
def __unicode__(self):
return u"project {0} - {1}".format(self.project_id, self.name)
return u'project {0} - {1}'.format(self.project_id, self.name)
class Priority(models.Model):
name = models.CharField(max_length=255)
order = models.IntegerField(default=10)
project = models.ForeignKey("Project", related_name="priorities")
name = models.CharField(max_length=255, null=False, blank=False,
verbose_name=_('name'))
order = models.IntegerField(default=10, null=False, blank=False,
verbose_name=_('order'))
project = models.ForeignKey('Project', null=False, blank=False,
related_name='priorities',
verbose_name=_('project'))
class Meta:
verbose_name = u'priority'
@ -92,14 +116,17 @@ class Priority(models.Model):
unique_together = ('project', 'name')
def __unicode__(self):
return u"project {0} - {1}".format(self.project_id, self.name)
return u'project {0} - {1}'.format(self.project_id, self.name)
class IssueType(models.Model):
name = models.CharField(max_length=255)
order = models.IntegerField(default=10)
project = models.ForeignKey("Project", related_name="issuetypes")
name = models.CharField(max_length=255, null=False, blank=False,
verbose_name=_('name'))
order = models.IntegerField(default=10, null=False, blank=False,
verbose_name=_('order'))
project = models.ForeignKey('Project', null=False, blank=False,
related_name='issue_types',
verbose_name=_('project'))
class Meta:
verbose_name = u'issue type'
@ -108,14 +135,17 @@ class IssueType(models.Model):
unique_together = ('project', 'name')
def __unicode__(self):
return u"project {0} - {1}".format(self.project_id, self.name)
return u'project {0} - {1}'.format(self.project_id, self.name)
class Points(models.Model):
name = models.CharField(max_length=255)
order = models.IntegerField(default=10)
project = models.ForeignKey("Project", related_name="points")
name = models.CharField(max_length=255, null=False, blank=False,
verbose_name=_('name'))
order = models.IntegerField(default=10, null=False, blank=False,
verbose_name=_('order'))
project = models.ForeignKey('Project', null=False, blank=False,
related_name='points',
verbose_name=_('project'))
class Meta:
verbose_name = u'point'
@ -124,38 +154,50 @@ class Points(models.Model):
unique_together = ('project', 'name')
def __unicode__(self):
return u"project {0} - {1}".format(self.project_id, self.name)
return u'project {0} - {1}'.format(self.project_id, self.name)
class Membership(models.Model):
user = models.ForeignKey("base.User")
project = models.ForeignKey("Project")
role = models.ForeignKey("base.Role")
user = models.ForeignKey('base.User', null=False, blank=False)
project = models.ForeignKey('Project', null=False, blank=False)
role = models.ForeignKey('base.Role', null=False, blank=False)
class Meta:
unique_together = ('user', 'project')
class Project(models.Model):
uuid = models.CharField(max_length=40, unique=True, blank=True)
name = models.CharField(max_length=250, unique=True)
slug = models.SlugField(max_length=250, unique=True, blank=True)
description = models.TextField(blank=False)
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now_add=True, auto_now=True)
owner = models.ForeignKey("base.User", related_name="owned_projects", blank=True)
members = models.ManyToManyField("base.User", related_name="projects", through='Membership')
public = models.BooleanField(default=True)
last_us_ref = models.BigIntegerField(null=True, default=1)
last_task_ref = models.BigIntegerField(null=True, default=1)
last_issue_ref = models.BigIntegerField(null=True, default=1)
sprints = models.IntegerField(default=1, blank=True, null=True)
total_story_points = models.FloatField(default=None, null=True)
tags = PickledObjectField()
uuid = models.CharField(max_length=40, unique=True, null=False, blank=True,
verbose_name=_('uuid'))
name = models.CharField(max_length=250, unique=True, null=False, blank=False,
verbose_name=_('name'))
slug = models.SlugField(max_length=250, unique=True, null=False, blank=True,
verbose_name=_('slug'))
description = models.TextField(null=False, blank=False,
verbose_name=_('description'))
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('created date'))
modified_date = models.DateTimeField(auto_now=True, null=False, blank=False,
verbose_name=_('modified date'))
owner = models.ForeignKey('base.User', null=False, blank=True,
related_name='owned_projects',
verbose_name=_('owner'))
members = models.ManyToManyField('base.User', related_name='projects', through='Membership',
verbose_name=_('members'))
public = models.BooleanField(default=True, null=False, blank=True,
verbose_name=_('public'))
last_us_ref = models.BigIntegerField(null=True, blank=False, default=1,
verbose_name=_('last us ref'))
last_task_ref = models.BigIntegerField(null=True, blank=False, default=1,
verbose_name=_('last task ref'))
last_issue_ref = models.BigIntegerField(null=True, blank=False, default=1,
verbose_name=_('last issue ref'))
sprints = models.IntegerField(default=1, null=True, blank=True,
verbose_name=_('number of sprints'))
total_story_points = models.FloatField(default=None, null=True, blank=False,
verbose_name=_('total story points'))
tags = PickledObjectField(null=False, blank=True,
verbose_name=_('tags'))
class Meta:
verbose_name = u'project'
@ -171,7 +213,7 @@ class Project(models.Model):
return self.name
def __repr__(self):
return u"<Project {0}>".format(self.id)
return u'<Project {0}>'.format(self.id)
def save(self, *args, **kwargs):
if not self.slug:
@ -181,22 +223,32 @@ class Project(models.Model):
class Milestone(models.Model):
uuid = models.CharField(max_length=40, unique=True, blank=True)
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=250, unique=True, blank=True)
owner = models.ForeignKey('base.User', related_name="milestones",
null=True, blank=True)
project = models.ForeignKey('Project', related_name="milestones")
estimated_start = models.DateField(null=True, default=None)
estimated_finish = models.DateField(null=True, default=None)
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now_add=True, auto_now=True)
closed = models.BooleanField(default=False)
disponibility = models.FloatField(null=True, default=0.0)
order = models.PositiveSmallIntegerField("Order", default=1)
uuid = models.CharField(max_length=40, unique=True, null=False, blank=True,
verbose_name=_('uuid'))
name = models.CharField(max_length=200, db_index=True, null=False, blank=False,
verbose_name=_('name'))
slug = models.SlugField(max_length=250, unique=True, null=False, blank=True,
verbose_name=_('slug'))
owner = models.ForeignKey('base.User', null=True, blank=False,
related_name='owned_milestones',
verbose_name=_('owner'))
project = models.ForeignKey('Project', null=False, blank=False,
related_name='milestones',
verbose_name=_('project'))
estimated_start = models.DateField(null=True, blank=True, default=None,
verbose_name=_('estimated start'))
estimated_finish = models.DateField(null=True, blank=True, default=None,
verbose_name=_('estimated finish'))
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('created date'))
modified_date = models.DateTimeField(auto_now=True, null=False, blank=False,
verbose_name=_('modified date'))
closed = models.BooleanField(default=False, null=False, blank=True,
verbose_name=_('is closed'))
disponibility = models.FloatField(default=0.0, null=True, blank=True,
verbose_name=_('disponibility'))
order = models.PositiveSmallIntegerField('Order', default=1, null=False, blank=False,
verbose_name=_('order'))
class Meta:
verbose_name = u'milestone'
@ -211,7 +263,7 @@ class Milestone(models.Model):
return self.name
def __repr__(self):
return u"<Milestone {0}>".format(self.id)
return u'<Milestone {0}>'.format(self.id)
def save(self, *args, **kwargs):
if not self.slug:
@ -221,31 +273,46 @@ class Milestone(models.Model):
class UserStory(models.Model):
uuid = models.CharField(max_length=40, unique=True, blank=True)
ref = models.BigIntegerField(db_index=True, null=True, default=None, blank=True)
milestone = models.ForeignKey("Milestone", blank=True,
related_name="user_stories", null=True,
default=None)
project = models.ForeignKey("Project", related_name="user_stories")
owner = models.ForeignKey("base.User", blank=True, null=True,
related_name="user_stories")
status = models.ForeignKey("UserStoryStatus", related_name="userstories")
points = models.ForeignKey("Points", related_name="userstories")
order = models.PositiveSmallIntegerField(default=100)
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now_add=True, auto_now=True)
finish_date = models.DateTimeField(null=True, blank=True)
subject = models.CharField(max_length=500)
description = models.TextField()
watchers = models.ManyToManyField('base.User', related_name='us_watch', null=True)
client_requirement = models.BooleanField(default=False)
team_requirement = models.BooleanField(default=False)
tags = PickledObjectField()
uuid = models.CharField(max_length=40, unique=True, null=False, blank=True,
verbose_name=_('uuid'))
ref = models.BigIntegerField(db_index=True, null=True, blank=True, default=None,
verbose_name=_('ref'))
milestone = models.ForeignKey('Milestone', null=True, blank=True, default=None,
related_name='user_stories',
verbose_name=_('milestone'))
project = models.ForeignKey('Project', null=False, blank=False,
related_name='user_stories',
verbose_name=_('project'))
owner = models.ForeignKey('base.User', null=True, blank=True,
related_name='owned_user_stories',
verbose_name=_('owner'))
status = models.ForeignKey('UserStoryStatus', null=False, blank=False,
related_name='user_stories',
verbose_name=_('status'))
points = models.ForeignKey('Points', null=False, blank=False,
related_name='userstories',
verbose_name=_('points'))
order = models.PositiveSmallIntegerField(null=False, blank=False, default=100,
verbose_name=_('order'))
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('created date'))
modified_date = models.DateTimeField(auto_now=True, null=False, blank=False,
verbose_name=_('modified date'))
finish_date = models.DateTimeField(null=True, blank=True,
verbose_name=_('finish date'))
subject = models.CharField(max_length=500, null=False, blank=False,
verbose_name=_('subject'))
description = models.TextField(null=False, blank=True,
verbose_name=_('description'))
watchers = models.ManyToManyField('base.User', null=True, blank=True,
related_name='watched_us',
verbose_name=_('watchers'))
client_requirement = models.BooleanField(default=False, null=False, blank=True,
verbose_name=_('is client requirement'))
team_requirement = models.BooleanField(default=False, null=False, blank=True,
verbose_name=_('is team requirement'))
tags = PickledObjectField(null=False, blank=True,
verbose_name=_('tags'))
class Meta:
verbose_name = u'user story'
@ -261,10 +328,10 @@ class UserStory(models.Model):
)
def __unicode__(self):
return u"({1}) {0}".format(self.ref, self.subject)
return u'({1}) {0}'.format(self.ref, self.subject)
def __repr__(self):
return u"<UserStory %s>" % (self.id)
return u'<UserStory %s>' % (self.id)
@property
def is_closed(self):
@ -272,16 +339,24 @@ class UserStory(models.Model):
class Attachment(models.Model):
owner = models.ForeignKey("base.User", related_name="change_attachments")
project = models.ForeignKey("Project", related_name="attachments")
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
owner = models.ForeignKey('base.User', null=False, blank=False,
related_name='change_attachments',
verbose_name=_('owner'))
project = models.ForeignKey('Project', null=False, blank=False,
related_name='attachments',
verbose_name=_('project'))
content_type = models.ForeignKey(ContentType, null=False, blank=False,
verbose_name=_('content type'))
object_id = models.PositiveIntegerField(null=False, blank=False,
verbose_name=_('object id'))
content_object = generic.GenericForeignKey('content_type', 'object_id')
created_date = models.DateTimeField(auto_now_add=True)
attached_file = models.FileField(upload_to="files/msg", max_length=500,
null=True, blank=True)
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('created date'))
modified_date = models.DateTimeField(auto_now=True, null=False, blank=False,
verbose_name=_('modified date'))
attached_file = models.FileField(max_length=500, null=True, blank=True,
upload_to='files/msg',
verbose_name=_('attached file'))
class Meta:
verbose_name = u'attachment'
@ -293,37 +368,51 @@ class Attachment(models.Model):
self.content_type, self.object_id, self.id
)
class Task(models.Model):
uuid = models.CharField(max_length=40, unique=True, blank=True)
user_story = models.ForeignKey('UserStory', related_name='tasks')
ref = models.BigIntegerField(db_index=True, null=True, default=None)
owner = models.ForeignKey("base.User", null=True, default=None,
related_name="tasks")
status = models.ForeignKey("TaskStatus", related_name="tasks")
severity = models.ForeignKey("Severity", related_name="tasks")
priority = models.ForeignKey("Priority", related_name="tasks")
status = models.ForeignKey("TaskStatus", related_name="tasks")
milestone = models.ForeignKey('Milestone', related_name='tasks', null=True,
default=None, blank=True)
project = models.ForeignKey('Project', related_name='tasks')
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now_add=True)
finished_date = models.DateTimeField(null=True, blank=True)
subject = models.CharField(max_length=500)
description = models.TextField(blank=True)
assigned_to = models.ForeignKey('base.User',
related_name='user_storys_assigned_to_me',
blank=True, null=True, default=None)
watchers = models.ManyToManyField('base.User', related_name='task_watch',
null=True)
tags = PickledObjectField()
uuid = models.CharField(max_length=40, unique=True, null=False, blank=True,
verbose_name=_('uuid'))
user_story = models.ForeignKey('UserStory', null=False, blank=False,
related_name='tasks',
verbose_name=_('user story'))
ref = models.BigIntegerField(db_index=True, null=True, blank=True, default=None,
verbose_name=_('ref'))
owner = models.ForeignKey('base.User', null=True, blank=True, default=None,
related_name='owned_tasks',
verbose_name=_('owner'))
severity = models.ForeignKey('Severity', null=False, blank=False,
related_name='tasks',
verbose_name=_('severity'))
priority = models.ForeignKey('Priority', null=False, blank=False,
related_name='tasks',
verbose_name=_('priority'))
status = models.ForeignKey('TaskStatus', null=False, blank=False,
related_name='tasks',
verbose_name=_('status'))
milestone = models.ForeignKey('Milestone', null=True, blank=True, default=None,
related_name='tasks',
verbose_name=_('milestone'))
project = models.ForeignKey('Project', null=False, blank=False,
related_name='tasks',
verbose_name=_('project'))
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('created date'))
modified_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('modified date'))
finished_date = models.DateTimeField(null=True, blank=True,
verbose_name=_('finished date'))
subject = models.CharField(max_length=500, null=False, blank=False,
verbose_name=_('subject'))
description = models.TextField(null=False, blank=True,
verbose_name=_('description'))
assigned_to = models.ForeignKey('base.User', blank=True, null=True, default=None,
related_name='user_storys_assigned_to_me',
verbose_name=_('assigned to'))
watchers = models.ManyToManyField('base.User', null=True, blank=True,
related_name='watched_tasks',
verbose_name=_('watchers'))
tags = PickledObjectField(null=False, blank=True,
verbose_name=_('tags'))
class Meta:
verbose_name = u'task'
@ -342,48 +431,62 @@ class Task(models.Model):
)
def __unicode__(self):
return u"({1}) {0}".format(self.ref, self.subject)
return u'({1}) {0}'.format(self.ref, self.subject)
def save(self, *args, **kwargs):
if self.id:
self.modified_date = timezone.now()
if not self.ref:
self.ref = ref_uniquely(self.project, "last_task_ref", self.__class__)
self.ref = ref_uniquely(self.project, 'last_task_ref', self.__class__)
super(Task, self).save(*args, **kwargs)
class Issue(models.Model):
uuid = models.CharField(max_length=40, unique=True, blank=True)
ref = models.BigIntegerField(db_index=True, null=True, default=None)
owner = models.ForeignKey("base.User", null=True, default=None,
related_name="issues")
status = models.ForeignKey("IssueStatus", related_name="issues")
severity = models.ForeignKey("Severity", related_name="issues")
priority = models.ForeignKey("Priority", related_name="issues")
type = models.ForeignKey("IssueType", related_name="issues")
milestone = models.ForeignKey('Milestone', related_name='issues', null=True,
default=None, blank=True)
project = models.ForeignKey('Project', related_name='issues')
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now_add=True)
finished_date = models.DateTimeField(null=True, blank=True)
subject = models.CharField(max_length=500)
description = models.TextField(blank=True)
assigned_to = models.ForeignKey('base.User',
related_name='issues_assigned_to_me',
blank=True, null=True, default=None)
watchers = models.ManyToManyField('base.User', related_name='issue_watch',
null=True)
tags = PickledObjectField()
uuid = models.CharField(max_length=40, unique=True, null=False, blank=True,
verbose_name=_('uuid'))
ref = models.BigIntegerField(db_index=True, null=True, blank=True, default=None,
verbose_name=_('ref'))
owner = models.ForeignKey('base.User', null=True, blank=True, default=None,
related_name='owned_issues',
verbose_name=_('owner'))
status = models.ForeignKey('IssueStatus', null=False, blank=False,
related_name='issues',
verbose_name=_('status'))
severity = models.ForeignKey('Severity', null=False, blank=False,
related_name='issues',
verbose_name=_('severity'))
priority = models.ForeignKey('Priority', null=False, blank=False,
related_name='issues',
verbose_name=_('priority'))
type = models.ForeignKey('IssueType', null=False, blank=False,
related_name='issues',
verbose_name=_('type'))
milestone = models.ForeignKey('Milestone', null=True, blank=True, default=None,
related_name='issues',
verbose_name=_('milestone'))
project = models.ForeignKey('Project', null=False, blank=False,
related_name='issues',
verbose_name=_('project'))
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('created date'))
modified_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('modified date'))
finished_date = models.DateTimeField(null=True, blank=True,
verbose_name=_('finished date'))
subject = models.CharField(max_length=500, null=False, blank=False,
verbose_name=_('subject'))
description = models.TextField(null=False, blank=True,
verbose_name=_('description'))
assigned_to = models.ForeignKey('base.User', blank=True, null=True, default=None,
related_name='issues_assigned_to_me',
verbose_name=_('assigned to'))
watchers = models.ManyToManyField('base.User', null=True, blank=True,
related_name='watched_issues',
verbose_name=_('watchers'))
tags = PickledObjectField(null=False, blank=True,
verbose_name=_('tags'))
class Meta:
verbose_name = u'issue'
@ -401,21 +504,21 @@ class Issue(models.Model):
)
def __unicode__(self):
return u"({1}) {0}".format(self.ref, self.subject)
return u'({1}) {0}'.format(self.ref, self.subject)
def save(self, *args, **kwargs):
if self.id:
self.modified_date = timezone.now()
if not self.ref:
self.ref = ref_uniquely(self.project, "last_issue_ref", self.__class__)
self.ref = ref_uniquely(self.project, 'last_issue_ref', self.__class__)
super(Issue, self).save(*args, **kwargs)
# Model related signals handlers
@receiver(models.signals.post_save, sender=Project, dispatch_uid="project_post_save")
@receiver(models.signals.post_save, sender=Project, dispatch_uid='project_post_save')
def project_post_save(sender, instance, created, **kwargs):
"""
Create all project model depences on project is
@ -451,7 +554,7 @@ def project_post_save(sender, instance, created, **kwargs):
IssueType.objects.create(project=instance, name=name, order=order)
@receiver(models.signals.pre_save, sender=UserStory, dispatch_uid="user_story_ref_handler")
@receiver(models.signals.pre_save, sender=UserStory, dispatch_uid='user_story_ref_handler')
def user_story_ref_handler(sender, instance, **kwargs):
"""
Automatically assignes a seguent reference code to a
@ -459,7 +562,7 @@ def user_story_ref_handler(sender, instance, **kwargs):
"""
if not instance.id and instance.project:
instance.ref = ref_uniquely(instance.project, "last_us_ref", instance.__class__)
instance.ref = ref_uniquely(instance.project, 'last_us_ref', instance.__class__)
# Email alerts signals handlers

View File

@ -4,16 +4,23 @@ from greenmine.base.fields import DictField
class WikiPage(models.Model):
project = models.ForeignKey('scrum.Project', related_name='wiki_pages')
slug = models.SlugField(max_length=500, db_index=True)
content = models.TextField(blank=False, null=True)
owner = models.ForeignKey("base.User", related_name="wiki_pages", null=True, blank=True)
watchers = models.ManyToManyField('base.User',
related_name='wikipage_watchers',
null=True, blank=True)
created_date = models.DateTimeField(auto_now_add=True)
project = models.ForeignKey('scrum.Project', null=False, blank=False,
related_name='wiki_pages',
verbose_name=_('project'))
slug = models.SlugField(max_length=500, db_index=True, null=False, blank=False,
verbose_name=_('slug'))
content = models.TextField(null=False, blank=True,
verbose_name=_('content'))
owner = models.ForeignKey('base.User', null=True, blank=True,
related_name='owned_wiki_pages',
verbose_name=_('owner'))
watchers = models.ManyToManyField('base.User', null=True, blank=True,
related_name='watched_wiki_pages',
verbose_name=_('watchers'))
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('created date'))
modified_date = models.DateTimeField(auto_now=True, null=False, blank=False,
verbose_name=_('modified date'))
class Meta:
verbose_name = u'wiki page'
@ -25,17 +32,23 @@ class WikiPage(models.Model):
)
def __unicode__(self):
return u"project {0} - {1}".format(self.project_id, self.subject)
return u'project {0} - {1}'.format(self.project_id, self.subject)
# TODO: why don't use scrum.Attachment?
class WikiPageAttachment(models.Model):
wikipage = models.ForeignKey('WikiPage', related_name='attachments')
owner = models.ForeignKey("base.User", related_name="wikifiles")
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now_add=True)
attached_file = models.FileField(upload_to="files/wiki", max_length=500,
null=True, blank=True)
wikipage = models.ForeignKey('WikiPage', null=False, blank=False,
related_name='attachments',
verbose_name=_('wiki page'))
owner = models.ForeignKey('base.User', null=False, blank=False,
related_name='owned_wiki_attachments',
verbose_name=_('owner'))
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_('created date'))
modified_date = models.DateTimeField(auto_now=True, null=False, blank=False,
verbose_name=_('modified date'))
attached_file = models.FileField(max_length=500, null=True, blank=True,
upload_to='files/wiki',
verbose_name=_('attached file'))
class Meta:
verbose_name = u'wiki page attachment'
@ -43,5 +56,5 @@ class WikiPageAttachment(models.Model):
ordering = ['wikipage', 'created_date']
def __unicode__(self):
return u"project {0} - page {1} - attachment {2}".format(self.wikipage.project_id, self.wikipage.subject, self.id)
return u'project {0} - page {1} - attachment {2}'.format(self.wikipage.project_id, self.wikipage.subject, self.id)