toulouse-maelis: endpoint d'inscription extra-scolaire et loisir (#73649) #60
|
@ -45,3 +45,42 @@ BOOKING_SCHEMA = {
|
|||
'end_date',
|
||||
],
|
||||
}
|
||||
|
||||
SUBSCRIPTION_SCHEMA = {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'person_id': {
|
||||
'type': 'string',
|
||||
'minLength': 1,
|
||||
'maxLength': 8,
|
||||
},
|
||||
'activity_id': {
|
||||
'type': 'string',
|
||||
'pattern': '[A-Za-z0-9]+',
|
||||
},
|
||||
'unit_id': {
|
||||
'type': 'string',
|
||||
'pattern': '[A-Za-z0-9]+',
|
||||
},
|
||||
'place_id': {
|
||||
'type': 'string',
|
||||
'pattern': '[A-Za-z0-9]+',
|
||||
},
|
||||
'start_date': {
|
||||
'type': 'string',
|
||||
'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$',
|
||||
},
|
||||
'end_date': {
|
||||
'type': 'string',
|
||||
'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$',
|
||||
},
|
||||
},
|
||||
'required': [
|
||||
'person_id',
|
||||
'activity_id',
|
||||
'unit_id',
|
||||
'place_id',
|
||||
'start_date',
|
||||
'end_date',
|
||||
],
|
||||
}
|
||||
|
|
|
@ -2138,8 +2138,6 @@ class ToulouseMaelis(BaseResource, HTTPResource):
|
|||
name='get-person-activity-list',
|
||||
perm='can_access',
|
||||
parameters={
|
||||
'NameID': {'description': 'Publik NameID'},
|
||||
'family_id': {'description': 'Numéro de DUI'},
|
||||
'person_id': {'description': "Numéro du responsale légal ou de l'enfant"},
|
||||
'nature_id': {'description': "Numéro de la nature des activités"},
|
||||
'start_date': {'description': 'Début de la période'},
|
||||
|
@ -2486,6 +2484,43 @@ class ToulouseMaelis(BaseResource, HTTPResource):
|
|||
data = serialize_object(response)
|
||||
return {'data': data}
|
||||
|
||||
@endpoint(
|
||||
display_category='Inscriptions',
|
||||
description="Ajoute au panier une inscription extra-scolaire ou loisir",
|
||||
name='add-person-basket-subscription',
|
||||
post={
|
||||
'request_body': {
|
||||
'schema': {
|
||||
'application/json': activity_schemas.SUBSCRIPTION_SCHEMA,
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
def add_person_basket_subscription(
|
||||
self,
|
||||
request,
|
||||
post_data,
|
||||
NameID=None,
|
||||
family_id=None,
|
||||
):
|
||||
family_id = family_id or self.get_link(NameID).family_id
|
||||
|
||||
payload = {
|
||||
'addPersonUnitBasketRequestBean': {
|
||||
'numFamily': family_id,
|
||||
'numPerson': post_data['person_id'],
|
||||
'idAct': post_data['activity_id'],
|
||||
'idUnit': post_data['unit_id'],
|
||||
'idPlace': post_data['place_id'],
|
||||
'dateStartSubscribe': post_data['start_date'],
|
||||
'dateEndSubscribe': post_data['end_date'],
|
||||
}
|
||||
}
|
||||
response = self.call('Activity', 'addPersonUnitBasket', **payload)
|
||||
if not response['controlResult']['controlOK']:
|
||||
raise APIError(response['controlResult']['message'])
|
||||
return {'data': serialize_object(response)}
|
||||
|
||||
|
||||
class Link(models.Model):
|
||||
resource = models.ForeignKey(ToulouseMaelis, on_delete=models.CASCADE)
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
||||
<soap:Body>
|
||||
<ns2:addPersonUnitBasketResponse xmlns:ns2="activity.ws.maelis.sigec.com" xmlns:ns3="bean.persistence.activity.ws.maelis.sigec.com">
|
||||
<addPersonUnitBasketResponseBean>
|
||||
<controlResult>
|
||||
<controlOK>true</controlOK>
|
||||
</controlResult>
|
||||
<basket>
|
||||
<dateAdd>2023-01-22T18:55:09+01:00</dateAdd>
|
||||
<dateMaj>2023-01-22T18:55:09+01:00</dateMaj>
|
||||
<delai>0</delai>
|
||||
<id>S10053190349</id>
|
||||
<idFam>S10053180370</idFam>
|
||||
<lignes>
|
||||
<dateMaj>2023-01-22T18:55:09+01:00</dateMaj>
|
||||
<id>S10053190350</id>
|
||||
<idIns>S10053190347</idIns>
|
||||
<idInsLieu>S10053190348</idInsLieu>
|
||||
<idPanier>S10053190349</idPanier>
|
||||
<inscription>
|
||||
<dateDeb>2022-09-01T00:00:00+02:00</dateDeb>
|
||||
<dateFin>2023-08-31T00:00:00+02:00</dateFin>
|
||||
<idAct>A10051141965</idAct>
|
||||
<idInsAct>S10053190347</idInsAct>
|
||||
<idInsLieu>S10053190348</idInsLieu>
|
||||
<idLieu>A10053179226</idLieu>
|
||||
<idRegie>A10049327675</idRegie>
|
||||
<idUnit>A10051141990</idUnit>
|
||||
<libAct>Vitrail Fusing 1/2 Je Adultes 2022/2023 - Mardi 14h-17h</libAct>
|
||||
<libLieu>Centre Culturel ALBAN MINVILLE</libLieu>
|
||||
<libUnit>Inscription 1er semestre</libUnit>
|
||||
</inscription>
|
||||
<personneInfo>
|
||||
<dateBirth>2014-04-01T00:00:00+02:00</dateBirth>
|
||||
<firstname>BART</firstname>
|
||||
<lastname>SIMPSON</lastname>
|
||||
<numPerson>246423</numPerson>
|
||||
<sexe>M</sexe>
|
||||
</personneInfo>
|
||||
</lignes>
|
||||
</basket>
|
||||
</addPersonUnitBasketResponseBean>
|
||||
</ns2:addPersonUnitBasketResponse>
|
||||
</soap:Body>
|
||||
</soap:Envelope>
|
|
@ -0,0 +1,12 @@
|
|||
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
||||
<soap:Body>
|
||||
<ns2:addPersonUnitBasketResponse xmlns:ns2="activity.ws.maelis.sigec.com" xmlns:ns3="bean.persistence.activity.ws.maelis.sigec.com">
|
||||
<addPersonUnitBasketResponseBean>
|
||||
<controlResult>
|
||||
<controlOK>false</controlOK>
|
||||
<message>E1019 : Il existe déjà une inscription à cette unité</message>
|
||||
</controlResult>
|
||||
</addPersonUnitBasketResponseBean>
|
||||
</ns2:addPersonUnitBasketResponse>
|
||||
</soap:Body>
|
||||
</soap:Envelope>
|
|
@ -5639,3 +5639,104 @@ def test_get_person_subscription_info_loisir_date_error(con, app):
|
|||
resp = app.get(url, params=params, status=400)
|
||||
assert resp.json['err'] == 'bad-request'
|
||||
assert resp.json['err_desc'] == '2023-02-29 is not a valid date'
|
||||
|
||||
|
||||
def test_add_person_basket_subscription(activity_service, con, app):
|
||||
activity_service.add_soap_response(
|
||||
'addPersonUnitBasket',
|
||||
get_xml_file('R_add_person_unit_basket.xml'),
|
||||
)
|
||||
url = get_endpoint('add-person-basket-subscription')
|
||||
|
||||
params = {
|
||||
'person_id': '246423',
|
||||
'activity_id': 'A10051141965',
|
||||
'unit_id': 'A10051141990',
|
||||
'place_id': 'A10053179226',
|
||||
'start_date': '2022-09-01',
|
||||
'end_date': '2023-08-31',
|
||||
}
|
||||
resp = app.post_json(url + '?family_id=311323', params=params)
|
||||
assert resp.json['err'] == 0
|
||||
Link.objects.create(resource=con, family_id='311323', name_id='local')
|
||||
|
||||
resp = app.post_json(url + '?NameID=local', params=params)
|
||||
assert resp.json['err'] == 0
|
||||
assert resp.json['data'] == {
|
||||
'controlResult': {'controlOK': True, 'message': None},
|
||||
'basket': {
|
||||
'dateAdd': '2023-01-22T18:55:09+01:00',
|
||||
'dateMaj': '2023-01-22T18:55:09+01:00',
|
||||
'delai': 0,
|
||||
'id': 'S10053190349',
|
||||
'idFam': 'S10053180370',
|
||||
'lignes': [
|
||||
{
|
||||
'datEchn': None,
|
||||
'dateMaj': '2023-01-22T18:55:09+01:00',
|
||||
'id': 'S10053190350',
|
||||
'idIns': 'S10053190347',
|
||||
'idInsLieu': 'S10053190348',
|
||||
'idPanier': 'S10053190349',
|
||||
'inscription': {
|
||||
'dateDeb': '2022-09-01T00:00:00+02:00',
|
||||
'dateFin': '2023-08-31T00:00:00+02:00',
|
||||
'idAct': 'A10051141965',
|
||||
'idInsAct': 'S10053190347',
|
||||
'idInsLieu': 'S10053190348',
|
||||
'idLieu': 'A10053179226',
|
||||
'idRegie': 'A10049327675',
|
||||
'idUnit': 'A10051141990',
|
||||
'libAct': 'Vitrail Fusing 1/2 Je Adultes 2022/2023 - Mardi 14h-17h',
|
||||
'libLieu': 'Centre Culturel ALBAN MINVILLE',
|
||||
'libUnit': 'Inscription 1er semestre',
|
||||
},
|
||||
'montant': None,
|
||||
'personneInfo': {
|
||||
'dateBirth': '2014-04-01T00:00:00+02:00',
|
||||
'firstname': 'BART',
|
||||
'lastname': 'SIMPSON',
|
||||
'numPerson': 246423,
|
||||
'sexe': 'M',
|
||||
},
|
||||
'prixUnit': None,
|
||||
'qte': None,
|
||||
}
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def test_add_person_basket_subscription_error(activity_service, con, app):
|
||||
activity_service.add_soap_response(
|
||||
'addPersonUnitBasket',
|
||||
get_xml_file('R_add_person_unit_basket_error.xml'),
|
||||
)
|
||||
url = get_endpoint('add-person-basket-subscription')
|
||||
|
||||
params = {
|
||||
'person_id': '246423',
|
||||
'activity_id': 'A10051141965',
|
||||
'unit_id': 'A10051141990',
|
||||
'place_id': 'A10053179226',
|
||||
'start_date': '2022-09-01',
|
||||
'end_date': '2023-08-31',
|
||||
}
|
||||
resp = app.post_json(url + '?family_id=311323', params=params)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_desc'] == 'E1019 : Il existe déjà une inscription à cette unité'
|
||||
|
||||
|
||||
def test_add_person_basket_subscription_not_linked_error(con, app):
|
||||
url = get_endpoint('add-person-basket-subscription')
|
||||
params = {
|
||||
'person_id': '246423',
|
||||
'activity_id': 'A10051141965',
|
||||
'unit_id': 'A10051141990',
|
||||
'place_id': 'A10053179226',
|
||||
'start_date': '2022-09-01',
|
||||
'end_date': '2023-08-31',
|
||||
}
|
||||
resp = app.post_json(url + '?NameID=local', params=params)
|
||||
assert resp.json['err'] == 'not-linked'
|
||||
assert resp.json['err_desc'] == 'User not linked to family'
|
||||
|
|
Loading…
Reference in New Issue