Add old membership views

This commit is contained in:
Skia
2016-09-02 21:21:57 +02:00
parent c5fd9d0076
commit c62d3f4f4a
10 changed files with 179 additions and 50 deletions

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('club', '0002_auto_20160824_2152'),
]
operations = [
migrations.AlterField(
model_name='membership',
name='start_date',
field=models.DateField(verbose_name='start date'),
),
]

View File

@ -5,6 +5,7 @@ from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError
from django.db import IntegrityError, transaction
from django.core.urlresolvers import reverse
from django.utils import timezone
from core.models import User, MetaGroup, Group, SithFile
from subscription.models import Subscriber
@ -103,9 +104,7 @@ class Club(models.Model):
"""
Method to see if that object can be super edited by the given user
"""
if user.is_in_group(settings.SITH_MAIN_BOARD_GROUP):
return True
return False
return user.is_in_group(settings.SITH_MAIN_BOARD_GROUP)
def can_be_edited_by(self, user):
"""
@ -144,7 +143,7 @@ class Membership(models.Model):
"""
user = models.ForeignKey(User, verbose_name=_('user'), related_name="membership", null=False, blank=False)
club = models.ForeignKey(Club, verbose_name=_('club'), related_name="members", null=False, blank=False)
start_date = models.DateField(_('start date'), auto_now=True)
start_date = models.DateField(_('start date'))
end_date = models.DateField(_('end date'), null=True, blank=True)
role = models.IntegerField(_('role'), choices=sorted(settings.SITH_CLUB_ROLES.items()),
default=sorted(settings.SITH_CLUB_ROLES.items())[0][0])
@ -157,11 +156,31 @@ class Membership(models.Model):
if Membership.objects.filter(user=self.user).filter(club=self.club).filter(end_date=None).exists():
raise ValidationError(_('User is already member of that club'))
def save(self, *args, **kwargs):
if not self.id:
self.start_date = timezone.now()
return super(Membership, self).save(*args, **kwargs)
def __str__(self):
return self.club.name+' - '+self.user.username+' - '+str(settings.SITH_CLUB_ROLES[self.role])+str(
" - "+str(_('past member')) if self.end_date is not None else ""
)
def is_owned_by(self, user):
"""
Method to see if that object can be super edited by the given user
"""
return user.is_in_group(settings.SITH_MAIN_BOARD_GROUP)
def can_be_edited_by(self, user):
"""
Method to see if that object can be edited by the given user
"""
if user.membership:
ms = user.membership.filter(club=self.club, end_date=None).first()
return (ms and ms.role >= self.role) or user.is_in_group(settings.SITH_MAIN_BOARD_GROUP)
return user.is_in_group(settings.SITH_MAIN_BOARD_GROUP)
def get_absolute_url(self):
return reverse('club:club_members', kwargs={'club_id': self.club.id})

View File

@ -18,6 +18,14 @@
>{% trans %}Members{% endtrans %}</a>
{% endif %}
{% if can_view(club, user) %}
<a href="{{ url('club:club_old_members', club_id=club.pk) }}"
{%- if tab == "elderlies" -%}
class="selected_tab"
{%- endif -%}
>{% trans %}Old members{% endtrans %}</a>
{% endif %}
{% if can_view(club, user) %}
<a href="{{ url('club:tools', club_id=club.id) }}"
{%- if tab == "tools" -%}

View File

@ -8,6 +8,7 @@
<td>{% trans %}User{% endtrans %}</td>
<td>{% trans %}Role{% endtrans %}</td>
<td>{% trans %}Description{% endtrans %}</td>
<td>{% trans %}Since{% endtrans %}</td>
</thead>
<tbody>
{% for m in club.members.filter(end_date=None).order_by('-role').all() %}
@ -15,6 +16,10 @@
<td>{{ user_profile_link(m.user) }}</td>
<td>{{ settings.SITH_CLUB_ROLES[m.role] }}</td>
<td>{{ m.description }}</td>
<td>{{ m.start_date }}</td>
{% if m.can_be_edited_by(user) %}
<td><a href="{{ url('club:membership_set_old', membership_id=m.id) }}">{% trans %}Mark as old{% endtrans %}</a></td>
{% endif %}
</tr>
{% endfor %}
</tbody>

