8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-16 08:23:12 +00:00

Merge branch 'moamoak/mailing_API' into 'master'

Improve the API for multiple mailings

See merge request federez/re2o!94
This commit is contained in:
klafyvel 2018-03-07 18:19:55 +01:00
commit ab79b2c919
7 changed files with 130 additions and 10 deletions

View file

@ -343,6 +343,7 @@ class ClubForm(FieldPermissionFormMixin, ModelForm):
self.fields['room'].label = 'Local' self.fields['room'].label = 'Local'
self.fields['room'].empty_label = "Pas de chambre" self.fields['room'].empty_label = "Pas de chambre"
self.fields['school'].empty_label = "Séléctionner un établissement" self.fields['school'].empty_label = "Séléctionner un établissement"
self.fields['mailing'].label = 'Utiliser une mailing'
class Meta: class Meta:
model = Club model = Club
@ -355,6 +356,7 @@ class ClubForm(FieldPermissionFormMixin, ModelForm):
'room', 'room',
'telephone', 'telephone',
'shell', 'shell',
'mailing'
] ]
def clean_telephone(self): def clean_telephone(self):

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-03-07 15:34
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0068_auto_20180107_2245'),
]
operations = [
migrations.AddField(
model_name='club',
name='mailing',
field=models.BooleanField(default=False),
),
]

View file

@ -850,6 +850,9 @@ class Club(User):
to='users.Adherent', to='users.Adherent',
related_name='club_members' related_name='club_members'
) )
mailing = models.BooleanField(
default = False
)
def can_create(user_request, *args, **kwargs): def can_create(user_request, *args, **kwargs):
"""Check if an user can create an user object. """Check if an user can create an user object.

View file

@ -23,9 +23,16 @@
#Maël Kervella #Maël Kervella
from rest_framework import serializers from rest_framework import serializers
from users.models import User from users.models import Club, Adherent
class MailingSerializer(serializers.ModelSerializer):
name = serializers.CharField(source='pseudo')
class MailSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = User model = Club
fields = ('name',)
class MailingMemberSerializer(serializers.ModelSerializer):
class Meta:
model = Adherent
fields = ('email',) fields = ('email',)

View file

@ -60,8 +60,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</p> </p>
<table class="table table-striped"> <table class="table table-striped">
<tr> <tr>
{% if users.is_class_club %}
<th>Mailing</th>
{% if users.club.mailing %}
<td>{{ users.pseudo }}(-admin)</td>
{% else %}
<td>Mailing désactivée</td>
{% endif %}
{% else %}
<th>Prénom</th> <th>Prénom</th>
<td>{{ users.name }}</td> <td>{{ users.name }}</td>
{% endif %}
<th>Nom</th> <th>Nom</th>
<td>{{ users.surname }}</td> <td>{{ users.surname }}</td>
</tr> </tr>

View file

@ -102,5 +102,29 @@ urlpatterns = [
), ),
url(r'^$', views.index, name='index'), url(r'^$', views.index, name='index'),
url(r'^index_clubs/$', views.index_clubs, name='index-clubs'), url(r'^index_clubs/$', views.index_clubs, name='index-clubs'),
url(r'^rest/mailing/$', views.mailing, name='mailing'), url(
r'^rest/ml/std/$',
views.ml_std_list,
name='ml-std-list'
),
url(
r'^rest/ml/std/member/(?P<ml_name>\w+)/$',
views.ml_std_members,
name='ml-std-members'
),
url(
r'^rest/ml/club/$',
views.ml_club_list,
name='ml-club-list'
),
url(
r'^rest/ml/club/admin/(?P<ml_name>\w+)/$',
views.ml_club_admins,
name='ml-club-admins'
),
url(
r'^rest/ml/club/member/(?P<ml_name>\w+)/$',
views.ml_club_members,
name='ml-club-members'
),
] ]

View file

@ -52,7 +52,7 @@ from rest_framework.renderers import JSONRenderer
from reversion.models import Version from reversion.models import Version
from reversion import revisions as reversion from reversion import revisions as reversion
from users.serializers import MailSerializer from users.serializers import MailingSerializer, MailingMemberSerializer
from users.models import ( from users.models import (
User, User,
Ban, Ban,
@ -843,9 +843,64 @@ class JSONResponse(HttpResponse):
@csrf_exempt @csrf_exempt
@login_required @login_required
@permission_required('machines.serveur') @permission_required('machines.serveur')
def mailing(request): def ml_std_list(request):
""" Fonction de serialisation des addresses mail de tous les users """ API view sending all the available standard mailings"""
Pour generation de ml all users""" return JSONResponse([
mails = all_has_access().values('email').distinct() {'name': 'adherents'}
seria = MailSerializer(mails, many=True) ])
@csrf_exempt
@login_required
@permission_required('machines.serveur')
def ml_std_members(request, ml_name):
""" API view sending all the members for a standard mailing"""
# All with active connextion
if ml_name == 'adherents':
members = all_has_access().values('email').distinct()
# Unknown mailing
else:
messages.error(request, "Cette mailing n'existe pas")
return redirect(reverse('index'))
seria = MailingMemberSerializer(members, many=True)
return JSONResponse(seria.data)
@csrf_exempt
@login_required
@permission_required('machines.serveur')
def ml_club_list(request):
""" API view sending all the available club mailings"""
clubs = Club.objects.filter(mailing=True).values('pseudo')
seria = MailingSerializer(clubs, many=True)
return JSONResponse(seria.data)
@csrf_exempt
@login_required
@permission_required('machines.serveur')
def ml_club_admins(request, ml_name):
""" API view sending all the administrators for a specific club mailing"""
try:
club = Club.objects.get(mailing=True, pseudo=ml_name)
except Club.DoesNotExist:
messages.error(request, "Cette mailing n'existe pas")
return redirect(reverse('index'))
members = club.administrators.all().values('email').distinct()
seria = MailingMemberSerializer(members, many=True)
return JSONResponse(seria.data)
@csrf_exempt
@login_required
@permission_required('machines.serveur')
def ml_club_members(request, ml_name):
""" API view sending all the members for a specific club mailing"""
try:
club = Club.objects.get(mailing=True, pseudo=ml_name)
except Club.DoesNotExist:
messages.error(request, "Cette mailing n'existe pas")
return redirect(reverse('index'))
members = club.administrators.all().values('email').distinct() | club.members.all().values('email').distinct()
seria = MailingMemberSerializer(members, many=True)
return JSONResponse(seria.data) return JSONResponse(seria.data)