Gérer les zeep.exceptions.Fault contenant des bytes and simplifier la gestion d'erreur autour des appels SOAP (#75649) #154

Merged
bdauvergne merged 4 commits from wip/75649-zeep-exceptions-Fault-est-toujou into main 2023-03-24 16:47:54 +01:00
37 changed files with 131 additions and 16811 deletions

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

@ -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):

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

@ -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

@ -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

@ -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

@ -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']