48 lines
1.3 KiB
Python
Executable File
48 lines
1.3 KiB
Python
Executable File
from django.utils.translation import gettext_lazy as _
|
|
from enum import Enum
|
|
|
|
from django.db import models
|
|
from rules.contrib.models import RulesModel
|
|
|
|
from outbo.apps.core.fields import EnumCharField
|
|
from outbo.apps.core.models import TimestampableDeletableMixin
|
|
from outbo.apps.projects import rules
|
|
from outbo.apps.projects.models import Project
|
|
|
|
|
|
class MembershipType(Enum):
|
|
AGENCY = "agency"
|
|
CLIENT = "client"
|
|
SUPPLIER = "supplier"
|
|
|
|
|
|
class Member(TimestampableDeletableMixin, RulesModel):
|
|
class Meta:
|
|
rules_permissions = {
|
|
"view": rules.can_read_project_member,
|
|
"add": rules.can_create_project_member,
|
|
"change": rules.can_update_project_member,
|
|
"delete": rules.can_delete_project_member,
|
|
}
|
|
|
|
user = models.ForeignKey(
|
|
to="authentication.User",
|
|
on_delete=models.CASCADE,
|
|
related_name="member",
|
|
related_query_name="member",
|
|
)
|
|
project = models.ForeignKey(
|
|
to=Project,
|
|
on_delete=models.CASCADE,
|
|
related_name="members",
|
|
related_query_name="member",
|
|
)
|
|
role = EnumCharField(
|
|
verbose_name=_("membership type"),
|
|
max_length=25,
|
|
blank=False,
|
|
null=False,
|
|
default=MembershipType.SUPPLIER,
|
|
enum=MembershipType,
|
|
)
|