35 lines
1.2 KiB
Python
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",
|
|
),
|
|
]
|