started templates for members and jobs

This commit is contained in:
2020-08-15 14:56:31 +00:00
parent b5f632dffe
commit 41deac2ee3
10 changed files with 146 additions and 5 deletions

View File

@@ -56,6 +56,8 @@ class Member(models.Model):
('P', _('Pension')), ('P', _('Pension')),
] ]
role = models.CharField(max_length=1, choices=__choices, default='A') role = models.CharField(max_length=1, choices=__choices, default='A')
role_choices=[c[0] for c in __choices] # Letter from choices
description = models.TextField(null=True, blank=True) description = models.TextField(null=True, blank=True)
image = models.ImageField(null=True, blank=True) image = models.ImageField(null=True, blank=True)
@@ -85,7 +87,11 @@ class Member(models.Model):
all_members = models.Manager() all_members = models.Manager()
active_member = MemberManager() active_member = MemberManager()
pension_member = PensionManager() pension_member = PensionManager()
@property
def all_jobs(self):
return [j.job for j in self.jobs.all()]
class Meta: class Meta:
verbose_name = "Mitglied" verbose_name = "Mitglied"
verbose_name_plural = "Mitglieder" verbose_name_plural = "Mitglieder"
@@ -125,13 +131,33 @@ class Job(models.Model):
description = models.TextField(null=True, blank=True) description = models.TextField(null=True, blank=True)
image = models.ImageField(null=True, blank=True) image = models.ImageField(null=True, blank=True)
#objects = models.Manager()
job_group = models.ForeignKey( job_group = models.ForeignKey(
JobGroup, JobGroup,
on_delete=models.CASCADE, on_delete=models.CASCADE,
verbose_name="Job Gruppe", verbose_name="Job Gruppe",
) )
@property
def active_members(self):
"Active Members for this job"
def sorted_jobmembers():
return sorted(list(self.jobmembers.all()), # filter active fehlt noch
key=lambda x: (JobMember._role_sort[x.job_role], JobMember.job_start))
m =[jm.member_with_role for jm in sorted_jobmembers()]
return m
@property
def active_members_count(self):
"Count Active Members"
return self.jobmembers.count()
@property
def inactive_members(self):
"return the inactive members"
return [jm.member for jm in self.jobmembers.all()] # filter inactive fehlt noch
class Meta: class Meta:
verbose_name = "Tätigkeit" verbose_name = "Tätigkeit"
verbose_name_plural = "Tätigkeiten" verbose_name_plural = "Tätigkeiten"
@@ -151,17 +177,29 @@ class JobMember(models.Model):
Member, Member,
on_delete=models.CASCADE, on_delete=models.CASCADE,
verbose_name="Mitglied", verbose_name="Mitglied",
related_name="jobs"
) )
job = models.ForeignKey( job = models.ForeignKey(
Job, Job,
on_delete=models.CASCADE, on_delete=models.CASCADE,
verbose_name="Tätigkeit", verbose_name="Tätigkeit",
related_name="jobmembers"
) )
job_start = models.DateField('Job Start') job_start = models.DateField('Job Start')
job_end = models.DateField('Job Ende', null=True, blank=True) job_end = models.DateField('Job Ende', null=True, blank=True)
__choices = [ @property
def member_with_role(self):
"return the member with added role and job start and job end"
m=self.member
m.job_start=self.job_start
m.job_end=self.job_end
m.job_role=self.job_role
m.job_role_text=dict(JobMember._choices)[self.job_role]
return m
_choices = [
('1V', _('VorsitzendeR')), ('1V', _('VorsitzendeR')),
('2V', _('stv VorsitzendeR')), ('2V', _('stv VorsitzendeR')),
('3V', _('2. stv VorsitzendeR')), ('3V', _('2. stv VorsitzendeR')),
@@ -169,7 +207,16 @@ class JobMember(models.Model):
('E', _('Ersatzmitglied')), ('E', _('Ersatzmitglied')),
('V', _('VerantwortlicheR')) ('V', _('VerantwortlicheR'))
] ]
job_role = models.CharField(max_length=2, choices=__choices, default='M') _role_sort = {
'1V': 1,
'2V': 2,
'3V': 3,
'4V': 4,
'M':5,
'E':6,
'V':7
}
job_role = models.CharField(max_length=2, choices=_choices, default='M')
jobmember = models.Manager() jobmember = models.Manager()
active_member = ActiveMemberManager() active_member = ActiveMemberManager()

