You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django.contrib.contenttypes.fields import GenericForeignKey
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from contrib.models import CommonModel
|
|
from members.rules import is_leader
|
|
from contrib.rules import has_global_perm
|
|
|
|
class NewMemberOnList(CommonModel):
|
|
"""
|
|
Connects members to a list of members.
|
|
"""
|
|
member = models.ForeignKey('Member', verbose_name=_('Member'), on_delete=models.CASCADE)
|
|
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE,
|
|
default=ContentType('members', 'Freizeit').pk)
|
|
object_id = models.PositiveIntegerField()
|
|
memberlist = GenericForeignKey('content_type', 'object_id')
|
|
comments = models.TextField(_('Comment'), default='', blank=True)
|
|
|
|
def __str__(self):
|
|
return str(self.member)
|
|
|
|
class Meta(CommonModel.Meta):
|
|
verbose_name = _('Member')
|
|
verbose_name_plural = _('Members')
|
|
rules_permissions = {
|
|
'add_obj': is_leader,
|
|
'view_obj': is_leader | has_global_perm('members.view_global_freizeit'),
|
|
'change_obj': is_leader,
|
|
'delete_obj': is_leader,
|
|
}
|
|
|
|
@property
|
|
def comments_tex(self):
|
|
raw = ". ".join(c for c in (self.member.comments, self.comments) if c).replace("..", ".")
|
|
return raw if raw else "---"
|
|
|
|
@property
|
|
def skills(self):
|
|
activities = [a.name for a in self.memberlist.activity.all()]
|
|
return {k: v for k, v in self.member.get_skills().items() if k in activities}
|
|
|
|
@property
|
|
def qualities_tex(self):
|
|
qualities = []
|
|
for activity, value in self.skills.items():
|
|
qualities.append("\\textit{%s:} %s" % (activity, value))
|
|
return ", ".join(qualities)
|