add 'carte famille' download endpoint (#17712)
This commit is contained in:
parent
cd9aec7fff
commit
df62e10288
|
@ -16,13 +16,16 @@
|
|||
|
||||
from django.conf.urls import url
|
||||
|
||||
from .views import saga_transaction, saga_retour_asynchrone, saga_retour_synchrone
|
||||
from .views import (saga_transaction, saga_retour_asynchrone,
|
||||
saga_retour_synchrone, qf_carte_famille)
|
||||
|
||||
urlpatterns = [
|
||||
url('^_plugin/nanterre/saga-transaction/*$', saga_transaction,
|
||||
name='nanterre-saga-transaction'),
|
||||
name='nanterre-saga-transaction'),
|
||||
url('^_plugin/nanterre/saga-retour-asynchrone/*$', saga_retour_asynchrone,
|
||||
name='nanterre-saga-retour-asynchrone'),
|
||||
name='nanterre-saga-retour-asynchrone'),
|
||||
url('^_plugin/nanterre/saga-retour-synchrone/*$', saga_retour_synchrone,
|
||||
name='nanterre-saga-retour-synchrone'),
|
||||
name='nanterre-saga-retour-synchrone'),
|
||||
url('^_plugin/nanterre/qf-carte-famille/(?P<qf_id>\w+)/$', qf_carte_famille,
|
||||
name='nanterre-qf-carte-famille'),
|
||||
]
|
||||
|
|
|
@ -21,8 +21,9 @@ import logging
|
|||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django.http import HttpResponse, HttpResponseRedirect, Http404
|
||||
from django.template import RequestContext
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
|
||||
|
@ -120,8 +121,8 @@ def saga_retour_synchrone(request):
|
|||
return HttpResponseRedirect(next_url)
|
||||
|
||||
# add a result message and redirect
|
||||
if (isinstance(saga, dict) and saga.get('err') == 0
|
||||
and saga.get('data', {}).get('etat')):
|
||||
if (isinstance(saga, dict) and saga.get('err') == 0 and
|
||||
saga.get('data', {}).get('etat')):
|
||||
etat = saga['data']['etat']
|
||||
if etat in MESSAGE_BY_STATE:
|
||||
logger.info('[rsu/saga] retour-synchrone: idop=%s etat=%s',
|
||||
|
@ -150,8 +151,8 @@ def saga_retour_asynchrone(request):
|
|||
err = 1
|
||||
logger.error('[rsu/saga] retour-asynchrone: cannot post idop=%s', idop)
|
||||
else:
|
||||
if (isinstance(saga, dict) and saga.get('err') == 0
|
||||
and saga.get('data', {}).get('etat')):
|
||||
if (isinstance(saga, dict) and saga.get('err') == 0 and
|
||||
saga.get('data', {}).get('etat')):
|
||||
etat = saga['data']['etat']
|
||||
if etat in MESSAGE_BY_STATE:
|
||||
logger.info('[rsu/saga] retour-asynchrone: idop=%s etat=%s',
|
||||
|
@ -167,3 +168,43 @@ def saga_retour_asynchrone(request):
|
|||
response = HttpResponse(content_type='application/json')
|
||||
response.write(json.dumps({'err': err}))
|
||||
return response
|
||||
|
||||
|
||||
@login_required
|
||||
def qf_carte_famille(request, qf_id):
|
||||
logger = logging.getLogger('combo_plugin_nanterre.qf_carte_famille')
|
||||
rsu_id = request.GET.get('rsu_id')
|
||||
if rsu_id:
|
||||
# rsu_id can be set only by NANTERRE_QF_READER_GROUP members
|
||||
# (ie only for RSU agents in RSU backoffice)
|
||||
qf_reader_group = getattr(settings, 'NANTERRE_QF_READER_GROUP', None)
|
||||
if not qf_reader_group:
|
||||
logger.warning('rsu_id present but settings.NANTERRE_QF_READER_GROUP is unset')
|
||||
raise PermissionDenied
|
||||
if not request.user.groups.filter(name=qf_reader_group).exists():
|
||||
logger.warning('rsu_id present but request user is not in NANTERRE_QF_READER_GROUP')
|
||||
raise PermissionDenied
|
||||
else:
|
||||
rsu_id = request.user.saml_identifiers.first().name_id
|
||||
url = '[zoo_url]rsu/qf/[rsu_id]/editer-carte/[qf_id]/'
|
||||
context = RequestContext(request, {'request': request,
|
||||
'rsu_id': rsu_id,
|
||||
'qf_id': qf_id})
|
||||
url = get_templated_url(url, context=context)
|
||||
carte = requests.get(url, timeout=40)
|
||||
if carte.status_code != 200:
|
||||
logger.warning('fail to get PDF on %s, got status %s', url, carte.status_code)
|
||||
raise Http404
|
||||
content_type = carte.headers.get('Content-Type')
|
||||
if content_type == 'application/json':
|
||||
logger.warning('fail to get PDF on %s, got JSON: %r', url, carte.content)
|
||||
raise Http404
|
||||
if content_type != 'application/pdf':
|
||||
logger.warning('fail to get PDF on %s, got %s: %r', url, content_type,
|
||||
carte.content[200:])
|
||||
raise Http404
|
||||
filename = 'carte-famille-%s.pdf' % qf_id
|
||||
logger.debug('return %s obtained from %s', filename, url)
|
||||
response = HttpResponse(carte.content, content_type=content_type)
|
||||
response['Content-Disposition'] = 'attachment; filename="%s"' % filename
|
||||
return response
|
||||
|
|
Loading…
Reference in New Issue