2091 lines
74 KiB
Python
2091 lines
74 KiB
Python
# passerelle - uniform access to multiple data sources and services
|
|
# Copyright (C) 2019 Entr'ouvert
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify it
|
|
# under the terms of the GNU Affero General Public License as published
|
|
# by the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
import csv
|
|
from urllib.parse import urljoin
|
|
|
|
import requests
|
|
from django.db import models
|
|
from django.http import HttpResponse
|
|
from django.urls import reverse
|
|
from django.utils.http import urlencode
|
|
from django.utils.timezone import localtime, now
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from passerelle.base.models import BaseResource, HTTPResource
|
|
from passerelle.forms import GenericConnectorForm
|
|
from passerelle.utils.api import endpoint
|
|
from passerelle.utils.json import response_schema
|
|
from passerelle.utils.jsonresponse import APIError
|
|
|
|
OUI_NON_ENUM = {'enum': ['Oui', 'Non']}
|
|
DATE_SCHEMA = {'type': 'string', 'format': 'date'}
|
|
|
|
|
|
def parameters(update=None):
|
|
update = update or ()
|
|
d = {
|
|
'email': {
|
|
'description': _('Publik known email'),
|
|
'example_value': 'john.doe@example.com',
|
|
},
|
|
'ip': {
|
|
'description': _('Publik client IP'),
|
|
'example_value': '88.67.23.45',
|
|
},
|
|
}
|
|
d.update(update)
|
|
return d
|
|
|
|
|
|
def dump_csv_columns(columns):
|
|
lines = []
|
|
for column in columns:
|
|
try:
|
|
name, title = columns
|
|
line = f'{name} {title}'
|
|
except ValueError:
|
|
line = column
|
|
lines.append(line)
|
|
return '\n'.join(lines)
|
|
|
|
|
|
class RSA13Form(GenericConnectorForm):
|
|
def __init__(self, *args, **kwargs):
|
|
kwargs['initial'] = {}
|
|
for name in RSA13Resource.CSV_EXPORTS:
|
|
field = f'{name}_csv_columns'
|
|
kwargs['initial'][field] = dump_csv_columns(DEFAULTS[field])
|
|
super().__init__(*args, **kwargs)
|
|
|
|
|
|
class RSA13Resource(BaseResource, HTTPResource):
|
|
category = _('Business Process Connectors')
|
|
|
|
webservice_base_url = models.URLField(_('Webservice Base URL'))
|
|
|
|
beneficiaire_csv_columns = models.TextField(_('CSV columns for beneficiaires'), blank=True)
|
|
facturation_csv_columns = models.TextField(_('CSV columns for facturation'), blank=True)
|
|
sorti_csv_columns = models.TextField(_('CSV columns for sorti'), blank=True)
|
|
|
|
hide_description_fields = ['beneficiaire_csv_columns', 'facturation_csv_columns', 'sorti_csv_columns']
|
|
manager_form_base_class = RSA13Form
|
|
log_requests_errors = False
|
|
|
|
class Meta:
|
|
verbose_name = _('RSA CD13')
|
|
|
|
def request_raw(self, method, path, **kwargs):
|
|
email = kwargs.pop('email', None)
|
|
ip = kwargs.pop('ip', None)
|
|
headers = kwargs.setdefault('headers', {})
|
|
if email:
|
|
headers['X-CD13-Email'] = email
|
|
if ip:
|
|
headers['X-CD13-IP'] = ip
|
|
full_path = urljoin(self.webservice_base_url, '/api/') + path
|
|
try:
|
|
response = self.requests.request(method, full_path, **kwargs)
|
|
try:
|
|
response.json()
|
|
except ValueError:
|
|
response.raise_for_status()
|
|
raise requests.RequestException('JSON expected', response=response)
|
|
except requests.RequestException as e:
|
|
raise APIError('Server is down: %s' % e)
|
|
return response
|
|
|
|
def request(self, method, path, **kwargs):
|
|
response = self.request_raw(method, path, **kwargs)
|
|
content = response.json()
|
|
# CSV endpoint does not return err=
|
|
if 'err' in content and content['err'] != 0:
|
|
err_desc = content.get('err_code') or 'misc-error'
|
|
raise APIError(err_desc, data=content)
|
|
response.raise_for_status()
|
|
return content
|
|
|
|
def get(self, path, **kwargs):
|
|
return self.request('get', path, **kwargs)
|
|
|
|
def post(self, path, **kwargs):
|
|
return self.request('post', path, **kwargs)
|
|
|
|
def put(self, path, **kwargs):
|
|
return self.request('put', path, **kwargs)
|
|
|
|
def delete(self, path, **kwargs):
|
|
return self.request('delete', path, **kwargs)
|
|
|
|
def check_status(self):
|
|
response = self.request_raw('GET', 'check')
|
|
if response.json().get('ping') != 'pong':
|
|
raise APIError('ping/pong expected received: "%s"' % repr(response)[:1024])
|
|
|
|
def get_columns(self, name):
|
|
def parse_csv_columns(content):
|
|
columns = []
|
|
for line in content.splitlines():
|
|
if not line.strip():
|
|
continue
|
|
row = line.strip().split(' ', 1)
|
|
if not row[0]:
|
|
continue
|
|
try:
|
|
json_name, column_name = row
|
|
columns.append((json_name, column_name.strip()))
|
|
except ValueError:
|
|
json_name = row[0]
|
|
columns.append(json_name)
|
|
return columns
|
|
|
|
columns = []
|
|
field = f'{name}_csv_columns'
|
|
for column in parse_csv_columns(getattr(self, field)) or DEFAULTS[field]:
|
|
if isinstance(column, str):
|
|
columns.append((column, column))
|
|
else:
|
|
columns.append(tuple(column))
|
|
return columns
|
|
|
|
CSV_EXPORTS = ['beneficiaire', 'facturation', 'sorti']
|
|
|
|
@property
|
|
def description_csv_tables(self):
|
|
for name in self.CSV_EXPORTS:
|
|
yield (name.title(), self.get_columns(name))
|
|
|
|
@endpoint(
|
|
description=_('Get nomenclature'),
|
|
long_description=_('Domain can be: MOTICLODAC, MOTIF_FIN_ACC, RESULTAT_RDV, RELANCE_RDV'),
|
|
perm='can_access',
|
|
pattern=r'^(?P<domain>[A-Z_]{1,30})/$',
|
|
example_pattern='{domain}/',
|
|
parameters=parameters(
|
|
{
|
|
'domain': {
|
|
'description': _('Nomenclature domain'),
|
|
'example_value': 'MOTICLODAC',
|
|
}
|
|
}
|
|
),
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'array',
|
|
'items': {
|
|
'type': 'object',
|
|
'required': ['id', 'text'],
|
|
'properties': {
|
|
'id': {
|
|
'type': 'string',
|
|
},
|
|
'text': {
|
|
'type': 'string',
|
|
},
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def nomenclature(self, request, domain, email, ip=None):
|
|
return self.get('cg_ref_code/domain/%s/' % domain, email=email, ip=ip)
|
|
|
|
@endpoint(
|
|
description=_('List of platforms'),
|
|
perm='can_access',
|
|
parameters=parameters(),
|
|
display_category=_('Platform'),
|
|
display_order=1,
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'array',
|
|
'items': {
|
|
'type': 'object',
|
|
'required': ['id', 'dsp', 'name', 'role'],
|
|
'properties': {
|
|
'id': {
|
|
'type': 'integer',
|
|
},
|
|
'name': {
|
|
'type': 'string',
|
|
},
|
|
'dsp': {
|
|
'type': 'string',
|
|
},
|
|
'role': {
|
|
'enum': ['Coordonnateur', 'Accompagnateur'],
|
|
},
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform(self, request, email, ip=None):
|
|
return self.get('platform/', email=email, ip=ip)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/$',
|
|
example_pattern='{platform_id}/',
|
|
description=_('Platform details'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
}
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=2,
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'array',
|
|
'items': {
|
|
'type': 'object',
|
|
'required': [
|
|
'id',
|
|
'dsp',
|
|
'name',
|
|
'adr1',
|
|
'adr2',
|
|
'adr3',
|
|
'adr4',
|
|
'adr5',
|
|
'adr6',
|
|
'tel',
|
|
'queries',
|
|
],
|
|
'properties': {
|
|
'id': {
|
|
'type': 'integer',
|
|
},
|
|
'name': {
|
|
'type': 'string',
|
|
},
|
|
'dsp': {
|
|
'type': 'string',
|
|
},
|
|
'adr1': {
|
|
'type': 'string',
|
|
},
|
|
'adr2': {
|
|
'type': 'string',
|
|
},
|
|
'adr3': {
|
|
'type': 'string',
|
|
},
|
|
'adr4': {
|
|
'type': 'string',
|
|
},
|
|
'adr5': {
|
|
'type': 'string',
|
|
},
|
|
'adr6': {
|
|
'type': 'string',
|
|
},
|
|
'tel': {
|
|
'type': 'string',
|
|
},
|
|
'queries': {
|
|
'type': 'array',
|
|
'items': {
|
|
'type': 'object',
|
|
'required': ['id', 'name', 'count'],
|
|
'properties': {
|
|
'id': {
|
|
'type': 'integer',
|
|
},
|
|
'name': {
|
|
'type': 'string',
|
|
},
|
|
'count': {
|
|
'type': 'integer',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_details(self, request, platform_id, email, ip=None):
|
|
return self.get('platform/%s/' % platform_id, email=email, ip=ip)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
methods=['get', 'post'],
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/referent/$',
|
|
example_pattern='{platform_id}/referent/',
|
|
description_get=_('Get platform referents'),
|
|
description_post=_('Create platform referent'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'statut': {
|
|
'description': _('Referent status'),
|
|
'example_value': 'Actif',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=3,
|
|
post_json_schema={
|
|
'type': 'object',
|
|
'required': ['nom', 'prenom'],
|
|
'properties': {
|
|
'email': {
|
|
'type': 'string',
|
|
'maxLength': 78,
|
|
'pattern': '^(.*@.*)?$',
|
|
},
|
|
'nom': {
|
|
'type': 'string',
|
|
'maxLength': 28,
|
|
},
|
|
'prenom': {
|
|
'type': 'string',
|
|
'maxLength': 32,
|
|
},
|
|
'tel': {
|
|
'type': 'string',
|
|
'maxLength': 10,
|
|
'pattern': '^[0-9]{0,10}$',
|
|
},
|
|
},
|
|
},
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'array',
|
|
'items': {
|
|
'type': 'object',
|
|
'required': [
|
|
'id',
|
|
'nom',
|
|
'prenom',
|
|
'tel',
|
|
'email',
|
|
'role',
|
|
'status',
|
|
],
|
|
'properties': {
|
|
'id': {
|
|
'type': 'integer',
|
|
},
|
|
'nom': {
|
|
'type': 'string',
|
|
},
|
|
'prenom': {
|
|
'type': 'string',
|
|
},
|
|
'tel': {
|
|
'type': 'string',
|
|
},
|
|
'email': {
|
|
'type': 'string',
|
|
},
|
|
'role': {
|
|
'enum': ['Coordonnateur', 'Accompagnateur'],
|
|
},
|
|
'statut': {
|
|
'enum': ['Actif', 'Inactif'],
|
|
},
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_referent(self, request, platform_id, email, ip=None, statut=None, post_data=None):
|
|
if request.method == 'GET':
|
|
response = self.get('platform/%s/referent/' % platform_id, email=email, ip=ip)
|
|
if statut:
|
|
data = []
|
|
for referent in response.get('data', []):
|
|
if referent.get('statut') != statut:
|
|
continue
|
|
data.append(referent)
|
|
response['data'] = data
|
|
return response
|
|
else:
|
|
return self.post('platform/%s/referent/' % platform_id, email=email, ip=ip, json=post_data)
|
|
|
|
# BUG, methods and post are incompatible
|
|
platform_referent.endpoint_info.methods.append('get')
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
methods=['post'],
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/referent/(?P<referent_id>[0-9]{1,10})/$',
|
|
example_pattern='{platform_id}/referent/{referent_id}/',
|
|
description=_('Update platform referent'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'referent_id': {
|
|
'description': _('Referent numeric identifier'),
|
|
'example_value': '9',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=3.5,
|
|
post_json_schema={
|
|
'type': 'object',
|
|
'required': ['nom', 'prenom', 'statut'],
|
|
'properties': {
|
|
'email': {
|
|
'type': 'string',
|
|
'maxLength': 78,
|
|
'pattern': '^(.*@.*)?$',
|
|
},
|
|
'nom': {
|
|
'type': 'string',
|
|
'maxLength': 28,
|
|
},
|
|
'prenom': {
|
|
'type': 'string',
|
|
'maxLength': 32,
|
|
},
|
|
'tel': {
|
|
'type': 'string',
|
|
'maxLength': 10,
|
|
'pattern': '^[0-9]{0,10}$',
|
|
},
|
|
'statut': {'enum': ['C', 'A']},
|
|
},
|
|
},
|
|
json_schema_response=response_schema(),
|
|
)
|
|
def platform_referent_update(self, request, platform_id, referent_id, email, ip=None, post_data=None):
|
|
return self.put(
|
|
'platform/%s/referent/%s/' % (platform_id, referent_id), email=email, ip=ip, json=post_data
|
|
)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/beneficiaire/$',
|
|
example_pattern='{platform_id}/beneficiaire/',
|
|
description_get=_('Get platform beneficiaries'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'page': {
|
|
'description': _('Page number'),
|
|
'example_value': '1',
|
|
},
|
|
'query': {
|
|
'description': _('Query numeric identifier'),
|
|
'example_value': '2',
|
|
},
|
|
'nom': {
|
|
'description': _('Beneficiary last name'),
|
|
'example_value': 'Doe',
|
|
},
|
|
'prenom': {
|
|
'description': _('Beneficiary last name'),
|
|
'example_value': 'John',
|
|
},
|
|
'matricule': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '1234',
|
|
},
|
|
'referent': {
|
|
'description': _('Referent numeric identifier'),
|
|
'example_value': '5678',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=4,
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'array',
|
|
'items': {
|
|
'type': 'object',
|
|
'required': [
|
|
'id',
|
|
'civilite',
|
|
'nom',
|
|
'prenom',
|
|
'date_naissance',
|
|
'actif',
|
|
'matricule',
|
|
'commune',
|
|
'code_pi',
|
|
'referent',
|
|
'date_deb_affectation',
|
|
'consulte',
|
|
'toppersdrodevorsa',
|
|
],
|
|
'properties': {
|
|
'id': {
|
|
'type': 'integer',
|
|
},
|
|
'civilite': {
|
|
'enum': ['MR', 'MME'],
|
|
},
|
|
'nom': {
|
|
'type': 'string',
|
|
},
|
|
'prenom': {
|
|
'type': 'string',
|
|
},
|
|
'date_naissance': {
|
|
'type': 'string',
|
|
'format': 'date',
|
|
},
|
|
'actif': OUI_NON_ENUM,
|
|
'matricule': {
|
|
'type': 'string',
|
|
},
|
|
'code_postal': {
|
|
'type': 'string',
|
|
},
|
|
'commune': {
|
|
'type': 'string',
|
|
},
|
|
'communcode_pi': {
|
|
'type': 'string',
|
|
},
|
|
'referent': {
|
|
'type': 'string',
|
|
},
|
|
'date_deb_affectation': DATE_SCHEMA,
|
|
'consulte': OUI_NON_ENUM,
|
|
'toppersdrodevorsa': OUI_NON_ENUM,
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_beneficiaire(
|
|
self,
|
|
request,
|
|
platform_id,
|
|
email,
|
|
ip=None,
|
|
page=None,
|
|
query=None,
|
|
nom=None,
|
|
prenom=None,
|
|
matricule=None,
|
|
referent=None,
|
|
id=None,
|
|
):
|
|
params = {}
|
|
for key in ['page', 'query', 'nom', 'prenom', 'matricule', 'referent', 'id']:
|
|
if key in locals():
|
|
params[key] = locals()[key]
|
|
return self.get('platform/%s/beneficiaire/' % platform_id, email=email, ip=ip, params=params)
|
|
|
|
def csv_response(self, name, data, filename):
|
|
response = HttpResponse(content_type='text/csv')
|
|
response['Content-Disposition'] = f'attachment; filename="{filename}"'
|
|
# write Unicode BOM to the response stream
|
|
response.write(b'\xef\xbb\xbf')
|
|
csv_columns = self.get_columns(name)
|
|
names = [name for name, title in csv_columns]
|
|
titles = [title for name, title in csv_columns]
|
|
writer = csv.writer(response, delimiter=';')
|
|
writer.writerow(titles)
|
|
for row in data:
|
|
writer.writerow(str(row.get(name) or '') for name in names)
|
|
return response
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/beneficiaire/csv/$',
|
|
example_pattern='{platform_id}/beneficiaire/csv/',
|
|
description_get=_('Get platform beneficiaries as CSV'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'page': {
|
|
'description': _('Page number'),
|
|
'example_value': '1',
|
|
},
|
|
'query': {
|
|
'description': _('Query numeric identifier'),
|
|
'example_value': '2',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=4.5,
|
|
)
|
|
def platform_beneficiaire_csv(
|
|
self,
|
|
request,
|
|
platform_id,
|
|
email,
|
|
ip=None,
|
|
page=None,
|
|
query=None,
|
|
nom=None,
|
|
prenom=None,
|
|
matricule=None,
|
|
referent=None,
|
|
):
|
|
params = {}
|
|
if query:
|
|
params['query'] = query
|
|
if query == '0':
|
|
for key in ['nom', 'prenom', 'matricule', 'referent']:
|
|
if locals().get(key):
|
|
params[key] = locals()[key]
|
|
content = self.get('platform/%s/beneficiaire/csv/' % platform_id, email=email, ip=ip, params=params)
|
|
date = localtime(now()).strftime('%Y-%m-%d_%H:%M')
|
|
return self.csv_response('beneficiaire', data=content['data'], filename=f'beneficiaire-{date}.csv')
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/',
|
|
description=_('Get beneficiary details'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=5,
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'object',
|
|
'required': [
|
|
'id',
|
|
'civilite',
|
|
'nom',
|
|
'prenom',
|
|
'date_naissance',
|
|
'actif',
|
|
'matricule',
|
|
'code_pi',
|
|
'referent',
|
|
'adresse',
|
|
'age',
|
|
'commentaire_ref',
|
|
'conjoint',
|
|
'droit',
|
|
'enfants',
|
|
'lib_code_pi',
|
|
'nomnaiss',
|
|
'numdemrsa',
|
|
'situation_familiale',
|
|
],
|
|
'properties': {
|
|
'id': {'type': 'integer'},
|
|
'civilite': {'enum': ['MR', 'MME']},
|
|
'nom': {'type': 'string'},
|
|
'prenom': {'type': 'string'},
|
|
'date_naissance': DATE_SCHEMA,
|
|
'actif': OUI_NON_ENUM,
|
|
'matricule': {'type': 'string'},
|
|
'code_pi': {'type': 'string'},
|
|
'referent': {
|
|
'type': 'object',
|
|
'required': ['id', 'nom', 'prenom'],
|
|
'properties': {
|
|
'id': {'type': 'integer'},
|
|
'nom': {'type': 'string'},
|
|
'prenom': {'type': 'string'},
|
|
},
|
|
},
|
|
'adresse': {
|
|
'type': 'object',
|
|
'required': ['adr2', 'adr3', 'adr4', 'adr5', 'adr6'],
|
|
'properties': {
|
|
'adr2': {'type': 'string'},
|
|
'adr3': {'type': 'string'},
|
|
'adr4': {'type': 'string'},
|
|
'adr5': {'type': 'string'},
|
|
'adr6': {'type': 'string'},
|
|
},
|
|
},
|
|
'age': {'type': 'string'},
|
|
'commentaire_ref': {'type': 'string'},
|
|
'conjoint': {
|
|
'type': 'object',
|
|
'required': ['id', 'age', 'prenom', 'nom', 'plateforme'],
|
|
'properties': {
|
|
'id': {'type': 'integer'},
|
|
'age': {'type': 'string'},
|
|
'nom': {'type': 'string'},
|
|
'prenom': {'type': 'string'},
|
|
'plateforme': {'type': 'string'},
|
|
},
|
|
},
|
|
'droit': {
|
|
'type': 'object',
|
|
'required': ['date_demande', 'etat', 'motif', 'toppersdrodevorsa'],
|
|
'properties': {
|
|
'date_demande': {'type': 'string', 'format': 'date'},
|
|
'etat': {'type': 'string'},
|
|
'motif': {'type': 'string'},
|
|
'toppersdrodevorsa': OUI_NON_ENUM,
|
|
},
|
|
},
|
|
'enfants': {
|
|
'type': 'array',
|
|
'items': {
|
|
'type': 'object',
|
|
'required': ['nom', 'prenom', 'age'],
|
|
'properties': {
|
|
'age': {'type': 'string'},
|
|
'nom': {'type': 'string'},
|
|
'prenom': {'type': 'string'},
|
|
},
|
|
},
|
|
},
|
|
'lib_code_pi': {'type': 'string'},
|
|
'nomnaiss': {'type': 'string'},
|
|
'numdemrsa': {'type': 'string'},
|
|
'situation_familiale': {
|
|
'type': 'object',
|
|
'required': ['date_debut', 'libelle'],
|
|
'properties': {
|
|
'date_debut': {'type': 'string', 'format': 'date'},
|
|
'libelle': {'type': 'string'},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_beneficiaire_detail(self, request, platform_id, beneficiary_id, email, ip=None):
|
|
return self.get('platform/%s/beneficiaire/%s/' % (platform_id, beneficiary_id), email=email, ip=ip)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
methods=['post'],
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/telephone/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/telephone/',
|
|
description=_('Create beneficiary\'s telephone'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=5.1,
|
|
post_json_schema={
|
|
'type': 'object',
|
|
'required': ['tel'],
|
|
'properties': {
|
|
'tel': {
|
|
'type': 'string',
|
|
'maxLength': 10,
|
|
'pattern': '^[0-9]{0,10}$',
|
|
},
|
|
'commentaire': {
|
|
'type': 'string',
|
|
},
|
|
},
|
|
},
|
|
json_schema_response=response_schema(),
|
|
)
|
|
def platform_beneficiaire_telephone(
|
|
self, request, platform_id, beneficiary_id, email, post_data, ip=None
|
|
):
|
|
return self.post(
|
|
'platform/%s/beneficiaire/%s/telephone/' % (platform_id, beneficiary_id),
|
|
email=email,
|
|
ip=ip,
|
|
json=post_data,
|
|
)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
methods=['post', 'delete'],
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/'
|
|
'telephone/(?P<numtel>[0-9]{1,10})/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/telephone/{numtel}/',
|
|
description_post=_('Update beneficiary\'s telephone comment'),
|
|
description_delete=_('Delete beneficiary\'s telephone'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
'numtel': {
|
|
'description': _('Beneficiary\'s telephone number'),
|
|
'example_value': '0699999999',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=5.2,
|
|
post_json_schema={
|
|
'type': 'object',
|
|
'required': ['commentaire'],
|
|
'properties': {
|
|
'commentaire': {
|
|
'type': 'string',
|
|
},
|
|
},
|
|
},
|
|
json_schema_response=response_schema(),
|
|
)
|
|
def platform_beneficiaire_telephone_update_or_delete(
|
|
self, request, platform_id, beneficiary_id, numtel, email, post_data=None, ip=None
|
|
):
|
|
if request.method == 'POST':
|
|
return self.put(
|
|
'platform/%s/beneficiaire/%s/telephone/%s/' % (platform_id, beneficiary_id, numtel),
|
|
email=email,
|
|
ip=ip,
|
|
json=post_data,
|
|
)
|
|
if request.method == 'DELETE':
|
|
return self.delete(
|
|
'platform/%s/beneficiaire/%s/telephone/%s/' % (platform_id, beneficiary_id, numtel),
|
|
email=email,
|
|
ip=ip,
|
|
)
|
|
|
|
# BUG, methods and post are incompatible
|
|
platform_beneficiaire_telephone_update_or_delete.endpoint_info.methods.append('delete')
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
methods=['post'],
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/email/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/email/',
|
|
description=_('Create beneficiary\'s email'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=5.1,
|
|
post_json_schema={
|
|
'request_body': {
|
|
'schema': {
|
|
'application/json': {
|
|
'type': 'object',
|
|
'required': ['courriel'],
|
|
'properties': {
|
|
'courriel': {
|
|
'type': 'string',
|
|
'pattern': '^(.*@.*)?$',
|
|
},
|
|
'commentaire': {
|
|
'type': 'string',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
},
|
|
json_schema_response=response_schema(),
|
|
)
|
|
def platform_beneficiaire_email(self, request, platform_id, beneficiary_id, email, post_data, ip=None):
|
|
return self.post(
|
|
'platform/%s/beneficiaire/%s/email/' % (platform_id, beneficiary_id),
|
|
email=email,
|
|
ip=ip,
|
|
json=post_data,
|
|
)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
methods=['post', 'delete'],
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/'
|
|
'email/(?P<courriel>[^/]+)/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/email/{courriel}/',
|
|
description_post=_('Update beneficiary\'s email comment'),
|
|
description_delete=_('Delete beneficiary\'s email'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
'courriel': {
|
|
'description': _('Beneficiary\'s email number'),
|
|
'example_value': '0699999999',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=5.2,
|
|
post_json_schema={
|
|
'type': 'object',
|
|
'required': ['commentaire'],
|
|
'properties': {
|
|
'commentaire': {
|
|
'type': 'string',
|
|
},
|
|
},
|
|
},
|
|
json_schema_response=response_schema(),
|
|
)
|
|
def platform_beneficiaire_email_update_or_delete(
|
|
self, request, platform_id, beneficiary_id, courriel, email, post_data=None, ip=None
|
|
):
|
|
if request.method == 'POST':
|
|
return self.put(
|
|
'platform/%s/beneficiaire/%s/email/%s/' % (platform_id, beneficiary_id, courriel),
|
|
email=email,
|
|
ip=ip,
|
|
json=post_data,
|
|
)
|
|
if request.method == 'DELETE':
|
|
return self.delete(
|
|
'platform/%s/beneficiaire/%s/email/%s/' % (platform_id, beneficiary_id, courriel),
|
|
email=email,
|
|
ip=ip,
|
|
)
|
|
|
|
# BUG, methods and post are incompatible
|
|
platform_beneficiaire_email_update_or_delete.endpoint_info.methods.append('delete')
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/transport/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/transport/',
|
|
description=_('Get beneficiary transport details'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=6,
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'object',
|
|
'required': ['cumuls'],
|
|
'properties': {
|
|
'cumuls': {
|
|
'type': 'array',
|
|
'items': {
|
|
'type': 'object',
|
|
'required': ['duree', 'type'],
|
|
'properties': {
|
|
'duree': {'type': 'integer'},
|
|
'type': {'type': 'string'},
|
|
},
|
|
},
|
|
}
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_beneficiaire_transport(self, request, platform_id, beneficiary_id, email, ip=None):
|
|
return self.get(
|
|
'platform/%s/beneficiaire/%s/transport/' % (platform_id, beneficiary_id), email=email, ip=ip
|
|
)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/contrat/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/contrat/',
|
|
description=_('Get beneficiary contracts'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=7,
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'array',
|
|
'items': {
|
|
'type': 'object',
|
|
'required': [
|
|
'id',
|
|
'clos',
|
|
'date_deb',
|
|
'date_fin',
|
|
'decision',
|
|
'duree',
|
|
'operateur',
|
|
'plateform',
|
|
'referent',
|
|
'retab',
|
|
],
|
|
'properties': {
|
|
'id': {'type': 'integer'},
|
|
'clos': OUI_NON_ENUM,
|
|
'date_deb': DATE_SCHEMA,
|
|
'date_fin': DATE_SCHEMA,
|
|
'decision': {'type': 'string'},
|
|
'duree': {'type': 'integer'},
|
|
'operateur': {'type': 'string'},
|
|
'plateforme': {'type': 'string'},
|
|
'retab': OUI_NON_ENUM,
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_beneficiaire_contrat(self, request, platform_id, beneficiary_id, email, ip=None):
|
|
return self.get(
|
|
'platform/%s/beneficiaire/%s/contrat/' % (platform_id, beneficiary_id), email=email, ip=ip
|
|
)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/'
|
|
r'beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/'
|
|
r'contrat/(?P<contract_id>[0-9]{1,10})/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/contrat/{contract_id}/',
|
|
description=_('Get beneficiary contract details'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
'contract_id': {
|
|
'description': _('Contract numeric identifier'),
|
|
'example_value': '7',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=8,
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'object',
|
|
'required': [
|
|
'id',
|
|
'commentaire',
|
|
'date_clos',
|
|
'date_cvs',
|
|
'date_deb',
|
|
'date_fin',
|
|
'date_retab',
|
|
'date_sign',
|
|
'decision',
|
|
'duree',
|
|
'motif_cvs',
|
|
'operateur',
|
|
'plateforme',
|
|
'referent',
|
|
'type_contrat',
|
|
],
|
|
'properties': {
|
|
'id': {'type': 'integer'},
|
|
'commentaire': {'type': 'string'},
|
|
'date_clos': DATE_SCHEMA,
|
|
'date_cvs': DATE_SCHEMA,
|
|
'date_deb': DATE_SCHEMA,
|
|
'date_fin': DATE_SCHEMA,
|
|
'date_retab': DATE_SCHEMA,
|
|
'date_sign': DATE_SCHEMA,
|
|
'decision': {'type': 'string'},
|
|
'duree': {'type': 'integer'},
|
|
'motif_cvs': {'type': 'string'},
|
|
'operateur': {'type': 'string'},
|
|
'plateforme': {'type': 'string'},
|
|
'referent': {
|
|
'type': 'object',
|
|
'required': ['commentaire', 'nom', 'prenom'],
|
|
'properties': {
|
|
'commentaire': {'type': 'string'},
|
|
'nom': {'type': 'string'},
|
|
'prenom': {'type': 'string'},
|
|
},
|
|
},
|
|
'type_contrat': {'type': 'string'},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_beneficiaire_contrat_detail(
|
|
self, request, platform_id, beneficiary_id, contract_id, email, ip=None
|
|
):
|
|
return self.get(
|
|
'platform/%s/beneficiaire/%s/contrat/%s/' % (platform_id, beneficiary_id, contract_id),
|
|
email=email,
|
|
ip=ip,
|
|
)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/'
|
|
r'beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/'
|
|
r'action/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/action/',
|
|
description=_('Get beneficiary actions'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
'clos': {
|
|
'description': _('Filter on closed status'),
|
|
'example_value': 'non',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=9,
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'array',
|
|
'items': {
|
|
'type': 'object',
|
|
'required': [
|
|
'id',
|
|
'contrat_id',
|
|
],
|
|
'properties': {
|
|
'id': {'type': 'integer'},
|
|
'contrat_id': {'type': 'integer'},
|
|
'libelle': {'type': 'string'},
|
|
'date_preconisation': DATE_SCHEMA,
|
|
'date_deb': DATE_SCHEMA,
|
|
'date_fin': DATE_SCHEMA,
|
|
'validation': {
|
|
'enum': ['En cours', 'Oui', 'Non'],
|
|
},
|
|
'clos': OUI_NON_ENUM,
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_beneficiaire_action(self, request, platform_id, beneficiary_id, email, ip=None, clos=None):
|
|
if clos and clos.lower() not in ['oui', 'non']:
|
|
raise APIError(_('clos must be "oui" or "non"'))
|
|
return self.get(
|
|
'platform/%s/beneficiaire/%s/action/' % (platform_id, beneficiary_id),
|
|
email=email,
|
|
ip=ip,
|
|
params={'clos': clos},
|
|
)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
methods=['get', 'post'],
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/'
|
|
r'beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/'
|
|
r'action/(?P<action_id>[0-9]{1,10})/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/action/{action_id}/',
|
|
description_get=_('Get beneficiary action details'),
|
|
description_post=_('Update beneficiary action details'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
'action_id': {
|
|
'description': _('Action numeric identifier'),
|
|
'example_value': '7',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=10,
|
|
post_json_schema={
|
|
'type': 'object',
|
|
'properties': {
|
|
'date_debut': DATE_SCHEMA,
|
|
'date_fin': DATE_SCHEMA,
|
|
'moticlodac': {'type': 'string'},
|
|
'commentaire_ref': {'type': 'string', 'maxLength': 1000},
|
|
},
|
|
},
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'object',
|
|
'required': [
|
|
'id',
|
|
'contrat_id',
|
|
],
|
|
'properties': {
|
|
'id': {'type': 'integer'},
|
|
'contrat_id': {'type': 'integer'},
|
|
'sac': {'type': 'string'},
|
|
'libelle': {'type': 'string'},
|
|
'date_preconisation': DATE_SCHEMA,
|
|
'date_deb': DATE_SCHEMA,
|
|
'date_fin': DATE_SCHEMA,
|
|
'date_cloture': DATE_SCHEMA,
|
|
'moticlodac': {'type': 'string'},
|
|
'lib_moticlodac': {'type': 'string'},
|
|
'validation': {
|
|
'enum': ['En cours', 'Oui', 'Non'],
|
|
},
|
|
'financement': {
|
|
'properties': {
|
|
'montant_demande': {'type': 'integer'},
|
|
'montant_accorde': {'type': 'integer'},
|
|
}
|
|
},
|
|
'commentaire_ref': {'type': 'string'},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_beneficiaire_action_detail(
|
|
self, request, platform_id, beneficiary_id, action_id, email, post_data=None, ip=None
|
|
):
|
|
if request.method == 'POST':
|
|
return self.put(
|
|
'platform/%s/beneficiaire/%s/action/%s/' % (platform_id, beneficiary_id, action_id),
|
|
email=email,
|
|
ip=ip,
|
|
json=post_data,
|
|
)
|
|
else:
|
|
return self.get(
|
|
'platform/%s/beneficiaire/%s/action/%s/' % (platform_id, beneficiary_id, action_id),
|
|
email=email,
|
|
ip=ip,
|
|
)
|
|
|
|
# bug
|
|
platform_beneficiaire_action_detail.endpoint_info.methods.insert(0, 'get')
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/'
|
|
r'beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/'
|
|
r'fondsaide/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/fondsaide/',
|
|
description=_('Get beneficiary help funds'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=11,
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'array',
|
|
'items': {
|
|
'type': 'object',
|
|
'properties': {
|
|
'id': {'type': 'integer'},
|
|
'cod_tfi': {'type': 'string'},
|
|
'lib_tfi': {'type': 'string'},
|
|
'demande': {
|
|
'type': 'object',
|
|
'properties': {
|
|
'montant': {'type': 'number'},
|
|
'date': DATE_SCHEMA,
|
|
},
|
|
},
|
|
'avis_pi': {
|
|
'type': 'object',
|
|
'properties': {
|
|
'montant': {'type': 'number'},
|
|
'date': DATE_SCHEMA,
|
|
'avis': {'type': 'string'},
|
|
},
|
|
},
|
|
'avis_sai': {
|
|
'type': 'object',
|
|
'properties': {
|
|
'montant': {'type': 'number'},
|
|
'date': DATE_SCHEMA,
|
|
},
|
|
},
|
|
'clos': OUI_NON_ENUM,
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_beneficiaire_fondsaide(self, request, platform_id, beneficiary_id, email, ip=None):
|
|
return self.get(
|
|
'platform/%s/beneficiaire/%s/fondsaide/' % (platform_id, beneficiary_id),
|
|
email=email,
|
|
ip=ip,
|
|
)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/'
|
|
r'beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/'
|
|
r'fondsaide/(?P<fondsaide_id>[0-9]{1,10})/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/fondsaide/{fondsaide_id}/',
|
|
description=_('Get beneficiary help fund details'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
'fondsaide_id': {
|
|
'description': _('Help fund numeric identifier'),
|
|
'example_value': '7',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=12,
|
|
json_schema_response=response_schema(
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"avis_pi": {
|
|
"type": "object",
|
|
"properties": {
|
|
"avis": {"type": "string"},
|
|
"date": DATE_SCHEMA,
|
|
"montant": {"type": "number"},
|
|
},
|
|
},
|
|
"budget": {
|
|
"type": "object",
|
|
"properties": {
|
|
"date_reception": {"type": "string"},
|
|
"justificatifs": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"conforme": {"type": "string"},
|
|
"date_reception": DATE_SCHEMA,
|
|
"date_relance": DATE_SCHEMA,
|
|
"num_versement": {"type": "integer"},
|
|
"reception": {"type": "string"},
|
|
"type": {"type": "string"},
|
|
},
|
|
},
|
|
},
|
|
"nombre_versements": {"type": "integer"},
|
|
},
|
|
},
|
|
"cloture": {
|
|
"type": "object",
|
|
"properties": {
|
|
"date_cloture": DATE_SCHEMA,
|
|
"date_relance": DATE_SCHEMA,
|
|
},
|
|
},
|
|
"code_tfi": {"type": "string"},
|
|
"decision_sai": {
|
|
"type": "object",
|
|
"properties": {
|
|
"date": DATE_SCHEMA,
|
|
"decision": {"type": "string"},
|
|
"montant": {"type": "number"},
|
|
},
|
|
},
|
|
"demande": {
|
|
"type": "object",
|
|
"properties": {
|
|
"date": DATE_SCHEMA,
|
|
"montant": {"type": "number"},
|
|
},
|
|
},
|
|
"id": {"type": "integer"},
|
|
"lib_tfi": {"type": "string"},
|
|
"recours": {
|
|
"type": "object",
|
|
"properties": {
|
|
"date_decision": DATE_SCHEMA,
|
|
"date_demande": DATE_SCHEMA,
|
|
"decision": {"type": "string"},
|
|
"montant": {"type": "string"},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_beneficiaire_fondsaide_detail(
|
|
self, request, platform_id, beneficiary_id, fondsaide_id, email, ip=None
|
|
):
|
|
return self.get(
|
|
'platform/%s/beneficiaire/%s/fondsaide/%s/' % (platform_id, beneficiary_id, fondsaide_id),
|
|
email=email,
|
|
ip=ip,
|
|
)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/'
|
|
r'beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/'
|
|
r'affectation/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/affectation/',
|
|
description=_('Get beneficiary affectations'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=13,
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'array',
|
|
'items': {
|
|
'type': 'object',
|
|
'properties': {
|
|
'id': {'type': 'integer'},
|
|
'dispositif': {'type': 'string'},
|
|
'plateforme': {'type': 'string'},
|
|
'code_pi': {'type': 'string'},
|
|
'referent': {'type': 'string'},
|
|
'date_deb': DATE_SCHEMA,
|
|
'origine': {'type': 'string'},
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_beneficiaire_affectation(self, request, platform_id, beneficiary_id, email, ip=None):
|
|
return self.get(
|
|
'platform/%s/beneficiaire/%s/affectation/' % (platform_id, beneficiary_id),
|
|
email=email,
|
|
ip=ip,
|
|
)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
methods=['post'],
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/'
|
|
r'beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/'
|
|
r'reaffectation/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/reaffectation/',
|
|
description=_('Reassign beneficiary'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=13.5,
|
|
post_json_schema={
|
|
'type': 'object',
|
|
'properties': {
|
|
'motif': {'type': 'string'},
|
|
'commentaire_ref': {'type': 'string'},
|
|
},
|
|
},
|
|
json_schema_response=response_schema(),
|
|
)
|
|
def platform_beneficiaire_reaffectation(
|
|
self, request, platform_id, beneficiary_id, email, post_data, ip=None
|
|
):
|
|
return self.post(
|
|
'platform/%s/beneficiaire/%s/reaffectation/' % (platform_id, beneficiary_id),
|
|
email=email,
|
|
ip=ip,
|
|
json=post_data,
|
|
)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
methods=['get', 'post'],
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/'
|
|
r'beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/'
|
|
r'affectation/(?P<affectation_id>[0-9]{1,10})/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/affectation/{affectation_id}/',
|
|
description_get=_('Get beneficiary affectation details'),
|
|
description_post=_('Update beneficiary affectation details'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
'affectation_id': {
|
|
'description': _('Help fund numeric identifier'),
|
|
'example_value': '7',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=14,
|
|
post_json_schema={
|
|
'type': 'object',
|
|
'properties': {
|
|
'rendezvous': {
|
|
'type': 'object',
|
|
'properties': {
|
|
'date_prise': DATE_SCHEMA,
|
|
'relance': {
|
|
'type': 'object',
|
|
'properties': {
|
|
'date': DATE_SCHEMA,
|
|
'motif': {'type': 'string'},
|
|
},
|
|
},
|
|
'date_reelle': DATE_SCHEMA,
|
|
'resultat': {'type': 'string'},
|
|
},
|
|
},
|
|
'commentaire_ref': {'type': 'string'},
|
|
},
|
|
'unflatten': True,
|
|
},
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'object',
|
|
'properties': {
|
|
'id': {'type': 'integer'},
|
|
'dispositif': {'type': 'string'},
|
|
'plateforme': {'type': 'string'},
|
|
'referent': {
|
|
'type': 'object',
|
|
'properties': {
|
|
'nom': {'type': 'string'},
|
|
'prenom': {'type': 'string'},
|
|
},
|
|
},
|
|
'code_pi': {'type': 'string'},
|
|
'date_deb': DATE_SCHEMA,
|
|
'origin': {'type': 'string'},
|
|
'origine': {'type': 'string'},
|
|
'erreur': OUI_NON_ENUM,
|
|
'prescripteur': {
|
|
'type': 'object',
|
|
'properties': {
|
|
'type': {'type': 'string'},
|
|
'dispositif': {'type': 'string'},
|
|
'plateforme': {'type': 'string'},
|
|
},
|
|
},
|
|
'rendezvous': {
|
|
'type': 'object',
|
|
'properties': {
|
|
'date_prise': DATE_SCHEMA,
|
|
'relance': {
|
|
'type': 'object',
|
|
'properties': {
|
|
'date': DATE_SCHEMA,
|
|
'motif': {'type': 'string'},
|
|
'lib_motif': {'type': 'string'},
|
|
},
|
|
},
|
|
'date_reelle': DATE_SCHEMA,
|
|
'resultat': {'type': 'string'},
|
|
'lib_resultat': {'type': 'string'},
|
|
},
|
|
},
|
|
'fin': {
|
|
'type': 'object',
|
|
'properties': {
|
|
'date': DATE_SCHEMA,
|
|
'motif': {'type': 'string'},
|
|
'lib_motif': {'type': 'string'},
|
|
},
|
|
},
|
|
'commentaire_ref': {'type': 'string'},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_beneficiaire_affectation_detail(
|
|
self, request, platform_id, beneficiary_id, affectation_id, email, post_data=None, ip=None
|
|
):
|
|
if request.method == 'POST':
|
|
return self.put(
|
|
'platform/%s/beneficiaire/%s/affectation/%s/' % (platform_id, beneficiary_id, affectation_id),
|
|
email=email,
|
|
ip=ip,
|
|
json=post_data,
|
|
)
|
|
else:
|
|
return self.get(
|
|
'platform/%s/beneficiaire/%s/affectation/%s/' % (platform_id, beneficiary_id, affectation_id),
|
|
email=email,
|
|
ip=ip,
|
|
)
|
|
|
|
platform_beneficiaire_affectation_detail.endpoint_info.methods.insert(0, 'get')
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/' r'beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/' r'convo/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/convo/',
|
|
description=_('Get beneficiary convocations'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=15,
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'array',
|
|
'items': {
|
|
"type": "object",
|
|
"properties": {
|
|
"convos_par_motif": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"nombre": {"type": "integer"},
|
|
"motif": {"type": "string"},
|
|
},
|
|
},
|
|
},
|
|
"derniere_consequence": {
|
|
"type": "object",
|
|
"properties": {
|
|
"date": DATE_SCHEMA,
|
|
"consequence": {"type": "string"},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_beneficiaire_convo(self, request, platform_id, beneficiary_id, email, ip=None):
|
|
return self.get(
|
|
'platform/%s/beneficiaire/%s/convo/' % (platform_id, beneficiary_id),
|
|
email=email,
|
|
ip=ip,
|
|
)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/'
|
|
r'beneficiaire/(?P<beneficiary_id>[0-9]{1,10})/'
|
|
r'emploi/$',
|
|
example_pattern='{platform_id}/beneficiaire/{beneficiary_id}/emploi/',
|
|
description=_('Get beneficiary employments'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'beneficiary_id': {
|
|
'description': _('Beneficiary numeric identifier'),
|
|
'example_value': '12',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=16,
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'array',
|
|
'items': {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {"type": "string"},
|
|
"code_axe": {"type": "string"},
|
|
"lib_axe": {"type": "string"},
|
|
"code_rome": {"type": "string"},
|
|
"lib_rome": {"type": "string"},
|
|
"code_categorie": {"type": "string"},
|
|
"lib_categorie": {"type": "string"},
|
|
"lib_secteur": {"type": "string"},
|
|
"lib_niveau": {"type": "string"},
|
|
"lib_modalite": {"type": "string"},
|
|
"date_inscription": DATE_SCHEMA,
|
|
"date_sortie": DATE_SCHEMA,
|
|
"motif_sortie": {"type": "string"},
|
|
"date_dernier_ent": DATE_SCHEMA,
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_beneficiaire_emploi(self, request, platform_id, beneficiary_id, email, ip=None):
|
|
return self.get(
|
|
'platform/%s/beneficiaire/%s/emploi/' % (platform_id, beneficiary_id),
|
|
email=email,
|
|
ip=ip,
|
|
)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/' r'facturation/periodes/',
|
|
example_pattern='{platform_id}/facturation/periodes/',
|
|
description=_('Get invoicing periods'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=17,
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'array',
|
|
'items': {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {"type": "string"},
|
|
"text": {"type": "string"},
|
|
"date_deb": {"type": "string"},
|
|
"date_fin": {"type": "string"},
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def platform_facturation_periodes(self, request, platform_id, email, ip=None):
|
|
response = self.get(
|
|
'platform/%s/facturation/periods/' % platform_id,
|
|
email=email,
|
|
ip=ip,
|
|
)
|
|
for period in response.get('data') or []:
|
|
period.setdefault('id', period['text'])
|
|
period['csv_url'] = (
|
|
request.build_absolute_uri(
|
|
reverse(
|
|
'generic-endpoint',
|
|
kwargs={
|
|
'slug': self.slug,
|
|
'connector': self.get_connector_slug(),
|
|
'endpoint': 'platform',
|
|
'rest': '%s/facturation/csv/' % platform_id,
|
|
},
|
|
)
|
|
)
|
|
+ '?'
|
|
+ urlencode({'date_deb': period['date_deb'], 'date_fin': period['date_fin']})
|
|
)
|
|
return response
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/facturation/csv/$',
|
|
example_pattern='{platform_id}/facturation/csv/',
|
|
description_get=_('Get platform invoicing as CSV'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
'date_deb': {
|
|
'description': _('Start date'),
|
|
'example_value': '2021-10-01',
|
|
'type': 'string',
|
|
'format': 'date',
|
|
},
|
|
'date_fin': {
|
|
'description': _('End date'),
|
|
'example_value': '2021-12-31',
|
|
'type': 'string',
|
|
'format': 'date',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=4.8,
|
|
)
|
|
def platform_facturation_csv(
|
|
self,
|
|
request,
|
|
date_deb,
|
|
date_fin,
|
|
platform_id,
|
|
email,
|
|
ip=None,
|
|
):
|
|
url = 'platform/%s/facturation/csv' % platform_id
|
|
content = self.get(url, email=email, ip=ip, params={'date_deb': date_deb, 'date_fin': date_fin})
|
|
filename = f'facturation-{date_deb}-{date_fin}.csv'
|
|
return self.csv_response('facturation', content.get('data') or [], filename=filename)
|
|
|
|
@endpoint(
|
|
name='platform',
|
|
pattern=r'^(?P<platform_id>[0-9]{1,10})/beneficiaire/sorti/csv/$',
|
|
example_pattern='{platform_id}/beneficiaire/sorti/csv/',
|
|
description_get=_('Get platform beneficiaries removed in the last 90 days'),
|
|
perm='can_access',
|
|
parameters=parameters(
|
|
{
|
|
'platform_id': {
|
|
'description': _('Platform numeric identifier'),
|
|
'example_value': '11',
|
|
},
|
|
}
|
|
),
|
|
display_category=_('Platform'),
|
|
display_order=4.9,
|
|
)
|
|
def platform_beneficiaire_sorti_csv(
|
|
self,
|
|
request,
|
|
platform_id,
|
|
email,
|
|
ip=None,
|
|
):
|
|
url = 'platform/%s/beneficiaire/sorti/csv' % platform_id
|
|
content = self.get(url, email=email, ip=ip)
|
|
date = localtime(now()).strftime('%Y-%m-%d_%H:%M')
|
|
return self.csv_response(
|
|
'sorti', data=content.get('data') or [], filename=f'beneficiaire-sorti-{date}.csv'
|
|
)
|
|
|
|
@endpoint(
|
|
name='sous-action',
|
|
description=_('Get sub-actions'),
|
|
perm='can_access',
|
|
parameters=parameters(),
|
|
json_schema_response=response_schema(
|
|
{
|
|
'type': 'array',
|
|
'items': {
|
|
'type': 'object',
|
|
'required': ['id', 'text'],
|
|
'properties': {
|
|
'id': {
|
|
'type': 'string',
|
|
},
|
|
'text': {
|
|
'type': 'string',
|
|
},
|
|
'description': {
|
|
'type': 'string',
|
|
},
|
|
},
|
|
},
|
|
}
|
|
),
|
|
)
|
|
def sous_action(self, request, email, ip=None):
|
|
return self.get('sousaction/', email=email, ip=ip)
|
|
|
|
|
|
DEFAULTS = {
|
|
'beneficiaire_csv_columns': [
|
|
"NUM_CAF",
|
|
"CODE_PER",
|
|
"NOM_PER",
|
|
"PRENOM_PER",
|
|
"DTNAI_PER",
|
|
"ACTIF_PER",
|
|
"CODE_PI",
|
|
"LIB_CODE_PI",
|
|
"TOPPERSDRODEVORSA",
|
|
"LIB_ETATDOSRSA",
|
|
"LIB_MOTIF_ETATDOSRSA",
|
|
"NB_JOUR_DEPUIS_ARR",
|
|
"DATE_DEB",
|
|
"DATE_1IERE_CONS",
|
|
"DATE_DERNIERE_CONSULT",
|
|
"DATE_REELLE_RDV",
|
|
"NUM_CINS",
|
|
"DATE_SIGN",
|
|
"DATE_DEB_CI",
|
|
"DATE_FIN_CI",
|
|
"REFERENT_CI",
|
|
"ACTION_EN_COURS",
|
|
"DELAI_REGUL",
|
|
"PROC_EN_COURS",
|
|
"REFERENT_AFFECTATION",
|
|
'COMPL1_ADR',
|
|
'COMPL2_ADR',
|
|
'VOIE_ADR',
|
|
'LIEU_DISTRIB_ADR',
|
|
'CP_ADR',
|
|
'VILLE_ADR',
|
|
'INSEE_ADR',
|
|
],
|
|
'facturation_csv_columns': [
|
|
"PLATEFORME",
|
|
"MATRICULE",
|
|
"NOM",
|
|
"PRENOM",
|
|
"DTNAI",
|
|
"GENRE",
|
|
"ROLE",
|
|
"CODE_POSTAL",
|
|
"COMMUNE",
|
|
"DATE_SIGN",
|
|
"DATE_DEB",
|
|
"DUREE",
|
|
"DATE_FIN",
|
|
"COEFFICIENT",
|
|
],
|
|
'sorti_csv_columns': [
|
|
"NUM_CAF",
|
|
"CODE_PER",
|
|
"NOM_PER",
|
|
"PRENOM_PER",
|
|
"DTNAI_PER",
|
|
"CP_PER",
|
|
"COMMUNE_PER",
|
|
"ACTIF_PER",
|
|
"CODE_PI",
|
|
"LIB_CODE_PI",
|
|
"TOPPERSDRODEVORSA",
|
|
"LIB_ETATDOSRSA",
|
|
"LIB_MOTIF_ETATDOSRSA",
|
|
"PLT_DT_DEB_AFF",
|
|
"PLT_DT_FIN_AFF",
|
|
"PLT_MOTIF_FIN_ACC",
|
|
"PLT_COMMENTAIRE_REF",
|
|
"PLT_NUM_CI",
|
|
"PLT_PLATEFORME_CI",
|
|
"PLT_OPERATEUR_CI",
|
|
"PLT_REFERENT_CI",
|
|
"PLT_DECISION_CI",
|
|
"PLT_DUREE_CI",
|
|
"PLT_DATE_DEB_CI",
|
|
"PLT_DATE_FIN_CI",
|
|
"NOUVEAU_DT_DEB_AFF",
|
|
"NOUVEAU_AFF",
|
|
"NOUVEAU_COMMENTAIRE_PI",
|
|
"NOUVEAU_NUM_CI",
|
|
"NOUVEAU_PLATEFORME_CI",
|
|
"NOUVEAU_OPERATEUR_CI",
|
|
"NOUVEAU_REFERENT_CI",
|
|
"NOUVEAU_DECISION_CI",
|
|
"NOUVEAU_DUREE_CI",
|
|
"NOUVEAU_DATE_DEB_CI",
|
|
"NOUVEAU_DATE_FIN_CI",
|
|
],
|
|
}
|