alfortville: limit DGA validation screens to formdefs related to the DGA

This commit is contained in:
Frédéric Péters 2015-10-11 16:43:18 +02:00
parent 8f15a7e4e0
commit 579179e0be
3 changed files with 18 additions and 5 deletions

View File

@ -28,7 +28,7 @@ from .models import Inbox
from welco.sources.mail.models import Mail
from welco.sources.mail.views import Home as MailHome
from welco.utils import get_wcs_data
from welco.utils import get_wcs_data, get_wcs_options
from welco.views import Home as HomeScreen
@ -49,9 +49,20 @@ dgs = login_required(Dgs.as_view())
class DgaMailHome(MailHome):
def filter_formdef_condition(self, formdef):
roles = set()
for function_role in formdef.get('functions', {}).values():
if function_role.get('role', {}).get('name', '').startswith('DGA'):
roles.add(function_role.get('role').get('slug'))
return self.user_roles.intersection(roles)
def get_queryset(self):
# XXX: filter on formdefs related to the current user
return Mail.objects.filter(status='done-dgs')
mellon = self.request.session['mellon_session']
params = {'NameID': mellon['name_id_content']}
self.user_roles = set([x['slug'] for x in get_wcs_data('api/user/', params).get('user_roles')])
formdef_references = get_wcs_options('api/formdefs/', self.filter_formdef_condition)
return Mail.objects.filter(status='done-dgs',
associations__formdef_reference__in=[x[1][0][0] for x in formdef_references])
class Dga(HomeScreen):
source_klass = DgaMailHome

View File

@ -25,5 +25,5 @@ class QualificationForm(forms.Form):
def __init__(self, *args, **kwargs):
super(QualificationForm, self).__init__(*args, **kwargs)
formdef_references = get_wcs_options('json')
formdef_references = get_wcs_options('api/formdefs/')
self.fields['formdef_reference'].widget = forms.Select(choices=formdef_references)

View File

@ -69,7 +69,7 @@ def get_wcs_json(wcs_url, path):
cache.set(url, response_json)
return response_json
def get_wcs_options(url):
def get_wcs_options(url, condition=None):
references = []
categories = {}
for wcs_key, wcs_site in get_wcs_services().iteritems():
@ -78,6 +78,8 @@ def get_wcs_options(url):
if type(response_json) is dict:
response_json = response_json.get('data')
for element in response_json:
if condition and not condition(element):
continue
slug = element.get('slug')
category = element.get('category') or '-'
title = element.get('title')