Coverage for project/models/status.py: 100.00%
37 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-06-06 22:17 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-06-06 22:17 +0000
1from django.db import models
3from core.models import core as core_models
4from core.models import user as core_user_models
7class BuiltInIssueStatusManager(models.Manager):
8 def initialize_built_in_statuses(self):
9 """
10 Keep this in sync with the BuiltInIssueStatuses.IssueStatuses class.
11 """
12 built_in_issue_statuses = [
13 ('34d28f8e-dd1c-4871-938b-3ed56f960093', 'TRIAGE', 'Triage'),
14 ('86780f1e-e3a8-4869-bc6b-1e9a3111ef9f', 'OPEN', 'Open'),
15 ('4c509937-972d-470c-9589-362ba90c1268', 'READY_FOR_DEVELOPMENT', 'Ready for Development'),
16 ('332f5852-a6e1-415f-bef5-44fcd36dbfc9', 'IN_PROGRESS', 'In Progress'),
17 ('bef3f9f1-0f37-41be-b405-322731c76b16', 'RESOLVED', 'Resolved'),
18 ('24494695-c0f8-4a90-aacc-670776b40ff9', 'COMPLETE', 'Complete'),
19 ('24c03dc0-a98f-4125-a9db-51781e610444', 'CLOSED', 'Closed'),
20 ]
21 system_user = core_user_models.CoreUser.objects.get_or_create_system_user()
23 for id, name, description in built_in_issue_statuses:
24 self.create(id=id, created_by=system_user, name=name, description=description)
27class BuiltInIssueStatus(core_models.CoreModel):
28 class Meta:
29 ordering = ['name']
30 unique_together = ['name', 'description']
32 class IssueStatuses(models.TextChoices):
33 TRIAGE = 'TRIAGE', 'Triage'
34 OPEN = 'OPEN', 'Open'
35 READY_FOR_DEVELOPMENT = 'READY_FOR_DEVELOPMENT', 'Ready for Development'
36 IN_PROGRESS = 'IN_PROGRESS', 'In Progress'
37 RESOLVED = 'RESOLVED', 'Resolved'
38 COMPLETE = 'COMPLETE', 'Complete'
39 CLOSED = 'CLOSED', 'Closed'
41 objects = BuiltInIssueStatusManager()
43 name = models.CharField(max_length=255)
44 description = models.TextField(blank=True, null=True, default="")
47class CustomIssueStatusData(core_models.CoreModel):
48 class Meta:
49 ordering = ['name']
51 name = models.CharField(max_length=255)
52 description = models.TextField(blank=True, null=True, default="")
55class CustomIssueStatusActiveManager(models.Manager):
56 def get_queryset(self):
57 return super().get_queryset().filter(deleted=None)
60class CustomIssueStatus(core_models.CoreModel):
61 class Meta:
62 ordering = ['current__name']
64 active_objects = CustomIssueStatusActiveManager()
66 current = models.ForeignKey(CustomIssueStatusData, on_delete=models.CASCADE)