Corp/backend/projects/models/membership.py

35 lines
1.2 KiB
Python

from django.conf import settings
from django.db import models
class ProjectMembership(models.Model):
project = models.ForeignKey(
"projects.Project", on_delete=models.CASCADE, related_name="memberships"
)
employee = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.PROTECT,
related_name="project_memberships",
)
role = models.CharField(max_length=100, default="Участник")
planned_percent = models.DecimalField(max_digits=5, decimal_places=2, default=0)
starts_on = models.DateField(null=True, blank=True)
ends_on = models.DateField(null=True, blank=True)
class Meta:
constraints = [
models.UniqueConstraint(
fields=["project", "employee"], name="project_member_unique"
),
models.CheckConstraint(
condition=models.Q(planned_percent__gte=0, planned_percent__lte=100),
name="project_member_percent",
),
models.CheckConstraint(
condition=models.Q(ends_on__isnull=True)
| models.Q(starts_on__isnull=True)
| models.Q(ends_on__gte=models.F("starts_on")),
name="project_member_dates",
),
]