View File

@ -0,0 +1,29 @@
{% extends "club/club_base.jinja" %}
{% from 'core/macros.jinja' import user_profile_link %}
{% block club %}
<h2>{% trans %}Club old members{% endtrans %}</h2>
<table>
<thead>
<td>{% trans %}User{% endtrans %}</td>
<td>{% trans %}Role{% endtrans %}</td>
<td>{% trans %}Description{% endtrans %}</td>
<td>{% trans %}From{% endtrans %}</td>
<td>{% trans %}To{% endtrans %}</td>
</thead>
<tbody>
{% for m in club.members.exclude(end_date=None).order_by('-role', '-end_date').all() %}
<tr>
<td>{{ user_profile_link(m.user) }}</td>
<td>{{ settings.SITH_CLUB_ROLES[m.role] }}</td>
<td>{{ m.description }}</td>
<td>{{ m.start_date }}</td>
<td>{{ m.end_date }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@ -8,7 +8,9 @@ urlpatterns = [
url(r'^(?P<club_id>[0-9]+)/$', ClubView.as_view(), name='club_view'),
url(r'^(?P<club_id>[0-9]+)/edit$', ClubEditView.as_view(), name='club_edit'),
url(r'^(?P<club_id>[0-9]+)/members$', ClubMembersView.as_view(), name='club_members'),
url(r'^(?P<club_id>[0-9]+)/elderlies$', ClubOldMembersView.as_view(), name='club_old_members'),
url(r'^(?P<club_id>[0-9]+)/prop$', ClubEditPropView.as_view(), name='club_prop'),
url(r'^(?P<club_id>[0-9]+)/tools$', ClubToolsView.as_view(), name='tools'),
url(r'^membership/(?P<membership_id>[0-9]+)/set_old$', MembershipSetOldView.as_view(), name='membership_set_old'),
]

View File

@ -4,7 +4,9 @@ from django.views.generic import ListView, DetailView
from django.views.generic.edit import UpdateView, CreateView
from django.forms import CheckboxSelectMultiple
from django.core.exceptions import ValidationError
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.utils import timezone
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin
from club.models import Club, Membership
@ -102,6 +104,19 @@ class ClubMembersView(CanViewMixin, UpdateView):
kwargs['tab'] = "members"
return kwargs
class ClubOldMembersView(CanViewMixin, DetailView):
"""
Old members of a club
"""
model = Club
pk_url_kwarg = "club_id"
template_name = 'club/club_old_members.jinja'
def get_context_data(self, **kwargs):
kwargs = super(ClubOldMembersView, self).get_context_data(**kwargs)
kwargs['tab'] = "elderlies"
return kwargs
class ClubEditView(CanEditMixin, UpdateView):
"""
Edit a Club's main informations (for the club's members)
@ -139,3 +154,20 @@ class ClubCreateView(CanEditPropMixin, CreateView):
fields = ['name', 'unix_name', 'parent']
template_name = 'club/club_edit_prop.jinja'
class MembershipSetOldView(CanEditMixin, DetailView):
"""
Set a membership as beeing old
"""
model = Membership
pk_url_kwarg = "membership_id"
def get(self, request, *args, **kwargs):
self.object = self.get_object()
self.object.end_date = timezone.now()
self.object.save()
return HttpResponseRedirect(reverse('club:club_members', args=self.args, kwargs={'club_id': self.object.club.id}))
def post(self, request, *args, **kwargs):
self.object = self.get_object()
return HttpResponseRedirect(reverse('club:club_members', args=self.args, kwargs={'club_id': self.object.club.id}))