toulouse-maelis: add endpoint to delete basket line (#73961)

This commit is contained in:
Nicolas Roche 2023-01-30 02:52:48 +01:00
parent fb01d8f50a
commit 7751508421
3 changed files with 142 additions and 1 deletions

View File

@ -2566,6 +2566,38 @@ class ToulouseMaelis(BaseResource, HTTPResource):
self.call('Activity', 'updateBasketTime', idBasket=basket['id'])
return {'data': 'ok'}
@endpoint(
display_category='Inscriptions',
description="Suppression d'une ligne du panier",
name='delete-basket-line',
perm='can_access',
parameters={
'NameID': {'description': 'Publik NameID'},
'family_id': {'description': 'Numéro de DUI'},
'line_id': {'description': 'Numéro de ligne du panier'},
},
methods=['post'],
)
def delete_basket_line(self, request, line_id, NameID=None, family_id=None):
family_id = family_id or self.get_link(NameID).family_id
basket = self.get_basket_raw(family_id)
if not basket or not basket.get('id'):
raise APIError("no basket on '%s' family" % family_id)
for line in basket['lignes']:
if line['id'] == line_id:
break
else:
raise APIError("no '%s' basket line on '%s' family" % (line_id, family_id))
response = self.call(
'Activity',
'deletePersonUnitBasket',
deletePersonUnitBasketRequestBean={
'idBasketLine': line_id,
},
)
return {'data': serialize_object(response)}
class Link(models.Model):
resource = models.ForeignKey(ToulouseMaelis, on_delete=models.CASCADE)

View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:deletePersonUnitBasketResponse xmlns:ns2="activity.ws.maelis.sigec.com" xmlns:ns3="bean.persistence.activity.ws.maelis.sigec.com" xmlns:ns4="bean.persistence.school.ws.maelis.sigec.com">
<deletePersonUnitBasketResultBean>
<basket>
<dateAdd>2023-01-30T00:42:48+01:00</dateAdd>
<dateMaj>2023-01-30T00:42:48+01:00</dateMaj>
<delai>0</delai>
<id>S10053200723</id>
<idFam>S10053183425</idFam>
<lignes>
<dateMaj>2023-01-28T23:50:34+01:00</dateMaj>
<id>S10053203105</id>
<idIns>S10053203103</idIns>
<idInsLieu>S10053203104</idInsLieu>
<idPanier>S10053200723</idPanier>
<inscription>
<dateDeb>2023-02-01T00:00:00+01:00</dateDeb>
<dateFin>2023-06-30T00:00:00+02:00</dateFin>
<idAct>A10051141965</idAct>
<idInsAct>S10053203103</idInsAct>
<idInsLieu>S10053203104</idInsLieu>
<idLieu>A10053179226</idLieu>
<idRegie>A10049327675</idRegie>
<idUnit>A10051141970</idUnit>
<libAct>Vitrail Fusing 1/2 Je Adultes 2022/2023 - Mardi 14h-17h</libAct>
<libLieu>Centre Culturel ALBAN MINVILLE</libLieu>
<libUnit>Inscription 2ème semestre</libUnit>
</inscription>
<personneInfo>
<dateBirth>2014-04-01T00:00:00+02:00</dateBirth>
<firstname>BART</firstname>
<lastname>NICO</lastname>
<numPerson>246711</numPerson>
<sexe>M</sexe>
</personneInfo>
</lignes>
<lignes>
<dateMaj>2023-01-26T17:39:40+01:00</dateMaj>
<id>S10053200724</id>
<idIns>S10053200721</idIns>
<idInsLieu>S10053200722</idInsLieu>
<idPanier>S10053200723</idPanier>
<inscription>
<dateDeb>2022-09-01T00:00:00+02:00</dateDeb>
<dateFin>2023-08-31T00:00:00+02:00</dateFin>
<idAct>A10051141965</idAct>
<idInsAct>S10053200721</idInsAct>
<idInsLieu>S10053200722</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>NICO</lastname>
<numPerson>246711</numPerson>
<sexe>M</sexe>
</personneInfo>
</lignes>
</basket>
</deletePersonUnitBasketResultBean>
</ns2:deletePersonUnitBasketResponse>
</soap:Body>
</soap:Envelope>

View File

@ -5829,7 +5829,46 @@ def test_update_basket_time_not_linked_error(con, app):
def test_update_basket_time_basket_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml'))
url = get_endpoint('update-basket-time')
resp = app.post(url + '?family_id=311352')
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no basket on '311352' family"
def test_delete_basket_line(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
activity_service.add_soap_response(
'deletePersonUnitBasket', get_xml_file('R_delete_person_unit_basket.xml')
)
url = get_endpoint('delete-basket-line')
resp = app.post(url + '?family_id=311352&line_id=S10053203120')
assert resp.json['err'] == 0
Link.objects.create(resource=con, family_id='311352', name_id='local')
resp = app.post(url + '?NameID=local&line_id=S10053203120')
assert resp.json['err'] == 0
assert len(resp.json['data']['lignes']) == 2
assert 'S10053203120' not in [x['id'] for x in resp.json['data']['lignes']]
def test_delete_basket_line_not_linked_error(con, app):
url = get_endpoint('delete-basket-line')
resp = app.post(url + '?NameID=local&line_id=S10053203120')
assert resp.json['err'] == 'not-linked'
assert resp.json['err_desc'] == 'User not linked to family'
def test_update_basket_line_basket_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml'))
url = get_endpoint('delete-basket-line')
resp = app.post(url + '?family_id=311352&line_id=S10053203120')
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no basket on '311352' family"
def test_delete_basket_line_line_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
url = get_endpoint('delete-basket-line')
resp = app.post(url + '?family_id=311352&line_id=plop')
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no 'plop' basket line on '311352' family"