started templates for members and jobs
This commit is contained in:
@@ -57,6 +57,8 @@ class Member(models.Model):
|
|||||||
]
|
]
|
||||||
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)
|
||||||
|
|
||||||
@@ -86,6 +88,10 @@ class Member(models.Model):
|
|||||||
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()
|
||||||
|
|||||||
@@ -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')
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -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):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
22
fet2020/templates/members/list.html
Normal file
22
fet2020/templates/members/list.html
Normal 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 %}
|
||||||
7
fet2020/templates/members/partials/_member.html
Normal file
7
fet2020/templates/members/partials/_member.html
Normal 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>
|
||||||
|
|
||||||
17
fet2020/templates/members/partials/_member_details.html
Normal file
17
fet2020/templates/members/partials/_member_details.html
Normal 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>
|
||||||
23
fet2020/templates/members/show_job.html
Normal file
23
fet2020/templates/members/show_job.html
Normal 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 %}
|
||||||
Reference in New Issue
Block a user