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.
kompass/jdav_web/members/models/member_on_list.py

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)