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, )