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