update members view
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user