New Features: - Add `Priority` enum and `priority` field to `Card` model. - Add `TicketComment` model and `TicketCommentCreateView` with inline comment support. - Introduce templatetag filters `add_class`, `field_type`, and `render_markdown`. Enhancements: - Extend `CustomUser.is_admin()` to recognise superusers. - Populate `KanbanConfig.ready()` to import signals for proper initialization. - Expand ticket views and URLs to include assignee, priority, and comment handling. Bug Fixes: - None.
37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
from django.contrib.auth.models import AbstractUser
|
|
from django.db import models
|
|
|
|
|
|
class CustomUser(AbstractUser):
|
|
class Role(models.TextChoices):
|
|
ADMIN = "admin", "Admin"
|
|
CLIENT = "client", "Client"
|
|
MEMBER = "member", "Team Member"
|
|
|
|
role = models.CharField(max_length=20, choices=Role.choices, default=Role.MEMBER)
|
|
|
|
class Meta:
|
|
ordering = ["username"]
|
|
verbose_name_plural = "users"
|
|
|
|
def is_admin(self):
|
|
return self.role == self.Role.ADMIN or self.is_superuser
|
|
|
|
def is_client(self):
|
|
return self.role == self.Role.CLIENT
|
|
|
|
def is_member(self):
|
|
return self.role == self.Role.MEMBER
|
|
|
|
|
|
class ProjectMembership(models.Model):
|
|
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name="memberships")
|
|
project = models.ForeignKey("projects.Project", on_delete=models.CASCADE, related_name="memberships")
|
|
joined_at = models.DateTimeField(auto_now_add=True)
|
|
|
|
class Meta:
|
|
unique_together = ("user", "project")
|
|
|
|
def __str__(self):
|
|
return f"{self.user} -> {self.project}"
|