Compare commits

..

20 Commits

Author SHA1 Message Date
Nicolas Roche 9676943a0d toulouse-maelis: factorize childs and RLs data (#75455)
gitea/passerelle/pipeline/head This commit looks good Details
2023-03-29 11:07:18 +02:00
Nicolas Roche 6210cf3fa3 toulouse-maelis: add endpoint to get RLs and childs data (#75455) 2023-03-29 11:07:18 +02:00
Nicolas Roche 4b64f39337 toulouse-maelis: add tests on agent access providing DUI (#75463)
gitea/passerelle/pipeline/head This commit looks good Details
2023-03-29 10:45:13 +02:00
Nicolas Roche a61f858ebe toulouse_maelis: ease retrieving maelis ids on nursery (#74446)
gitea/passerelle/pipeline/head This commit looks good Details
2023-03-29 10:30:21 +02:00
Nicolas Roche f467587386 toulouse-maelis: add content on read_nursery_list test (#74446) 2023-03-29 10:30:21 +02:00
Nicolas Roche 761391c484 toulouse-maelis: manage indicators on create_nursery_demand (#74445)
gitea/passerelle/pipeline/head This commit looks good Details
2023-03-29 10:13:09 +02:00
Benjamin Dauvergne c8c54b50cb teamnet_axel: do not log HTTP errors (#75790)
gitea/passerelle/pipeline/head This commit looks good Details
2023-03-28 17:26:26 +02:00
Nicolas Roche 6322b75699 Revert "toulouse-maelis: [tools] add raw SOAP scripts (#75927)
gitea/passerelle/pipeline/head This commit looks good Details
This reverts commit 5b043a4030.
2023-03-28 15:42:30 +02:00
Nicolas Roche 5b043a4030 toulouse-maelis: [tools] add raw SOAP scripts (#75927)
gitea/passerelle/pipeline/head This commit looks good Details
2023-03-28 15:36:34 +02:00
Emmanuel Cazenave d656b273c9 api_entreprise: use v3 in match_mandataire_social endpoint (#75641)
gitea/passerelle/pipeline/head This commit looks good Details
2023-03-27 18:09:44 +02:00
Emmanuel Cazenave 5a44fdcdeb api_entreprise: delete effectifs/covid endpoints (#75640)
gitea/passerelle/pipeline/head Build started... Details
2023-03-27 18:08:51 +02:00
Emmanuel Cazenave 255933f904 api_entreprise: use v3 in exercices endpoint (#75621)
gitea/passerelle/pipeline/head There was a failure building this commit Details
2023-03-27 18:06:48 +02:00
Benjamin Dauvergne 57d2bb06a9 translation update (#75649)
gitea/passerelle/pipeline/head This commit looks good Details
Remove references to maelis connector's messages.
2023-03-24 16:47:53 +01:00
Benjamin Dauvergne c7dcc2a510 misc: remove maelis connector (#75649) 2023-03-24 16:47:53 +01:00
Benjamin Dauvergne 2de6325c6d misc: replace interception of zeep.exceptions.Fault (#75649)
* replaced by no interception at all in some places, as SOAPError inherit
  from APIError
* replaced by SOAPFault in cartads_cs as there was a custom handling of
  the soap Faults.
* new SOAPValidationError error is added to handle translation to
  APIError with 400 status and not logging as an error of the connector.
2023-03-24 16:47:53 +01:00
Benjamin Dauvergne 1f93f5506d utils/soap: handle case where Fault.detail is a byte string (#75649) 2023-03-24 16:47:53 +01:00
Benjamin Dauvergne 9c85b556f2 misc: let django.views.static.serve do its job (#75700)
gitea/passerelle/pipeline/head This commit looks good Details
It already checks the security of the given path through
django.utils._os.safe_join() and checks if the file exists.
2023-03-24 16:47:23 +01:00
Benjamin Dauvergne 2fbfeedb14 utils/pdf: do not crash on field without a /Rect (#75698)
gitea/passerelle/pipeline/head This commit looks good Details
2023-03-24 15:42:50 +01:00
Benjamin Dauvergne 64456cde9f utils/pdf: check radio buttons have kids (#75698) 2023-03-24 15:42:50 +01:00
Nicolas Roche 1fa564c70d toulouse-maelis: adapt functests with last changes (#74645)
gitea/passerelle/pipeline/head This commit looks good Details
2023-03-24 14:42:57 +01:00
64 changed files with 422 additions and 40123 deletions

View File

@ -15,6 +15,9 @@ from zeep.helpers import serialize_object
FAMILY_PAYLOAD = {
'category': 'BI',
'situation': 'MARI',
'nbChild': '3',
'nbTotalChild': '4',
'nbAES': '1',
'rl1': {
'civility': 'MME',
'firstname': 'Marge',
@ -327,6 +330,7 @@ def remove_id_on_rlg(conn, rlg):
rlg['lastname'] = 'N/A'
remove_extra_indicators(conn, rlg['indicatorList'], 'rl-indicator')
rlg['indicatorList'].sort(key=lambda x: x['code'])
rlg['quotientList'].sort(key=lambda x: (x['yearRev'], x['dateStart']))
del rlg['indicators'] # order may change

View File

@ -27,8 +27,8 @@
{
"id": "AVS",
"code": "AVS",
"text": "Auxiliaire de Vie scolaire",
"libelle": "Auxiliaire de Vie scolaire ",
"text": "Assistant de Vie scolaire",
"libelle": "Assistant de Vie scolaire ",
"typeDesc": "NONE",
"isActive": false
},

View File

@ -7,7 +7,8 @@
"dateBirth": "2016-05-09T00:00:00+02:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"dietcode": null,
"bPhoto": false,

View File

@ -3,9 +3,9 @@
"category": "BI",
"situation": "MARI",
"flagCom": true,
"nbChild": null,
"nbTotalChild": null,
"nbAES": null,
"nbChild": 3,
"nbTotalChild": 4,
"nbAES": "1",
"RL1": {
"num": "N/A",
"firstname": "MARGE",
@ -17,7 +17,8 @@
"dateBirth": "1950-10-01T00:00:00+01:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"adresse": {
"idStreet": "2317",
@ -57,7 +58,8 @@
"dateBirth": "2014-04-01T00:00:00+02:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"dietcode": "MENU_AV",
"bPhoto": true,
@ -186,7 +188,8 @@
"dateBirth": "2018-12-17T00:00:00+01:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"dietcode": "MENU_PAI",
"bPhoto": false,
@ -219,7 +222,8 @@
"dateBirth": "2018-04-01T00:00:00+02:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"dietcode": "MENU_AV",
"bPhoto": false,

View File

@ -9,7 +9,8 @@
"dateBirth": "1956-05-12T00:00:00+01:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"adresse": {
"idStreet": null,

View File

@ -1,4 +1,12 @@
[
{
"id": "AVS",
"code": "AVS",
"text": "Assistant de Vie scolaire",
"libelle": "Assistant de Vie scolaire ",
"typeDesc": "NONE",
"choiceList": []
},
{
"id": "AUTRE",
"code": "AUTRE",
@ -15,14 +23,6 @@
"typeDesc": "NONE",
"choiceList": []
},
{
"id": "AVS",
"code": "AVS",
"text": "Auxiliaire de Vie scolaire",
"libelle": "Auxiliaire de Vie scolaire ",
"typeDesc": "NONE",
"choiceList": []
},
{
"id": "ETABSPEC",
"code": "ETABSPEC",

View File

@ -219,7 +219,7 @@
{
"id": "37",
"code": "37",
"rang": "FAMILY",
"rang": "PERSON",
"text": "D\u00e9claration conjointe sign\u00e9e des parents",
"libelle": "D\u00e9claration conjointe sign\u00e9e des parents"
},
@ -261,14 +261,14 @@
{
"id": "64",
"code": "64",
"rang": "FAMILY",
"rang": "PERSON",
"text": "Jugement des affaires familiales",
"libelle": "Jugement des affaires familiales"
},
{
"id": "65",
"code": "65",
"rang": "FAMILY",
"rang": "PERSON",
"text": "Jugement mise sous tutelle",
"libelle": "Jugement mise sous tutelle"
},

View File

@ -1,4 +1,12 @@
[
{
"id": "AVS",
"code": "AVS",
"text": "Assistant de Vie scolaire",
"libelle": "Assistant de Vie scolaire ",
"typeDesc": "NONE",
"choiceList": []
},
{
"id": "AVL",
"code": "AVL",
@ -7,14 +15,6 @@
"typeDesc": "NONE",
"choiceList": []
},
{
"id": "AVS",
"code": "AVS",
"text": "Auxiliaire de Vie scolaire",
"libelle": "Auxiliaire de Vie scolaire ",
"typeDesc": "NONE",
"choiceList": []
},
{
"id": "ETABSPEC",
"code": "ETABSPEC",

File diff suppressed because it is too large Load Diff

View File

@ -10,8 +10,8 @@
{
"id": "AVS",
"code": "AVS",
"text": "Auxiliaire de Vie scolaire",
"libelle": "Auxiliaire de Vie scolaire ",
"text": "Assistant de Vie scolaire",
"libelle": "Assistant de Vie scolaire ",
"typeDesc": "NONE",
"isActive": false
},

View File

@ -7,7 +7,8 @@
"dateBirth": "1970-01-01T00:00:00+01:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"dietcode": "MENU_AV",
"bPhoto": false,

View File

@ -3,9 +3,9 @@
"category": "BI",
"situation": "MARI",
"flagCom": true,
"nbChild": null,
"nbTotalChild": null,
"nbAES": null,
"nbChild": 3,
"nbTotalChild": 4,
"nbAES": "1",
"RL1": {
"num": "N/A",
"firstname": "MARGE",
@ -17,7 +17,8 @@
"dateBirth": "1950-10-01T00:00:00+01:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"adresse": {
"idStreet": "2317",
@ -56,7 +57,8 @@
"dateBirth": "1956-05-12T00:00:00+01:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"adresse": {
"idStreet": null,
@ -127,7 +129,8 @@
"dateBirth": "2014-04-01T00:00:00+02:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"dietcode": "MENU_AV",
"bPhoto": true,
@ -250,7 +253,8 @@
"dateBirth": "2016-05-09T00:00:00+02:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"dietcode": "MENU_SV",
"bPhoto": false,
@ -283,7 +287,8 @@
"dateBirth": "2018-12-17T00:00:00+01:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"dietcode": "MENU_PAI",
"bPhoto": false,
@ -316,7 +321,8 @@
"dateBirth": "2018-04-01T00:00:00+02:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"dietcode": "MENU_AV",
"bPhoto": false,

View File

@ -3,9 +3,9 @@
"category": "AUTR",
"situation": "AUTR",
"flagCom": true,
"nbChild": null,
"nbTotalChild": null,
"nbAES": null,
"nbChild": 0,
"nbTotalChild": 0,
"nbAES": "0",
"RL1": {
"num": "N/A",
"firstname": "MARGE",
@ -17,7 +17,8 @@
"dateBirth": "1950-10-01T00:00:00+01:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"adresse": {
"idStreet": null,
@ -55,7 +56,8 @@
"dateBirth": "1956-05-12T00:00:00+01:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"adresse": {
"idStreet": null,
@ -111,7 +113,8 @@
"dateBirth": "1970-01-01T00:00:00+01:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"dietcode": null,
"bPhoto": false,
@ -183,7 +186,8 @@
"dateBirth": "2016-05-09T00:00:00+02:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"dietcode": "MENU_SV",
"bPhoto": false,
@ -216,7 +220,8 @@
"dateBirth": "2018-12-17T00:00:00+01:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"dietcode": "MENU_PAI",
"bPhoto": false,
@ -249,7 +254,8 @@
"dateBirth": "2018-04-01T00:00:00+02:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"dietcode": "MENU_AV",
"bPhoto": false,

View File

@ -1,13 +1,4 @@
[
{
"yearRev": 2021,
"dateStart": "2022-01-02T00:00:00+01:00",
"dateEnd": "2022-12-31T00:00:00+01:00",
"mtt": 1500.33,
"cdquo": "1",
"codeUti": null,
"cdquo_text": "Revenus fiscaux"
},
{
"yearRev": 2020,
"dateStart": "2022-01-02T00:00:00+01:00",
@ -25,5 +16,14 @@
"cdquo": "1",
"codeUti": null,
"cdquo_text": "Revenus fiscaux"
},
{
"yearRev": 2021,
"dateStart": "2022-01-02T00:00:00+01:00",
"dateEnd": "2022-12-31T00:00:00+01:00",
"mtt": 1500.33,
"cdquo": "1",
"codeUti": null,
"cdquo_text": "Revenus fiscaux"
}
]

View File

@ -9,7 +9,8 @@
"dateBirth": "1950-10-01T00:00:00+01:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"adresse": {
"idStreet": "2317",

View File

@ -9,7 +9,8 @@
"dateBirth": "1956-05-12T00:00:00+01:00",
"place": null,
"communeCode": null,
"countryCode": null
"countryCode": null,
"cdDepartment": null
},
"adresse": {
"idStreet": null,

View File

@ -34,4 +34,5 @@ def test_referentials(conn, referentials, ref):
for item in res['data']:
assert 'id' in item
assert 'text' in item
assert diff(res['data'], 'test_read_%s_list.json' % ref)
if ref not in ['street']:
assert diff(res['data'], 'test_read_%s_list.json' % ref)

View File

@ -9,6 +9,9 @@ from .conftest import diff, diff_child, diff_family, diff_rlg, link, read_family
FAMILY_RESET_PAYLOAD = {
'category': 'AUTR',
'situation': 'AUTR',
'nbChild': '',
'nbTotalChild': '',
'nbAES': '',
'rl1': {
'civility': 'MR', # no effect
'firstname': 'Marge', # must be
@ -230,7 +233,7 @@ def test_create_family(conn, create_data, update_data):
res = resp.json()
assert res['err'] == 1
assert 'Il existe déjà un Responsable Légal correspondant' in res['err_desc']
assert res['err_class'] == 'passerelle.utils.soap.SOAPFault'
assert res['err_class'] == 'passerelle.utils.jsonresponse.APIError'
# RL1 already exists (on update_data, as RL2) error
payload['rl1']['firstname'] = 'Homer'
@ -240,7 +243,7 @@ def test_create_family(conn, create_data, update_data):
res = resp.json()
assert res['err'] == 1
assert 'Il existe déjà un Responsable Légal correspondant' in res['err_desc']
assert res['err_class'] == 'passerelle.utils.soap.SOAPFault'
assert res['err_class'] == 'passerelle.utils.jsonresponse.APIError'
def test_is_rl_exists(conn, update_data):
@ -918,7 +921,7 @@ def test_add_supplied_document(conn, create_data):
res = resp.json()
assert res['err'] == 0
# push on childe
# push on child
payload['numPerson'] = create_data['bart_num']
url = conn + '/add-supplied-document?NameID=%s' % create_data['name_id']
resp = requests.post(url, json=payload)

View File

@ -9,7 +9,7 @@ def test_direct_debit_order(conn, create_data):
url = conn + '/add-rl1-direct-debit-order?NameID=%s' % create_data['name_id']
payload = {
'codeRegie': '1',
'codeRegie': '102',
'bank/bankBIC': 'BDFEFR2T',
'bank/bankIBAN': 'FR7630001007941234567890185',
'bank/bankRUM': 'xxx',
@ -26,7 +26,7 @@ def test_direct_debit_order(conn, create_data):
url = conn + '/get-rl1-direct-debit-order?NameID=%s' % create_data['name_id']
params = {
'codeRegie': '1',
'codeRegie': '102',
'dateRef': '2023-01-01',
}
resp = requests.get(url, params=params)

View File

@ -432,64 +432,7 @@ class APIEntreprise(BaseResource):
},
)
def exercices(self, request, siret, **kwargs):
return self.get('v2/exercices/%s/' % siret, **kwargs)
@endpoint(
perm='can_access',
pattern=r'(?P<siren>\w+)/$',
example_pattern='{siren}/',
description=_('Get firm\'s annual workforce data'),
parameters={
'siren': SIREN_PARAM,
'object': OBJECT_PARAM,
'context': CONTEXT_PARAM,
'recipient': RECIPIENT_PARAM,
},
)
def effectifs_annuels_acoss_covid(self, request, siren, **kwargs):
if len(siren) != 9:
raise APIError(_('invalid SIREN length (must be 9 characters)'))
return self.get('v2/effectifs_annuels_acoss_covid/%s/' % siren, **kwargs)
@endpoint(
perm='can_access',
pattern=r'(?P<year>\w+)/(?P<month>\w+)/(?P<siren>\w+)/$',
description=_('Get firm\'s monthly workforce data, by SIREN'),
parameters={
'year': YEAR_PARAM,
'month': MONTH_PARAM,
'siren': SIREN_PARAM,
'object': OBJECT_PARAM,
'context': CONTEXT_PARAM,
'recipient': RECIPIENT_PARAM,
},
)
def entreprise_effectifs_mensuels_acoss_covid(self, request, year, month, siren, **kwargs):
if len(siren) != 9:
raise APIError(_('invalid SIREN length (must be 9 characters)'))
month = month.zfill(2)
return self.get(
'v2/effectifs_mensuels_acoss_covid/%s/%s/entreprise/%s/' % (year, month, siren), **kwargs
)
@endpoint(
perm='can_access',
pattern=r'(?P<year>\w+)/(?P<month>\w+)/(?P<siret>\w+)/$',
description=_('Get firm\'s monthly workforce data, by SIRET'),
parameters={
'year': YEAR_PARAM,
'month': MONTH_PARAM,
'siret': SIRET_PARAM,
'object': OBJECT_PARAM,
'context': CONTEXT_PARAM,
'recipient': RECIPIENT_PARAM,
},
)
def etablissement_effectifs_mensuels_acoss_covid(self, request, year, month, siret, **kwargs):
month = month.zfill(2)
return self.get(
'v2/effectifs_mensuels_acoss_covid/%s/%s/etablissement/%s/' % (year, month, siret), **kwargs
)
return self.get('v3/dgfip/etablissements/%s/chiffres_affaires' % siret, raw=True, **kwargs)
@endpoint(
perm='can_access',
@ -511,18 +454,17 @@ class APIEntreprise(BaseResource):
def match_mandataire_social(
self, request, siren, first_name, last_name, birthdate, method='simple', **kwargs
):
entreprise = self.get(
'v2/entreprises/%s/' % siren,
raw=True,
**kwargs,
)
mandataires = self.get(
'v3/infogreffe/rcs/unites_legales/%s/mandataires_sociaux' % siren, raw=True, **kwargs
).get('data', [])
methods = {
'simple': simple_match,
'levenshtein': levenshtein_match,
}
if method not in methods:
return {'err': 1, 'err_desc': 'method %s not implemented' % method}
for mandataire in entreprise.get('entreprise', {}).get('mandataires_sociaux', []):
for mandataire in mandataires:
if methods[method](mandataire, first_name, last_name, birthdate):
return {'err': 0, 'data': mandataire}
return {'err': 0, 'data': {}}

View File

@ -21,10 +21,8 @@ import urllib
import lxml.etree
from django.db import models
from django.utils import dateformat, dateparse
from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _
from zeep import helpers
from zeep.exceptions import Fault
from passerelle.base.models import BaseResource
from passerelle.utils.api import endpoint
@ -58,10 +56,7 @@ class ATALConnector(BaseResource):
def _soap_call(self, wsdl, method, **kwargs):
client = self._soap_client(wsdl=wsdl)
try:
return getattr(client.service, method)(**kwargs)
except Fault as e:
raise APIError(force_str(e))
return getattr(client.service, method)(**kwargs)
def _basic_ref(self, wsdl, method):
soap_res = self._soap_call(wsdl=wsdl, method=method)

View File

@ -27,7 +27,6 @@ from xml.etree import ElementTree as etree
import pdfrw
import pdfrw.findobjs
import zeep.exceptions
import zeep.helpers as zeep_helpers
from Cryptodome.Cipher import AES
from django.conf import settings
@ -45,6 +44,7 @@ from passerelle.base.models import BaseResource
from passerelle.base.signature import sign_url
from passerelle.utils.api import endpoint
from passerelle.utils.jsonresponse import APIError, JSONEncoder
from passerelle.utils.soap import SOAPFault
def cartads_file_location(instance, filename):
@ -326,7 +326,7 @@ class AbstractCartaDSCS(BaseResource):
for dossier in CartaDSDossier.objects.filter(cartads_id_dossier__isnull=False, deleted=False):
try:
dossier.cartads_steps_cache = {'steps': self.get_dossier_steps(client, token, dossier)}
except zeep.exceptions.Fault as e:
except SOAPFault as e:
if "n'existe pas" in str(e):
dossier.deleted = True
dossier.save()
@ -336,7 +336,7 @@ class AbstractCartaDSCS(BaseResource):
dossier.cartads_cache_code_acces = client_suivi.service.GetMotPasse(
self.get_token(), dossier.cartads_id_dossier
)
except zeep.exceptions.Fault as e:
except SOAPFault as e:
self.logger.exception('error getting access code (%s) (%s)', dossier.id, e)
try:
infos_dossier = client_dossier.service.GetInfosDossier(
@ -347,7 +347,7 @@ class AbstractCartaDSCS(BaseResource):
dossier.cartads_cache_infos = json.loads(
json.dumps(zeep_helpers.serialize_object(infos_dossier), cls=JSONEncoder)
)
except zeep.exceptions.Fault as e:
except SOAPFault as e:
self.logger.exception('error getting dossier infos (%s) (%s)', dossier.id, e)
dossier.save()
self.sync_subscribers_role(dossier)
@ -951,7 +951,7 @@ class AbstractCartaDSCS(BaseResource):
),
},
)
except zeep.exceptions.Fault as e:
except SOAPFault as e:
self.logger.exception('error pushing file item %d (%s)', piece.id, e)
continue
else:
@ -994,7 +994,7 @@ class AbstractCartaDSCS(BaseResource):
),
},
)
except zeep.exceptions.Fault as e:
except SOAPFault as e:
self.logger.exception('error pushing file item %d (%s)', piece.id, e)
else:
assert resp is None
@ -1047,7 +1047,7 @@ class AbstractCartaDSCS(BaseResource):
'InformationsComplementaires': key_value_of_stringstring(infos),
},
)
except zeep.exceptions.Fault as e:
except SOAPFault as e:
self.logger.exception('error pushing daact file item %d (%s)', piece.id, e)
else:
assert resp is None
@ -1177,7 +1177,7 @@ class AbstractCartaDSCS(BaseResource):
resp = client.service.ActiverServiceSuiviNumerique(
self.get_token(), dossier_number, dossier_password
)
except zeep.exceptions.Fault as e:
except SOAPFault as e:
self.logger.error('error joining dossier %s (%s)', dossier_number, e)
raise APIError('error joining dossier (wrong password?)')
id_dossier = int(resp)

View File

@ -1,67 +0,0 @@
# Generated by Django 1.11.29 on 2020-09-29 13:56
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('base', '0022_auto_20200715_1033'),
]
operations = [
migrations.CreateModel(
name='Link',
fields=[
(
'id',
models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
('name_id', models.CharField(max_length=256)),
('family_id', models.CharField(max_length=128)),
('created', models.DateTimeField(auto_now_add=True)),
('updated', models.DateTimeField(auto_now=True)),
],
),
migrations.CreateModel(
name='Maelis',
fields=[
(
'id',
models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
('title', models.CharField(max_length=50, verbose_name='Title')),
('slug', models.SlugField(unique=True, verbose_name='Identifier')),
('description', models.TextField(verbose_name='Description')),
(
'base_url',
models.URLField(
default='http://www3.sigec.fr/entrouvertws/services/', verbose_name='Base API URL'
),
),
('login', models.CharField(max_length=256, verbose_name='API Login')),
('password', models.CharField(max_length=256, verbose_name='API Password')),
(
'users',
models.ManyToManyField(
blank=True, related_name='_maelis_users_+', related_query_name='+', to='base.ApiUser'
),
),
],
options={
'verbose_name': 'Maélis',
},
),
migrations.AddField(
model_name='link',
name='resource',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='maelis.Maelis'),
),
migrations.AlterUniqueTogether(
name='link',
unique_together={('resource', 'name_id')},
),
]

View File

@ -1,678 +0,0 @@
# Copyright (C) 2020 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/>.
from collections import defaultdict
from urllib.parse import urljoin
import zeep
from django.db import models
from django.utils import timezone
from django.utils.dateparse import parse_date
from django.utils.translation import gettext_lazy as _
from zeep.helpers import serialize_object
from zeep.wsse.username import UsernameToken
from passerelle.base.models import BaseResource
from passerelle.utils.api import endpoint
from passerelle.utils.jsonresponse import APIError
from . import utils
LINK_SCHEMA = {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Maelis",
"description": "",
"type": "object",
"required": ["family_id", "password"],
"properties": {
"family_id": {
"description": "family_id",
"type": "string",
},
"password": {
"description": "family password",
"type": "string",
},
"school_year": {
"description": "school year",
"type": "string",
},
},
}
COORDINATES_SCHEMA = {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Maelis",
"description": "Person Coordinates",
"type": "object",
"properties": {
"num": {"description": "number", "type": "string", "pattern": "^[0-9]*$"},
"street": {
"description": "street",
"type": "string",
},
"zipcode": {
"description": "zipcode",
"type": "string",
},
"town": {
"description": "town",
"type": "string",
},
"phone": {
"description": "phone",
"type": "string",
},
"mobile": {
"description": "mobile",
"type": "string",
},
"mail": {
"description": "mail",
"type": "string",
},
},
}
class Maelis(BaseResource):
base_url = models.URLField(_('Base API URL'), default='http://www3.sigec.fr/entrouvertws/services/')
login = models.CharField(_('API Login'), max_length=256)
password = models.CharField(_('API Password'), max_length=256)
category = _('Business Process Connectors')
class Meta:
verbose_name = 'Maélis'
@classmethod
def get_verbose_name(cls):
return cls._meta.verbose_name
def check_status(self):
response = self.requests.get(self.base_url)
response.raise_for_status()
def get_client(self, wsdl_name):
wsse = UsernameToken(self.login, self.password)
wsdl_url = urljoin(self.base_url, wsdl_name)
return self.soap_client(wsdl_url=wsdl_url, wsse=wsse)
def call(self, wsdl_name, service, **kwargs):
client = self.get_client(wsdl_name)
method = getattr(client.service, service)
try:
return method(**kwargs)
except zeep.exceptions.Fault as e:
raise APIError(e)
def get_link(self, name_id):
try:
return self.link_set.get(name_id=name_id)
except Link.DoesNotExist:
raise APIError('User not linked to family', err_code='not-found')
def get_family_data(self, family_id, school_year=None):
if not school_year:
# fallback to current year if not provided
school_year = utils.get_school_year()
family_data = serialize_object(
self.call('FamilyService?wsdl', 'readFamily', dossierNumber=family_id, schoolYear=school_year)
)
for child in family_data['childInfoList']:
utils.normalize_person(child)
return family_data
def get_child_info(self, NameID, childID):
link = self.get_link(NameID)
family_data = self.get_family_data(link.family_id)
for child in family_data.get('childInfoList', []):
if child['num'] == childID:
return child
raise APIError('Child not found', err_code='not-found')
def get_invoices(self, regie_id, name_id):
family_id = self.get_link(name_id).family_id
return [
utils.normalize_invoice(i)
for i in self.call(
'InvoiceService?wsdl', 'readInvoices', numDossier=family_id, codeRegie=regie_id
)
]
@endpoint(
display_category=_('Family'),
display_order=1,
description=_('Create link between user and family'),
perm='can_access',
parameters={
'NameID': {'description': _('Publik ID')},
},
post={'request_body': {'schema': {'application/json': LINK_SCHEMA}}},
)
def link(self, request, NameID, post_data):
if 'school_year' not in post_data:
# fallback to default year if not provided
post_data['school_year'] = utils.get_school_year()
r = self.call(
'FamilyService?wsdl',
'readFamilyByPassword',
dossierNumber=post_data['family_id'],
password=post_data['password'],
schoolYear=post_data['school_year'],
)
if not r.number:
raise APIError('Family not found', err_code='not-found')
Link.objects.update_or_create(resource=self, name_id=NameID, defaults={'family_id': r.number})
return {'data': serialize_object(r)}
@endpoint(
display_category=_('Family'),
display_order=2,
description=_('Delete link between user and family'),
methods=['post'],
perm='can_access',
parameters={
'NameID': {'description': _('Publik ID')},
},
)
def unlink(self, request, NameID):
link = self.get_link(NameID)
link_id = link.pk
link.delete()
return {'link': link_id, 'deleted': True, 'family_id': link.family_id}
@endpoint(
display_category=_('Family'),
display_order=4,
description=_("Get information about user's family"),
name='family-info',
perm='can_access',
parameters={
'NameID': {'description': _('Publik ID')},
},
)
def family_info(self, request, NameID):
link = self.get_link(NameID)
family_data = self.get_family_data(link.family_id)
return {'data': family_data}
@endpoint(
display_category=_('Family'),
display_order=6,
description=_("Get information about children"),
perm='can_access',
name='children-info',
parameters={
'NameID': {'description': _('Publik ID')},
},
)
def children_info(self, request, NameID):
link = self.get_link(NameID)
family_data = self.get_family_data(link.family_id)
return {'data': family_data['childInfoList']}
@endpoint(
display_category=_('Family'),
display_order=7,
description=_("Get information about adults"),
perm='can_access',
name='adults-info',
parameters={
'NameID': {'description': _('Publik ID')},
},
)
def adults_info(self, request, NameID):
link = self.get_link(NameID)
family_data = self.get_family_data(link.family_id)
adults = []
if family_data.get('rl1InfoBean'):
adults.append(utils.normalize_person(family_data['rl1InfoBean']))
if family_data.get('rl2InfoBean'):
adults.append(utils.normalize_person(family_data['rl2InfoBean']))
return {'data': adults}
@endpoint(
display_category=_('Family'),
display_order=7,
description=_("Get information about a child"),
perm='can_access',
name='child-info',
parameters={
'NameID': {'description': _('Publik ID')},
'childID': {'description': _('Child ID')},
},
)
def child_info(self, request, NameID, childID):
return {'data': self.get_child_info(NameID, childID)}
@endpoint(
display_category=_('Family'),
display_order=7,
description=_('Update coordinates'),
perm='can_access',
name='update-coordinates',
parameters={
'NameID': {'description': _('Publik ID')},
'personID': {'description': _('Person ID')},
},
post={'request_body': {'schema': {'application/json': COORDINATES_SCHEMA}}},
)
def update_coordinates(self, request, NameID, personID, post_data):
link = self.get_link(NameID)
params = defaultdict(dict)
for address_param in ('num', 'zipcode', 'town'):
if address_param in post_data:
params['adresse'][address_param] = post_data[address_param]
if 'street' in post_data:
params['adresse']['street1'] = post_data['street']
for contact_param in ('phone', 'mobile', 'mail'):
if contact_param in post_data:
params['contact'][contact_param] = post_data[contact_param]
r = self.call(
'FamilyService?wsdl', 'updateCoordinate', numDossier=link.family_id, numPerson=personID, **params
)
return serialize_object(r)
@endpoint(
display_category=_('Invoices'),
display_order=1,
name='regie',
perm='can_access',
pattern=r'^(?P<regie_id>[\w-]+)/invoices/?$',
example_pattern='{regie_id}/invoices',
description=_("Get invoices to pay"),
parameters={
'NameID': {'description': _('Publik ID')},
'regie_id': {'description': _('Regie identifier'), 'example_value': '42-42'},
},
)
def invoices(self, request, regie_id, NameID):
invoices = [i for i in self.get_invoices(regie_id=regie_id, name_id=NameID) if not i['paid']]
return {'data': invoices}
@endpoint(
display_category=_('Invoices'),
display_order=2,
name='regie',
perm='can_access',
pattern=r'^(?P<regie_id>[\w-]+)/invoices/history/?$',
example_pattern='{regie_id}/invoices/history',
description=_("Get invoices already paid"),
parameters={
'NameID': {'description': _('Publik ID')},
'regie_id': {'description': _('Regie identifier'), 'example_value': '42-42'},
},
)
def invoices_history(self, request, regie_id, NameID):
invoices = [i for i in self.get_invoices(regie_id=regie_id, name_id=NameID) if i['paid']]
return {'data': invoices}
@endpoint(
display_category=_('Invoices'),
display_order=3,
name='regie',
perm='can_access',
pattern=r'^(?P<regie_id>[\w-]+)/invoice/(?P<invoice_id>(historical-)?\w+-\d+)/?$',
example_pattern='{regie_id}/invoice/{invoice_id}',
description=_('Get invoice details'),
parameters={
'NameID': {'description': _('Publik ID')},
'regie_id': {'description': _('Regie identifier'), 'example_value': '1'},
'invoice_id': {'description': _('Invoice identifier'), 'example_value': '42-42'},
},
)
def invoice(self, request, regie_id, invoice_id, NameID):
for invoice in self.get_invoices(regie_id=regie_id, name_id=NameID):
if invoice['id'] == invoice_id:
return {'data': invoice}
@endpoint(
display_category=_('Invoices'),
display_order=4,
name='regie',
perm='can_access',
pattern=r'^(?P<regie_id>[\w-]+)/invoice/(?P<invoice_id>(historical-)?\w+-\d+)/pdf/?$',
example_pattern='{regie_id}/invoice/{invoice_id}/pdf',
description=_('Get invoice as a PDF file'),
parameters={
'NameID': {'description': _('Publik ID')},
'regie_id': {'description': _('Regie identifier'), 'example_value': '1'},
'invoice_id': {'description': _('Invoice identifier'), 'example_value': '42-42'},
},
)
def invoice_pdf(self, request, regie_id, invoice_id, **kwargs):
# TODO to implement
pass
@endpoint(
perm='can_access',
description=_('Get activity list'),
name='activity-list',
parameters={
'NameID': {'description': _('Publik ID')},
'personID': {'description': _('Person ID')},
'school_year': {'description': _('School year')},
},
)
def activity_list(
self, request, NameID, personID, school_year=None, start_datetime=None, end_datetime=None
):
link = self.get_link(NameID)
family_data = self.get_family_data(link.family_id)
if personID not in [c['id'] for c in family_data['childInfoList']]:
raise APIError('Child not found', err_code='not-found')
if not school_year:
school_year = utils.get_school_year()
if not start_datetime:
start_datetime = timezone.now()
if not end_datetime:
end_datetime = start_datetime + timezone.timedelta(days=62)
r = self.call(
'ActivityService?wsdl',
'readActivityList',
schoolyear=school_year,
numPerson=personID,
dateStartCalend=start_datetime,
dateEndCalend=end_datetime,
)
activities = serialize_object(r)
return {'data': [utils.normalize_activity(a) for a in activities]}
def get_activities_dates(self, query_date):
if query_date:
try:
start_date = parse_date(query_date)
except ValueError as exc:
raise APIError('input is well formatted but not a valid date: %s' % exc)
if not start_date:
raise APIError("input isn't well formatted, YYYY-MM-DD expected: %s" % query_date)
else:
start_date = timezone.now().date()
if start_date.strftime('%m-%d') >= '05-01':
# start displaying next year activities on may
school_year = start_date.year
else:
school_year = start_date.year - 1
end_date = utils.get_datetime('%s-07-31' % (school_year + 1)).date()
return school_year, start_date, end_date
def get_child_activities(self, childID, school_year, start_date, end_date):
r = self.call(
'ActivityService?wsdl',
'readActivityList',
schoolyear=school_year,
numPerson=childID,
dateStartCalend=start_date,
dateEndCalend=end_date,
)
return serialize_object(r)
@endpoint(
display_category=_('Activities'),
perm='can_access',
display_order=2,
description=_('Get child activities'),
name='child-activities',
parameters={
'NameID': {'description': _('Publik ID')},
'childID': {'description': _('Child ID')},
'subscribePublication': {'description': _('string including E, N or L (default to "E")')},
'subscribingStatus': {'description': _('subscribed, not-subscribed or None')},
'queryDate': {'description': _('Optional querying date (YYYY-MM-DD)')},
},
)
def child_activities(
self, request, NameID, childID, subscribePublication='E', subscribingStatus=None, queryDate=None
):
if subscribingStatus and subscribingStatus not in ('subscribed', 'not-subscribed'):
raise APIError('wrong value for subscribingStatus: %s' % subscribingStatus)
school_year, start_date, end_date = self.get_activities_dates(queryDate)
child_info = self.get_child_info(NameID, childID)
activities = self.get_child_activities(childID, school_year, start_date, end_date)
flatted_activities = utils.flatten_activities(activities, start_date, end_date)
utils.mark_subscribed_flatted_activities(flatted_activities, child_info)
data = utils.flatted_activities_as_list(
flatted_activities, subscribePublication, subscribingStatus, start_date
)
return {'data': data}
@endpoint(
display_category=_('Activities'),
perm='can_access',
display_order=3,
description=_('Get bus lines (units)'),
name='bus-lines',
parameters={
'NameID': {'description': _('Publik ID')},
'childID': {'description': _('Child ID')},
'activityID': {'description': _('Activity ID')},
'unitID': {'description': _('Unit ID')},
'queryDate': {'description': _('Optional querying date (YYYY-MM-DD)')},
'direction': {'description': _('aller, retour or None')},
},
)
def bus_lines(self, request, NameID, childID, activityID, unitID, queryDate=None, direction=None):
if direction and direction.lower() not in ('aller', 'retour'):
raise APIError('wrong value for direction: %s' % direction)
school_year, start_date, end_date = self.get_activities_dates(queryDate)
self.get_child_info(NameID, childID)
activities = self.get_child_activities(childID, school_year, start_date, end_date)
flatted_activities = utils.flatten_activities(activities, start_date, end_date)
legacy_activity_info = flatted_activities[activityID]['info']
legacy_unit_info = flatted_activities[activityID]['units'][unitID]['info']
bus_lines = []
bus_activity_id = legacy_activity_info['bus_activity_id']
for bus_unit_id in legacy_activity_info['bus_unit_ids']:
bus_unit_info = flatted_activities[bus_activity_id]['units'][bus_unit_id]['info']
if direction and direction.lower() not in bus_unit_info['unit_text']:
continue
unit_calendar_letter = bus_unit_info['unit_calendar_letter']
unit_weekly_planning = ""
for letter in legacy_activity_info['activity_weekly_planning_mask']:
if letter == '0':
unit_weekly_planning += unit_calendar_letter
else:
unit_weekly_planning += '1'
bus_lines.append(
{
'id': bus_unit_info['unit_id'],
'text': bus_unit_info['unit_text'],
'unit_id': bus_unit_info['unit_id'],
'activity_id': bus_activity_id,
'unit_calendar_letter': unit_calendar_letter,
'unit_weekly_planning': unit_weekly_planning,
'subscribe_start_date': legacy_unit_info['unit_start_date'],
'subscribe_end_date': legacy_unit_info['unit_end_date'],
}
)
return {'data': bus_lines}
@endpoint(
display_category=_('Activities'),
perm='can_access',
display_order=4,
description=_('Get bus stops (places)'),
name='bus-stops',
parameters={
'NameID': {'description': _('Publik ID')},
'childID': {'description': _('Child ID')},
'busActivityID': {'description': _('Activity ID')},
'busUnitID': {'description': _('Bus Unit ID')},
'queryDate': {'description': _('Optional querying date (YYYY-MM-DD)')},
},
)
def bus_stops(self, request, NameID, childID, busActivityID, busUnitID, queryDate=None):
school_year, start_date, end_date = self.get_activities_dates(queryDate)
self.get_child_info(NameID, childID)
activities = self.get_child_activities(childID, school_year, start_date, end_date)
for activity in activities:
if activity['activityPortail']['idAct'] != busActivityID:
continue
break
else:
raise APIError('Bus activity not found: %s' % busActivityID, err_code='not-found')
for unit in activity['unitPortailList']:
if unit['idUnit'] != busUnitID:
continue
break
else:
raise APIError('Bus unit not found: %s' % busUnitID, err_code='not-found')
bus_stops = []
for place in unit['placeList']:
bus_stops.append(
{
'id': place['id'],
'text': ' '.join([w.capitalize() for w in place['lib'].split(' ')]),
}
)
if bus_stops:
bus_stops[0]['disabled'] = True # hide terminus
return {'data': bus_stops}
@endpoint(
display_category=_('Activities'),
perm='can_access',
display_order=3,
description=_('Read child planning'),
name='child-planning',
parameters={
'NameID': {'description': _('Publik ID')},
'childID': {'description': _('Child ID')},
'start_date': {'description': _('Start date (YYYY-MM-DD format)')},
'end_date': {'description': _('End date (YYYY-MM-DD format)')},
'legacy': {'description': _('Decompose events related to parts of the day if set')},
},
)
def child_planning(self, request, NameID, childID, start_date=None, end_date=None, legacy=None):
"""Return an events list sorted by id"""
link = self.get_link(NameID)
family_data = self.get_family_data(link.family_id)
if childID not in [c['id'] for c in family_data['childInfoList']]:
raise APIError('Child not found', err_code='not-found')
if start_date and end_date:
start = utils.get_datetime(start_date)
end = utils.get_datetime(end_date)
else:
start, end = utils.week_boundaries_datetimes(start_date)
school_year = utils.get_school_year(start.date())
r = self.call(
'ActivityService?wsdl',
'readActivityList',
schoolyear=school_year,
numPerson=childID,
dateStartCalend=start,
dateEndCalend=end,
)
activities = serialize_object(r)
events = {key: value for a in activities for (key, value) in utils.get_events(a, start, end)}
for date in utils.month_range(start, end):
r = self.call(
'ActivityService?wsdl',
'readChildMonthPlanning',
year=date.year,
numMonth=date.month,
numPerson=childID,
)
planning = serialize_object(r['calendList'])
for schedule in planning:
utils.book_event(events, schedule, start, end)
if not legacy:
events = {
x['id']: x # dictionary is used de remove dupplicated events
for e in events.values()
for x in utils.decompose_event(e)
}
return {'data': [s[1] for s in sorted(events.items())]}
@endpoint(
display_category=_('Family'),
perm='can_access',
display_order=10,
description=_('Subscribe'),
parameters={
'NameID': {'description': _('Publik ID')},
'childID': {'description': _('Child ID')},
'activityID': {'description': _('Activity ID')},
'unitID': {'description': _('Unit ID')},
'placeID': {'description': _('Place ID')},
'weeklyPlanning': {'description': _('Week planning (7 chars)')},
'start_date': {'description': _('Start date of the unit (YYYY-MM-DD)')},
'end_date': {'description': _('End date of the unit (YYYY-MM-DD)')},
},
)
def subscribe(
self, request, NameID, childID, activityID, unitID, placeID, weeklyPlanning, start_date, end_date
):
self.get_child_info(NameID, childID)
client = self.get_client('FamilyService?wsdl')
trigram_type = client.get_type('ns1:activityUnitPlaceBean')
trigram = trigram_type(idActivity=activityID, idUnit=unitID, idPlace=placeID)
subscription_type = client.get_type('ns1:subscribeActivityRequestBean')
subpscription = subscription_type(
personNumber=childID,
activityUnitPlace=trigram,
weeklyPlanning=weeklyPlanning,
dateStart=start_date,
dateEnd=end_date,
)
r = self.call('FamilyService?wsdl', 'subscribeActivity', subscribeActivityRequestBean=subpscription)
return {'data': serialize_object(r)}
@endpoint(
display_category=_('Family'),
perm='can_access',
display_order=11,
description=_('Unsubscribe'),
parameters={
'NameID': {'description': _('Publik ID')},
'childID': {'description': _('Child ID')},
'activityID': {'description': _('Activity ID')},
'start_date': {'description': _('Start date of the unit (YYYY-MM-DD)')},
},
)
def unsubscribe(self, request, NameID, childID, activityID, start_date):
self.get_child_info(NameID, childID)
r = self.call(
'FamilyService?wsdl',
'deletesubscribe',
numPerson=childID,
idActivite=activityID,
dateRefDelete=start_date,
)
return {'data': serialize_object(r)}
class Link(models.Model):
resource = models.ForeignKey(Maelis, on_delete=models.CASCADE)
name_id = models.CharField(blank=False, max_length=256)
family_id = models.CharField(blank=False, max_length=128)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
unique_together = ('resource', 'name_id')

View File

@ -1,352 +0,0 @@
# passerelle - uniform access to multiple data sources and services
# Copyright (C) 2020 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 re
from copy import copy, deepcopy
from datetime import datetime
from dateutil.relativedelta import relativedelta
from django.utils import timezone
from django.utils.dateparse import parse_date
from passerelle.utils.jsonresponse import APIError
DATE_FORMAT = '%Y-%m-%d'
TIME_FORMAT = '%H:%M:%S'
DATETIME_FORMAT = DATE_FORMAT + ' ' + TIME_FORMAT
COMPONENTS = {
'PART01': {
'text': 'Matinée',
'time': '08:00:00',
},
'PART02': {
'text': 'Repas',
'time': '12:00:00',
},
'PART03': {
'text': 'Après-midi',
'time': '14:00:00',
},
}
COMPOSED_UNITS = {
'A10003132034': { # JOURNEE
'virtual_unit': 'EO0001',
'components': ['PART01', 'PART02', 'PART03'],
},
'A10003132036': { # MATIN
'virtual_unit': 'EO0001',
'components': ['PART01'],
},
'A10003132038': { # MATIN ET REPAS
'virtual_unit': 'EO0001',
'components': ['PART01', 'PART02'],
},
'A10003132040': { # APRES MIDI
'virtual_unit': 'EO0001',
'components': ['PART03'],
},
}
def normalize_invoice(invoice):
data = {
'id': '%s-%s' % (invoice.numFamily, invoice.numInvoice),
'display_id': str(invoice.numInvoice),
'label': invoice.TTFInfo.libelle,
'created': invoice.dateInvoice.strftime(DATETIME_FORMAT),
'amount': invoice.amountInvoice - invoice.amountPaid,
'paid': invoice.amountInvoice == invoice.amountPaid,
'total_amount': invoice.amountInvoice,
'pay_limit_date': invoice.dateDeadline.strftime(DATETIME_FORMAT),
'has_pdf': bool(invoice.pdfName),
'amount_paid': invoice.amountPaid,
}
if invoice.amountInvoice == invoice.amountPaid:
data.update({'amount': 0, 'pay_limit_date': '', 'online_payment': False})
return data
def normalize_activity(activity):
activity['id'] = activity['activityPortail']['idAct']
activity['text'] = activity['activityPortail']['label']
return activity
def normalize_person(person):
person['id'] = person['num']
person['text'] = '{} {}'.format(person['firstname'], person['lastname']).strip()
return person
def get_school_year(date=None):
if not date:
date = timezone.now().date()
if date.strftime('%m-%d') >= '07-31':
return date.year
else:
return date.year - 1
def week_boundaries_datetimes(date_string=None):
"""Return start and end of the week including the provided date,
or the current week if no date is provided."""
if date_string:
date = parse_date(date_string)
else:
date = timezone.now().date()
week_date_string = date.strftime('%Y-W%W')
monday_datetime = timezone.make_aware(datetime.strptime(week_date_string + '-1', "%Y-W%W-%w"))
sunday_datetime = timezone.make_aware(datetime.strptime(week_date_string + '-0', "%Y-W%W-%w"))
return monday_datetime, sunday_datetime
def get_datetime(date_string):
return datetime.combine(parse_date(date_string), datetime.min.time())
def month_range(start_datetime, end_datetime):
"""Generate first days of month for the provided date range."""
if end_datetime < start_datetime:
return
date_time = start_datetime.replace(day=1)
while date_time.strftime('%Y-%m') <= end_datetime.strftime('%Y-%m'):
yield date_time
date_time = date_time + relativedelta(months=1)
def get_events(activity, start_datetime, end_datetime):
"""Generate events from activity's open days
the events looks like the chrono ones : /api/agenda/agenda-evenement/datetimes/
(https://doc-publik.entrouvert.com/dev/api-chrono/#exemple)"""
activity_id = activity['activityPortail']['idAct']
for unit in activity['unitPortailList']:
unit_id = unit['idUnit']
for date_time in activity['openDayList']:
# readActivityList may return more days than requested
if not start_datetime <= date_time <= end_datetime:
continue
date_string = date_time.strftime(DATE_FORMAT)
time_string = date_time.strftime(TIME_FORMAT)
event_id = '%s-%s-%s' % (date_string, activity_id, unit_id)
yield event_id, {
'id': event_id,
'category_id': activity_id,
'slot_id': unit_id,
'datetime': '%s %s' % (date_string, time_string),
'category': activity['activityPortail']['label'],
'text': unit['label'],
'user_booking_status': 'not-booked',
}
def book_event(events, schedule, start_date, end_date):
"""Book event matching the provided schedule."""
activity_id = schedule['unit']['idActivity']
unit_id = schedule['unit']['id']
for day in schedule['listDays']:
if not start_date <= day['datePlanning'] <= end_date:
continue
date_string = day['datePlanning'].strftime(DATE_FORMAT)
event_id = '%s-%s-%s' % (date_string, activity_id, unit_id)
# database may be corrupted by using updateScheduleCalendars
try:
event = events[event_id]
except KeyError:
raise APIError('The planning returns an unknow day on activities: %s' % day['datePlanning'])
event['user_booking_status'] = 'booked'
def decompose_event(event):
"""Break down 'JOURNEE', 'MATIN', 'MATIN ET REPAS' and APRES MIDI' units
into 'Matin', 'Repas' and 'Après-midi' virtual units."""
if event['slot_id'] not in COMPOSED_UNITS:
yield event
return
date_time = datetime.strptime(event['datetime'], DATETIME_FORMAT)
date_string = date_time.strftime(DATE_FORMAT)
composition = COMPOSED_UNITS[event['slot_id']]
for component_id in composition['components']:
component = COMPONENTS[component_id]
new_event = copy(event)
new_event['datetime'] = '%s %s' % (date_string, component['time'])
new_event['slot_id'] = "%s%s" % (composition['virtual_unit'], component_id)
new_event['id'] = '%s-%s-%s' % (date_string, event['category_id'], new_event['slot_id'])
new_event['text'] = component['text']
yield new_event
def flatten_activities(activities, start_date, end_date):
regex = re.compile('^([0-9] ){0,1}2[0-9]{3}-2[0-9]{3} ') # prefix to remove
data = {}
for activity in activities:
if activity.get('openDayList'):
del activity['openDayList']
activity_id = activity['activityPortail']['idAct']
activity_text = activity_text_legacy = activity['activityPortail']['label']
match = regex.match(activity_text)
if match:
activity_text = activity_text[match.end() :].strip()
activity_text = activity_text.capitalize()
activity_obj = deepcopy(activity)
del activity_obj['unitPortailList']
if not activity_obj['activityPortail']['activityType']:
activity_obj['activityPortail']['activityType'] = {
"code": "?",
"libelle": "Inconnu",
"natureSpec": {"code": "?", "libelle": "Inconnu"},
}
# compute weekly planning mask parameter to use for subscribing
planning_masks = []
for year in range(start_date.year, end_date.year + 1):
for item in activity['activityPortail']['weeklyCalendarActivityList']:
if item['yearCalendar'] == year:
planning_masks.append(item['weeklyCalendarStr'])
break
if planning_masks:
activity_weekly_planning_mask = ""
for letters in zip(*planning_masks):
if '1' in letters:
activity_weekly_planning_mask += '1'
else:
activity_weekly_planning_mask += '0'
else:
activity_weekly_planning_mask = "0000000"
bus_unit_ids = []
bus_activity_id = None
if activity['activityPortail'].get('activityBusList'):
bus_activity_id = activity['activityPortail']['activityBusList'][0]['activity']['id']
for bus_unit in activity['activityPortail']['activityBusList'][0]['unitList']:
bus_unit_ids.append(bus_unit['idUnit'])
activity_info = {
'activity_id': activity_id,
'activity_text': activity_text,
'activity_object': activity_obj,
'activity_weekly_planning_mask': activity_weekly_planning_mask,
'bus_activity_id': bus_activity_id,
'bus_unit_ids': bus_unit_ids,
}
units = {}
for unit in activity['unitPortailList']:
unit_id = unit['idUnit']
unit_text = unit_text_legacy = unit['label']
match = regex.match(unit_text)
if match:
unit_text = unit_text[match.end() :].strip()
unit_text = unit_text.capitalize()
text_first_part = activity_text
if activity_text != unit_text:
text_first_part += ' / ' + unit_text
unit_obj = deepcopy(unit)
del unit_obj['placeList']
# compute subscribing parameters
unit_start_date = unit['dateStart']
unit_end_date = unit['dateEnd'] or datetime.combine(end_date, datetime.min.time())
unit_calendar_letter = unit['calendarLetter']
unit_weekly_planning = ""
for letter in activity_weekly_planning_mask:
if letter == '0':
unit_weekly_planning += unit_calendar_letter
else:
unit_weekly_planning += '1'
unit_info = {
'unit_id': unit_id,
'unit_text': unit_text,
'text_first_part': text_first_part,
'unit_object': unit_obj,
'unit_start_date': unit_start_date,
'unit_end_date': unit_end_date,
'unit_calendar_letter': unit_calendar_letter,
'unit_weekly_planning': unit_weekly_planning,
}
places = {}
for place in unit['placeList']:
place_id = place['id']
place_text_legacy = place['lib']
place_text = ' '.join([w.capitalize() for w in place_text_legacy.split(' ')])
places[place_text_legacy] = {
'id': '%s-%s-%s' % (activity_id, unit_id, place_id),
'text_legacy': '%s / %s / %s'
% (activity_text_legacy, unit_text_legacy, place_text_legacy),
'text_first_part': text_first_part,
'text': "%s / %s" % (text_first_part, place_text),
'activity_id': activity_id,
'unit_id': unit_id,
'place_id': place_id,
'activity_text': activity_text,
'unit_text': unit_text,
'place_text': place_text,
'activity_weekly_planning_mask': activity_weekly_planning_mask,
'subscribe_start_date': unit_start_date,
'subscribe_end_date': unit_end_date,
'unit_calendar_letter': unit_calendar_letter,
'unit_weekly_planning': unit_weekly_planning,
'activity_object': activity_obj,
'unit_object': unit_obj,
'place_object': place,
}
units[unit_id] = {'info': unit_info, 'places': places}
data[activity_id] = {'info': activity_info, 'units': units}
return data
def mark_subscribed_flatted_activities(flatted_activities, child_info):
for child_activity in child_info['subscribeActivityList']:
activity = flatted_activities[child_activity['idActivity']]
for child_unit in child_activity['subscribesUnit']:
unit = activity['units'].get(child_unit['idUnit'])
if not unit: # generic unit for bus line is not described on the catalog
continue
place = unit['places'][child_activity['place']]
place['user_subscribing_status'] = 'subscribed'
place['unsubscribe_start_date'] = child_unit['dateStart']
def flatted_activities_as_list(flatted_activities, publication_filter, subscribe_filter, query_date):
data = []
for activity in [a[1] for a in sorted(flatted_activities.items())]:
for unit in [u[1] for u in sorted(activity['units'].items())]:
unit_info = unit['info']
if unit_info['unit_object']['subscribePublication'] not in publication_filter:
continue
if query_date > unit_info['unit_end_date'].date():
continue
is_unit_subscribed = False
for place in unit['places'].values():
if place.get('user_subscribing_status'):
is_unit_subscribed = True
else:
place['user_subscribing_status'] = 'not-subscribed'
if subscribe_filter == 'not-subscribed' and is_unit_subscribed:
continue
for place in sorted(unit['places'].values(), key=lambda p: p['place_id']):
if not subscribe_filter or place['user_subscribing_status'] == subscribe_filter:
data.append(place)
return data

View File

@ -17,7 +17,6 @@
import collections
import zeep
import zeep.exceptions
import zeep.helpers
import zeep.xsd
from django.db import models
@ -127,16 +126,7 @@ class SOAPConnector(BaseResource, HTTPResource):
payload[k] = value[0]
payload.update(post_data or {})
payload = unflatten(payload)
try:
soap_response = getattr(self.client.service, method_name)(**payload)
except zeep.exceptions.Fault as e:
fault_details = {}
for attrib in ['actor', 'code', 'message', 'subcode']:
fault_details[attrib] = getattr(e, attrib, None)
raise APIError('soap:Fault', data=fault_details)
except zeep.exceptions.ValidationError as e:
e.status_code = 400
raise e
soap_response = getattr(self.client.service, method_name)(**payload)
serialized = zeep.helpers.serialize_object(soap_response)
json_response = jsonify(serialized)
return {'err': 0, 'data': json_response}

View File

@ -24,7 +24,6 @@ from django.core.cache import cache
from django.db import models
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from zeep.exceptions import Fault as WebFault
from zeep.helpers import serialize_object
from passerelle.base.models import BaseResource
@ -227,12 +226,7 @@ class DPark(BaseResource):
def call(self, operation, *args, **kwargs):
service = get_service(self)
bypass_erroneous_reply = kwargs.pop('bypass_erroneous_reply', False)
try:
reply = getattr(service, operation)(*args, **kwargs)
except (WebFault,) as exc:
raise APIError('ServiceError: %s' % exc)
except (Exception,) as exc:
raise APIError('Error: %s' % exc)
reply = getattr(service, operation)(*args, **kwargs)
reply_code = getattr(reply, 'CodeRetour', None) or getattr(reply, 'Code_Retour', None)
reply_message = getattr(reply, 'MessageRetour', None) or getattr(reply, 'Lib_Retour', None)
if reply_code != '01' and not bypass_erroneous_reply:

View File

@ -55,6 +55,7 @@ class ToulouseAxel(BaseResource):
max_length=128, blank=False, verbose_name=_('WSDL URL'), help_text=_('Toulouse Axel WSDL URL')
)
log_error = False
category = _('Business Process Connectors')
_category_ordering = ['DUI', 'CAN-CLA', _('Invoices')]

View File

@ -76,10 +76,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
def call(self, wsdl_short_name, service, **kwargs):
client = self.get_client(wsdl_short_name)
method = getattr(client.service, service)
try:
response = method(**kwargs)
except zeep.exceptions.Fault as e:
raise APIError(e.message)
response = method(**kwargs)
return serialize_object(response)
def check_status(self):
@ -3255,6 +3252,15 @@ class ToulouseMaelis(BaseResource, HTTPResource):
nurseries = [n for n in nurseries if n['activityType']['code'] == activity_type]
if code_psu:
nurseries = [n for n in nurseries if code_psu in [u['typeAcc'] for u in n['unitList']]]
for item in nurseries:
item['activity_id'] = item['idActivity']
item['place_id'] = item['place']['idPlace']
item['unit_ids'] = {}
for unit in item['unitList'] or []:
item['unit_ids'][unit['typeAcc']] = unit['idUnit']
if code_psu:
item['unit_id'] = item['unit_ids'].get(code_psu)
return {'data': nurseries}
@endpoint(
@ -3314,6 +3320,23 @@ class ToulouseMaelis(BaseResource, HTTPResource):
post={'request_body': {'schema': {'application/json': family_schemas.NURSERY_DEMAND_SCHEMA}}},
)
def create_nursery_demand(self, request, post_data):
apeIndicators = self.get_referential('ApeIndicator')
for group in apeIndicators:
if group['id'] == 'INDI_APE_ENF':
key = 'child_indicators'
elif group['id'] == 'INDI_APE_FAM':
key = 'family_indicators'
else:
key = 'demand_indicators'
expected_codes = [x['code'] for x in group['indicatorList']]
for i, item in enumerate(post_data.get(key) or []):
if item['code'] not in expected_codes:
raise APIError(
"%s/%i/code key value '%s' do not belong to APE '%s' indicators"
% (key, i, item['code'], group['id'][-3:])
)
item['isActive'] = self.encode_bool(item['isActive'])
child_data = {}
if post_data.get('child_id'):
child_data['numPerson'] = post_data['child_id']

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Passerelle 0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-03-16 23:49+0100\n"
"POT-Creation-Date: 2023-03-21 18:37+0100\n"
"PO-Revision-Date: 2023-03-16 23:52+0100\n"
"Last-Translator: Frederic Peters <fpeters@entrouvert.com>\n"
"Language: fr\n"
@ -108,8 +108,8 @@ msgstr "valeur par défaut"
#: apps/bbb/models.py apps/bdp/models.py apps/clicrdv/models.py
#: apps/esabora/models.py apps/esirius/models.py apps/family/models.py
#: apps/gdc/models.py apps/gesbac/models.py apps/litteralis/models.py
#: apps/maelis/models.py apps/okina/models.py apps/signal_arretes/models.py
#: apps/soap/models.py apps/solis/models.py apps/vivaticket/models.py
#: apps/okina/models.py apps/signal_arretes/models.py apps/soap/models.py
#: apps/solis/models.py apps/vivaticket/models.py
#: contrib/caluire_axel/models.py contrib/dpark/models.py
#: contrib/esirius_swi/models.py contrib/fake_family/models.py
#: contrib/gdema/models.py contrib/greco/models.py
@ -731,7 +731,7 @@ msgstr "Récupérer les moyens dappairage de lassociation"
msgid "Association ID"
msgstr "Identifiant de lassociation"
#: apps/astregs/models.py apps/maelis/models.py contrib/caluire_axel/models.py
#: apps/astregs/models.py contrib/caluire_axel/models.py
#: contrib/toulouse_axel/models.py
msgid "Publik ID"
msgstr "Publik NameID"
@ -2335,7 +2335,7 @@ msgstr "Id de transaction du paiement"
msgid "PDF file not found"
msgstr "Fichier PDF non trouvé"
#: apps/family/templates/family/genericfamily_detail.html apps/maelis/models.py
#: apps/family/templates/family/genericfamily_detail.html
msgid "Family"
msgstr "Famille"
@ -2359,7 +2359,7 @@ msgstr "Récupérer les adultes :"
msgid "Get family children:"
msgstr "Récupérer les enfants :"
#: apps/family/templates/family/genericfamily_detail.html apps/maelis/models.py
#: apps/family/templates/family/genericfamily_detail.html
#: contrib/caluire_axel/models.py contrib/stub_invoices/models.py
#: contrib/toulouse_axel/models.py
msgid "Invoices"
@ -2830,182 +2830,6 @@ msgstr "Récupérer le statut dune demande"
msgid "Get submission decree"
msgstr "Récupérer lacte dune demande"
#: apps/maelis/models.py apps/signal_arretes/models.py
#: contrib/esirius_swi/models.py
msgid "Base API URL"
msgstr "URL de base"
#: apps/maelis/models.py apps/vivaticket/models.py
msgid "API Login"
msgstr "Login pour lAPI"
#: apps/maelis/models.py apps/vivaticket/models.py
msgid "API Password"
msgstr "Mot de passe pour lAPI"
#: apps/maelis/models.py
msgid "Create link between user and family"
msgstr "Lier un compte usager à une famille"
#: apps/maelis/models.py
msgid "Delete link between user and family"
msgstr "Supprimer une liaison entre un compte usager et une famille"
#: apps/maelis/models.py contrib/caluire_axel/models.py
#: contrib/toulouse_axel/models.py
msgid "Get information about user's family"
msgstr "Obtenir les informations famille dun usager"
#: apps/maelis/models.py contrib/caluire_axel/models.py
#: contrib/toulouse_axel/models.py
msgid "Get information about children"
msgstr "Obtenir la liste des enfants"
#: apps/maelis/models.py
msgid "Get information about adults"
msgstr "Obtenir les informations concernant un enfant"
#: apps/maelis/models.py contrib/caluire_axel/models.py
#: contrib/toulouse_axel/models.py
msgid "Get information about a child"
msgstr "Obtenir les informations concernant un enfant"
#: apps/maelis/models.py contrib/caluire_axel/models.py
#: contrib/toulouse_axel/models.py
msgid "Child ID"
msgstr "Identifiant de lenfant"
#: apps/maelis/models.py
msgid "Update coordinates"
msgstr "Mettre à jour les coordonnées"
#: apps/maelis/models.py
msgid "Person ID"
msgstr "Identifiant de la personne"
#: apps/maelis/models.py contrib/caluire_axel/models.py
#: contrib/toulouse_axel/models.py
msgid "Get invoices to pay"
msgstr "Obtenir les factures à payer"
#: apps/maelis/models.py contrib/caluire_axel/models.py
#: contrib/toulouse_axel/models.py
msgid "Regie identifier"
msgstr "Identifiant de la régie"
#: apps/maelis/models.py contrib/caluire_axel/models.py
#: contrib/toulouse_axel/models.py
msgid "Get invoices already paid"
msgstr "Obtenir les factures déjà payées"
#: apps/maelis/models.py contrib/caluire_axel/models.py
#: contrib/stub_invoices/models.py contrib/toulouse_axel/models.py
msgid "Get invoice details"
msgstr "Obtenir les détails dune facture"
#: apps/maelis/models.py contrib/caluire_axel/models.py
#: contrib/stub_invoices/models.py contrib/toulouse_axel/models.py
msgid "Invoice identifier"
msgstr "Identifiant de facture"
#: apps/maelis/models.py contrib/caluire_axel/models.py
#: contrib/stub_invoices/models.py contrib/toulouse_axel/models.py
msgid "Get invoice as a PDF file"
msgstr "Obtenir une facture au format PDF"
#: apps/maelis/models.py
msgid "Get activity list"
msgstr "Obtenir les activités"
#: apps/maelis/models.py
msgid "School year"
msgstr "Année scolaire"
#: apps/maelis/models.py
msgid "Activities"
msgstr "Activités"
#: apps/maelis/models.py
msgid "Get child activities"
msgstr "Obtenir les activités dun enfant"
#: apps/maelis/models.py
msgid "string including E, N or L (default to \"E\")"
msgstr "chaîne de caractère contenant E, N ou L (« E » par défaut)"
#: apps/maelis/models.py
msgid "subscribed, not-subscribed or None"
msgstr "subscribed, not-subscribed ou vide"
#: apps/maelis/models.py
msgid "Optional querying date (YYYY-MM-DD)"
msgstr "Date de requête optionnelle (YYYY-MM-DD)"
#: apps/maelis/models.py
msgid "Get bus lines (units)"
msgstr "Obtenir la liste des lignes de bus (unités)"
#: apps/maelis/models.py contrib/caluire_axel/models.py
msgid "Activity ID"
msgstr "Identifiant de lactivité"
#: apps/maelis/models.py
msgid "Unit ID"
msgstr "Identifiant de lunité"
#: apps/maelis/models.py
msgid "aller, retour or None"
msgstr "aller, retour ou None"
#: apps/maelis/models.py
msgid "Get bus stops (places)"
msgstr "Obtenir la liste des arrêts de bus (lieux)"
#: apps/maelis/models.py
msgid "Bus Unit ID"
msgstr "Identifiant de lunité de la ligne de bus"
#: apps/maelis/models.py
msgid "Read child planning"
msgstr "Obtenir le planning de lenfant"
#: apps/maelis/models.py
msgid "Start date (YYYY-MM-DD format)"
msgstr "Date de début (YYYY-MM-DD)"
#: apps/maelis/models.py
msgid "End date (YYYY-MM-DD format)"
msgstr "Date de fin (YYYY-MM-DD)"
#: apps/maelis/models.py
msgid "Decompose events related to parts of the day if set"
msgstr ""
"Décompose les événements reliés à des parties de journées si positionné"
#: apps/maelis/models.py
msgid "Subscribe"
msgstr "Inscription"
#: apps/maelis/models.py
msgid "Place ID"
msgstr "Identifiant du lieu"
#: apps/maelis/models.py
msgid "Week planning (7 chars)"
msgstr "Planning hebdomadaire de fréquentation (sur 7 caractères)"
#: apps/maelis/models.py
msgid "Start date of the unit (YYYY-MM-DD)"
msgstr "Date de début de lunité (YYYY-MM-DD)"
#: apps/maelis/models.py
msgid "End date of the unit (YYYY-MM-DD)"
msgstr "Date de fin de lunité (YYYY-MM-DD)"
#: apps/maelis/models.py
msgid "Unsubscribe"
msgstr "Désinscription"
#: apps/mdel/models.py
msgid "SFTP server for outgoing files"
msgstr "Serveur SFTP pour les fichiers sortants"
@ -3742,7 +3566,8 @@ msgstr "gabarit de texte, valeurs possibles %s"
#: apps/pdf/forms.py
#, python-format
msgid "text template, possibles values <a href=\"%s\">data source</a>"
msgstr "gabarit de texte, <a href=\"%s\">source de donnée</a> des valeurs possibles"
msgstr ""
"gabarit de texte, <a href=\"%s\">source de donnée</a> des valeurs possibles"
#: apps/pdf/forms.py
#, python-brace-format
@ -3820,7 +3645,8 @@ msgstr ""
#: apps/pdf/models.py
msgid "Return possible values for PDF's combo or list form fields"
msgstr "Renvoie les valeurs possibles pour un champ liste à choix d'un formulaire PDF"
msgstr ""
"Renvoie les valeurs possibles pour un champ liste à choix d'un formulaire PDF"
#: apps/pdf/models.py
msgid "Identifier of the field"
@ -4318,6 +4144,10 @@ msgstr "Date de fin de l'occupation"
msgid "Comment"
msgstr "Commentaire :"
#: apps/signal_arretes/models.py contrib/esirius_swi/models.py
msgid "Base API URL"
msgstr "URL de base"
#: apps/signal_arretes/models.py
msgid "Get cities available in Signal Arrêtés"
msgstr "Récupérer les communes disponibles dans Signal Arrêtés"
@ -4648,6 +4478,14 @@ msgstr ""
msgid "Account Sid"
msgstr "Identifiant de compte"
#: apps/vivaticket/models.py
msgid "API Login"
msgstr "Login pour lAPI"
#: apps/vivaticket/models.py
msgid "API Password"
msgstr "Mot de passe pour lAPI"
#: apps/vivaticket/models.py
msgid "Get event categories"
msgstr "Récupérer les catégories dévénements"
@ -4979,6 +4817,22 @@ msgstr "Lier un compte usager à Caluire Axel"
msgid "Delete link between user and Caluire Axel"
msgstr "Supprimer une liaison entre un compte usager et Caluire Axel"
#: contrib/caluire_axel/models.py contrib/toulouse_axel/models.py
msgid "Get information about user's family"
msgstr "Obtenir les informations famille dun usager"
#: contrib/caluire_axel/models.py contrib/toulouse_axel/models.py
msgid "Get information about children"
msgstr "Obtenir la liste des enfants"
#: contrib/caluire_axel/models.py contrib/toulouse_axel/models.py
msgid "Get information about a child"
msgstr "Obtenir les informations concernant un enfant"
#: contrib/caluire_axel/models.py contrib/toulouse_axel/models.py
msgid "Child ID"
msgstr "Identifiant de lenfant"
#: contrib/caluire_axel/models.py
msgid "Upload attachments for child or family"
msgstr "Transférer des pièces jointes pour un enfant ou une famille"
@ -5027,6 +4881,10 @@ msgstr "Inscrire un enfant à une activité"
msgid "Get agenda for an activity and a child"
msgstr "Récupérer lagenda pour une activité et un enfant"
#: contrib/caluire_axel/models.py
msgid "Activity ID"
msgstr "Identifiant de lactivité"
#: contrib/caluire_axel/models.py contrib/toulouse_axel/models.py
msgid "Start date of the period"
msgstr "Date de début de la période"
@ -5055,10 +4913,37 @@ msgstr "Répercuter les modifications de lagenda sur un autre enfant"
msgid "Set activity agenda for a child with a typical week"
msgstr "Définir lagenda dun enfant pour une semaine type"
#: contrib/caluire_axel/models.py contrib/toulouse_axel/models.py
msgid "Get invoices to pay"
msgstr "Obtenir les factures à payer"
#: contrib/caluire_axel/models.py contrib/toulouse_axel/models.py
msgid "Regie identifier"
msgstr "Identifiant de la régie"
#: contrib/caluire_axel/models.py contrib/toulouse_axel/models.py
msgid "Get invoices already paid"
msgstr "Obtenir les factures déjà payées"
#: contrib/caluire_axel/models.py
msgid "Number of months of history"
msgstr "Nombre de mois dans lhistorique"
#: contrib/caluire_axel/models.py contrib/stub_invoices/models.py
#: contrib/toulouse_axel/models.py
msgid "Get invoice details"
msgstr "Obtenir les détails dune facture"
#: contrib/caluire_axel/models.py contrib/stub_invoices/models.py
#: contrib/toulouse_axel/models.py
msgid "Invoice identifier"
msgstr "Identifiant de facture"
#: contrib/caluire_axel/models.py contrib/stub_invoices/models.py
#: contrib/toulouse_axel/models.py
msgid "Get invoice as a PDF file"
msgstr "Obtenir une facture au format PDF"
#: contrib/caluire_axel/models.py contrib/toulouse_axel/models.py
msgid "Notify an invoice as paid"
msgstr "Notifier le paiement de la facture"

View File

@ -156,7 +156,6 @@ INSTALLED_APPS = (
'passerelle.apps.jsondatastore',
'passerelle.apps.ldap',
'passerelle.apps.litteralis',
'passerelle.apps.maelis',
'passerelle.apps.mdel',
'passerelle.apps.mdel_ddpacs',
'passerelle.apps.mobyt',

View File

@ -152,7 +152,6 @@ li.connector.okina a::before {
li.connector.fakefamily a::before,
li.connector.genericfamily a::before,
li.connector.maelis a::before,
li.connector.teamnetaxel a::before {
content: "\f0c0"; /* users */
}

View File

@ -38,6 +38,8 @@ class Rect(typing.NamedTuple):
@classmethod
def from_pdf_annotation(cls, annotation):
if not annotation.Rect:
raise ValueError('annotation has no rect')
return cls(*map(float, annotation.Rect))
@ -99,6 +101,7 @@ class Widget:
self.field_type == pdfrw.PdfName.Btn
and self.field_flags.is_radio
and not self.field_flags.is_push_button
and self.kids
):
return 'radio'
elif (
@ -119,14 +122,23 @@ class Widget:
@property
def rect(self):
return self.rects[0]
rects = self.rects
return self.rects[0] if rects else Rect(9999, 9999, 9999, 9999)
@property
def rects(self):
annotations = []
if self.widget_type == 'radio':
return [Rect.from_pdf_annotation(kid) for kid in self.kids_ordered_by_rect]
annotations = self.kids_ordered_by_rect
else:
return [Rect.from_pdf_annotation(self.annotation)]
annotations = [self.annotation]
rects = []
for annotation in annotations:
try:
rects.append(Rect.from_pdf_annotation(annotation))
except ValueError:
pass
return rects
@property
def digest_id(self):
@ -150,10 +162,14 @@ class Widget:
true_values.remove(pdfrw.PdfName.Off)
return true_values[0]
@property
def kids(self):
return self.annotation.Kids or []
@property
def kids_ordered_by_rect(self):
assert self.widget_type == 'radio'
kids = list(self.annotation.Kids or [])
kids = list(self.kids)
def compare(kid1, kid2):
return rect_compare(Rect.from_pdf_annotation(kid1), Rect.from_pdf_annotation(kid2))

View File

@ -21,7 +21,7 @@ from requests import RequestException
from zeep import Client
from zeep.cache import InMemoryCache
from zeep.exceptions import Error as ZeepError
from zeep.exceptions import Fault, TransportError
from zeep.exceptions import Fault, TransportError, ValidationError
from zeep.proxy import OperationProxy, ServiceProxy
from zeep.transports import Transport
@ -49,17 +49,24 @@ class SOAPFault(SOAPError):
log_error = False
def __init__(self, client, fault):
dico = fault.__dict__
if isinstance(dico.get('detail'), etree._Element):
dico['detail'] = etree.tostring(dico['detail']).decode()
detail = fault.detail
if isinstance(detail, etree._Element):
fault.detail = etree.tostring(detail).decode()
elif isinstance(detail, bytes):
fault.detail = detail.decode()
super().__init__(
f'SOAP service at {client.wsdl.location} returned an error "{fault.message or fault.code}"',
data={
'soap_fault': dico,
'soap_fault': fault.__dict__,
},
)
class SOAPValidationError(SOAPError):
log_error = False
http_status = 400
class OperationProxyWrapper(OperationProxy):
def __call__(self, *args, **kwargs):
client = self._proxy._client
@ -69,6 +76,8 @@ class OperationProxyWrapper(OperationProxy):
raise SOAPServiceUnreachable(client, transport_error)
except Fault as fault:
raise SOAPFault(client, fault)
except ValidationError as validation_error:
raise SOAPValidationError(validation_error)
except ZeepError as zeep_error:
raise SOAPError(str(zeep_error))

View File

@ -19,7 +19,6 @@ import hashlib
import inspect
import json
import logging
import os
import uuid
from urllib.parse import quote
@ -637,13 +636,4 @@ class GenericExportConnectorView(GenericConnectorMixin, DetailView):
class MediaView(View):
def get(self, request, path, *args, **kwargs):
document_root = DefaultStorage().location
filename = DefaultStorage().path(path)
filename = os.path.realpath(filename)
if (
not os.path.isabs(filename)
or not filename.startswith(document_root)
or not os.path.exists(filename)
or not os.path.isfile(filename)
):
raise Http404()
return serve(request, path, document_root=document_root, show_indexes=False)

View File

@ -1,676 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="ActivityService" targetNamespace="activity.ws.maelis.sigec.com" xmlns:ns1="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="activity.ws.maelis.sigec.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xs:schema targetNamespace="bean.persistence.ws.maelis.sigec.com" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="weeklyCalendarActivityBean">
<xs:sequence>
<xs:element minOccurs="0" name="yearCalendar" type="xs:int" />
<xs:element minOccurs="0" name="weeklyCalendarStr" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="personInfoBean">
<xs:sequence>
<xs:element minOccurs="0" name="idMaelis" type="xs:string" />
<xs:element name="num" type="xs:int" />
<xs:element minOccurs="0" name="lastname" type="xs:string" />
<xs:element minOccurs="0" name="firstname" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="personInfoLightBean">
<xs:sequence>
<xs:element name="num" type="xs:int" />
<xs:element minOccurs="0" name="lastname" type="xs:string" />
<xs:element minOccurs="0" name="firstname" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
<xs:schema targetNamespace="bean.persistence.activity.ws.maelis.sigec.com" version="1.0" xmlns:ns1="activity.ws.maelis.sigec.com" xmlns:ns2="bean.persistence.ws.maelis.sigec.com" xmlns:tns="bean.persistence.activity.ws.maelis.sigec.com" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="activity.ws.maelis.sigec.com" />
<xs:import namespace="bean.persistence.ws.maelis.sigec.com" />
<xs:complexType name="updateRealCalendarsRequestBean">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="unitPersonDayInfoList" nillable="true" type="tns:unitPersonDayInfoBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="unitPersonDayInfoBean">
<xs:sequence>
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
<xs:element minOccurs="0" name="idAct" type="xs:string" />
<xs:element minOccurs="0" name="idUni" type="xs:string" />
<xs:element minOccurs="0" name="date" type="xs:dateTime" />
<xs:element minOccurs="0" name="action" type="ns1:dayInfoAction" />
<xs:element minOccurs="0" name="idPlace" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="updateRealCalendarsResultBean">
<xs:sequence>
<xs:element name="result" type="xs:boolean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="unitPersonDayInfoList" nillable="true" type="tns:unitPersonDayInfoErrorBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="unitPersonDayInfoErrorBean">
<xs:sequence>
<xs:element minOccurs="0" name="errorMessage" type="xs:string" />
<xs:element minOccurs="0" name="unitPersonDayInfoBean" type="tns:unitPersonDayInfoBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="readActivityPortailListResultBean">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="activityUnitPlacePortailList" nillable="true" type="tns:activityUnitPlacePortailBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="activityUnitPlacePortailBean">
<xs:sequence>
<xs:element minOccurs="0" name="activityPortail" type="tns:activityPortailBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="openDayList" nillable="true" type="xs:dateTime" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="unitPortailList" nillable="true" type="tns:unitPortailBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="activityPortailBean">
<xs:sequence>
<xs:element minOccurs="0" name="idAct" type="xs:string" />
<xs:element minOccurs="0" name="label" type="xs:string" />
<xs:element minOccurs="0" name="code" type="xs:string" />
<xs:element minOccurs="0" name="dateStart" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateEnd" type="xs:dateTime" />
<xs:element minOccurs="0" name="birthControl" type="xs:string" />
<xs:element minOccurs="0" name="email" type="xs:string" />
<xs:element minOccurs="0" name="schoolYear" type="xs:int" />
<xs:element minOccurs="0" name="calendarGeneration" type="ns1:activityCalendarGenerationBean" />
<xs:element minOccurs="0" name="dateStartPubli" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateEndPubli" type="xs:dateTime" />
<xs:element minOccurs="0" name="schoolControl" type="xs:string" />
<xs:element minOccurs="0" name="calendarMode" type="xs:string" />
<xs:element minOccurs="0" name="activityType" type="tns:activityTypeBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="weeklyCalendarActivityList" nillable="true" type="ns2:weeklyCalendarActivityBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="activityPeriodList" nillable="true" type="tns:activityPeriodCapacityBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="activityBusList" nillable="true" type="ns1:activityUnitPlaceBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="activityTypeBean">
<xs:sequence>
<xs:element minOccurs="0" name="code" type="xs:string" />
<xs:element minOccurs="0" name="libelle" type="xs:string" />
<xs:element minOccurs="0" name="natureSpec" type="tns:activityNatureBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="activityNatureBean">
<xs:sequence>
<xs:element minOccurs="0" name="code" type="xs:string" />
<xs:element minOccurs="0" name="libelle" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="activityPeriodCapacityBean">
<xs:complexContent>
<xs:extension base="ns1:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="period" type="ns1:periodBean" />
<xs:element minOccurs="0" name="capacity" type="xs:int" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="calendCapacityExceptList" nillable="true" type="ns1:calendCapacityBean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="placeBean">
<xs:sequence>
<xs:element minOccurs="0" name="id" type="xs:string" />
<xs:element minOccurs="0" name="lib" type="xs:string" />
<xs:element minOccurs="0" name="lib2" type="xs:string" />
<xs:element minOccurs="0" name="adresse" type="tns:adressBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="activityPeriscolList" nillable="true" type="tns:activityPeriscolBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="adressBean">
<xs:sequence>
<xs:element minOccurs="0" name="num" type="xs:int" />
<xs:element minOccurs="0" name="street1" type="xs:string" />
<xs:element minOccurs="0" name="street2" type="xs:string" />
<xs:element minOccurs="0" name="idStreet" type="xs:string" />
<xs:element minOccurs="0" name="zipcode" type="xs:string" />
<xs:element minOccurs="0" name="town" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="activityPeriscolBean">
<xs:complexContent>
<xs:extension base="ns1:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="activity" type="ns1:activityBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="activityPeriodList" nillable="true" type="tns:activityPeriodCapacityBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="unitList" nillable="true" type="tns:unitPeriscolBean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="unitPeriscolBean">
<xs:complexContent>
<xs:extension base="ns1:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="idUnit" type="xs:string" />
<xs:element minOccurs="0" name="label" type="xs:string" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="periodList" nillable="true" type="ns1:periodBean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="unitPortailBean">
<xs:sequence>
<xs:element minOccurs="0" name="idUnit" type="xs:string" />
<xs:element minOccurs="0" name="label" type="xs:string" />
<xs:element minOccurs="0" name="codeExt" type="xs:string" />
<xs:element minOccurs="0" name="dateStart" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateEnd" type="xs:dateTime" />
<xs:element minOccurs="0" name="birthDateStart" type="xs:dateTime" />
<xs:element minOccurs="0" name="birthDateEnd" type="xs:dateTime" />
<xs:element minOccurs="0" name="calendarLetter" type="xs:string" />
<xs:element minOccurs="0" name="subscribePublication" type="xs:string" />
<xs:element minOccurs="0" name="dateStartSubscribe" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateEndSubscribe" type="xs:dateTime" />
<xs:element minOccurs="0" name="numOrder" type="xs:int" />
<xs:element minOccurs="0" name="calendarPublication" type="xs:string" />
<xs:element minOccurs="0" name="recordAbsence" type="xs:string" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="calendList" nillable="true" type="tns:calendPortailBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="placeList" nillable="true" type="tns:placeBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="periodList" nillable="true" type="ns1:periodBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="calendPortailBean">
<xs:sequence>
<xs:element minOccurs="0" name="dateConso" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateMin" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateMax" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateMinVisu" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateMaxVisu" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateMaxMajPrev" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateMaxAddPres" type="xs:dateTime" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="dayBean">
<xs:sequence>
<xs:element minOccurs="0" name="datePlanning" type="xs:dateTime" />
<xs:element minOccurs="0" name="dayType" type="tns:dayTypeBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="dayTypeBean">
<xs:sequence>
<xs:element minOccurs="0" name="code" type="ns1:code" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="resultCalendarListBean">
<xs:sequence>
<xs:element minOccurs="0" name="person" type="ns2:personInfoBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="calendList" nillable="true" type="tns:calendarUnitDayBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="calendarUnitDayBean">
<xs:sequence>
<xs:element minOccurs="0" name="unit" type="tns:unitBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="listDays" nillable="true" type="tns:dayBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="unitBean">
<xs:sequence>
<xs:element minOccurs="0" name="id" type="xs:string" />
<xs:element minOccurs="0" name="idActivity" type="xs:string" />
<xs:element minOccurs="0" name="libelle" type="xs:string" />
<xs:element minOccurs="0" name="motif" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="childActivityUnitPlaceBean">
<xs:complexContent>
<xs:extension base="ns1:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="child" type="ns2:personInfoLightBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="activityList" nillable="true" type="tns:activityUnitPlaceLightBean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="activityUnitPlaceLightBean">
<xs:complexContent>
<xs:extension base="ns1:abstractSpecResultBean">
<xs:sequence>
<xs:element minOccurs="0" name="activity" type="ns1:idLabelBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="unitList" nillable="true" type="tns:unitPlaceLightBean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="unitPlaceLightBean">
<xs:complexContent>
<xs:extension base="ns1:idLabelBean">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="placeList" nillable="true" type="ns1:idLabelBean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="updateScheduleCalendarsRequestBean">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="unitPersonDayInfoList" nillable="true" type="tns:unitPersonDayInfoBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="updateScheduleCalendarsResultBean">
<xs:sequence>
<xs:element name="result" type="xs:boolean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="unitPersonDayInfoList" nillable="true" type="tns:unitPersonDayInfoErrorBean" />
</xs:sequence>
</xs:complexType>
</xs:schema>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="activity.ws.maelis.sigec.com" xmlns:ns1="bean.persistence.activity.ws.maelis.sigec.com" xmlns:ns2="bean.persistence.ws.maelis.sigec.com" xmlns:tns="activity.ws.maelis.sigec.com" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="bean.persistence.activity.ws.maelis.sigec.com" />
<xs:import namespace="bean.persistence.ws.maelis.sigec.com" />
<xs:complexType name="activityCalendarGenerationBean">
<xs:sequence>
<xs:element minOccurs="0" name="code" type="tns:activityCalendarGenerationMode" />
<xs:element minOccurs="0" name="value" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="activityUnitPlace2KernelBean">
<xs:sequence>
<xs:element minOccurs="0" name="activityKernel" type="xs:anyType" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="unitKernelList" nillable="true" type="xs:anyType" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="codeLabelKernelBean">
<xs:sequence>
<xs:element minOccurs="0" name="code" type="xs:string" />
<xs:element minOccurs="0" name="label" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="consoTarifKernelBean">
<xs:sequence>
<xs:element minOccurs="0" name="commune" type="xs:string" />
<xs:element minOccurs="0" name="consoKernelBean" type="tns:codeLabelKernelBean" />
<xs:element minOccurs="0" name="tarifKernelBean" type="tns:codeLabelKernelBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="activityPeriodCapacityKernelBean">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="calendCapacityExceptKernelList" nillable="true" type="tns:calendCapacityKernelBean" />
<xs:element minOccurs="0" name="capacity" type="xs:int" />
<xs:element minOccurs="0" name="periodKernel" type="tns:codeLabelKernelBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="calendCapacityKernelBean">
<xs:sequence>
<xs:element minOccurs="0" name="capacity" type="xs:int" />
<xs:element minOccurs="0" name="dayDate" type="xs:dateTime" />
</xs:sequence>
</xs:complexType>
<xs:complexType abstract="true" name="abstractSpecBean">
<xs:sequence />
</xs:complexType>
<xs:complexType name="periodBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="code" type="xs:string" />
<xs:element minOccurs="0" name="label" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="calendCapacityBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="capacity" type="xs:int" />
<xs:element minOccurs="0" name="dayDate" type="xs:dateTime" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="activityUnitPlaceBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="activity" type="tns:activityBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="unitList" nillable="true" type="tns:unitPlaceBean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="activityBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="id" type="xs:string" />
<xs:element minOccurs="0" name="label" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="unitPlaceBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="idUnit" type="xs:string" />
<xs:element minOccurs="0" name="label" type="xs:string" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="placeList" nillable="true" type="ns1:placeBean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="readChildListActivityListResultBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecResultBean">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="childActivityUnitPlaceList" nillable="true" type="ns1:childActivityUnitPlaceBean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType abstract="true" name="abstractSpecResultBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecBean">
<xs:sequence />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="idLabelBean">
<xs:sequence>
<xs:element minOccurs="0" name="id" type="xs:string" />
<xs:element minOccurs="0" name="label" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:simpleType name="dayInfoAction">
<xs:restriction base="xs:string">
<xs:enumeration value="ADD_PRES_PREVI" />
<xs:enumeration value="DEL_PRES_PREVI" />
<xs:enumeration value="ADD_ABSENCE" />
<xs:enumeration value="DEL_ABSENCE" />
<xs:enumeration value="ADD_PRES_REAL" />
<xs:enumeration value="DEL_PRES_REAL" />
<xs:enumeration value="ADD_DEDUCTED_ABSENCE" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="activityCalendarGenerationMode">
<xs:restriction base="xs:string">
<xs:enumeration value="REQUIRED" />
<xs:enumeration value="FORBIDDEN" />
<xs:enumeration value="NOT_REQUIRED" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="code">
<xs:restriction base="xs:string">
<xs:enumeration value="AM" />
<xs:enumeration value="PM" />
<xs:enumeration value="DAY" />
<xs:enumeration value="NONE" />
</xs:restriction>
</xs:simpleType>
<xs:element name="MaelisActivityException" type="tns:MaelisActivityException" />
<xs:complexType name="MaelisActivityException">
<xs:sequence>
<xs:element name="message" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="updateRealCalendars" type="tns:updateRealCalendars" />
<xs:complexType name="updateRealCalendars">
<xs:sequence>
<xs:element minOccurs="0" name="updateRealCalendarsRequestBean" type="ns1:updateRealCalendarsRequestBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="updateRealCalendarsResponse" type="tns:updateRealCalendarsResponse" />
<xs:complexType name="updateRealCalendarsResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="ns1:updateRealCalendarsResultBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="updateWeekCalendar" type="tns:updateWeekCalendar" />
<xs:complexType name="updateWeekCalendar">
<xs:sequence>
<xs:element minOccurs="0" name="idActivity" type="xs:string" />
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
<xs:element minOccurs="0" name="dateStart" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateEnd" type="xs:dateTime" />
<xs:element minOccurs="0" name="weeklyPlanningAM" type="xs:string" />
<xs:element minOccurs="0" name="weeklyPlanningPM" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="updateWeekCalendarResponse" type="tns:updateWeekCalendarResponse" />
<xs:complexType name="updateWeekCalendarResponse">
<xs:sequence />
</xs:complexType>
<xs:element name="readActivityList" type="tns:readActivityList" />
<xs:complexType name="readActivityList">
<xs:sequence>
<xs:element minOccurs="0" name="schoolyear" type="xs:int" />
<xs:element minOccurs="0" name="dateStartCalend" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateEndCalend" type="xs:dateTime" />
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
</xs:sequence>
</xs:complexType>
<xs:element name="readActivityListResponse" type="tns:readActivityListResponse" />
<xs:complexType name="readActivityListResponse">
<xs:sequence>
<xs:element minOccurs="0" name="ReadActivityPortailListResultBean" type="ns1:readActivityPortailListResultBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="readChildMonthPlanning" type="tns:readChildMonthPlanning" />
<xs:complexType name="readChildMonthPlanning">
<xs:sequence>
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
<xs:element minOccurs="0" name="idActivity" type="xs:string" />
<xs:element minOccurs="0" name="idUnit" type="xs:string" />
<xs:element minOccurs="0" name="year" type="xs:int" />
<xs:element minOccurs="0" name="numMonth" type="xs:int" />
</xs:sequence>
</xs:complexType>
<xs:element name="readChildMonthPlanningResponse" type="tns:readChildMonthPlanningResponse" />
<xs:complexType name="readChildMonthPlanningResponse">
<xs:sequence>
<xs:element minOccurs="0" name="ResultCalendarList" type="ns1:resultCalendarListBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="readChildListActivityList" type="tns:readChildListActivityList" />
<xs:complexType name="readChildListActivityList">
<xs:sequence>
<xs:element minOccurs="0" name="schoolyear" type="xs:int" />
<xs:element minOccurs="0" name="dateStartCalend" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateEndCalend" type="xs:dateTime" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="numPersonList" type="xs:int" />
</xs:sequence>
</xs:complexType>
<xs:element name="readChildListActivityListResponse" type="tns:readChildListActivityListResponse" />
<xs:complexType name="readChildListActivityListResponse">
<xs:sequence>
<xs:element minOccurs="0" name="ReadChildListActivityListResultBean" type="tns:readChildListActivityListResultBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="updateScheduleCalendars" type="tns:updateScheduleCalendars" />
<xs:complexType name="updateScheduleCalendars">
<xs:sequence>
<xs:element minOccurs="0" name="updateScheduleCalendarsRequestBean" type="ns1:updateScheduleCalendarsRequestBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="updateScheduleCalendarsResponse" type="tns:updateScheduleCalendarsResponse" />
<xs:complexType name="updateScheduleCalendarsResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="ns1:updateScheduleCalendarsResultBean" />
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="updateScheduleCalendarsResponse">
<wsdl:part element="tns:updateScheduleCalendarsResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readActivityList">
<wsdl:part element="tns:readActivityList" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readChildMonthPlanning">
<wsdl:part element="tns:readChildMonthPlanning" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readActivityListResponse">
<wsdl:part element="tns:readActivityListResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readChildListActivityList">
<wsdl:part element="tns:readChildListActivityList" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="MaelisActivityException">
<wsdl:part element="tns:MaelisActivityException" name="MaelisActivityException">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateScheduleCalendars">
<wsdl:part element="tns:updateScheduleCalendars" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateRealCalendars">
<wsdl:part element="tns:updateRealCalendars" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateWeekCalendarResponse">
<wsdl:part element="tns:updateWeekCalendarResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateWeekCalendar">
<wsdl:part element="tns:updateWeekCalendar" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readChildListActivityListResponse">
<wsdl:part element="tns:readChildListActivityListResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readChildMonthPlanningResponse">
<wsdl:part element="tns:readChildMonthPlanningResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateRealCalendarsResponse">
<wsdl:part element="tns:updateRealCalendarsResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="ActivityService">
<wsdl:operation name="updateRealCalendars">
<wsdl:input message="tns:updateRealCalendars" name="updateRealCalendars">
</wsdl:input>
<wsdl:output message="tns:updateRealCalendarsResponse" name="updateRealCalendarsResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisActivityException" name="MaelisActivityException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateWeekCalendar">
<wsdl:input message="tns:updateWeekCalendar" name="updateWeekCalendar">
</wsdl:input>
<wsdl:output message="tns:updateWeekCalendarResponse" name="updateWeekCalendarResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisActivityException" name="MaelisActivityException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readActivityList">
<wsdl:input message="tns:readActivityList" name="readActivityList">
</wsdl:input>
<wsdl:output message="tns:readActivityListResponse" name="readActivityListResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisActivityException" name="MaelisActivityException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readChildMonthPlanning">
<wsdl:input message="tns:readChildMonthPlanning" name="readChildMonthPlanning">
</wsdl:input>
<wsdl:output message="tns:readChildMonthPlanningResponse" name="readChildMonthPlanningResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisActivityException" name="MaelisActivityException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readChildListActivityList">
<wsdl:input message="tns:readChildListActivityList" name="readChildListActivityList">
</wsdl:input>
<wsdl:output message="tns:readChildListActivityListResponse" name="readChildListActivityListResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisActivityException" name="MaelisActivityException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateScheduleCalendars">
<wsdl:input message="tns:updateScheduleCalendars" name="updateScheduleCalendars">
</wsdl:input>
<wsdl:output message="tns:updateScheduleCalendarsResponse" name="updateScheduleCalendarsResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisActivityException" name="MaelisActivityException">
</wsdl:fault>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ActivityServiceSoapBinding" type="tns:ActivityService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="updateRealCalendars">
<soap:operation soapAction="" style="document" />
<wsdl:input name="updateRealCalendars">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="updateRealCalendarsResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisActivityException">
<soap:fault name="MaelisActivityException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateWeekCalendar">
<soap:operation soapAction="" style="document" />
<wsdl:input name="updateWeekCalendar">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="updateWeekCalendarResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisActivityException">
<soap:fault name="MaelisActivityException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readActivityList">
<soap:operation soapAction="" style="document" />
<wsdl:input name="readActivityList">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="readActivityListResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisActivityException">
<soap:fault name="MaelisActivityException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readChildMonthPlanning">
<soap:operation soapAction="" style="document" />
<wsdl:input name="readChildMonthPlanning">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="readChildMonthPlanningResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisActivityException">
<soap:fault name="MaelisActivityException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readChildListActivityList">
<soap:operation soapAction="" style="document" />
<wsdl:input name="readChildListActivityList">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="readChildListActivityListResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisActivityException">
<soap:fault name="MaelisActivityException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateScheduleCalendars">
<soap:operation soapAction="" style="document" />
<wsdl:input name="updateScheduleCalendars">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="updateScheduleCalendarsResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisActivityException">
<soap:fault name="MaelisActivityException" use="literal" />
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ActivityService">
<wsdl:port binding="tns:ActivityServiceSoapBinding" name="ActivityServiceImplPort">
<soap:address location="http://www3.sigec.fr/entrouvertws/services/ActivityService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -1,947 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="FamilyService" targetNamespace="ws.maelis.sigec.com" xmlns:ns1="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="ws.maelis.sigec.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="ws.maelis.sigec.com" xmlns:ns0="bean.persistence.school.ws.maelis.sigec.com" xmlns:ns1="bean.persistence.ws.maelis.sigec.com" xmlns:ns2="bean.persistence.activity.ws.maelis.sigec.com" xmlns:ns3="bean.persistence.family.ws.maelis.sigec.com" xmlns:tns="ws.maelis.sigec.com" xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="bean.persistence.ws.maelis.sigec.com" />
<xs:import namespace="bean.persistence.activity.ws.maelis.sigec.com" />
<xs:import namespace="bean.persistence.family.ws.maelis.sigec.com" />
<xs:import namespace="http://www.w3.org/2005/05/xmlmime" />
<xs:import namespace="bean.persistence.school.ws.maelis.sigec.com" />
<xs:complexType name="familyQuotientRedvBean">
<xs:sequence>
<xs:element minOccurs="0" name="year" type="xs:int" />
<xs:element minOccurs="0" name="yearRev" type="xs:int" />
<xs:element minOccurs="0" name="dateStart" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateEnd" type="xs:dateTime" />
<xs:element minOccurs="0" name="mtt" type="xs:double" />
<xs:element minOccurs="0" name="cdquo" type="xs:string" />
<xs:element minOccurs="0" name="codeUti" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="authorizedPersonListBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecRequestBean">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="personList" nillable="true" type="tns:familyPersonBean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType abstract="true" name="abstractSpecRequestBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecBean">
<xs:sequence />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType abstract="true" name="abstractSpecBean">
<xs:sequence />
</xs:complexType>
<xs:complexType name="familyPersonBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
<xs:element minOccurs="0" name="civility" type="xs:string" />
<xs:element minOccurs="0" name="firstname" type="xs:string" />
<xs:element minOccurs="0" name="lastname" type="xs:string" />
<xs:element minOccurs="0" name="dateBirth" type="xs:dateTime" />
<xs:element minOccurs="0" name="quality" type="xs:string" />
<xs:element minOccurs="0" name="contact" type="tns:contactLightBean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="contactLightBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="phone" type="xs:string" />
<xs:element minOccurs="0" name="mobile" type="xs:string" />
<xs:element minOccurs="0" name="mail" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="StreetBean">
<xs:sequence>
<xs:element minOccurs="0" name="idStreet" type="xs:string" />
<xs:element minOccurs="0" name="libelleStreet" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="indicatorValueKernelBean">
<xs:sequence>
<xs:element name="active" type="xs:boolean" />
<xs:element minOccurs="0" name="idFamily" type="xs:string" />
<xs:element minOccurs="0" name="indicatorKernel" type="xs:anyType" />
<xs:element minOccurs="0" name="indicatorValeu" type="xs:anyType" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="familyBean">
<xs:sequence>
<xs:element name="number" type="xs:int" />
<xs:element minOccurs="0" name="category" type="xs:string" />
<xs:element minOccurs="0" name="situation" type="xs:string" />
<xs:element minOccurs="0" name="nbChild" type="xs:int" />
<xs:element minOccurs="0" name="nbAES" type="xs:string" />
<xs:element minOccurs="0" name="nbTotalChild" type="xs:int" />
<xs:element minOccurs="0" name="flagCom" type="xs:boolean" />
<xs:element minOccurs="0" name="rl1InfoBean" type="tns:rlInfoBean" />
<xs:element minOccurs="0" name="rl2InfoBean" type="tns:rlInfoBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="childInfoList" nillable="true" type="ns1:childInfoBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="authorizedPersonList" nillable="true" type="tns:familyPersonBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="rlInfoBean">
<xs:sequence>
<xs:element minOccurs="0" name="num" type="xs:string" />
<xs:element minOccurs="0" name="civility" type="xs:string" />
<xs:element minOccurs="0" name="lastname" type="xs:string" />
<xs:element minOccurs="0" name="firstname" type="xs:string" />
<xs:element minOccurs="0" name="quality" type="xs:string" />
<xs:element minOccurs="0" name="profession" type="ns1:professionBean" />
<xs:element minOccurs="0" name="contact" type="ns1:contactBean" />
<xs:element minOccurs="0" name="address" type="ns1:addressBean" />
<xs:element minOccurs="0" name="cafInfo" type="tns:cafInfoBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="quotientRedvList" nillable="true" type="tns:familyQuotientRedvBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="cafInfoBean">
<xs:sequence>
<xs:element minOccurs="0" name="num" type="xs:string" />
<xs:element minOccurs="0" name="organ" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="birthInfoBean">
<xs:sequence>
<xs:element minOccurs="0" name="dateBirth" type="xs:dateTime" />
<xs:element minOccurs="0" name="countryCode" type="xs:string" />
<xs:element minOccurs="0" name="communeCode" type="xs:string" />
<xs:element minOccurs="0" name="place" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="subscribeSchoolBean">
<xs:sequence>
<xs:element minOccurs="0" name="year" type="xs:int" />
<xs:element minOccurs="0" name="schoolName" type="xs:string" />
<xs:element minOccurs="0" name="phone" type="xs:string" />
<xs:element minOccurs="0" name="adress" type="xs:string" />
<xs:element minOccurs="0" name="headmaster" type="xs:string" />
<xs:element minOccurs="0" name="level" type="xs:string" />
<xs:element minOccurs="0" name="preSubscribeDate" type="xs:dateTime" />
<xs:element minOccurs="0" name="isWaitList" type="xs:boolean" />
<xs:element minOccurs="0" name="codeWait" type="xs:string" />
<xs:element minOccurs="0" name="libWait" type="xs:string" />
<xs:element minOccurs="0" name="requestSchool1" type="tns:schoolInfoBean" />
<xs:element minOccurs="0" name="requestSchool2" type="tns:schoolInfoBean" />
<xs:element minOccurs="0" name="requestSchool3" type="tns:schoolInfoBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="schoolInfoBean">
<xs:sequence>
<xs:element minOccurs="0" name="idSchool" type="xs:string" />
<xs:element minOccurs="0" name="schoolName" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="subscribeActivityBean">
<xs:sequence>
<xs:element minOccurs="0" name="libelle" type="xs:string" />
<xs:element minOccurs="0" name="typeIns" type="xs:string" />
<xs:element minOccurs="0" name="libelleTypeIns" type="xs:string" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="subscribesUnit" nillable="true" type="tns:subscribeUnitBean" />
<xs:element minOccurs="0" name="place" type="xs:string" />
<xs:element minOccurs="0" name="planningHebdomadaire" type="xs:string" />
<xs:element minOccurs="0" name="typeConsum" type="xs:string" />
<xs:element minOccurs="0" name="libelleTypeConsum" type="xs:string" />
<xs:element minOccurs="0" name="comment" type="xs:string" />
<xs:element minOccurs="0" name="idActivity" type="xs:string" />
<xs:element minOccurs="0" name="typeActivity" type="ns2:activityTypeBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="subscribeUnitBean">
<xs:sequence>
<xs:element minOccurs="0" name="idUnit" type="xs:string" />
<xs:element minOccurs="0" name="libelle" type="xs:string" />
<xs:element minOccurs="0" name="bUniStd" type="xs:boolean" />
<xs:element minOccurs="0" name="dateStart" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateEnd" type="xs:dateTime" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="addressBean">
<xs:sequence>
<xs:element minOccurs="0" name="num" type="xs:int" />
<xs:element minOccurs="0" name="numComp" type="xs:string" />
<xs:element minOccurs="0" name="street1" type="xs:string" />
<xs:element minOccurs="0" name="idStreet" type="xs:string" />
<xs:element minOccurs="0" name="street2" type="xs:string" />
<xs:element minOccurs="0" name="zipcode" type="xs:string" />
<xs:element minOccurs="0" name="town" type="xs:string" />
<xs:element minOccurs="0" name="isCommune" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="subscribeSchoolResultBean">
<xs:sequence>
<xs:element minOccurs="0" name="schoolYear" type="xs:int" />
<xs:element minOccurs="0" name="schoolName" type="xs:string" />
<xs:element minOccurs="0" name="level" type="xs:string" />
<xs:element minOccurs="0" name="phone" type="xs:string" />
<xs:element minOccurs="0" name="adress" type="xs:string" />
<xs:element minOccurs="0" name="headmaster" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="getActivityRateRequestBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecRequestBean">
<xs:sequence>
<xs:element minOccurs="0" name="idSubscribe" type="xs:string" />
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
<xs:element minOccurs="0" name="idUnit" type="xs:string" />
<xs:element minOccurs="0" name="typeConsum" type="xs:string" />
<xs:element minOccurs="0" name="flagCom" type="xs:boolean" />
<xs:element minOccurs="0" name="idUtilisat" type="xs:string" />
<xs:element minOccurs="0" name="referenceYear" type="xs:int" />
<xs:element minOccurs="0" name="incomeYear" type="xs:int" />
<xs:element minOccurs="0" name="calculationDate" type="xs:dateTime" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="getActivityRateResultBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecResultBean">
<xs:sequence>
<xs:element minOccurs="0" name="rate" type="xs:double" />
<xs:element name="isCESU" type="xs:boolean" />
<xs:element minOccurs="0" name="calculationDate" type="xs:dateTime" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType abstract="true" name="abstractSpecResultBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecBean">
<xs:sequence />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="addSuppliedDocumentRequestBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecRequestBean">
<xs:sequence>
<xs:element minOccurs="0" name="numDossier" type="xs:int" />
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="documentList" nillable="true" type="ns3:suppliedDocumentBean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="fileHandler">
<xs:sequence>
<xs:element minOccurs="0" name="dataHandler" type="xs:base64Binary" xmime:expectedContentTypes="application/octet-stream" />
<xs:element minOccurs="0" name="fileType" type="xs:string" />
<xs:element minOccurs="0" name="name" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="MaelisFamilyException" type="tns:MaelisFamilyException" />
<xs:complexType name="MaelisFamilyException">
<xs:sequence>
<xs:element name="message" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="createUpdateQuotient" type="tns:createUpdateQuotient" />
<xs:complexType name="createUpdateQuotient">
<xs:sequence>
<xs:element minOccurs="0" name="dossierNumber" type="xs:int" />
<xs:element minOccurs="0" name="personNumber" type="xs:int" />
<xs:element minOccurs="0" name="quotient" type="tns:familyQuotientRedvBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="createUpdateQuotientResponse" type="tns:createUpdateQuotientResponse" />
<xs:complexType name="createUpdateQuotientResponse">
<xs:sequence />
</xs:complexType>
<xs:element name="updateFamilyAuthorizedPersonList" type="tns:updateFamilyAuthorizedPersonList" />
<xs:complexType name="updateFamilyAuthorizedPersonList">
<xs:sequence>
<xs:element minOccurs="0" name="numDossier" type="xs:int" />
<xs:element minOccurs="0" name="authorizedPersonList" type="tns:authorizedPersonListBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="updateFamilyAuthorizedPersonListResponse" type="tns:updateFamilyAuthorizedPersonListResponse" />
<xs:complexType name="updateFamilyAuthorizedPersonListResponse">
<xs:sequence />
</xs:complexType>
<xs:element name="readStreetList" type="tns:readStreetList" />
<xs:complexType name="readStreetList">
<xs:sequence />
</xs:complexType>
<xs:element name="readStreetListResponse" type="tns:readStreetListResponse" />
<xs:complexType name="readStreetListResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="streetList" type="tns:StreetBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="readFamilyByPassword" type="tns:readFamilyByPassword" />
<xs:complexType name="readFamilyByPassword">
<xs:sequence>
<xs:element minOccurs="0" name="dossierNumber" type="xs:int" />
<xs:element minOccurs="0" name="password" type="xs:string" />
<xs:element minOccurs="0" name="schoolYear" type="xs:string" />
<xs:element minOccurs="0" name="incomeYear" type="xs:string" />
<xs:element minOccurs="0" name="referenceYear" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="readFamilyByPasswordResponse" type="tns:readFamilyByPasswordResponse" />
<xs:complexType name="readFamilyByPasswordResponse">
<xs:sequence>
<xs:element minOccurs="0" name="familyBean" type="tns:familyBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="updateFamilySituation" type="tns:updateFamilySituation" />
<xs:complexType name="updateFamilySituation">
<xs:sequence>
<xs:element minOccurs="0" name="numDossier" type="xs:int" />
<xs:element minOccurs="0" name="category" type="xs:string" />
<xs:element minOccurs="0" name="situation" type="xs:string" />
<xs:element minOccurs="0" name="nbChild" type="xs:int" />
<xs:element minOccurs="0" name="nbTotalChild" type="xs:int" />
</xs:sequence>
</xs:complexType>
<xs:element name="updateFamilySituationResponse" type="tns:updateFamilySituationResponse" />
<xs:complexType name="updateFamilySituationResponse">
<xs:sequence />
</xs:complexType>
<xs:element name="updateCoordinate" type="tns:updateCoordinate" />
<xs:complexType name="updateCoordinate">
<xs:sequence>
<xs:element minOccurs="0" name="numDossier" type="xs:int" />
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
<xs:element minOccurs="0" name="adresse" type="tns:addressBean" />
<xs:element minOccurs="0" name="contact" type="ns1:contactBean" />
<xs:element minOccurs="0" name="profession" type="ns1:professionBean" />
<xs:element minOccurs="0" name="CAFInfo" type="tns:cafInfoBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="updateCoordinateResponse" type="tns:updateCoordinateResponse" />
<xs:complexType name="updateCoordinateResponse">
<xs:sequence />
</xs:complexType>
<xs:element name="subscribeSchool" type="tns:subscribeSchool" />
<xs:complexType name="subscribeSchool">
<xs:sequence>
<xs:element minOccurs="0" name="subcribeSchoolRequestBean" type="ns0:subscribeSchoolRequestBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="subscribeSchoolResponse" type="tns:subscribeSchoolResponse" />
<xs:complexType name="subscribeSchoolResponse">
<xs:sequence>
<xs:element minOccurs="0" name="subscribeSchoolResultBean" type="tns:subscribeSchoolResultBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="readFamily" type="tns:readFamily" />
<xs:complexType name="readFamily">
<xs:sequence>
<xs:element minOccurs="0" name="dossierNumber" type="xs:int" />
<xs:element minOccurs="0" name="schoolYear" type="xs:string" />
<xs:element minOccurs="0" name="incomeYear" type="xs:string" />
<xs:element minOccurs="0" name="referenceYear" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="readFamilyResponse" type="tns:readFamilyResponse" />
<xs:complexType name="readFamilyResponse">
<xs:sequence>
<xs:element minOccurs="0" name="familyResult" type="tns:familyBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="subscribeActivity" type="tns:subscribeActivity" />
<xs:complexType name="subscribeActivity">
<xs:sequence>
<xs:element minOccurs="0" name="subscribeActivityRequestBean" type="ns1:subscribeActivityRequestBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="subscribeActivityResponse" type="tns:subscribeActivityResponse" />
<xs:complexType name="subscribeActivityResponse">
<xs:sequence>
<xs:element minOccurs="0" name="subscribeActivityResultBean" type="ns1:subscribeActivityResultBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="updateChildAutorization" type="tns:updateChildAutorization" />
<xs:complexType name="updateChildAutorization">
<xs:sequence>
<xs:element minOccurs="0" name="updateChildAutorizationRequest" type="ns1:updateChildAutorizationRequestBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="updateChildAutorizationResponse" type="tns:updateChildAutorizationResponse" />
<xs:complexType name="updateChildAutorizationResponse">
<xs:sequence />
</xs:complexType>
<xs:element name="deletesubscribe" type="tns:deletesubscribe" />
<xs:complexType name="deletesubscribe">
<xs:sequence>
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
<xs:element minOccurs="0" name="idActivite" type="xs:string" />
<xs:element minOccurs="0" name="dateRefDelete" type="xs:dateTime" />
</xs:sequence>
</xs:complexType>
<xs:element name="deletesubscribeResponse" type="tns:deletesubscribeResponse" />
<xs:complexType name="deletesubscribeResponse">
<xs:sequence />
</xs:complexType>
<xs:element name="getActivityRate" type="tns:getActivityRate" />
<xs:complexType name="getActivityRate">
<xs:sequence>
<xs:element minOccurs="0" name="getActivityRateRequestBean" type="tns:getActivityRateRequestBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="getActivityRateResponse" type="tns:getActivityRateResponse" />
<xs:complexType name="getActivityRateResponse">
<xs:sequence>
<xs:element minOccurs="0" name="getActivityRateResultBean" type="tns:getActivityRateResultBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="addSuppliedDocument" type="tns:addSuppliedDocument" />
<xs:complexType name="addSuppliedDocument">
<xs:sequence>
<xs:element minOccurs="0" name="addSuppliedDocumentRequestBean" type="tns:addSuppliedDocumentRequestBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="addSuppliedDocumentResponse" type="tns:addSuppliedDocumentResponse" />
<xs:complexType name="addSuppliedDocumentResponse">
<xs:sequence>
<xs:element name="isAdded" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
</xs:schema>
<xs:schema targetNamespace="bean.persistence.ws.maelis.sigec.com" version="1.0" xmlns:ns1="ws.maelis.sigec.com" xmlns:ns2="bean.persistence.activity.ws.maelis.sigec.com" xmlns:ns3="bean.persistence.school.ws.maelis.sigec.com" xmlns:tns="bean.persistence.ws.maelis.sigec.com" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="ws.maelis.sigec.com" />
<xs:import namespace="bean.persistence.activity.ws.maelis.sigec.com" />
<xs:import namespace="bean.persistence.school.ws.maelis.sigec.com" />
<xs:complexType name="addressBean">
<xs:sequence>
<xs:element minOccurs="0" name="num" type="xs:int" />
<xs:element minOccurs="0" name="numComp" type="xs:string" />
<xs:element minOccurs="0" name="street1" type="xs:string" />
<xs:element minOccurs="0" name="idStreet" type="xs:string" />
<xs:element minOccurs="0" name="street2" type="xs:string" />
<xs:element minOccurs="0" name="zipcode" type="xs:string" />
<xs:element minOccurs="0" name="town" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="addressStreetBean">
<xs:sequence>
<xs:element minOccurs="0" name="civelCode" type="xs:string" />
<xs:element minOccurs="0" name="id" type="xs:string" />
<xs:element minOccurs="0" name="street" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="professionBean">
<xs:sequence>
<xs:element minOccurs="0" name="codeCSP" type="xs:string" />
<xs:element minOccurs="0" name="profession" type="xs:string" />
<xs:element minOccurs="0" name="employerName" type="xs:string" />
<xs:element minOccurs="0" name="phone" type="xs:string" />
<xs:element minOccurs="0" name="addressProf" type="tns:addressProfBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="addressProfBean">
<xs:sequence>
<xs:element minOccurs="0" name="num" type="xs:int" />
<xs:element minOccurs="0" name="street1" type="xs:string" />
<xs:element minOccurs="0" name="zipcode" type="xs:string" />
<xs:element minOccurs="0" name="town" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="contactBean">
<xs:sequence>
<xs:element minOccurs="0" name="phone" type="xs:string" />
<xs:element minOccurs="0" name="mobile" type="xs:string" />
<xs:element minOccurs="0" name="profPhone" type="xs:string" />
<xs:element minOccurs="0" name="mail" type="xs:string" />
<xs:element minOccurs="0" name="isContactMail" type="xs:boolean" />
<xs:element minOccurs="0" name="isContactSms" type="xs:boolean" />
<xs:element minOccurs="0" name="isInvoicePdf" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="childInfoBean">
<xs:sequence>
<xs:element minOccurs="0" name="num" type="xs:string" />
<xs:element minOccurs="0" name="sexe" type="xs:string" />
<xs:element minOccurs="0" name="lastname" type="xs:string" />
<xs:element minOccurs="0" name="firstname" type="xs:string" />
<xs:element minOccurs="0" name="birthInfoBean" type="ns1:birthInfoBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="subscribeSchoolList" nillable="true" type="ns1:subscribeSchoolBean" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="subscribeActivityList" nillable="true" type="ns1:subscribeActivityBean" />
<xs:element minOccurs="0" name="bPhoto" type="xs:boolean" />
<xs:element minOccurs="0" name="bLeaveAlone" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="subscribeActivityRequestBean">
<xs:sequence>
<xs:element name="personNumber" type="xs:int" />
<xs:element minOccurs="0" name="schoolYear" type="xs:int" />
<xs:element name="activityUnitPlace" type="tns:activityUnitPlaceBean" />
<xs:element minOccurs="0" name="dateStart" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateEnd" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateSubscribe" type="xs:dateTime" />
<xs:element minOccurs="0" name="datePreSubscribe" type="xs:dateTime" />
<xs:element name="weeklyPlanning" type="xs:string" />
<xs:element minOccurs="0" name="typeConsum" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="activityUnitPlaceBean">
<xs:sequence>
<xs:element name="idActivity" type="xs:string" />
<xs:element name="idUnit" type="xs:string" />
<xs:element name="idPlace" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="subscribeActivityResultBean">
<xs:sequence>
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
<xs:element minOccurs="0" name="activity" type="xs:string" />
<xs:element minOccurs="0" name="dateStart" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateEnd" type="xs:dateTime" />
<xs:element minOccurs="0" name="datePreSubscribe" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateSubscribe" type="xs:dateTime" />
<xs:element minOccurs="0" name="typeConsum" type="xs:string" />
<xs:element minOccurs="0" name="place" type="xs:string" />
<xs:element minOccurs="0" name="state" type="ns3:stateBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="updateChildAutorizationRequestBean">
<xs:complexContent>
<xs:extension base="ns1:abstractSpecRequestBean">
<xs:sequence>
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
<xs:element minOccurs="0" name="bLeaveAlone" type="xs:boolean" />
<xs:element minOccurs="0" name="bPhoto" type="xs:boolean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
<xs:schema targetNamespace="bean.persistence.school.ws.maelis.sigec.com" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="subscribeSchoolRequestBean">
<xs:sequence>
<xs:element name="personNumber" type="xs:int" />
<xs:element minOccurs="0" name="schoolYear" type="xs:int" />
<xs:element minOccurs="0" name="dateSubscribe" type="xs:dateTime" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="stateBean">
<xs:sequence>
<xs:element minOccurs="0" name="isWaitState" type="xs:boolean" />
<xs:element minOccurs="0" name="idState" type="xs:string" />
<xs:element minOccurs="0" name="libelle" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
<xs:schema targetNamespace="bean.persistence.family.ws.maelis.sigec.com" version="1.0" xmlns:ns1="ws.maelis.sigec.com" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="ws.maelis.sigec.com" />
<xs:complexType name="suppliedDocumentBean">
<xs:complexContent>
<xs:extension base="ns1:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="idDocument" type="xs:string" />
<xs:element minOccurs="0" name="depositDate" type="xs:dateTime" />
<xs:element minOccurs="0" name="filename" type="xs:string" />
<xs:element minOccurs="0" name="fileSupplied" type="ns1:fileHandler" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
<xs:schema targetNamespace="bean.persistence.activity.ws.maelis.sigec.com" version="1.0" xmlns:tns="bean.persistence.activity.ws.maelis.sigec.com" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="activityTypeBean">
<xs:sequence>
<xs:element minOccurs="0" name="code" type="xs:string" />
<xs:element minOccurs="0" name="libelle" type="xs:string" />
<xs:element minOccurs="0" name="natureSpec" type="tns:activityNatureBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="activityNatureBean">
<xs:sequence>
<xs:element minOccurs="0" name="code" type="xs:string" />
<xs:element minOccurs="0" name="libelle" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="createUpdateQuotient">
<wsdl:part element="tns:createUpdateQuotient" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="createUpdateQuotientResponse">
<wsdl:part element="tns:createUpdateQuotientResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readFamilyByPasswordResponse">
<wsdl:part element="tns:readFamilyByPasswordResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="subscribeSchoolResponse">
<wsdl:part element="tns:subscribeSchoolResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateFamilySituation">
<wsdl:part element="tns:updateFamilySituation" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getActivityRateResponse">
<wsdl:part element="tns:getActivityRateResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateCoordinate">
<wsdl:part element="tns:updateCoordinate" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="subscribeSchool">
<wsdl:part element="tns:subscribeSchool" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="addSuppliedDocumentResponse">
<wsdl:part element="tns:addSuppliedDocumentResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateCoordinateResponse">
<wsdl:part element="tns:updateCoordinateResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="MaelisFamilyException">
<wsdl:part element="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:part>
</wsdl:message>
<wsdl:message name="subscribeActivityResponse">
<wsdl:part element="tns:subscribeActivityResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readFamily">
<wsdl:part element="tns:readFamily" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateChildAutorization">
<wsdl:part element="tns:updateChildAutorization" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateFamilySituationResponse">
<wsdl:part element="tns:updateFamilySituationResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readFamilyResponse">
<wsdl:part element="tns:readFamilyResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="deletesubscribe">
<wsdl:part element="tns:deletesubscribe" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateFamilyAuthorizedPersonList">
<wsdl:part element="tns:updateFamilyAuthorizedPersonList" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateFamilyAuthorizedPersonListResponse">
<wsdl:part element="tns:updateFamilyAuthorizedPersonListResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readStreetList">
<wsdl:part element="tns:readStreetList" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readFamilyByPassword">
<wsdl:part element="tns:readFamilyByPassword" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readStreetListResponse">
<wsdl:part element="tns:readStreetListResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="subscribeActivity">
<wsdl:part element="tns:subscribeActivity" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateChildAutorizationResponse">
<wsdl:part element="tns:updateChildAutorizationResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="deletesubscribeResponse">
<wsdl:part element="tns:deletesubscribeResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getActivityRate">
<wsdl:part element="tns:getActivityRate" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="addSuppliedDocument">
<wsdl:part element="tns:addSuppliedDocument" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="FamilyService">
<wsdl:operation name="createUpdateQuotient">
<wsdl:input message="tns:createUpdateQuotient" name="createUpdateQuotient">
</wsdl:input>
<wsdl:output message="tns:createUpdateQuotientResponse" name="createUpdateQuotientResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateFamilyAuthorizedPersonList">
<wsdl:input message="tns:updateFamilyAuthorizedPersonList" name="updateFamilyAuthorizedPersonList">
</wsdl:input>
<wsdl:output message="tns:updateFamilyAuthorizedPersonListResponse" name="updateFamilyAuthorizedPersonListResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readStreetList">
<wsdl:input message="tns:readStreetList" name="readStreetList">
</wsdl:input>
<wsdl:output message="tns:readStreetListResponse" name="readStreetListResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readFamilyByPassword">
<wsdl:input message="tns:readFamilyByPassword" name="readFamilyByPassword">
</wsdl:input>
<wsdl:output message="tns:readFamilyByPasswordResponse" name="readFamilyByPasswordResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateFamilySituation">
<wsdl:input message="tns:updateFamilySituation" name="updateFamilySituation">
</wsdl:input>
<wsdl:output message="tns:updateFamilySituationResponse" name="updateFamilySituationResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateCoordinate">
<wsdl:input message="tns:updateCoordinate" name="updateCoordinate">
</wsdl:input>
<wsdl:output message="tns:updateCoordinateResponse" name="updateCoordinateResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="subscribeSchool">
<wsdl:input message="tns:subscribeSchool" name="subscribeSchool">
</wsdl:input>
<wsdl:output message="tns:subscribeSchoolResponse" name="subscribeSchoolResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readFamily">
<wsdl:input message="tns:readFamily" name="readFamily">
</wsdl:input>
<wsdl:output message="tns:readFamilyResponse" name="readFamilyResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="subscribeActivity">
<wsdl:input message="tns:subscribeActivity" name="subscribeActivity">
</wsdl:input>
<wsdl:output message="tns:subscribeActivityResponse" name="subscribeActivityResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateChildAutorization">
<wsdl:input message="tns:updateChildAutorization" name="updateChildAutorization">
</wsdl:input>
<wsdl:output message="tns:updateChildAutorizationResponse" name="updateChildAutorizationResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="deletesubscribe">
<wsdl:input message="tns:deletesubscribe" name="deletesubscribe">
</wsdl:input>
<wsdl:output message="tns:deletesubscribeResponse" name="deletesubscribeResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="getActivityRate">
<wsdl:input message="tns:getActivityRate" name="getActivityRate">
</wsdl:input>
<wsdl:output message="tns:getActivityRateResponse" name="getActivityRateResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="addSuppliedDocument">
<wsdl:input message="tns:addSuppliedDocument" name="addSuppliedDocument">
</wsdl:input>
<wsdl:output message="tns:addSuppliedDocumentResponse" name="addSuppliedDocumentResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="FamilyServiceSoapBinding" type="tns:FamilyService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="createUpdateQuotient">
<soap:operation soapAction="" style="document" />
<wsdl:input name="createUpdateQuotient">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="createUpdateQuotientResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateFamilyAuthorizedPersonList">
<soap:operation soapAction="" style="document" />
<wsdl:input name="updateFamilyAuthorizedPersonList">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="updateFamilyAuthorizedPersonListResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readFamilyByPassword">
<soap:operation soapAction="" style="document" />
<wsdl:input name="readFamilyByPassword">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="readFamilyByPasswordResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readStreetList">
<soap:operation soapAction="" style="document" />
<wsdl:input name="readStreetList">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="readStreetListResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateFamilySituation">
<soap:operation soapAction="" style="document" />
<wsdl:input name="updateFamilySituation">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="updateFamilySituationResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateCoordinate">
<soap:operation soapAction="" style="document" />
<wsdl:input name="updateCoordinate">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="updateCoordinateResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="subscribeSchool">
<soap:operation soapAction="" style="document" />
<wsdl:input name="subscribeSchool">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="subscribeSchoolResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readFamily">
<soap:operation soapAction="" style="document" />
<wsdl:input name="readFamily">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="readFamilyResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="subscribeActivity">
<soap:operation soapAction="" style="document" />
<wsdl:input name="subscribeActivity">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="subscribeActivityResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateChildAutorization">
<soap:operation soapAction="" style="document" />
<wsdl:input name="updateChildAutorization">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="updateChildAutorizationResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="deletesubscribe">
<soap:operation soapAction="" style="document" />
<wsdl:input name="deletesubscribe">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="deletesubscribeResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="getActivityRate">
<soap:operation soapAction="" style="document" />
<wsdl:input name="getActivityRate">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="getActivityRateResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="addSuppliedDocument">
<soap:operation soapAction="" style="document" />
<wsdl:input name="addSuppliedDocument">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="addSuppliedDocumentResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal" />
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="FamilyService">
<wsdl:port binding="tns:FamilyServiceSoapBinding" name="FamilyServiceImplPort">
<soap:address location="http://www3.sigec.fr/entrouvertws/services/FamilyService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -1,310 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="InvoiceService" targetNamespace="ws.maelis.sigec.com" xmlns:ns1="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="ws.maelis.sigec.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="ws.maelis.sigec.com" xmlns:ns0="bean.persistence.ws.maelis.sigec.com" xmlns:tns="ws.maelis.sigec.com" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="bean.persistence.ws.maelis.sigec.com" />
<xs:complexType abstract="true" name="abstractSpecBean">
<xs:sequence />
</xs:complexType>
<xs:complexType name="ttfKernelBean">
<xs:sequence>
<xs:element minOccurs="0" name="footerLine1" type="xs:string" />
<xs:element minOccurs="0" name="footerLine2" type="xs:string" />
<xs:element minOccurs="0" name="footerLine3" type="xs:string" />
<xs:element minOccurs="0" name="footerLine4" type="xs:string" />
<xs:element minOccurs="0" name="footerLine5" type="xs:string" />
<xs:element minOccurs="0" name="headerLine1" type="xs:string" />
<xs:element minOccurs="0" name="headerLine2" type="xs:string" />
<xs:element minOccurs="0" name="headerLine3" type="xs:string" />
<xs:element minOccurs="0" name="headerLine4" type="xs:string" />
<xs:element minOccurs="0" name="headerLine5" type="xs:string" />
<xs:element minOccurs="0" name="libelle" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ttfBean">
<xs:complexContent>
<xs:extension base="tns:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="footerLine1" type="xs:string" />
<xs:element minOccurs="0" name="footerLine2" type="xs:string" />
<xs:element minOccurs="0" name="footerLine3" type="xs:string" />
<xs:element minOccurs="0" name="footerLine4" type="xs:string" />
<xs:element minOccurs="0" name="footerLine5" type="xs:string" />
<xs:element minOccurs="0" name="headerLine1" type="xs:string" />
<xs:element minOccurs="0" name="headerLine2" type="xs:string" />
<xs:element minOccurs="0" name="headerLine3" type="xs:string" />
<xs:element minOccurs="0" name="headerLine4" type="xs:string" />
<xs:element minOccurs="0" name="headerLine5" type="xs:string" />
<xs:element minOccurs="0" name="libelle" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="MaelisAccountException" type="tns:MaelisAccountException" />
<xs:complexType name="MaelisAccountException">
<xs:sequence>
<xs:element name="message" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="payInvoices" type="tns:payInvoices" />
<xs:complexType name="payInvoices">
<xs:sequence>
<xs:element minOccurs="0" name="numFamily" type="xs:int" />
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
<xs:element minOccurs="0" name="lastName" type="xs:string" />
<xs:element minOccurs="0" name="firstName" type="xs:string" />
<xs:element minOccurs="0" name="codeRegie" type="xs:int" />
<xs:element minOccurs="0" name="amount" type="xs:double" />
<xs:element minOccurs="0" name="datePaiement" type="xs:dateTime" />
<xs:element minOccurs="0" name="refTransaction" type="xs:string" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="numInvoices" type="xs:int" />
</xs:sequence>
</xs:complexType>
<xs:element name="payInvoicesResponse" type="tns:payInvoicesResponse" />
<xs:complexType name="payInvoicesResponse">
<xs:sequence>
<xs:element minOccurs="0" name="numReglement" type="xs:int" />
</xs:sequence>
</xs:complexType>
<xs:element name="getDirectDebitOrder" type="tns:getDirectDebitOrder" />
<xs:complexType name="getDirectDebitOrder">
<xs:sequence>
<xs:element minOccurs="0" name="dossierNumber" type="xs:int" />
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
<xs:element minOccurs="0" name="codeRegie" type="xs:int" />
<xs:element minOccurs="0" name="datRef" type="xs:dateTime" />
</xs:sequence>
</xs:complexType>
<xs:element name="getDirectDebitOrderResponse" type="tns:getDirectDebitOrderResponse" />
<xs:complexType name="getDirectDebitOrderResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="ns0:personBankBean" />
</xs:sequence>
</xs:complexType>
<xs:element name="addDirectDebitOrder" type="tns:addDirectDebitOrder" />
<xs:complexType name="addDirectDebitOrder">
<xs:sequence>
<xs:element minOccurs="0" name="dossierNumber" type="xs:int" />
<xs:element minOccurs="0" name="numPerson" type="xs:int" />
<xs:element minOccurs="0" name="bank" type="ns0:personBankBean" />
<xs:element minOccurs="0" name="codeRegie" type="xs:int" />
</xs:sequence>
</xs:complexType>
<xs:element name="addDirectDebitOrderResponse" type="tns:addDirectDebitOrderResponse" />
<xs:complexType name="addDirectDebitOrderResponse">
<xs:sequence />
</xs:complexType>
<xs:element name="readInvoices" type="tns:readInvoices" />
<xs:complexType name="readInvoices">
<xs:sequence>
<xs:element minOccurs="0" name="numDossier" type="xs:int" />
<xs:element minOccurs="0" name="codeRegie" type="xs:int" />
<xs:element minOccurs="0" name="datStart" type="xs:dateTime" />
<xs:element minOccurs="0" name="datEnd" type="xs:dateTime" />
</xs:sequence>
</xs:complexType>
<xs:element name="readInvoicesResponse" type="tns:readInvoicesResponse" />
<xs:complexType name="readInvoicesResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="invoiceList" type="ns0:invoiceQIBean" />
</xs:sequence>
</xs:complexType>
</xs:schema>
<xs:schema targetNamespace="bean.persistence.ws.maelis.sigec.com" version="1.0" xmlns:ns1="ws.maelis.sigec.com" xmlns:tns="bean.persistence.ws.maelis.sigec.com" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="ws.maelis.sigec.com" />
<xs:complexType name="personBankBean">
<xs:complexContent>
<xs:extension base="ns1:abstractSpecBean">
<xs:sequence>
<xs:element minOccurs="0" name="bankBIC" type="xs:string" />
<xs:element minOccurs="0" name="bankIBAN" type="xs:string" />
<xs:element minOccurs="0" name="bankRUM" type="xs:string" />
<xs:element minOccurs="0" name="dateStart" type="xs:dateTime" />
<xs:element minOccurs="0" name="bankAddress" type="xs:string" />
<xs:element minOccurs="0" name="civility" type="xs:string" />
<xs:element minOccurs="0" name="lastName" type="xs:string" />
<xs:element minOccurs="0" name="firstName" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="invoiceQIBean">
<xs:sequence>
<xs:element minOccurs="0" name="numInvoice" type="xs:string" />
<xs:element minOccurs="0" name="TTFInfo" type="ns1:ttfBean" />
<xs:element minOccurs="0" name="regie" type="tns:regieBean" />
<xs:element minOccurs="0" name="numFamily" type="xs:int" />
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="payer" type="tns:payerBean" />
<xs:element minOccurs="0" name="refTIPI" type="xs:string" />
<xs:element minOccurs="0" name="amountInvoice" type="xs:decimal" />
<xs:element minOccurs="0" name="amountPaid" type="xs:decimal" />
<xs:element minOccurs="0" name="amountPaidTG" type="xs:decimal" />
<xs:element minOccurs="0" name="dateInvoice" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateStartPayment" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateDeadline" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateDeadlinePayment" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateTIPI" type="xs:dateTime" />
<xs:element minOccurs="0" name="authTIPI" type="xs:string" />
<xs:element minOccurs="0" name="pdfName" type="xs:string" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="lineInvoiceList" nillable="true" type="tns:lineInvoiceBean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="regieBean">
<xs:sequence>
<xs:element minOccurs="0" name="code" type="xs:int" />
<xs:element minOccurs="0" name="libelle" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="payerBean">
<xs:sequence>
<xs:element name="num" type="xs:int" />
<xs:element minOccurs="0" name="lastname" type="xs:string" />
<xs:element minOccurs="0" name="firstname" type="xs:string" />
<xs:element minOccurs="0" name="sexe" type="xs:string" />
<xs:element minOccurs="0" name="civility" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="lineInvoiceBean">
<xs:sequence>
<xs:element name="numLine" type="xs:int" />
<xs:element minOccurs="0" name="numPers" type="xs:string" />
<xs:element minOccurs="0" name="idActivity" type="xs:string" />
<xs:element minOccurs="0" name="idUnit" type="xs:string" />
<xs:element minOccurs="0" name="libelleLine" type="xs:string" />
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="dateStart" type="xs:dateTime" />
<xs:element minOccurs="0" name="dateEnd" type="xs:dateTime" />
<xs:element minOccurs="0" name="quantity" type="xs:double" />
<xs:element minOccurs="0" name="unitPrice" type="xs:double" />
<xs:element minOccurs="0" name="amountLine" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="payInvoices">
<wsdl:part element="tns:payInvoices" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getDirectDebitOrder">
<wsdl:part element="tns:getDirectDebitOrder" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getDirectDebitOrderResponse">
<wsdl:part element="tns:getDirectDebitOrderResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="addDirectDebitOrder">
<wsdl:part element="tns:addDirectDebitOrder" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readInvoices">
<wsdl:part element="tns:readInvoices" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="payInvoicesResponse">
<wsdl:part element="tns:payInvoicesResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="MaelisAccountException">
<wsdl:part element="tns:MaelisAccountException" name="MaelisAccountException">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readInvoicesResponse">
<wsdl:part element="tns:readInvoicesResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="addDirectDebitOrderResponse">
<wsdl:part element="tns:addDirectDebitOrderResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="InvoiceService">
<wsdl:operation name="payInvoices">
<wsdl:input message="tns:payInvoices" name="payInvoices">
</wsdl:input>
<wsdl:output message="tns:payInvoicesResponse" name="payInvoicesResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisAccountException" name="MaelisAccountException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="getDirectDebitOrder">
<wsdl:input message="tns:getDirectDebitOrder" name="getDirectDebitOrder">
</wsdl:input>
<wsdl:output message="tns:getDirectDebitOrderResponse" name="getDirectDebitOrderResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisAccountException" name="MaelisAccountException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="addDirectDebitOrder">
<wsdl:input message="tns:addDirectDebitOrder" name="addDirectDebitOrder">
</wsdl:input>
<wsdl:output message="tns:addDirectDebitOrderResponse" name="addDirectDebitOrderResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisAccountException" name="MaelisAccountException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readInvoices">
<wsdl:input message="tns:readInvoices" name="readInvoices">
</wsdl:input>
<wsdl:output message="tns:readInvoicesResponse" name="readInvoicesResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisAccountException" name="MaelisAccountException">
</wsdl:fault>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="InvoiceServiceSoapBinding" type="tns:InvoiceService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="payInvoices">
<soap:operation soapAction="" style="document" />
<wsdl:input name="payInvoices">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="payInvoicesResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisAccountException">
<soap:fault name="MaelisAccountException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="getDirectDebitOrder">
<soap:operation soapAction="" style="document" />
<wsdl:input name="getDirectDebitOrder">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="getDirectDebitOrderResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisAccountException">
<soap:fault name="MaelisAccountException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="addDirectDebitOrder">
<soap:operation soapAction="" style="document" />
<wsdl:input name="addDirectDebitOrder">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="addDirectDebitOrderResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisAccountException">
<soap:fault name="MaelisAccountException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readInvoices">
<soap:operation soapAction="" style="document" />
<wsdl:input name="readInvoices">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="readInvoicesResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="MaelisAccountException">
<soap:fault name="MaelisAccountException" use="literal" />
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="InvoiceService">
<wsdl:port binding="tns:InvoiceServiceSoapBinding" name="InvoiceServiceImplPort">
<soap:address location="http://www3.sigec.fr/entrouvertws/services/InvoiceService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -1,25 +0,0 @@
{
"data": [
{
"activity_id": "A10003151396",
"id": "A10003151403",
"subscribe_end_date": "2020-12-31T00:00:00+01:00",
"subscribe_start_date": "2020-12-28T00:00:00+01:00",
"text": "Ligne mistral / retour",
"unit_calendar_letter": "B",
"unit_id": "A10003151403",
"unit_weekly_planning": "BBBBB11"
},
{
"activity_id": "A10003151396",
"id": "A10003151402",
"subscribe_end_date": "2020-12-31T00:00:00+01:00",
"subscribe_start_date": "2020-12-28T00:00:00+01:00",
"text": "Ligne mistral/ aller",
"unit_calendar_letter": "A",
"unit_id": "A10003151402",
"unit_weekly_planning": "AAAAA11"
}
],
"err": 0
}

View File

@ -1,30 +0,0 @@
{
"data": [
{
"disabled": true,
"id": "A10002132200",
"text": "Alsh Mistral"
},
{
"id": "A10003144173",
"text": "Arret 1"
},
{
"id": "A10003144174",
"text": "Arret 2"
},
{
"id": "A10003144175",
"text": "Arret 3"
},
{
"id": "A10003144176",
"text": "Arret 4"
},
{
"id": "A10003144177",
"text": "Arret 5"
}
],
"err": 0
}

File diff suppressed because it is too large Load Diff

View File

@ -1,383 +0,0 @@
{
"data" : [
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10000003840-A10000003844",
"slot_id" : "A10000003844",
"text" : "MULTI ACCUEIL LES OLIVIERS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10000003840-A10000003845",
"slot_id" : "A10000003845",
"text" : "MULTI ACCUEIL LES OLIVIERS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10000006100-A10000006104",
"slot_id" : "A10000006104",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10000006100-A10000006105",
"slot_id" : "A10000006105",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "1 2020-2021 GARDERIE MATIN",
"category_id" : "A10003121692",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10003121692-A10003121694",
"slot_id" : "A10003121694",
"text" : "1 2020-2021 GARDERIE MATIN",
"user_booking_status" : "booked"
},
{
"category" : "2 2020-2021 RESTAURATION SCOLAIRE",
"category_id" : "A10003123490",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10003123490-A10003123492",
"slot_id" : "A10003123492",
"text" : "2 2020-2021 RESTAURATION SCOLAIRE",
"user_booking_status" : "booked"
},
{
"category" : "3 2020-2021 GARDERIE SOIR",
"category_id" : "A10003123507",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10003123507-A10003123509",
"slot_id" : "A10003123509",
"text" : "3 2020-2021 GARDERIE SOIR",
"user_booking_status" : "not-booked"
},
{
"category" : "COURS DE DANSE",
"category_id" : "A10003132090",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10003132090-A10003132091",
"slot_id" : "A10003132091",
"text" : "COURS DE DANSE",
"user_booking_status" : "not-booked"
},
{
"category" : "ATELIER D'EXPRESSION THEATRALE",
"category_id" : "A10003132293",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10003132293-A10003132295",
"slot_id" : "A10003132295",
"text" : "ATELIER D'EXPRESSION THEATRALE",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10000003840-A10000003844",
"slot_id" : "A10000003844",
"text" : "MULTI ACCUEIL LES OLIVIERS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10000003840-A10000003845",
"slot_id" : "A10000003845",
"text" : "MULTI ACCUEIL LES OLIVIERS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10000006100-A10000006104",
"slot_id" : "A10000006104",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10000006100-A10000006105",
"slot_id" : "A10000006105",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "1 2020-2021 GARDERIE MATIN",
"category_id" : "A10003121692",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10003121692-A10003121694",
"slot_id" : "A10003121694",
"text" : "1 2020-2021 GARDERIE MATIN",
"user_booking_status" : "booked"
},
{
"category" : "2 2020-2021 RESTAURATION SCOLAIRE",
"category_id" : "A10003123490",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10003123490-A10003123492",
"slot_id" : "A10003123492",
"text" : "2 2020-2021 RESTAURATION SCOLAIRE",
"user_booking_status" : "booked"
},
{
"category" : "3 2020-2021 GARDERIE SOIR",
"category_id" : "A10003123507",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10003123507-A10003123509",
"slot_id" : "A10003123509",
"text" : "3 2020-2021 GARDERIE SOIR",
"user_booking_status" : "not-booked"
},
{
"category" : "COURS DE DANSE",
"category_id" : "A10003132090",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10003132090-A10003132091",
"slot_id" : "A10003132091",
"text" : "COURS DE DANSE",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10000003840-A10000003844",
"slot_id" : "A10000003844",
"text" : "MULTI ACCUEIL LES OLIVIERS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10000003840-A10000003845",
"slot_id" : "A10000003845",
"text" : "MULTI ACCUEIL LES OLIVIERS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10000006100-A10000006104",
"slot_id" : "A10000006104",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10000006100-A10000006105",
"slot_id" : "A10000006105",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
"category_id" : "A10003132030",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10003132030-A10003132032",
"slot_id" : "A10003132032",
"text" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
"user_booking_status" : "booked"
},
{
"category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
"category_id" : "A10003132030",
"datetime" : "2020-12-16 08:00:00",
"id" : "2020-12-16-A10003132030-EO0001PART01",
"slot_id" : "EO0001PART01",
"text" : "Matinée",
"user_booking_status" : "not-booked"
},
{
"category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
"category_id" : "A10003132030",
"datetime" : "2020-12-16 12:00:00",
"id" : "2020-12-16-A10003132030-EO0001PART02",
"slot_id" : "EO0001PART02",
"text" : "Repas",
"user_booking_status" : "not-booked"
},
{
"category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
"category_id" : "A10003132030",
"datetime" : "2020-12-16 14:00:00",
"id" : "2020-12-16-A10003132030-EO0001PART03",
"slot_id" : "EO0001PART03",
"text" : "Après-midi",
"user_booking_status" : "not-booked"
},
{
"category" : "COURS DE DANSE",
"category_id" : "A10003132090",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10003132090-A10003132091",
"slot_id" : "A10003132091",
"text" : "COURS DE DANSE",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10000003840-A10000003844",
"slot_id" : "A10000003844",
"text" : "MULTI ACCUEIL LES OLIVIERS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10000003840-A10000003845",
"slot_id" : "A10000003845",
"text" : "MULTI ACCUEIL LES OLIVIERS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10000006100-A10000006104",
"slot_id" : "A10000006104",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10000006100-A10000006105",
"slot_id" : "A10000006105",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "1 2020-2021 GARDERIE MATIN",
"category_id" : "A10003121692",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10003121692-A10003121694",
"slot_id" : "A10003121694",
"text" : "1 2020-2021 GARDERIE MATIN",
"user_booking_status" : "booked"
},
{
"category" : "2 2020-2021 RESTAURATION SCOLAIRE",
"category_id" : "A10003123490",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10003123490-A10003123492",
"slot_id" : "A10003123492",
"text" : "2 2020-2021 RESTAURATION SCOLAIRE",
"user_booking_status" : "booked"
},
{
"category" : "3 2020-2021 GARDERIE SOIR",
"category_id" : "A10003123507",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10003123507-A10003123509",
"slot_id" : "A10003123509",
"text" : "3 2020-2021 GARDERIE SOIR",
"user_booking_status" : "not-booked"
},
{
"category" : "COURS DE DANSE",
"category_id" : "A10003132090",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10003132090-A10003132091",
"slot_id" : "A10003132091",
"text" : "COURS DE DANSE",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10000003840-A10000003844",
"slot_id" : "A10000003844",
"text" : "MULTI ACCUEIL LES OLIVIERS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10000003840-A10000003845",
"slot_id" : "A10000003845",
"text" : "MULTI ACCUEIL LES OLIVIERS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10000006100-A10000006104",
"slot_id" : "A10000006104",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10000006100-A10000006105",
"slot_id" : "A10000006105",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "1 2020-2021 GARDERIE MATIN",
"category_id" : "A10003121692",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10003121692-A10003121694",
"slot_id" : "A10003121694",
"text" : "1 2020-2021 GARDERIE MATIN",
"user_booking_status" : "booked"
},
{
"category" : "2 2020-2021 RESTAURATION SCOLAIRE",
"category_id" : "A10003123490",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10003123490-A10003123492",
"slot_id" : "A10003123492",
"text" : "2 2020-2021 RESTAURATION SCOLAIRE",
"user_booking_status" : "booked"
},
{
"category" : "3 2020-2021 GARDERIE SOIR",
"category_id" : "A10003123507",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10003123507-A10003123509",
"slot_id" : "A10003123509",
"text" : "3 2020-2021 GARDERIE SOIR",
"user_booking_status" : "not-booked"
},
{
"category" : "COURS DE DANSE",
"category_id" : "A10003132090",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10003132090-A10003132091",
"slot_id" : "A10003132091",
"text" : "COURS DE DANSE",
"user_booking_status" : "not-booked"
}
],
"err" : 0
}

View File

@ -1,392 +0,0 @@
{
"data" : [
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10000003840-A10000003844",
"slot_id" : "A10000003844",
"text" : "MULTI ACCUEIL LES OLIVIERS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10000003840-A10000003845",
"slot_id" : "A10000003845",
"text" : "MULTI ACCUEIL LES OLIVIERS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10000006100-A10000006104",
"slot_id" : "A10000006104",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10000006100-A10000006105",
"slot_id" : "A10000006105",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "1 2020-2021 GARDERIE MATIN",
"category_id" : "A10003121692",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10003121692-A10003121694",
"slot_id" : "A10003121694",
"text" : "1 2020-2021 GARDERIE MATIN",
"user_booking_status" : "booked"
},
{
"category" : "2 2020-2021 RESTAURATION SCOLAIRE",
"category_id" : "A10003123490",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10003123490-A10003123492",
"slot_id" : "A10003123492",
"text" : "2 2020-2021 RESTAURATION SCOLAIRE",
"user_booking_status" : "booked"
},
{
"category" : "3 2020-2021 GARDERIE SOIR",
"category_id" : "A10003123507",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10003123507-A10003123509",
"slot_id" : "A10003123509",
"text" : "3 2020-2021 GARDERIE SOIR",
"user_booking_status" : "not-booked"
},
{
"category" : "COURS DE DANSE",
"category_id" : "A10003132090",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10003132090-A10003132091",
"slot_id" : "A10003132091",
"text" : "COURS DE DANSE",
"user_booking_status" : "not-booked"
},
{
"category" : "ATELIER D'EXPRESSION THEATRALE",
"category_id" : "A10003132293",
"datetime" : "2020-12-14 00:00:00",
"id" : "2020-12-14-A10003132293-A10003132295",
"slot_id" : "A10003132295",
"text" : "ATELIER D'EXPRESSION THEATRALE",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10000003840-A10000003844",
"slot_id" : "A10000003844",
"text" : "MULTI ACCUEIL LES OLIVIERS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10000003840-A10000003845",
"slot_id" : "A10000003845",
"text" : "MULTI ACCUEIL LES OLIVIERS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10000006100-A10000006104",
"slot_id" : "A10000006104",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10000006100-A10000006105",
"slot_id" : "A10000006105",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "1 2020-2021 GARDERIE MATIN",
"category_id" : "A10003121692",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10003121692-A10003121694",
"slot_id" : "A10003121694",
"text" : "1 2020-2021 GARDERIE MATIN",
"user_booking_status" : "booked"
},
{
"category" : "2 2020-2021 RESTAURATION SCOLAIRE",
"category_id" : "A10003123490",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10003123490-A10003123492",
"slot_id" : "A10003123492",
"text" : "2 2020-2021 RESTAURATION SCOLAIRE",
"user_booking_status" : "booked"
},
{
"category" : "3 2020-2021 GARDERIE SOIR",
"category_id" : "A10003123507",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10003123507-A10003123509",
"slot_id" : "A10003123509",
"text" : "3 2020-2021 GARDERIE SOIR",
"user_booking_status" : "not-booked"
},
{
"category" : "COURS DE DANSE",
"category_id" : "A10003132090",
"datetime" : "2020-12-15 00:00:00",
"id" : "2020-12-15-A10003132090-A10003132091",
"slot_id" : "A10003132091",
"text" : "COURS DE DANSE",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10000003840-A10000003844",
"slot_id" : "A10000003844",
"text" : "MULTI ACCUEIL LES OLIVIERS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10000003840-A10000003845",
"slot_id" : "A10000003845",
"text" : "MULTI ACCUEIL LES OLIVIERS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10000006100-A10000006104",
"slot_id" : "A10000006104",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10000006100-A10000006105",
"slot_id" : "A10000006105",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
"category_id" : "A10003132030",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10003132030-A10003132032",
"slot_id" : "A10003132032",
"text" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
"user_booking_status" : "booked"
},
{
"category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
"category_id" : "A10003132030",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10003132030-A10003132034",
"slot_id" : "A10003132034",
"text" : "JOURNEE",
"user_booking_status" : "not-booked"
},
{
"category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
"category_id" : "A10003132030",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10003132030-A10003132036",
"slot_id" : "A10003132036",
"text" : "MATIN",
"user_booking_status" : "not-booked"
},
{
"category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
"category_id" : "A10003132030",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10003132030-A10003132038",
"slot_id" : "A10003132038",
"text" : "MATIN ET REPAS",
"user_booking_status" : "not-booked"
},
{
"category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
"category_id" : "A10003132030",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10003132030-A10003132040",
"slot_id" : "A10003132040",
"text" : "APRES MIDI",
"user_booking_status" : "not-booked"
},
{
"category" : "COURS DE DANSE",
"category_id" : "A10003132090",
"datetime" : "2020-12-16 00:00:00",
"id" : "2020-12-16-A10003132090-A10003132091",
"slot_id" : "A10003132091",
"text" : "COURS DE DANSE",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10000003840-A10000003844",
"slot_id" : "A10000003844",
"text" : "MULTI ACCUEIL LES OLIVIERS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10000003840-A10000003845",
"slot_id" : "A10000003845",
"text" : "MULTI ACCUEIL LES OLIVIERS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10000006100-A10000006104",
"slot_id" : "A10000006104",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10000006100-A10000006105",
"slot_id" : "A10000006105",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "1 2020-2021 GARDERIE MATIN",
"category_id" : "A10003121692",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10003121692-A10003121694",
"slot_id" : "A10003121694",
"text" : "1 2020-2021 GARDERIE MATIN",
"user_booking_status" : "booked"
},
{
"category" : "2 2020-2021 RESTAURATION SCOLAIRE",
"category_id" : "A10003123490",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10003123490-A10003123492",
"slot_id" : "A10003123492",
"text" : "2 2020-2021 RESTAURATION SCOLAIRE",
"user_booking_status" : "booked"
},
{
"category" : "3 2020-2021 GARDERIE SOIR",
"category_id" : "A10003123507",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10003123507-A10003123509",
"slot_id" : "A10003123509",
"text" : "3 2020-2021 GARDERIE SOIR",
"user_booking_status" : "not-booked"
},
{
"category" : "COURS DE DANSE",
"category_id" : "A10003132090",
"datetime" : "2020-12-17 00:00:00",
"id" : "2020-12-17-A10003132090-A10003132091",
"slot_id" : "A10003132091",
"text" : "COURS DE DANSE",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10000003840-A10000003844",
"slot_id" : "A10000003844",
"text" : "MULTI ACCUEIL LES OLIVIERS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "MULTI ACCUEIL LES OLIVIERS",
"category_id" : "A10000003840",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10000003840-A10000003845",
"slot_id" : "A10000003845",
"text" : "MULTI ACCUEIL LES OLIVIERS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10000006100-A10000006104",
"slot_id" : "A10000006104",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Réguliers",
"user_booking_status" : "not-booked"
},
{
"category" : "HALTE GARDERIE LES MAGNOLIAS",
"category_id" : "A10000006100",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10000006100-A10000006105",
"slot_id" : "A10000006105",
"text" : "HALTE GARDERIE LES MAGNOLIAS - Occasionnels",
"user_booking_status" : "not-booked"
},
{
"category" : "1 2020-2021 GARDERIE MATIN",
"category_id" : "A10003121692",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10003121692-A10003121694",
"slot_id" : "A10003121694",
"text" : "1 2020-2021 GARDERIE MATIN",
"user_booking_status" : "booked"
},
{
"category" : "2 2020-2021 RESTAURATION SCOLAIRE",
"category_id" : "A10003123490",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10003123490-A10003123492",
"slot_id" : "A10003123492",
"text" : "2 2020-2021 RESTAURATION SCOLAIRE",
"user_booking_status" : "booked"
},
{
"category" : "3 2020-2021 GARDERIE SOIR",
"category_id" : "A10003123507",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10003123507-A10003123509",
"slot_id" : "A10003123509",
"text" : "3 2020-2021 GARDERIE SOIR",
"user_booking_status" : "not-booked"
},
{
"category" : "COURS DE DANSE",
"category_id" : "A10003132090",
"datetime" : "2020-12-18 00:00:00",
"id" : "2020-12-18-A10003132090-A10003132091",
"slot_id" : "A10003132091",
"text" : "COURS DE DANSE",
"user_booking_status" : "not-booked"
}
],
"err" : 0
}

File diff suppressed because it is too large Load Diff

View File

@ -1,209 +0,0 @@
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:readChildMonthPlanningResponse xmlns:ns1="activity.ws.maelis.sigec.com">
<ResultCalendarList>
<person>
<idMaelis>W20885</idMaelis>
<num>21293</num>
<lastname>JOHANN</lastname>
<firstname>AURELIE</firstname>
</person>
<calendList>
<unit>
<id>A10003121694</id>
<idActivity>A10003121692</idActivity>
<libelle>1 2020-2021 GARDERIE MATIN</libelle>
<motif>X</motif>
</unit>
<listDays>
<datePlanning>2020-12-01T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-03T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-04T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-07T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-08T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-10T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-11T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-14T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-15T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-17T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-18T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
</calendList>
<calendList>
<unit>
<id>A10003123492</id>
<idActivity>A10003123490</idActivity>
<libelle>2 2020-2021 RESTAURATION SCOLAIRE</libelle>
<motif>X</motif>
</unit>
<listDays>
<datePlanning>2020-12-01T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-03T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-04T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-07T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-08T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-10T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-11T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-14T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-15T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-17T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-18T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
</calendList>
<calendList>
<unit>
<id>A10003132032</id>
<idActivity>A10003132030</idActivity>
<libelle>2020-2021 CENTRE DE LOISIRS MERCREDI</libelle>
<motif>X</motif>
</unit>
<listDays>
<datePlanning>2020-12-02T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-09T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-16T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
</calendList>
<calendList>
<unit>
<id>A10003132038</id>
<idActivity>A10003132030</idActivity>
<libelle>MATIN ET REPAS</libelle>
<motif>C</motif>
</unit>
<listDays>
<datePlanning>2020-12-23T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
<listDays>
<datePlanning>2020-12-25T02:50:44.508+01:00</datePlanning>
<dayType>
<code>DAY</code>
</dayType>
</listDays>
</calendList>
</ResultCalendarList>
</ns1:readChildMonthPlanningResponse>
</soap:Body>
</soap:Envelope>

View File

@ -1,6 +0,0 @@
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:deletesubscribeResponse xmlns:ns1="ws.maelis.sigec.com"/>
</soap:Body>
</soap:Envelope>

File diff suppressed because it is too large Load Diff

View File

@ -1,78 +0,0 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:readFamilyResponse xmlns:ns1="ws.maelis.sigec.com">
<familyResult>
<number>3264</number><category>MONO</category><situation>SEPA</situation><nbChild>1</nbChild><nbAES>0</nbAES><nbTotalChild>1</nbTotalChild><flagCom>true</flagCom>
<rl1InfoBean>
<num>21292</num><civility>MME</civility><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><quality>MERE</quality>
<profession>
<codeCSP>SANS</codeCSP><addressProf/>
</profession>
<contact>
<phone>04 84 48 45 11</phone><mobile>06 01 02 03 04</mobile><mail>dominique.lefeuvre@sigec.fr</mail><isContactMail>false</isContactMail><isContactSms>false</isContactSms><isInvoicePdf>false</isInvoicePdf>
</contact>
<address>
<num>3450</num><street1>BOULEVARD GENERAL LECLERC</street1><idStreet>197</idStreet><zipcode>83160</zipcode><town>LA VALETTE-DU-VAR</town>
</address>
<cafInfo>
<num>2791735</num><organ>A10000216060</organ>
</cafInfo>
</rl1InfoBean>
<childInfoList>
<num>21293</num><sexe>F</sexe><lastname>JOHANN</lastname><firstname>AURELIE</firstname>
<birthInfoBean>
<dateBirth>2011-09-02T00:00:00+02:00</dateBirth><countryCode>100</countryCode><place>LA SEYNE SUR MER</place>
</birthInfoBean>
<subscribeSchoolList>
<year>2020</year><schoolName>2 FRANCOIS FABIE</schoolName><adress> AVENUE ARISTIDE BRIAND</adress><headmaster> </headmaster><level>COURS MOYEN 1</level><preSubscribeDate>2020-08-01T00:00:00+02:00</preSubscribeDate><isWaitList>false</isWaitList>
</subscribeSchoolList>
<subscribeActivityList>
<libelle>1 2020-2021 GARDERIE MATIN</libelle><typeIns>DEF</typeIns><libelleTypeIns>DEFINITIVE</libelleTypeIns>
<subscribesUnit>
<idUnit>A10003121694</idUnit><libelle>1 2020-2021 GARDERIE MATIN</libelle><bUniStd>true</bUniStd><dateStart>2020-09-01T00:00:00+02:00</dateStart><dateEnd>2021-07-06T00:00:00+02:00</dateEnd>
</subscribesUnit>
<place>2 FRANCOIS FABIE</place><planningHebdomadaire>0000000</planningHebdomadaire><typeConsum>ENF</typeConsum><libelleTypeConsum>ENFANT</libelleTypeConsum><idActivity>A10003121692</idActivity>
<typeActivity>
<code>ACCMAT</code><libelle>Accueil du matin</libelle>
<natureSpec>
<code>A</code><libelle>Accueil Périscolaire</libelle>
</natureSpec>
</typeActivity>
</subscribeActivityList>
<subscribeActivityList>
<libelle>2 2020-2021 RESTAURATION SCOLAIRE</libelle><typeIns>DEF</typeIns><libelleTypeIns>DEFINITIVE</libelleTypeIns>
<subscribesUnit>
<idUnit>A10003123492</idUnit><libelle>2 2020-2021 RESTAURATION SCOLAIRE</libelle><bUniStd>true</bUniStd><dateStart>2020-09-02T00:00:00+02:00</dateStart><dateEnd>2021-07-03T00:00:00+02:00</dateEnd>
</subscribesUnit>
<place>2 FRANCOIS FABIE</place><planningHebdomadaire>0010011</planningHebdomadaire><typeConsum>ENF</typeConsum><libelleTypeConsum>ENFANT</libelleTypeConsum><idActivity>A10003123490</idActivity>
<typeActivity>
<code>RESTSCOL</code><libelle>Restauration scolaire</libelle>
<natureSpec>
<code>R</code><libelle>Restauration Scolaire</libelle>
</natureSpec>
</typeActivity>
</subscribeActivityList>
<bPhoto>false</bPhoto><bLeaveAlone>false</bLeaveAlone>
</childInfoList>
<authorizedPersonList>
<numPerson>23870</numPerson><civility>MME</civility><firstname>VIRGINIE</firstname><lastname>DEVOILLE</lastname><quality>GMERE</quality>
<contact>
<phone>04 05 06 07 08</phone><mobile>06 01 02 03 04</mobile><mail>dominique.lefeuvre@sigec.fr</mail>
</contact>
</authorizedPersonList>
<authorizedPersonList>
<numPerson>23872</numPerson><civility>M. ET</civility><firstname>YANNIS</firstname><lastname>BAILLY</lastname><quality>GP</quality>
<contact>
<phone>04 05 06 07 08</phone><mobile>06 01 02 03 04</mobile><mail>dominique.lefeuvre@sigec.fr</mail>
</contact>
</authorizedPersonList>
<authorizedPersonList>
<numPerson>24481</numPerson><civility>MR</civility><firstname>JEAN-MICHEL</firstname><lastname>HEMIDY</lastname><quality>PERE</quality>
<contact>
<mobile>06 01 02 03 04</mobile><mail>dominique.lefeuvre@sigec.fr</mail>
</contact>
</authorizedPersonList>
</familyResult>
</ns1:readFamilyResponse>
</soap:Body>
</soap:Envelope>

View File

@ -1,12 +0,0 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode><faultstring>E204 : Le mot de passe est incorrect</faultstring>
<detail>
<ns1:MaelisFamilyException xmlns:ns1="ws.maelis.sigec.com">
<message>E204 : Le mot de passe est incorrect</message>
</ns1:MaelisFamilyException>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>

View File

@ -1,78 +0,0 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:readFamilyByPasswordResponse xmlns:ns1="ws.maelis.sigec.com">
<familyBean>
<number>3264</number><category>MONO</category><situation>SEPA</situation><nbChild>1</nbChild><nbAES>0</nbAES><nbTotalChild>1</nbTotalChild><flagCom>true</flagCom>
<rl1InfoBean>
<num>21292</num><civility>MME</civility><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><quality>MERE</quality>
<profession>
<codeCSP>SANS</codeCSP><addressProf/>
</profession>
<contact>
<phone>04 84 48 45 11</phone><mobile>06 01 02 03 04</mobile><mail>dominique.lefeuvre@sigec.fr</mail><isContactMail>false</isContactMail><isContactSms>false</isContactSms><isInvoicePdf>false</isInvoicePdf>
</contact>
<address>
<num>3450</num><street1>BOULEVARD GENERAL LECLERC</street1><idStreet>197</idStreet><zipcode>83160</zipcode><town>LA VALETTE-DU-VAR</town>
</address>
<cafInfo>
<num>2791735</num><organ>A10000216060</organ>
</cafInfo>
</rl1InfoBean>
<childInfoList>
<num>21293</num><sexe>F</sexe><lastname>JOHANN</lastname><firstname>AURELIE</firstname>
<birthInfoBean>
<dateBirth>2011-09-02T00:00:00+02:00</dateBirth><countryCode>100</countryCode><place>LA SEYNE SUR MER</place>
</birthInfoBean>
<subscribeSchoolList>
<year>2020</year><schoolName>2 FRANCOIS FABIE</schoolName><adress> AVENUE ARISTIDE BRIAND</adress><headmaster> </headmaster><level>COURS MOYEN 1</level><preSubscribeDate>2020-08-01T00:00:00+02:00</preSubscribeDate><isWaitList>false</isWaitList>
</subscribeSchoolList>
<subscribeActivityList>
<libelle>1 2020-2021 GARDERIE MATIN</libelle><typeIns>DEF</typeIns><libelleTypeIns>DEFINITIVE</libelleTypeIns>
<subscribesUnit>
<idUnit>A10003121694</idUnit><libelle>1 2020-2021 GARDERIE MATIN</libelle><bUniStd>true</bUniStd><dateStart>2020-09-01T00:00:00+02:00</dateStart><dateEnd>2021-07-06T00:00:00+02:00</dateEnd>
</subscribesUnit>
<place>2 FRANCOIS FABIE</place><planningHebdomadaire>0000000</planningHebdomadaire><typeConsum>ENF</typeConsum><libelleTypeConsum>ENFANT</libelleTypeConsum><idActivity>A10003121692</idActivity>
<typeActivity>
<code>ACCMAT</code><libelle>Accueil du matin</libelle>
<natureSpec>
<code>A</code><libelle>Accueil Périscolaire</libelle>
</natureSpec>
</typeActivity>
</subscribeActivityList>
<subscribeActivityList>
<libelle>2 2020-2021 RESTAURATION SCOLAIRE</libelle><typeIns>DEF</typeIns><libelleTypeIns>DEFINITIVE</libelleTypeIns>
<subscribesUnit>
<idUnit>A10003123492</idUnit><libelle>2 2020-2021 RESTAURATION SCOLAIRE</libelle><bUniStd>true</bUniStd><dateStart>2020-09-02T00:00:00+02:00</dateStart><dateEnd>2021-07-03T00:00:00+02:00</dateEnd>
</subscribesUnit>
<place>2 FRANCOIS FABIE</place><planningHebdomadaire>0010011</planningHebdomadaire><typeConsum>ENF</typeConsum><libelleTypeConsum>ENFANT</libelleTypeConsum><idActivity>A10003123490</idActivity>
<typeActivity>
<code>RESTSCOL</code><libelle>Restauration scolaire</libelle>
<natureSpec>
<code>R</code><libelle>Restauration Scolaire</libelle>
</natureSpec>
</typeActivity>
</subscribeActivityList>
<bPhoto>false</bPhoto><bLeaveAlone>false</bLeaveAlone>
</childInfoList>
<authorizedPersonList>
<numPerson>23870</numPerson><civility>MME</civility><firstname>VIRGINIE</firstname><lastname>DEVOILLE</lastname><quality>GMERE</quality>
<contact>
<phone>04 05 06 07 08</phone><mobile>06 01 02 03 04</mobile><mail>dominique.lefeuvre@sigec.fr</mail>
</contact>
</authorizedPersonList>
<authorizedPersonList>
<numPerson>23872</numPerson><civility>M. ET</civility><firstname>YANNIS</firstname><lastname>BAILLY</lastname><quality>GP</quality>
<contact>
<phone>04 05 06 07 08</phone><mobile>06 01 02 03 04</mobile><mail>dominique.lefeuvre@sigec.fr</mail>
</contact>
</authorizedPersonList>
<authorizedPersonList>
<numPerson>24481</numPerson><civility>MR</civility><firstname>JEAN-MICHEL</firstname><lastname>HEMIDY</lastname><quality>PERE</quality>
<contact>
<mobile>06 01 02 03 04</mobile><mail>dominique.lefeuvre@sigec.fr</mail>
</contact>
</authorizedPersonList>
</familyBean>
</ns1:readFamilyByPasswordResponse>
</soap:Body>
</soap:Envelope>

View File

@ -1,308 +0,0 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:readInvoicesResponse xmlns:ns1="ws.maelis.sigec.com">
<invoiceList>
<numInvoice>53186</numInvoice>
<TTFInfo>
<libelle>FACTURATION SEPTEMBRE 2014</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>7.52</amountInvoice><amountPaid>7.52</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2014-10-24T00:00:00+02:00</dateInvoice><dateStartPayment>2014-01-01T00:00:00+02:00</dateStartPayment><dateDeadline>2014-10-24T00:00:00+02:00</dateDeadline>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10001852712</idActivity><idUnit>A10001852713</idUnit><libelleLine>Calendrier RESTAURATION SCOLAIRE 2014-2015</libelleLine><name>JOHANN AURELIE</name><dateStart>2014-09-01T00:00:00+02:00</dateStart><dateEnd>2014-09-30T00:00:00+02:00</dateEnd><quantity>4.0</quantity><unitPrice>1.88</unitPrice><amountLine>7.52</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>54654</numInvoice>
<TTFInfo>
<libelle>FACTURATION OCTOBRE 2014</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>1.88</amountInvoice><amountPaid>1.88</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2014-11-21T00:00:00+02:00</dateInvoice><dateStartPayment>2014-01-01T00:00:00+02:00</dateStartPayment><dateDeadline>2014-11-21T00:00:00+02:00</dateDeadline>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10001852712</idActivity><idUnit>A10001852713</idUnit><libelleLine>REGULARISATION MALADIE SEPTEMBRE</libelleLine><name>JOHANN AURELIE</name><dateStart>2014-10-01T00:00:00+02:00</dateStart><dateEnd>2014-10-31T00:00:00+02:00</dateEnd><quantity>-2.0</quantity><unitPrice>1.88</unitPrice><amountLine>-3.76</amountLine>
</lineInvoiceList>
<lineInvoiceList>
<numLine>2</numLine><numPers>21293</numPers><idActivity>A10001852712</idActivity><idUnit>A10001852713</idUnit><libelleLine>Calendrier RESTAURATION SCOLAIRE 2014-2015</libelleLine><name>JOHANN AURELIE</name><dateStart>2014-10-01T00:00:00+02:00</dateStart><dateEnd>2014-10-31T00:00:00+02:00</dateEnd><quantity>3.0</quantity><unitPrice>1.88</unitPrice><amountLine>5.64</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>56106</numInvoice>
<TTFInfo>
<libelle>FACTURATION NOVEMBRE 2014</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>7.52</amountInvoice><amountPaid>7.52</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2014-12-19T00:00:00+02:00</dateInvoice><dateStartPayment>2014-01-01T00:00:00+02:00</dateStartPayment><dateDeadline>2014-12-19T00:00:00+02:00</dateDeadline>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10001852712</idActivity><idUnit>A10001852713</idUnit><libelleLine>Calendrier RESTAURATION SCOLAIRE 2014-2015</libelleLine><name>JOHANN AURELIE</name><dateStart>2014-11-01T00:00:00+02:00</dateStart><dateEnd>2014-11-30T00:00:00+02:00</dateEnd><quantity>4.0</quantity><unitPrice>1.88</unitPrice><amountLine>7.52</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>57572</numInvoice>
<TTFInfo>
<libelle>FACTURATION DECEMBRE 2014</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>5.64</amountInvoice><amountPaid>5.64</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2015-01-16T00:00:00+02:00</dateInvoice><dateStartPayment>2008-01-01T00:00:00+02:00</dateStartPayment><dateDeadline>2015-01-16T00:00:00+02:00</dateDeadline>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10001852712</idActivity><idUnit>A10001852713</idUnit><libelleLine>Calendrier RESTAURATION SCOLAIRE 2014-2015</libelleLine><name>JOHANN AURELIE</name><dateStart>2014-12-01T00:00:00+02:00</dateStart><dateEnd>2014-12-31T00:00:00+02:00</dateEnd><quantity>3.0</quantity><unitPrice>1.88</unitPrice><amountLine>5.64</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>59032</numInvoice>
<TTFInfo>
<libelle>FACTURATION JANVIER 2015</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>7.52</amountInvoice><amountPaid>7.52</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2015-02-16T00:00:00+02:00</dateInvoice><dateStartPayment>2008-01-01T00:00:00+02:00</dateStartPayment><dateDeadline>2015-02-16T00:00:00+02:00</dateDeadline>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10001852712</idActivity><idUnit>A10001852713</idUnit><libelleLine>Calendrier RESTAURATION SCOLAIRE 2014-2015</libelleLine><name>JOHANN AURELIE</name><dateStart>2015-01-01T00:00:00+02:00</dateStart><dateEnd>2015-01-31T00:00:00+02:00</dateEnd><quantity>4.0</quantity><unitPrice>1.88</unitPrice><amountLine>7.52</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>60502</numInvoice>
<TTFInfo>
<libelle>FACTURATION FEVRIER 2015</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>3.76</amountInvoice><amountPaid>3.76</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2015-03-16T00:00:00+02:00</dateInvoice><dateStartPayment>2014-01-01T00:00:00+02:00</dateStartPayment><dateDeadline>2015-03-16T00:00:00+02:00</dateDeadline>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10001852712</idActivity><idUnit>A10001852713</idUnit><libelleLine>ENSEIGNANT ABS RESTAURATION SCOLAIRE 2014-2015</libelleLine><name>JOHANN AURELIE</name><dateStart>2015-02-01T00:00:00+02:00</dateStart><dateEnd>2015-02-28T00:00:00+02:00</dateEnd><quantity>-1.0</quantity><unitPrice>1.88</unitPrice><amountLine>-1.88</amountLine>
</lineInvoiceList>
<lineInvoiceList>
<numLine>2</numLine><numPers>21293</numPers><idActivity>A10001852712</idActivity><idUnit>A10001852713</idUnit><libelleLine>Calendrier RESTAURATION SCOLAIRE 2014-2015</libelleLine><name>JOHANN AURELIE</name><dateStart>2015-02-01T00:00:00+02:00</dateStart><dateEnd>2015-02-28T00:00:00+02:00</dateEnd><quantity>3.0</quantity><unitPrice>1.88</unitPrice><amountLine>5.64</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>61980</numInvoice>
<TTFInfo>
<libelle>FACTURATION MARS 2015</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>5.64</amountInvoice><amountPaid>5.64</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2015-04-16T00:00:00+02:00</dateInvoice><dateStartPayment>2015-01-01T00:00:00+02:00</dateStartPayment><dateDeadline>2015-04-23T00:00:00+02:00</dateDeadline><dateDeadlinePayment>2015-05-01T00:00:00+02:00</dateDeadlinePayment>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10001852712</idActivity><idUnit>A10001852713</idUnit><libelleLine>Calendrier RESTAURATION SCOLAIRE 2014-2015</libelleLine><name>JOHANN AURELIE</name><dateStart>2015-03-01T00:00:00+02:00</dateStart><dateEnd>2015-03-31T00:00:00+02:00</dateEnd><quantity>3.0</quantity><unitPrice>1.88</unitPrice><amountLine>5.64</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>64954</numInvoice>
<TTFInfo>
<libelle>FACTURATION AVRIL 2015</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>7.52</amountInvoice><amountPaid>7.52</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2015-05-16T00:00:00+02:00</dateInvoice><dateStartPayment>2015-01-01T00:00:00+02:00</dateStartPayment><dateDeadline>2015-05-16T00:00:00+02:00</dateDeadline><dateDeadlinePayment>2015-07-01T00:00:00+02:00</dateDeadlinePayment>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10001852712</idActivity><idUnit>A10001852713</idUnit><libelleLine>Calendrier RESTAURATION SCOLAIRE 2014-2015</libelleLine><name>JOHANN AURELIE</name><dateStart>2015-04-01T00:00:00+02:00</dateStart><dateEnd>2015-04-30T00:00:00+02:00</dateEnd><quantity>4.0</quantity><unitPrice>1.88</unitPrice><amountLine>7.52</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>66441</numInvoice>
<TTFInfo>
<libelle>FACTURATION MAI 2015</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>5.64</amountInvoice><amountPaid>5.64</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2015-06-19T00:00:00+02:00</dateInvoice><dateStartPayment>2015-01-01T00:00:00+02:00</dateStartPayment><dateDeadline>2015-06-19T00:00:00+02:00</dateDeadline><dateDeadlinePayment>2015-07-01T00:00:00+02:00</dateDeadlinePayment>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10001852712</idActivity><idUnit>A10001852713</idUnit><libelleLine>Calendrier RESTAURATION SCOLAIRE 2014-2015</libelleLine><name>JOHANN AURELIE</name><dateStart>2015-05-01T00:00:00+02:00</dateStart><dateEnd>2015-05-31T00:00:00+02:00</dateEnd><quantity>3.0</quantity><unitPrice>1.88</unitPrice><amountLine>5.64</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>67904</numInvoice>
<TTFInfo>
<libelle>FACTURATION JUIN 2015</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>7.52</amountInvoice><amountPaid>7.52</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2015-07-21T00:00:00+02:00</dateInvoice><dateStartPayment>2015-01-01T00:00:00+02:00</dateStartPayment><dateDeadline>2015-07-21T00:00:00+02:00</dateDeadline><dateDeadlinePayment>2015-09-01T00:00:00+02:00</dateDeadlinePayment>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10001852712</idActivity><idUnit>A10001852713</idUnit><libelleLine>Calendrier RESTAURATION SCOLAIRE 2014-2015</libelleLine><name>JOHANN AURELIE</name><dateStart>2015-06-01T00:00:00+02:00</dateStart><dateEnd>2015-06-30T00:00:00+02:00</dateEnd><quantity>4.0</quantity><unitPrice>1.88</unitPrice><amountLine>7.52</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>69360</numInvoice>
<TTFInfo>
<libelle>FACTURATION JUILLET 2015</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>1.88</amountInvoice><amountPaid>1.88</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2015-08-21T00:00:00+02:00</dateInvoice><dateStartPayment>2015-01-01T00:00:00+02:00</dateStartPayment><dateDeadline>2015-08-21T00:00:00+02:00</dateDeadline><dateDeadlinePayment>2015-09-01T00:00:00+02:00</dateDeadlinePayment>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10001852712</idActivity><idUnit>A10001852713</idUnit><libelleLine>Calendrier RESTAURATION SCOLAIRE 2014-2015</libelleLine><name>JOHANN AURELIE</name><dateStart>2015-07-01T00:00:00+02:00</dateStart><dateEnd>2015-07-31T00:00:00+02:00</dateEnd><quantity>1.0</quantity><unitPrice>1.88</unitPrice><amountLine>1.88</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>72367</numInvoice>
<TTFInfo>
<libelle>PERISCOLAIRE JANVIER 2017</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>70.02</amountInvoice><amountPaid>0</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2017-02-28T00:00:00+02:00</dateInvoice><dateStartPayment>2017-01-01T00:00:00+02:00</dateStartPayment><dateDeadline>2017-02-15T00:00:00+02:00</dateDeadline><dateDeadlinePayment>2018-12-31T00:00:00+02:00</dateDeadlinePayment>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10002890790</idActivity><idUnit>A10002890792</idUnit><libelleLine>Calendrier 2016-2017 GARDERIE MATIN</libelleLine><name>JOHANN AURELIE</name><dateStart>2017-01-01T00:00:00+02:00</dateStart><dateEnd>2017-01-31T00:00:00+02:00</dateEnd><quantity>9.0</quantity><unitPrice>2.7</unitPrice><amountLine>24.3</amountLine>
</lineInvoiceList>
<lineInvoiceList>
<numLine>2</numLine><numPers>21293</numPers><idActivity>A10002890794</idActivity><idUnit>A10002890796</idUnit><libelleLine>Calendrier 2016-2017 GARDERIE SOIR</libelleLine><name>JOHANN AURELIE</name><dateStart>2017-01-01T00:00:00+02:00</dateStart><dateEnd>2017-01-31T00:00:00+02:00</dateEnd><quantity>9.0</quantity><unitPrice>3.2</unitPrice><amountLine>28.8</amountLine>
</lineInvoiceList>
<lineInvoiceList>
<numLine>3</numLine><numPers>21293</numPers><idActivity>A10002883950</idActivity><idUnit>A10002883952</idUnit><libelleLine>Calendrier 2016-2017 RESTAURATION SCOLAIRE</libelleLine><name>JOHANN AURELIE</name><dateStart>2017-01-01T00:00:00+02:00</dateStart><dateEnd>2017-01-31T00:00:00+02:00</dateEnd><quantity>9.0</quantity><unitPrice>1.88</unitPrice><amountLine>16.92</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>73594</numInvoice>
<TTFInfo>
<libelle>PERISCOLAIRE AVRIL 2017</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>31.12</amountInvoice><amountPaid>0</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2017-04-27T00:00:00+02:00</dateInvoice><dateStartPayment>2017-01-01T00:00:00+02:00</dateStartPayment><dateDeadline>2017-05-15T00:00:00+02:00</dateDeadline><dateDeadlinePayment>2018-12-31T00:00:00+02:00</dateDeadlinePayment>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10002883950</idActivity><idUnit>A10002883952</idUnit><libelleLine>Calendrier 2016-2017 RESTAURATION SCOLAIRE</libelleLine><name>JOHANN AURELIE</name><dateStart>2017-04-01T00:00:00+02:00</dateStart><dateEnd>2017-04-30T00:00:00+02:00</dateEnd><quantity>4.0</quantity><unitPrice>1.88</unitPrice><amountLine>7.52</amountLine>
</lineInvoiceList>
<lineInvoiceList>
<numLine>2</numLine><numPers>21293</numPers><idActivity>A10002890794</idActivity><idUnit>A10002890796</idUnit><libelleLine>Calendrier 2016-2017 GARDERIE SOIR</libelleLine><name>JOHANN AURELIE</name><dateStart>2017-04-01T00:00:00+02:00</dateStart><dateEnd>2017-04-30T00:00:00+02:00</dateEnd><quantity>4.0</quantity><unitPrice>3.2</unitPrice><amountLine>12.8</amountLine>
</lineInvoiceList>
<lineInvoiceList>
<numLine>3</numLine><numPers>21293</numPers><idActivity>A10002890790</idActivity><idUnit>A10002890792</idUnit><libelleLine>Calendrier 2016-2017 GARDERIE MATIN</libelleLine><name>JOHANN AURELIE</name><dateStart>2017-04-01T00:00:00+02:00</dateStart><dateEnd>2017-04-30T00:00:00+02:00</dateEnd><quantity>4.0</quantity><unitPrice>2.7</unitPrice><amountLine>10.8</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>75471</numInvoice>
<TTFInfo>
<headerLine1>Votre portail famille évolue : vous pouvez désormais effectuer vos réservations en ligne.</headerLine1><libelle>FACTURATION OCTOBRE 2018</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>108.92</amountInvoice><amountPaid>0</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2018-10-29T00:00:00+02:00</dateInvoice><dateStartPayment>2018-10-29T00:00:00+02:00</dateStartPayment><dateDeadline>2018-11-15T00:00:00+02:00</dateDeadline><dateDeadlinePayment>2020-12-31T00:00:00+02:00</dateDeadlinePayment>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10003009270</idActivity><idUnit>A10003009272</idUnit><libelleLine>Calendrier 2018-2019 RESTAURATION SCOLAIRE</libelleLine><name>JOHANN AURELIE</name><dateStart>2018-10-01T00:00:00+02:00</dateStart><dateEnd>2018-10-31T00:00:00+02:00</dateEnd><quantity>14.0</quantity><unitPrice>1.88</unitPrice><amountLine>26.32</amountLine>
</lineInvoiceList>
<lineInvoiceList>
<numLine>2</numLine><numPers>21293</numPers><idActivity>A10003009290</idActivity><idUnit>A10003009292</idUnit><libelleLine>Calendrier 2018-2019 GARDERIE MATIN</libelleLine><name>JOHANN AURELIE</name><dateStart>2018-10-01T00:00:00+02:00</dateStart><dateEnd>2018-10-31T00:00:00+02:00</dateEnd><quantity>14.0</quantity><unitPrice>2.7</unitPrice><amountLine>37.8</amountLine>
</lineInvoiceList>
<lineInvoiceList>
<numLine>3</numLine><numPers>21293</numPers><idActivity>A10003009296</idActivity><idUnit>A10003009298</idUnit><libelleLine>Calendrier 2018-2019 GARDERIE SOIR</libelleLine><name>JOHANN AURELIE</name><dateStart>2018-10-01T00:00:00+02:00</dateStart><dateEnd>2018-10-31T00:00:00+02:00</dateEnd><quantity>14.0</quantity><unitPrice>3.2</unitPrice><amountLine>44.8</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>76287</numInvoice>
<TTFInfo>
<headerLine1>Votre portail famille évolue :</headerLine1><headerLine2>vous pouvez désormais effectuer vos réservations en ligne.</headerLine2><libelle>FACTURATION NOVEMBRE 2018</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>99.26</amountInvoice><amountPaid>0</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2018-12-07T00:00:00+02:00</dateInvoice><dateDeadline>2018-12-22T00:00:00+02:00</dateDeadline>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10003009290</idActivity><idUnit>A10003009292</idUnit><libelleLine>Calendrier 2018-2019 GARDERIE MATIN</libelleLine><name>JOHANN AURELIE</name><dateStart>2018-11-01T00:00:00+02:00</dateStart><dateEnd>2018-11-30T00:00:00+02:00</dateEnd><quantity>13.0</quantity><unitPrice>2.7</unitPrice><amountLine>35.1</amountLine>
</lineInvoiceList>
<lineInvoiceList>
<numLine>2</numLine><numPers>21293</numPers><idActivity>A10003009270</idActivity><idUnit>A10003009272</idUnit><libelleLine>Calendrier 2018-2019 RESTAURATION SCOLAIRE</libelleLine><name>JOHANN AURELIE</name><dateStart>2018-11-01T00:00:00+02:00</dateStart><dateEnd>2018-11-30T00:00:00+02:00</dateEnd><quantity>12.0</quantity><unitPrice>1.88</unitPrice><amountLine>22.56</amountLine>
</lineInvoiceList>
<lineInvoiceList>
<numLine>3</numLine><numPers>21293</numPers><idActivity>A10003009296</idActivity><idUnit>A10003009298</idUnit><libelleLine>Calendrier 2018-2019 GARDERIE SOIR</libelleLine><name>JOHANN AURELIE</name><dateStart>2018-11-01T00:00:00+02:00</dateStart><dateEnd>2018-11-30T00:00:00+02:00</dateEnd><quantity>13.0</quantity><unitPrice>3.2</unitPrice><amountLine>41.6</amountLine>
</lineInvoiceList>
</invoiceList>
<invoiceList>
<numInvoice>77107</numInvoice>
<TTFInfo>
<headerLine1>Les inscriptions aux séjours des vacances d'été pourront être réalisées sur votre portail famille :</headerLine1><headerLine2>http://sigecville.fr</headerLine2><libelle>RESTAURATION JUIN 2019</libelle>
</TTFInfo>
<regie>
<code>1</code><libelle>REGIE CENTRALE DES RECETTES</libelle>
</regie>
<numFamily>3264</numFamily><name>BAILLY CAROLINE</name>
<payer>
<num>21292</num><lastname>BAILLY</lastname><firstname>CAROLINE</firstname><sexe>F</sexe><civility>MME</civility>
</payer>
<amountInvoice>22.56</amountInvoice><amountPaid>0</amountPaid><amountPaidTG>0</amountPaidTG><dateInvoice>2019-06-28T00:00:00+02:00</dateInvoice><dateDeadline>2019-07-10T00:00:00+02:00</dateDeadline>
<lineInvoiceList>
<numLine>1</numLine><numPers>21293</numPers><idActivity>A10003009270</idActivity><idUnit>A10003009272</idUnit><libelleLine>Calendrier 2018-2019 RESTAURATION SCOLAIRE</libelleLine><name>JOHANN AURELIE</name><dateStart>2019-06-01T00:00:00+02:00</dateStart><dateEnd>2019-06-30T00:00:00+02:00</dateEnd><quantity>12.0</quantity><unitPrice>1.88</unitPrice><amountLine>22.56</amountLine>
</lineInvoiceList>
</invoiceList>
</ns1:readInvoicesResponse>
</soap:Body>
</soap:Envelope>

View File

@ -1,21 +0,0 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:subscribeActivityResponse xmlns:ns1="ws.maelis.sigec.com">
<subscribeActivityResultBean>
<numPerson>18288</numPerson>
<activity>3 2020-2021 GARDERIE SOIR</activity>
<dateStart>2020-09-02T00:00:00+01:00</dateStart>
<dateEnd>2021-07-03T00:00:00+01:00</dateEnd>
<datePreSubscribe>2021-01-08T18:46:25+01:00</datePreSubscribe>
<dateSubscribe>2021-01-08T18:46:25+01:00</dateSubscribe>
<typeConsum>ENF</typeConsum>
<place>2 FRANCOIS FABIE</place>
<state>
<isWaitState>false</isWaitState>
<idState>1</idState>
<libelle>Confirm&#xE9;</libelle>
</state>
</subscribeActivityResultBean>
</ns1:subscribeActivityResponse>
</soap:Body>
</soap:Envelope>

View File

@ -1,12 +0,0 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode><faultstring>E16 : Le code postal est obligatoire</faultstring>
<detail>
<ns1:MaelisFamilyException xmlns:ns1="ws.maelis.sigec.com">
<message>E16 : Le code postal est obligatoire</message>
</ns1:MaelisFamilyException>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>

View File

@ -1,5 +0,0 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:updateCoordinateResponse xmlns:ns1="ws.maelis.sigec.com"></ns1:updateCoordinateResponse>
</soap:Body>
</soap:Envelope>

View File

@ -0,0 +1,13 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>=E01 : Le numéro de dossier (numéro famille) ou le nom de famille sont requis </faultstring>
<detail>
<ns1:MaelisFamilyException xmlns:ns1="family.ws.maelis.sigec.com">
<message xmlns:ns2="family.ws.maelis.sigec.com">=E01 : Le numéro de dossier (numéro famille) ou le nom de famille sont requis </message>
</ns1:MaelisFamilyException>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>

View File

@ -0,0 +1,8 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Unmarshalling Error: Not a number: abc </faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>

View File

@ -64,90 +64,6 @@ ETABLISSEMENTS_RESPONSE = {
"gateway_error": False,
}
ENTREPRISES_RESPONSE = {
"entreprise": {
"siren": "418166096",
"capital_social": 459356,
"numero_tva_intracommunautaire": "FR16418166096",
"forme_juridique": "SA à directoire (s.a.i.)",
"forme_juridique_code": "5699",
"nom_commercial": "OCTO-TECHNOLOGY",
"procedure_collective": False,
"naf_entreprise": "6202A",
"libelle_naf_entreprise": "Conseil en systèmes et logiciels informatiques",
"raison_sociale": "OCTO-TECHNOLOGY",
"siret_siege_social": "41816609600051",
"code_effectif_entreprise": "31",
"date_creation": 891381600,
"categorie_entreprise": "PME",
"diffusable_commercialement": True,
"tranche_effectif_salarie_entreprise": {
"de": 200,
"a": 249,
"code": "31",
"date_reference": "2014",
"intitule": "200 à 249 salariés",
},
"mandataires_sociaux": [
{
"nom": "HISQUIN",
"prenom": "FRANCOIS",
"fonction": "PRESIDENT DU DIRECTOIRE",
"dirigeant": True,
"date_naissance": "1965-01-27",
"raison_sociale": "",
"identifiant": "",
"type": "PP",
},
{
"nom": "",
"prenom": "",
"fonction": "COMMISSAIRE AUX COMPTES SUPPLEANT",
"dirigeant": True,
"date_naissance": "",
"date_naissance_timestamp": 0,
"raison_sociale": "BCRH & ASSOCIES - SOCIETE A RESPONSABILITE LIMITEE A ASSOCIE UNIQUE",
"identifiant": "490092574",
"type": "PM",
},
],
"etat_administratif": {
"value": "C", # A (actif) ou C (cessé)
"date_cessation": 1315173600, # null quand actif (A), un timestamp (un entier) quand cessé (C )
},
},
"etablissement_siege": {
"siege_social": True,
"siret": "41816609600051",
"naf": "6202A",
"libelle_naf": "Conseil en systèmes et logiciels informatiques",
"date_mise_a_jour": 1449183600,
"tranche_effectif_salarie_etablissement": {
"de": 200,
"a": 249,
"code": "31",
"date_reference": "2014",
"intitule": "200 à 249 salariés",
},
"date_creation_etablissement": 1108594800,
"region_implantation": {"code": "11", "value": "Île-de-France"},
"commune_implantation": {"code": "75108", "value": "PARIS 8"},
"adresse": {
"l1": "OCTO TECHNOLOGY",
"l4": "50 AVENUE DES CHAMPS ELYSEES",
"l6": "75008 PARIS",
"l7": "FRANCE",
"numero_voie": "50",
"type_voie": "AV",
"nom_voie": "DES CHAMPS ELYSEES",
"code_postal": "75008",
"localite": "PARIS 8",
"code_insee_localite": "75108",
},
"etat_administratif": {"value": "F", "date_fermeture": 1315173600},
},
"gateway_error": False,
}
UNITES_LEGALES_RESPONSE = {
"data": {
@ -293,43 +209,12 @@ DOCUMENTS_ASSOCIATION_RESPONSE = {
}
EFFECTIFS_ANNUELS_ACOSS_COVID = {"siren": "418166096", "annee": "2019", "effectifs_annuels": 100.5}
ENTREPRISE_EFFECTIFS_MENSUELS_ACOSS_COVID = {
"siren": "418166096",
"annee": "2019",
"mois": "02",
"effectifs_mensuels": 100.5,
}
ETABLISSEMENT_EFFECTIFS_MENSUELS_ACOSS_COVID = {
"siret": "41816609600051",
"annee": "2019",
"mois": "02",
"effectifs_mensuels": 100.5,
}
EXERCICES_RESPONSE = {
"exercices": [
{
"ca": "648374448",
"date_fin_exercice": "2016-12-31T00:00:00+01:00",
"date_fin_exercice_timestamp": 1483138800,
},
{
"ca": "491463386",
"date_fin_exercice": "2015-12-31T00:00:00+01:00",
"date_fin_exercice_timestamp": 1451516400,
},
{
"ca": "473899061",
"date_fin_exercice": "2014-12-31T00:00:00+01:00",
"date_fin_exercice_timestamp": 1419980400,
},
]
"data": [
{"data": {"chiffre_affaires": 900001, "date_fin_exercice": "2015-12-01"}, "links": {}, "meta": {}}
],
"meta": {},
"links": {},
}
@ -435,7 +320,10 @@ def test_simple_match_mandataire_social(app, resource):
params.update(REQUEST_PARAMS)
with responses.RequestsMock() as rsps:
rsps.get('https://entreprise.api.gouv.fr/v2/entreprises/443170139/', json=ENTREPRISES_RESPONSE)
rsps.get(
'https://entreprise.api.gouv.fr/v3/infogreffe/rcs/unites_legales/443170139/mandataires_sociaux',
json=RCS_UNITES_LEGALES_MANDATAIRES_SOCIAUX_RESPONSE,
)
url = '/api-entreprise/test/match_mandataire_social/443170139/'
response = app.get(url, params=params)
@ -479,7 +367,10 @@ def test_levenshtein_match_mandataire_social(app, resource):
params.update(REQUEST_PARAMS)
with responses.RequestsMock() as rsps:
rsps.get('https://entreprise.api.gouv.fr/v2/entreprises/443170139/', json=ENTREPRISES_RESPONSE)
rsps.get(
'https://entreprise.api.gouv.fr/v3/infogreffe/rcs/unites_legales/443170139/mandataires_sociaux',
json=RCS_UNITES_LEGALES_MANDATAIRES_SOCIAUX_RESPONSE,
)
url = '/api-entreprise/test/match_mandataire_social/443170139/'
response = app.get(url, params=params)
@ -688,70 +579,18 @@ def test_document_association(app, resource, freezer):
app.get(document['url'], status=404)
def test_effectifs_annuels_acoss_covid(app, resource):
with responses.RequestsMock() as rsps:
rsps.get(
'https://entreprise.api.gouv.fr/v2/effectifs_annuels_acoss_covid/418166096/',
json=EFFECTIFS_ANNUELS_ACOSS_COVID,
)
response = app.get(
'/api-entreprise/test/effectifs_annuels_acoss_covid/418166096/', params=REQUEST_PARAMS
)
data = response.json['data']
assert data['siren'] == '418166096'
assert data['annee'] == '2019'
assert data['effectifs_annuels'] == 100.5
def test_entreprise_effectifs_mensuels_acoss_covid(app, resource):
with responses.RequestsMock() as rsps:
rsps.get(
'https://entreprise.api.gouv.fr/v2/effectifs_mensuels_acoss_covid/2019/02/entreprise/418166096/',
json=ENTREPRISE_EFFECTIFS_MENSUELS_ACOSS_COVID,
)
response = app.get(
'/api-entreprise/test/entreprise_effectifs_mensuels_acoss_covid/2019/02/418166096/',
params=REQUEST_PARAMS,
)
data = response.json['data']
assert data['siren'] == '418166096'
assert data['annee'] == '2019'
assert data['mois'] == '02'
assert data['effectifs_mensuels'] == 100.5
def test_etablissment_effectifs_mensuels_acoss_covid(app, resource):
with responses.RequestsMock() as rsps:
rsps.get(
'https://entreprise.api.gouv.fr/v2/effectifs_mensuels_acoss_covid/2019/02/etablissement/418166096/',
json=ETABLISSEMENT_EFFECTIFS_MENSUELS_ACOSS_COVID,
)
response = app.get(
'/api-entreprise/test/etablissement_effectifs_mensuels_acoss_covid/2019/02/418166096/',
params=REQUEST_PARAMS,
)
data = response.json['data']
assert data['siret'] == '41816609600051'
assert data['annee'] == '2019'
assert data['mois'] == '02'
assert data['effectifs_mensuels'] == 100.5
def test_exercices(app, resource):
with responses.RequestsMock() as rsps:
rsps.get('https://entreprise.api.gouv.fr/v2/exercices/418166096/', json=EXERCICES_RESPONSE)
rsps.get(
'https://entreprise.api.gouv.fr/v3/dgfip/etablissements/418166096/chiffres_affaires',
json=EXERCICES_RESPONSE,
)
response = app.get('/api-entreprise/test/exercices/418166096/', params=REQUEST_PARAMS)
data = response.json['data']
assert len(data['exercices']) == 3
exercice = data['exercices'][0]
assert exercice['ca'] == '648374448'
assert exercice['date_fin_exercice'] == '2016-12-31T00:00:00+01:00'
assert exercice['date_fin_exercice_timestamp'] == 1483138800
assert exercice['date_fin_exercice_datetime'] == '2016-12-30T23:00:00Z'
assert len(data) == 1
exercice = data[0]['data']
assert exercice['chiffre_affaires'] == 900001
assert exercice['date_fin_exercice'] == '2015-12-01'
def test_error_500(app, resource):

View File

@ -5,12 +5,11 @@ from unittest import mock
import pytest
from django.utils.encoding import force_str
from zeep.exceptions import Fault as WebFault
from zeep.exceptions import TransportError
from passerelle.contrib.dpark.models import DPark, Pairing
from passerelle.utils.conversion import to_pdf
from passerelle.utils.jsonresponse import APIError
from passerelle.utils.soap import SOAPError
from tests.utils import ResponsesSoap, make_resource
SLUG = 'test'
@ -71,10 +70,6 @@ class ReplyDataClass(dict):
super().__init__(**kwargs)
class WebFaultHavingLatin1(WebFault):
pass
class MockedService:
def __init__(self, success=True, error_class=None, replydata=None):
self.success = success
@ -82,20 +77,14 @@ class MockedService:
self.replydata = replydata
def raise_error(self):
if self.error_class is WebFault:
raise self.error_class(mock.Mock(faulstring='Error %s raised' % self.error_class.__name__), None)
if self.error_class is TransportError:
raise self.error_class('connection error occured', None)
if self.error_class is WebFaultHavingLatin1:
raise WebFault(message='éêè')
raise Exception('random error')
if self.error_class:
raise self.error_class
def return_response(self, *args, **kwargs):
return ReplyDataClass(**self.replydata)
def __getattr__(self, name):
if self.error_class:
self.raise_error()
self.raise_error()
return self.return_response
@ -106,18 +95,9 @@ def get_service():
def test_call_service_error(dpark, app, get_service):
get_service.return_value = MockedService(error_class=WebFault)
get_service.return_value = MockedService(error_class=SOAPError('boom!'))
resp = app.get('/dpark/test/ping/')
assert 'ServiceError: ' in resp.json['err_desc']
get_service.return_value = MockedService(error_class=TransportError)
resp = app.get('/dpark/test/ping/')
assert 'Error: connection error occured' in resp.json['err_desc']
get_service.return_value = MockedService(error_class=Exception)
resp = app.get('/dpark/test/ping/')
assert 'Error: random error' in resp.json['err_desc']
get_service.return_value = MockedService(error_class=WebFaultHavingLatin1)
resp = app.get('/dpark/test/ping/')
assert 'ServiceError: éêè' in resp.json['err_desc']
assert 'boom!' in resp.json['err_desc']
def test_ping(dpark, app, get_service):

View File

@ -1,554 +0,0 @@
import json
import os
from unittest import mock
import pytest
from django.test import override_settings
from django.utils.dateparse import parse_date
import tests.utils
from passerelle.apps.maelis.models import Link, Maelis
from passerelle.apps.maelis.utils import (
decompose_event,
get_school_year,
month_range,
week_boundaries_datetimes,
)
pytestmark = pytest.mark.django_db
TEST_BASE_DIR = os.path.join(os.path.dirname(__file__), 'data', 'maelis')
def get_xml_file(filename):
with open(os.path.join(TEST_BASE_DIR, filename), 'rb') as desc:
return desc.read()
def get_json_file(filename):
with open(os.path.join(TEST_BASE_DIR, "%s.json" % filename)) as fd:
return json.load(fd)
@pytest.fixture
def family_service_wsdl():
return get_xml_file('FamilyService.wsdl')
@pytest.fixture
def invoice_service_wsdl():
return get_xml_file('InvoiceService.wsdl')
@pytest.fixture
def activity_service_wsdl():
return get_xml_file('ActivityService.wsdl')
@pytest.fixture
def catalog_mocked_get(activity_service_wsdl, family_service_wsdl):
return (
tests.utils.FakedResponse(
content=family_service_wsdl, status_code=200, headers={'Content-Type': 'text/xml'}
),
tests.utils.FakedResponse(
content=activity_service_wsdl, status_code=200, headers={'Content-Type': 'text/xml'}
),
)
@pytest.fixture
def catalog_mocked_post():
return (
tests.utils.FakedResponse(
content=get_xml_file('readFamily.xml'), status_code=200, headers={'Content-Type': 'text/xml'}
),
tests.utils.FakedResponse(
content=get_xml_file('readActivityListResponse.xml'),
status_code=200,
headers={'Content-Type': 'text/xml'},
),
)
@pytest.fixture
def connector(db):
return tests.utils.setup_access_rights(
Maelis.objects.create(
slug='test', login='foo', password='bar', base_url='http://www3.sigec.fr/entrouvertws/services/'
)
)
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_link_unlink(mocked_post, mocked_get, family_service_wsdl, connector, app):
mocked_get.return_value = mock.Mock(content=family_service_wsdl)
mocked_post.return_value = mock.Mock(
content=get_xml_file('readFamilyByPasswordError.xml'),
status_code=500,
headers={'Content-Type': 'text/xml'},
)
assert Link.objects.count() == 0
resp = app.post_json(
'/maelis/test/link?NameID=local',
params={'family_id': '3264', 'password': 'wrong', 'school_year': '2020'},
)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'E204 : Le mot de passe est incorrect'
assert not resp.json['data']
assert Link.objects.count() == 0
resp = app.post_json('/maelis/test/unlink?NameID=local')
assert resp.json['err']
assert resp.json['err_desc'] == 'User not linked to family'
mocked_post.return_value = mock.Mock(
content=get_xml_file('readFamilyByPasswordResult.xml'),
status_code=200,
headers={'Content-Type': 'text/xml'},
)
resp = app.post_json('/maelis/test/link?NameID=local', params={'family_id': '3264', 'password': '123456'})
assert resp.json['err'] == 0
assert resp.json['data']
assert resp.json['data']['number'] == 3264
assert Link.objects.count() == 1
link = Link.objects.get()
assert link.name_id == 'local'
assert link.family_id == '3264'
resp = app.post_json('/maelis/test/unlink?NameID=local')
assert resp.json['err'] == 0
assert Link.objects.count() == 0
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_family_info(mocked_post, mocked_get, family_service_wsdl, connector, app):
mocked_get.return_value = mock.Mock(content=family_service_wsdl)
mocked_post.return_value = mock.Mock(
content=get_xml_file('readFamily.xml'), status_code=200, headers={'Content-Type': 'text/xml'}
)
assert Link.objects.count() == 0
Link.objects.create(resource=connector, family_id='3264', name_id='local')
resp = app.get('/maelis/test/family-info?NameID=local')
assert resp.json['data']["number"] == 3264
assert resp.json['data']['rl1InfoBean']
assert resp.json['data']['childInfoList']
resp = app.get('/maelis/test/children-info?NameID=local')
assert resp.json['data']
for child in resp.json['data']:
assert child['id']
assert child['text']
resp = app.get('/maelis/test/child-info?NameID=local&childID=21293')
assert resp.json['data']
assert resp.json['data']['num'] == '21293'
assert resp.json['data']['id'] == '21293'
resp = app.get('/maelis/test/adults-info?NameID=local')
assert resp.json['data']
for child in resp.json['data']:
assert child['id']
assert child['text']
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_activity_list(mocked_post, mocked_get, catalog_mocked_get, catalog_mocked_post, connector, app):
mocked_get.side_effect = catalog_mocked_get
mocked_post.side_effect = catalog_mocked_post
Link.objects.create(resource=connector, family_id='3264', name_id='local')
resp = app.get('/maelis/test/activity-list?NameID=local&personID=21293')
assert resp.json['data']
for activity in resp.json['data']:
assert activity['id']
assert activity['text']
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_coordinates(mocked_post, mocked_get, family_service_wsdl, connector, app):
mocked_get.return_value = mock.Mock(content=family_service_wsdl)
mocked_post.side_effect = (
tests.utils.FakedResponse(
content=get_xml_file('updateCoordinatesResponse.xml'),
status_code=200,
headers={'Content-Type': 'text/xml'},
),
tests.utils.FakedResponse(
content=get_xml_file('updateCoordinatesError.xml'),
status_code=200,
headers={'Content-Type': 'text/xml'},
),
)
Link.objects.create(resource=connector, family_id='3264', name_id='local')
resp = app.post_json(
'/maelis/test/update-coordinates?NameID=local&personID=21293', params={'mail': 'foo@example.com'}
)
assert resp.content is not None
resp = app.post_json(
'/maelis/test/update-coordinates?NameID=local&personID=21293', params={'town': 'Paris', 'num': '169'}
)
assert resp.json['err']
assert resp.json['err_desc'] == 'E16 : Le code postal est obligatoire'
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_list_invoices(mocked_post, mocked_get, invoice_service_wsdl, connector, app):
mocked_get.return_value = mock.Mock(content=invoice_service_wsdl)
mocked_post.return_value = mock.Mock(
content=get_xml_file('readInvoicesResponse.xml'),
status_code=200,
headers={'Content-Type': 'text/xml'},
)
Link.objects.create(resource=connector, family_id='3264', name_id='local')
resp = app.get('/maelis/test/regie/1/invoices?NameID=local')
assert resp.json['data']
for invoice in resp.json['data']:
assert invoice['display_id']
assert invoice['label']
assert invoice['total_amount']
assert not invoice['paid']
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_get_invoice_details(mocked_post, mocked_get, invoice_service_wsdl, connector, app):
mocked_get.return_value = mock.Mock(content=invoice_service_wsdl)
mocked_post.return_value = mock.Mock(
content=get_xml_file('readInvoicesResponse.xml'),
status_code=200,
headers={'Content-Type': 'text/xml'},
)
Link.objects.create(resource=connector, family_id='3264', name_id='local')
resp = app.get('/maelis/test/regie/1/invoice/3264-53186?NameID=local')
assert resp.json['data']
assert resp.json['data']['label'] == 'FACTURATION SEPTEMBRE 2014'
assert resp.json['data']['display_id'] == '53186'
@pytest.mark.parametrize(
'date, schoolyear',
[
('2020-07-30', 2019),
('2020-07-31', 2020),
],
)
def test_get_school_year(date, schoolyear):
date = parse_date(date)
assert schoolyear == get_school_year(date)
@pytest.mark.parametrize(
'date, monday, sunday',
[
('2020-12-27', '2020-12-21', '2020-12-27'),
('2020-12-28', '2020-12-28', '2021-01-03'),
('2020-12-31', '2020-12-28', '2021-01-03'),
('2021-01-01', '2020-12-28', '2021-01-03'),
('2021-01-03', '2020-12-28', '2021-01-03'),
],
)
def test_week_boundaries(date, monday, sunday):
start, end = week_boundaries_datetimes(date)
assert start.strftime('%Y-%m-%d') == monday
assert end.strftime('%Y-%m-%d') == sunday
@pytest.mark.parametrize(
'start, end, items',
[
('2020-10-22', '2020-12-06', ['2020-10-01', '2020-11-01', '2020-12-01']),
('2020-12-31', '2021-01-03', ['2020-12-01', '2021-01-01']),
('2020-12-28', '2020-12-28', ['2020-12-01']),
('2021-01-03', '2020-12-01', []),
],
)
def test_month_range(start, end, items):
start = parse_date(start)
end = parse_date(end)
assert [x.strftime('%Y-%m-%d') for x in month_range(start, end)] == items
def test_decompose_event():
resp = get_json_file('child_planning_before_decomposition')
data = resp['data']
assert len(data) == 43
assert data[22]['text'] == 'JOURNEE'
assert data[23]['text'] == 'MATIN'
assert data[24]['text'] == 'MATIN ET REPAS'
assert data[25]['text'] == 'APRES MIDI'
assert not [x for x in data if x['text'] == 'REPAS']
# unit is break down into its components
assert [x['text'] for x in decompose_event(data[22])] == ['Matinée', 'Repas', 'Après-midi']
assert [x['text'] for x in decompose_event(data[23])] == ['Matinée']
assert [x['text'] for x in decompose_event(data[24])] == ['Matinée', 'Repas']
assert [x['text'] for x in decompose_event(data[25])] == ['Après-midi']
# child_planning function use a dict to remove dupplicated components
data = {x['id']: x for e in data for x in decompose_event(e)}.values()
assert len(data) == 42
assert len([x for x in data if x['text'] == 'Repas']) == 1
assert len([x for x in data if 'EO0001' in x['slot_id']]) == 3
@override_settings(TIME_ZONE='Europe/Paris')
@pytest.mark.parametrize(
'legacy, nb_events, nb_booked, response',
[
('please', 43, 9, 'child_planning_before_decomposition'),
('', 42, 9, 'child_planning_after_decomposition'),
],
)
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_get_child_planning(
mocked_post,
mocked_get,
legacy,
nb_events,
nb_booked,
response,
family_service_wsdl,
activity_service_wsdl,
app,
connector,
):
mocked_get.side_effect = (
tests.utils.FakedResponse(
content=family_service_wsdl, status_code=200, headers={'Content-Type': 'text/xml'}
),
tests.utils.FakedResponse(
content=activity_service_wsdl, status_code=200, headers={'Content-Type': 'text/xml'}
),
tests.utils.FakedResponse(
content=activity_service_wsdl, status_code=200, headers={'Content-Type': 'text/xml'}
),
)
mocked_post.side_effect = (
tests.utils.FakedResponse(
content=get_xml_file('readFamily.xml'), status_code=200, headers={'Content-Type': 'text/xml'}
),
tests.utils.FakedResponse(
content=get_xml_file('child_planning_readActivityListResponse.xml'),
status_code=200,
headers={'Content-Type': 'text/xml'},
),
tests.utils.FakedResponse(
content=get_xml_file('child_planning_readChildMonthPlanningResponse.xml'),
status_code=200,
headers={'Content-Type': 'text/xml'},
),
)
Link.objects.create(resource=connector, family_id='3264', name_id='local')
url = '/maelis/test/child-planning?NameID=local&childID=21293&start_date=2020-12-19'
url += '&legacy=' + legacy
resp = app.get(url)
data = resp.json['data']
previous_event = {}
for event in data:
assert event['category']
assert event['text']
if previous_event:
assert previous_event['id'] <= event['id']
previous_event = event
assert len(data) == nb_events
assert len([s for s in data if s['user_booking_status'] == 'booked']) == nb_booked
assert resp.json == get_json_file(response)
@pytest.mark.parametrize(
'parameters, nb_subscribed, nb_not_subscribed',
[
('&subscribingStatus=', 2, 18),
('&subscribingStatus=subscribed', 2, 0),
('&subscribingStatus=not-subscribed', 0, 17),
('&subscribePublication=ELN', 2, 48),
],
)
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_child_activities(
mocked_post,
mocked_get,
parameters,
nb_subscribed,
nb_not_subscribed,
catalog_mocked_get,
catalog_mocked_post,
connector,
app,
):
mocked_get.side_effect = catalog_mocked_get
mocked_post.side_effect = catalog_mocked_post
Link.objects.create(resource=connector, family_id='3264', name_id='local')
url = '/maelis/test/child-activities?NameID=local&childID=21293&queryDate=2020-12-15'
url += parameters
resp = app.get(url)
if parameters == '&subscribingStatus=':
assert resp.json == get_json_file('child_activities')
status = [x['user_subscribing_status'] for x in resp.json['data']]
assert len([x for x in status if x == 'subscribed']) == nb_subscribed
assert len([x for x in status if x == 'not-subscribed']) == nb_not_subscribed
@pytest.mark.parametrize(
'parameters, err_desc',
[
('&childID=99999', 'Child not found'),
('&subscribingStatus=not-a-status', 'wrong value for subscribingStatus'),
("&queryDate=2020-02-31", 'not a valid date'),
("&queryDate=not-a-date", 'YYYY-MM-DD expected'),
],
)
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_child_activities_errors(
mocked_post, mocked_get, parameters, err_desc, catalog_mocked_get, catalog_mocked_post, connector, app
):
mocked_get.side_effect = catalog_mocked_get
mocked_post.side_effect = catalog_mocked_post
Link.objects.create(resource=connector, family_id='3264', name_id='local')
url = '/maelis/test/child-activities?NameID=local&childID=21293'
url += parameters
resp = app.get(url)
assert resp.json['err']
assert err_desc in resp.json['err_desc']
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_subscribe(mocked_post, mocked_get, family_service_wsdl, connector, app):
mocked_get.return_value = mock.Mock(content=family_service_wsdl)
mocked_post.side_effect = (
tests.utils.FakedResponse(
content=get_xml_file('readFamily.xml'), status_code=200, headers={'Content-Type': 'text/xml'}
),
tests.utils.FakedResponse(
content=get_xml_file('subscribeActivityResult.xml'),
status_code=200,
headers={'Content-Type': 'text/xml'},
),
)
Link.objects.create(resource=connector, family_id='3264', name_id='local')
resp = app.get(
'/maelis/test/subscribe/?NameID=local&childID=21293'
+ '&activityID=A10003123507&unitID=A10003123507&placeID=A10000000211'
+ '&weeklyPlanning=XX1XX11&start_date=2020-08-01&end_date=2021-07-31'
)
assert not resp.json['err']
assert resp.json['data']['state'] == {"idState": "1", "isWaitState": False, "libelle": "Confirmé"}
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_unsubscribe(mocked_post, mocked_get, family_service_wsdl, connector, app):
mocked_get.return_value = mock.Mock(content=family_service_wsdl)
mocked_post.side_effect = (
tests.utils.FakedResponse(
content=get_xml_file('readFamily.xml'), status_code=200, headers={'Content-Type': 'text/xml'}
),
tests.utils.FakedResponse(
content=get_xml_file('deletesubscribe.xml'), status_code=200, headers={'Content-Type': 'text/xml'}
),
)
Link.objects.create(resource=connector, family_id='3264', name_id='local')
resp = app.get(
'/maelis/test/unsubscribe/?NameID=local&childID=21293'
+ '&activityID=A10003121692&start_date=2020-08-01'
)
assert not resp.json['err']
assert resp.json['data'] is None
@pytest.mark.parametrize(
'parameters, nb_bus_lines',
[
('&direction=', 2),
('&direction=Aller', 1),
('&direction=retour', 1),
],
)
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_bus_lines(
mocked_post, mocked_get, parameters, nb_bus_lines, catalog_mocked_get, catalog_mocked_post, connector, app
):
mocked_get.side_effect = catalog_mocked_get
mocked_post.side_effect = catalog_mocked_post
Link.objects.create(resource=connector, family_id='3264', name_id='local')
url = '/maelis/test/bus-lines?NameID=local&childID=21293'
url += '&activityID=A10003131850&unitID=A10003131903&queryDate=2020-12-15'
url += parameters
resp = app.get(url)
if parameters == '&direction=':
assert resp.json == get_json_file('bus_lines')
assert len(resp.json['data']) == nb_bus_lines
@pytest.mark.parametrize(
'parameters, err_desc',
[
('&childID=99999', 'Child not found'),
('&queryDate=2020-02-31', 'not a valid date'),
('&queryDate=not-a-date', 'YYYY-MM-DD expected'),
('&direction=heaven', 'wrong value for direction'),
],
)
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_bus_lines_errors(
mocked_post, mocked_get, parameters, err_desc, catalog_mocked_get, catalog_mocked_post, connector, app
):
mocked_get.side_effect = catalog_mocked_get
mocked_post.side_effect = catalog_mocked_post
Link.objects.create(resource=connector, family_id='3264', name_id='local')
url = '/maelis/test/bus-lines?NameID=local&childID=21293&activityID=1&unitID=2'
url += parameters
resp = app.get(url)
assert resp.json['err']
assert err_desc in resp.json['err_desc']
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_bus_stops(mocked_post, mocked_get, catalog_mocked_get, catalog_mocked_post, connector, app):
mocked_get.side_effect = catalog_mocked_get
mocked_post.side_effect = catalog_mocked_post
Link.objects.create(resource=connector, family_id='3264', name_id='local')
url = '/maelis/test/bus-stops?NameID=local&childID=21293'
url += '&busActivityID=A10003151396&busUnitID=A10003151402&queryDate=2020-12-15'
resp = app.get(url)
assert resp.json == get_json_file('bus_stops')
assert len(resp.json['data']) == 6
@pytest.mark.parametrize(
'parameters, err_desc',
[
('&childID=99999', 'Child not found'),
('&queryDate=2020-02-31', 'not a valid date'),
('&queryDate=not-a-date', 'YYYY-MM-DD expected'),
('&busActivityID=1', 'Bus activity not found: 1'),
('&busUnitID=2', 'Bus unit not found: 2'),
],
)
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_bus_stops_errors(
mocked_post, mocked_get, parameters, err_desc, catalog_mocked_get, catalog_mocked_post, connector, app
):
mocked_get.side_effect = catalog_mocked_get
mocked_post.side_effect = catalog_mocked_post
Link.objects.create(resource=connector, family_id='3264', name_id='local')
url = '/maelis/test/bus-stops?NameID=local&childID=21293'
url += '&busActivityID=A10003151396&busUnitID=A10003151402'
url += parameters
resp = app.get(url)
assert resp.json['err']
assert err_desc in resp.json['err_desc']

View File

@ -307,7 +307,7 @@ def test_say_hello_method_validation_error(connector, soap, app):
resp = app.get('/soap/test/method/sayHello/')
assert resp.json == {
"err": 1,
"err_class": "passerelle.utils.soap.SOAPError",
"err_class": "passerelle.utils.soap.SOAPValidationError",
"err_desc": soap.VALIDATION_ERROR,
"data": None,
}

View File

@ -1373,6 +1373,32 @@ def test_read_family_not_linked_error(con, app):
assert resp.json['err_desc'] == 'User not linked to family'
def test_read_family_not_found(family_service, con, app):
family_service.add_soap_response('readFamily', get_xml_file('R_read_family_not_found.xml'))
url = get_endpoint('read-family')
resp = app.get(url + '?family_id=000')
assert resp.json['err'] == 1
assert resp.json['err_class'] == 'passerelle.utils.soap.SOAPFault'
assert (
'=E01 : Le numéro de dossier (numéro famille) ou le nom de famille sont requis'
in resp.json['err_desc']
)
def test_read_family_soap_error(family_service, con, app):
family_service.add_soap_response('readFamily', get_xml_file('R_read_family_soap_error.xml'))
url = get_endpoint('read-family')
resp = app.get(url + '?family_id=abc')
assert resp.json['err'] == 1
assert resp.json['err_class'] == 'passerelle.utils.soap.SOAPFault'
assert (
resp.json['err_desc']
== 'SOAP service at https://example.org/FamilyService?wsdl returned an error "Unmarshalling Error: Not a number: abc "'
)
def test_read_rl1(family_service, con, app):
family_service.add_soap_response('readFamily', get_xml_file('R_read_family.xml'))
url = get_endpoint('read-rl')
@ -7643,6 +7669,41 @@ def test_read_nursery_list(con, app):
resp = app.get(url, params={'code_psu': 'REGULAR'})
assert len(resp.json['data']) == 9
assert resp.json['data'][0] == {
'id': 'M10000000001',
'activity_id': 'M10000000001',
'unit_id': 'M10053212402',
'place_id': 'M10053212401',
'unit_ids': {'OCCASIONAL': 'M10053212403', 'REGULAR': 'M10053212402'},
'obs1': 'Quartier 1.2',
'obs2': 'Secteur 1',
'text': 'CC AMIDONNIERS',
'place': {
'address': {
'num': 29,
'town': 'TOULOUSE',
'street1': 'ALL DE BRIENNE',
'street2': None,
'zipcode': '31000',
'idStreet': None,
},
'idPlace': 'M10053212401',
'libelle': 'CC AMIDONNIERS',
'latitude': 43.606099,
'libelle2': None,
'longitude': 1.430282,
},
'libelle': 'CC AMIDONNIERS',
'libelle2': None,
'manager1': {'phone': '0561615590', 'poste': 'CCAS', 'lastname': 'THOMAS', 'firstname': 'GUYLAINE'},
'manager2': None,
'unitList': [
{'idUnit': 'M10053212402', 'libelle': 'CC AMIDONNIERS - Réguliers', 'typeAcc': 'REGULAR'},
{'idUnit': 'M10053212403', 'libelle': 'CC AMIDONNIERS - Occasionnels', 'typeAcc': 'OCCASIONAL'},
],
'idActivity': 'M10000000001',
'activityType': {'code': 'CRECHCO', 'libelle': 'Crèche collective'},
}
def test_get_nursery_geojson(con, app):
@ -7720,7 +7781,20 @@ def test_get_nursery_geojson(con, app):
def test_create_nursery_demand(ape_service, con, app):
ape_service.add_soap_response('addApeBook', get_xml_file('R_create_nursery_demand.xml'))
def request_check(request):
assert [(x['code'], x['isActive']) for x in request.child['indiPersList']] == [
('APE_ALLO', True),
('APE-MINE', False),
]
assert [(x['code'], x['isActive']) for x in request.apeBook['indiResapeList']] == [
('APE_FIRSTC', True),
('APE_FRAT', False),
]
assert [(x['code'], x['isActive']) for x in request['indiFamList']] == [('APE_COMPO1', False)]
ape_service.add_soap_response(
'addApeBook', get_xml_file('R_create_nursery_demand.xml'), request_check=request_check
)
data = {
'family_id': '322425',
'accept_other_nurseries': False,
@ -7733,14 +7807,14 @@ def test_create_nursery_demand(ape_service, con, app):
'number_of_days': '1',
'child_indicators/0/code': 'APE_ALLO',
'child_indicators/0/isActive': True,
'child_indicators/1/code': 'code2',
'child_indicators/1/code': 'APE-MINE',
'child_indicators/1/isActive': False,
'demand_indicators/0/code': 'APE_ALLO',
'demand_indicators/0/isActive': True,
'demand_indicators/1/code': 'APE_ALLO',
'demand_indicators/1/isActive': False,
'family_indicators/0/code': 'APE_ALLO',
'family_indicators/0/isActive': False,
'demand_indicators/0/code': 'APE_FIRSTC',
'demand_indicators/0/isActive': 'Oui',
'demand_indicators/1/code': 'APE_FRAT',
'demand_indicators/1/isActive': 0,
'family_indicators/0/code': 'APE_COMPO1',
'family_indicators/0/isActive': 'False',
'start_hour_Mon': '09:00',
'end_hour_Mon': '18:00',
'nursery1/idActivity': 'M10000000004',
@ -7755,3 +7829,20 @@ def test_create_nursery_demand(ape_service, con, app):
data['start_hour_Tue'] = ''
resp = app.post_json(url, params=data)
assert resp.json['err'] == 0
def test_create_nursery_demand_wrong_referential_key_error(con, app):
url = get_endpoint('create-nursery-demand')
params = {
'family_id': '322425',
'start_date': '2023-04-01',
'family_indicators/0/code': 'APE_ALLO',
'family_indicators/0/isActive': 'False',
}
resp = app.post_json(url, params=params)
assert resp.json['err'] == 1
assert (
resp.json['err_desc']
== "family_indicators/0/code key value 'APE_ALLO' do not belong to APE 'FAM' indicators"
)

View File

@ -18,6 +18,7 @@ from unittest import mock
import pytest
import requests
import responses
from django.utils.encoding import force_bytes
from zeep import Settings
from zeep.exceptions import Fault, TransportError, XMLParseError
@ -25,7 +26,7 @@ from zeep.plugins import Plugin
from passerelle.utils import Request
from passerelle.utils.jsonresponse import APIError
from passerelle.utils.soap import SOAPClient
from passerelle.utils.soap import SOAPClient, SOAPFault
WSDL = 'tests/data/soap.wsdl'
@ -155,3 +156,30 @@ def test_api_error(mocked_send, caplog):
operation_proxy_call.side_effect = XMLParseError('Unexpected element')
with pytest.raises(APIError, match=r'Unexpected element'):
client.service.GetLastTradePrice(tickerSymbol='banana')
@responses.activate
def test_fault_detail_on_500():
from passerelle.utils.jsonresponse import to_json
responses.add(
responses.POST,
'http://example.com/stockquote',
body=b'''<?xml version='1.0' encoding='utf-8'?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Body>
<ns0:TradePrice xmlns:ns0="http://example.com/stockquote.xsd">
<skipMe>1.2</skipMe>
<price>4.20</price>
</ns0:TradePrice>
</soap-env:Body>
</soap-env:Envelope>''',
status=500,
)
soap_resource = SOAPResource()
client = SOAPClient(soap_resource, api_error=True)
with pytest.raises(SOAPFault) as exc:
client.service.GetLastTradePrice(tickerSymbol='banana')
response = to_json().err_to_response(exc.value)
assert response['err'] == 1
assert 'xmlns:soap' in response['data']['soap_fault']['detail']