update members view

This commit is contained in:
2020-10-27 21:46:19 +00:00
parent c20f295944
commit 95feb2b961
5 changed files with 82 additions and 41 deletions

View File

@@ -9,7 +9,7 @@ from datetime import timedelta
from easy_thumbnails.fields import ThumbnailerImageField
class ActiveMemberManager(models.Manager):
class ActiveJobMemberManager(models.Manager):
'''
return a list of active member, and members who are still working
'''
@@ -18,14 +18,15 @@ class ActiveMemberManager(models.Manager):
def get_queryset(self):
date_today = timezone.now().date()
qs = super().get_queryset().order_by('member__firstname')
return super().get_queryset().filter(
return qs.filter(
Q(member__role=Member.MemberRole.ACTIVE)
& (Q(job_end__gt=date_today) | Q(job_end__isnull=True))
)
class InactiveMemberManager(models.Manager):
class InactiveJobMemberManager(models.Manager):
'''
return a list of inactive member
'''
@@ -34,16 +35,19 @@ class InactiveMemberManager(models.Manager):
def get_queryset(self):
date_today = timezone.now().date()
qs = super().get_queryset().order_by('member__firstname')
return super().get_queryset().filter(
return qs.filter(
Q(member__role=Member.MemberRole.PENSION)
| (Q(job_end__lt=date_today + timedelta(days=1)) & Q(job_end__isnull=False))
)
class MemberManager(models.Manager):
class JobMemberManager(models.Manager):
def get_members(self, role):
return self.get_queryset().filter(Q(member__role=role))
qs = self.get_queryset().order_by('member__firstname')
return qs.filter(Q(member__role=role))
class JobGroupManager(models.Manager):
@@ -76,6 +80,11 @@ class JobGroupManager(models.Manager):
return job_groups
class MemberManager(models.Manager):
def get_queryset(self):
return super().get_queryset().order_by('firstname')
class Member(models.Model):
firstname = models.CharField("Vorname", max_length=128)
surname = models.CharField("Nachname", max_length=128)
@@ -110,7 +119,7 @@ class Member(models.Model):
date_created = models.DateTimeField(auto_now_add=True)
# Managers
all_members = models.Manager()
all_members = MemberManager()
class Meta:
verbose_name = "Mitglied"
@@ -207,6 +216,6 @@ class JobMember(models.Model):
job_role = models.CharField(max_length=2, choices=JobRole.choices, default=JobRole.MEMBER)
members = MemberManager()
active_member = ActiveMemberManager()
inactive_member = InactiveMemberManager()
members = JobMemberManager()
active_member = ActiveJobMemberManager()
inactive_member = InactiveJobMemberManager()

View File

@@ -93,7 +93,7 @@ class MemberViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = Member.all_members.all().order_by('nickname')
queryset = Member.all_members.order_by('nickname')
serializer_class = MemberSerializer
#permission_classes = [permissions.IsAuthenticated]

View File

@@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>FET</title>
<link rel="stylesheet" href="{% static 'app.css' %}">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet">
<script src="https://kit.fontawesome.com/dbe3c89a9d.js" crossorigin="anonymous"></script>
</head>
<body style="min-height:100%; position:relative">
@@ -76,14 +76,14 @@ footer {
<div class="cell medium-6 large-9">
<div class="grid-y" style="height: 150px;">
<div class="cell small-6 medium-6 large-6">
<div class="cell small-6 medium-6 large-6 padding-left-1">
<a href="{% url 'posts.show' 'impressum'%}" style="color: white">Impressum</a>
</div>
<div class="cell small-6 medium-6 large-6">
<a class="button" style="height: 52px; width:52px; padding-left: 1em; padding-top: 1em;" href="https://www.facebook.com/FachschaftET"><i class="fa fa-facebook" style="font-size:24px"></i></a>
<a class="button" style="height: 52px; width:52px; padding-left: 1em; padding-top: 0.9em;" href="https://www.instagram.com/fet_tuwien/"><i class="fa fa-instagram" style="font-size:24px"></i></a>
<a class="button" style="height: 52px; width:52px; padding-left: 0.9em; padding-top: 0.9em;" href="https://t.me/FETInfo"><i class="fa fa-telegram" style="font-size:24px"></i></a>
<a class="button" href="https://www.facebook.com/FachschaftET" style="background-color: Transparent;"><i class="fab fa-facebook-square" style="font-size:30px"></i></a>
<a class="button" href="https://www.instagram.com/fet_tuwien/" style="background-color: Transparent;"><i class="fab fa-instagram-square" style="font-size:30px"></i></a>
<a class="button" href="https://t.me/FETInfo" style="background-color: Transparent;"><i class="fa fa-telegram" style="font-size:30px"></i></a>
</div>
</div>

View File

@@ -1,40 +1,41 @@
{% extends 'layout.html' %}
{% block content %}
<style>
.button {
background-color: green;
}
.memb {
background-color: blue;
}
.active {
background-color: red;
}
</style>
<div class="grid-container">
<div class="grid-x grid-padding-x padding-top-1">
<div class="cell large-2 medium-4 small-6"><a class="button active" style="width: 100%" href="/members/A">Fachschaft</a></div>
{% for job in pinned_job_groups %}
<div class="cell large-2 medium-4 small-6"><a class="button" style="width: 100%" href="/members/jobs/{{job.slug}}">{{job.name}}</a></div>
<div class="cell large-2 medium-4 small-6"><a class="button {% if job.slug in request.path %} active {% endif %}" style="width: 100%;" href="/members/jobs/{{job.slug}}">{{job.name}}</a></div>
{% endfor %}
{% for job in unpinned_job_groups %}
<div class="cell large-2 medium-4 small-6"><a class="button {% if job.slug in request.path %} active {% endif %}" style="width: 100%;" href="/members/jobs/{{job.slug}}">{{job.name}}</a></div>
{% endfor %}
<div class="cell large-2 medium-4 small-6"><a class="button memb {% if '/members/' == request.path %} active {% endif %}" style="width: 100%;" href="/members">Alle Mitglieder</a></div>
<div class="cell large-2 medium-4 small-6"><a class="button memb {% if '/members/P' == request.path %} active {% endif %}" style="width: 100%;" href="/members/P">Pension Mitglieder</a></div>
</div>
<ul class="accordion" data-accordion data-allow-all-closed="true">
<li class="accordion-item" data-accordion-item>
<!-- Accordion tab title -->
<a class="accordion-title">weitere Gruppen</a>
<!-- Accordion tab content: it would start in the open state due to using the `is-active` state class. -->
<div class="accordion-content" data-tab-content>
<div class="grid-x grid-padding-x">
{% for job in unpinned_job_groups %}
<div class="cell large-2 medium-4 small-6"><a class="button" style="width: 100%" href="/members/jobs/{{job.slug}}">{{job.name}}</a></div>
{% endfor %}
<div class="cell large-2 medium-4 small-6"><a class="button" style="width: 100%" href="/members">Alle Mitglieder</a></div>
<div class="cell large-2 medium-4 small-6"><a class="button" style="width: 100%" href="/members/P">Pension Mitglieder</a></div>
{% if description %}
<div class="grid-x">
<div class="cell padding-left-1 padding-bottom-1 padding-right-1" style="text-align: justify;">
{{ description|safe }}
</div>
</div>
</li>
</ul>
<div class="grid-x auto">
{% if description is not None %}
{{ description|safe }}
{% endif %}
</div>
{% endif %}
<!-- show details of a member -->
{% if member %}
@@ -45,6 +46,12 @@
<!-- show all, active or pension members -->
{% if members %}
<div class="grid-x">
<div class="cell padding-left-1 padding-bottom-1 padding-right-1" style="text-align: justify;">
Die Fachschaft Elektrotechnik (kurz: FET), ist die offizielle Vertretung aller Studierenden auf der Fakultät für Elektrotechnik und Informationstechnik. Ehrenamtliche engagierte Studierende unterstützen dich in Anliegen und Fragen zum und rund ums Studium. Wir vertreten eure Interessen in den offiziellen Gremien der Universität und arbeiten an Studienplänen mit. Außerdem bieten wir ein Rahmenprogramm zum Studium in Form von Veranstaltungen und Festln. Wir freuen uns über Feedback und Anregungen, insbesondere von jenen, die gleich Nägel mit Köpfen machen und unser Team verstärken wollen oder ihre Themen und Meinungen in eine unserer Sitzungen einbringen möchten.
</div>
</div>
<div class="padding-top-1 padding-left-1 padding-right-1" style="background-color: white;">
{% include 'members/members_list.html' %}
</div>
@@ -65,7 +72,7 @@
{% for jm in jobmem.list %}
{% with member=jm.member %}
<div class="medium-3 large-2 small-6 cell">
<h2>{{jm.member.surname}}</h2>
<h2>{{member.firstname}} {{member.surname}}</h2>
{% include 'members/partials/_member.html' %}
{{jm.get_job_role_display}} ({{jm.job_start|date}} - {{jm.job_end|date}})
</div>
@@ -80,3 +87,28 @@
</div>
{% endblock %}
<script>
// Get the container element
var btnContainer = document.getElementById("grid-container");
// Get all buttons with class="btn" inside the container
var grid = btnContainer.getElementsByClassName("grid-x");
var cell = grid.getElementsByClassName("cell");
var btns = cell.getElementsByClassName("button");
// Loop through the buttons and add the active class to the current/clicked button
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
var current = document.getElementsByClassName("active");
// If there's no active class
if (current.length > 0) {
current[0].className = current[0].className.replace(" active", "");
}
// Add the active class to the current/clicked button
this.className += " active";
});
}
</script>

View File

@@ -2,7 +2,7 @@
{% for mem in job_memberships %}
{% with member=mem.member %}
<div class="medium-3 large-2 small-6 cell">
<h2>{{mem.member.surname}}</h2>
<h2>{{member.firstname}} {{member.surname}}</h2>
{% include 'members/partials/_member.html' %}
<h2>{{mem.get_job_role_display}} ({{mem.job_start|date}} - {{mem.job_end|date}})</h2>
</div>