View File

@@ -5,4 +5,7 @@ from . import views
urlpatterns = [ urlpatterns = [
path('', views.index, name='members.index'), path('', views.index, name='members.index'),
path('list', views.list, name='members.list'),
path('list/<str:filter>', views.list, name='members.list'),
path('<str:slug>', views.show_job, name='members.show_job')
] ]

View File

@@ -26,6 +26,20 @@ def index(request):
return render(request, 'members/index.html', context) return render(request, 'members/index.html', context)
def show_job(request, slug=None):
job=Job.objects.get(slug=slug)
return render(request, 'members/show_job.html', {"job": job})
def list(request, filter=None):
"""
View for a list of members filtered or not
"""
if filter is None:
members = deque(Member.all_members.all())
if filter in Member.role_choices:
members=deque(Member.all_members.filter(role=filter).all())
return render(request, 'members/list.html',{"members": members})
class MemberViewSet(viewsets.ModelViewSet): class MemberViewSet(viewsets.ModelViewSet):
""" """

View File

@@ -76,7 +76,7 @@
<div class="grid-x grid-x-padding"> <div class="grid-x grid-x-padding">
<div class="medium-8 cell"> <div class="medium-8 cell">
{% for post in posts %} {% for post in posts %}
{% include 'posts/_posts_hero.html' %} {% include 'posts/partials/_posts_hero.html' %}
{% endfor %} {% endfor %}
</div> </div>
<div class="medium-4 cell"> <div class="medium-4 cell">

View File

@@ -2,6 +2,14 @@
{% block content %} {% block content %}
<div class="grid-container"> <div class="grid-container">
{% for job in jobs %}
<a href="{% url 'members.show_job' job.slug %}">
{{job.name}}
</a>
{% endfor %}
<div class="grid-x"> <div class="grid-x">
<div class="medium-8 cell"> <div class="medium-8 cell">
<h1>Members</h1> <h1>Members</h1>

View File

@@ -0,0 +1,22 @@
{% extends 'layout.html' %}
{% block content %}
<h1> GRID </h1>
<div class="grid-container">
<div class="grid-x">
{% for member in members %}
<div class="medium-3 large-2 small-6 cell">
{% include 'members/partials/_member.html' %}
</div>
{% endfor %}
</div>
</div>
<div class="grid-container">
{% for member in members %}
{% include 'members/partials/_member_details.html' %}
{% endfor %}
</div>
{% endblock %}

View File

@@ -0,0 +1,7 @@
{# only thumb and name of member #}
{% if member.image %}
<img src="{{member.image.url}}" class="thumbnail" style="width:150px;height:150px"/> </br>
{% endif %}
Name: {{member.firstname}} {{member.surname}} </br>
Spitzname: {{member.nickname}} </br>

View File

@@ -0,0 +1,17 @@
{# This template shows one member and all the details (that are ment for public) including a list of current jobs #}
<div class="media-object">
<div class="media-object-section">
<div class="thumbnail">
<img src= "{{member.image.url}}" style="width:150px;">
</div>
</div>
<div class="media-object-section main-section">
<h1>{{member.firstname}} {{member.surname}}</h1>
<p>Spitzname: {{member.nickname}} </br>
Name: {{member.firstname}} {{member.surname}} </br>
Mailaccount: {{member.mailaccount}} </br>
Beschreibung: {{member.description|safe}} </br>
</p>
</div>
</div>

View File

@@ -0,0 +1,23 @@
{% extends 'layout.html' %}
{% block content %}
<div class="grid-container">
<div class="grid-x">
<h1>{{job.name}}</h1>
</div>
Aktuelle Mitglieder {{ job.active_members_count}}:
<div class="grid-x">
{% for member in job.active_members %}
<div class="medium-6 cell">
<h2>{{ member.job_role_text }}({{member.job_start }} - {{member.job_end}})</h2>
{% include 'members/partials/_member_details.html' %}
</div>
{% endfor %}
</div>
Vergangene Mitglieder:
{% endblock %}