|
|
@@ -1,95 +1,93 @@
|
|
|
-
|
|
|
-from django.contrib.auth.models import User
|
|
|
-from django.db import models
|
|
|
-from martor.models import MartorField
|
|
|
-
|
|
|
-
|
|
|
-class BaseModel(models.Model):
|
|
|
- created = models.DateTimeField(auto_now_add=True)
|
|
|
- updated = models.DateTimeField(auto_now=True)
|
|
|
- objects = models.Manager()
|
|
|
-
|
|
|
- class Meta:
|
|
|
- abstract = True
|
|
|
-
|
|
|
- def model_name(self):
|
|
|
- return self._meta.verbose_name
|
|
|
-
|
|
|
-class Project(BaseModel):
|
|
|
- class Meta:
|
|
|
- verbose_name = "projet"
|
|
|
- verbose_name_plural = "projets"
|
|
|
-
|
|
|
- name = models.CharField(max_length=200)
|
|
|
- description = models.TextField(default="", blank=True)
|
|
|
-# icon
|
|
|
- owner = models.ForeignKey(User,
|
|
|
- on_delete=models.PROTECT,
|
|
|
- null=True,
|
|
|
- related_name="projects",
|
|
|
- related_query_name="project")
|
|
|
-
|
|
|
- def __str__(self):
|
|
|
- return self.name
|
|
|
-
|
|
|
-class Epic(BaseModel):
|
|
|
- class Meta:
|
|
|
- verbose_name = "epic"
|
|
|
- verbose_name_plural = "epics"
|
|
|
- ordering = ('-value', )
|
|
|
-
|
|
|
- SIZES = (("XXS","XXS (< 1 sprints)"),
|
|
|
- ("XS", "XS (1 sprint)"),
|
|
|
- ("S", "S (1-2 sprints)"),
|
|
|
- ("M", "M (2-3 sprints)"),
|
|
|
- ("L", "L (3-4 sprints)"),
|
|
|
- ("XL", "XL (4-6 sprints)"),
|
|
|
- ("XXL", "XXL (> 6 sprints)"))
|
|
|
-
|
|
|
- name = models.CharField(max_length=200, default="")
|
|
|
- size = models.CharField(max_length=10, default="M", choices=SIZES)
|
|
|
- value = models.IntegerField(default=0)
|
|
|
- description = models.TextField(default="", blank=True)
|
|
|
- project = models.ForeignKey(Project, on_delete=models.PROTECT, null=True)
|
|
|
-
|
|
|
- def __str__(self):
|
|
|
- return self.name
|
|
|
-
|
|
|
-class Sprint(BaseModel):
|
|
|
- class Meta:
|
|
|
- verbose_name_plural = "sprint"
|
|
|
- verbose_name_plural = "sprints"
|
|
|
- ordering = ('date_start', )
|
|
|
- date_start = models.DateField()
|
|
|
- date_end = models.DateField()
|
|
|
-
|
|
|
-
|
|
|
- def __str__(self):
|
|
|
- return "Sprint #{} ({:%d/%m/%Y} > {:%d/%m/%Y})".format(self.id, self.date_start, self.date_end)
|
|
|
-
|
|
|
-class Story(BaseModel):
|
|
|
- class Meta:
|
|
|
- verbose_name = "story"
|
|
|
- verbose_name_plural = "stories"
|
|
|
- ordering = ('-updated', )
|
|
|
- epic = models.ForeignKey(Epic, on_delete=models.PROTECT, null=True)
|
|
|
- name = models.CharField(max_length=200, default="")
|
|
|
-# description = models.TextField(default="", blank=True)
|
|
|
- description = MartorField()
|
|
|
- closed = models.BooleanField(default=False)
|
|
|
- author = models.ForeignKey(User,
|
|
|
- on_delete=models.PROTECT,
|
|
|
- null=True,
|
|
|
- related_name="stories",
|
|
|
- related_query_name="story")
|
|
|
-
|
|
|
- assignees = models.ManyToManyField(User,
|
|
|
- related_name="assigned")
|
|
|
-
|
|
|
- sprints = models.ManyToManyField(Sprint,
|
|
|
- related_name="stories",
|
|
|
- related_query_name="story")
|
|
|
-
|
|
|
- def __str__(self):
|
|
|
- return self.name
|
|
|
+
|
|
|
+from django.contrib.auth.models import User
|
|
|
+from django.db import models
|
|
|
+from martor.models import MartorField
|
|
|
+
|
|
|
+
|
|
|
+class BaseModel(models.Model):
|
|
|
+ created = models.DateTimeField(auto_now_add=True)
|
|
|
+ updated = models.DateTimeField(auto_now=True)
|
|
|
+ objects = models.Manager()
|
|
|
+
|
|
|
+ class Meta:
|
|
|
+ abstract = True
|
|
|
+
|
|
|
+ def model_name(self):
|
|
|
+ return self._meta.verbose_name
|
|
|
+
|
|
|
+class Project(BaseModel):
|
|
|
+ class Meta:
|
|
|
+ verbose_name = "projet"
|
|
|
+ verbose_name_plural = "projets"
|
|
|
+
|
|
|
+ name = models.CharField(max_length=200)
|
|
|
+ description = models.TextField(default="", blank=True)
|
|
|
+# icon
|
|
|
+ owner = models.ForeignKey(User,
|
|
|
+ on_delete=models.PROTECT,
|
|
|
+ null=True,
|
|
|
+ related_name="projects",
|
|
|
+ related_query_name="project")
|
|
|
+
|
|
|
+ def __str__(self):
|
|
|
+ return self.name
|
|
|
+
|
|
|
+class Epic(BaseModel):
|
|
|
+ class Meta:
|
|
|
+ verbose_name = "epic"
|
|
|
+ verbose_name_plural = "epics"
|
|
|
+ ordering = ('-value', )
|
|
|
+
|
|
|
+ SIZES = (("XXS","XXS (< 1 sprints)"),
|
|
|
+ ("XS", "XS (1 sprint)"),
|
|
|
+ ("S", "S (1-2 sprints)"),
|
|
|
+ ("M", "M (2-3 sprints)"),
|
|
|
+ ("L", "L (3-4 sprints)"),
|
|
|
+ ("XL", "XL (4-6 sprints)"),
|
|
|
+ ("XXL", "XXL (> 6 sprints)"))
|
|
|
+
|
|
|
+ name = models.CharField(max_length=200, default="")
|
|
|
+ size = models.CharField(max_length=10, default="M", choices=SIZES)
|
|
|
+ value = models.IntegerField(default=0)
|
|
|
+ description = models.TextField(default="", blank=True)
|
|
|
+ project = models.ForeignKey(Project, on_delete=models.PROTECT, null=True)
|
|
|
+
|
|
|
+ def __str__(self):
|
|
|
+ return self.name
|
|
|
+
|
|
|
+class Sprint(BaseModel):
|
|
|
+ class Meta:
|
|
|
+ verbose_name_plural = "sprint"
|
|
|
+ verbose_name_plural = "sprints"
|
|
|
+ ordering = ('date_start', )
|
|
|
+ date_start = models.DateField()
|
|
|
+ date_end = models.DateField()
|
|
|
+
|
|
|
+ def __str__(self):
|
|
|
+ return "Sprint #{} ({:%d/%m/%Y} > {:%d/%m/%Y})".format(self.id, self.date_start, self.date_end)
|
|
|
+
|
|
|
+class Story(BaseModel):
|
|
|
+ class Meta:
|
|
|
+ verbose_name = "story"
|
|
|
+ verbose_name_plural = "stories"
|
|
|
+ ordering = ('-updated', )
|
|
|
+ epic = models.ForeignKey(Epic, on_delete=models.PROTECT, null=True)
|
|
|
+ name = models.CharField(max_length=200, default="")
|
|
|
+ description = MartorField()
|
|
|
+ closed = models.BooleanField(default=False)
|
|
|
+ author = models.ForeignKey(User,
|
|
|
+ on_delete=models.PROTECT,
|
|
|
+ null=True,
|
|
|
+ related_name="stories",
|
|
|
+ related_query_name="story")
|
|
|
+
|
|
|
+ assignees = models.ManyToManyField(User,
|
|
|
+ related_name="assigned")
|
|
|
+
|
|
|
+ sprints = models.ManyToManyField(Sprint,
|
|
|
+ related_name="stories",
|
|
|
+ related_query_name="story")
|
|
|
+
|
|
|
+ def __str__(self):
|
|
|
+ return self.name
|
|
|
|