alfortville: limit DGA validation screens to formdefs related to the DGA
This commit is contained in:
parent
8f15a7e4e0
commit
579179e0be
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue