toulouse-maelis: do not link invoice to removed subscriptions (#86373)
gitea/passerelle/pipeline/head This commit looks good Details

This commit is contained in:
Nicolas Roche 2024-01-30 21:21:24 +01:00
parent ad543177f1
commit f841e98049
3 changed files with 141 additions and 1 deletions

View File

@ -4648,7 +4648,10 @@ class Invoice(models.Model):
return
for subscription in Subscription.objects.filter(
regie_id=self.regie_id, family_id=self.family_id, invoice__isnull=True
regie_id=self.regie_id,
family_id=self.family_id,
invoice__isnull=True,
basket_removal_date__isnull=True,
):
for line in subscription.maelis_data['basket']['lignes']:
subscription_id = line.get('idIns')

View File

@ -0,0 +1,47 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getFamilyBasketResponse 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">
<getFamilyBasketResultBean>
<baskets>
<codeRegie>109</codeRegie>
<dateAdd>2023-04-20T12:05:51+02:00</dateAdd>
<dateMaj>2023-04-20T12:05:42+02:00</dateMaj>
<delai>30</delai>
<id>S10055641698</id>
<idFam>S10055638201</idFam>
<lignes>
<personneInfo>
<dateBirth>2016-05-09T00:00:00+02:00</dateBirth>
<firstname>LISA</firstname>
<lastname>EO_NICOLAS</lastname>
<numPerson>266148</numPerson>
<sexe>F</sexe>
</personneInfo>
<idPanier>S10055641661</idPanier>
<id>S10055641668</id>
<idIns>S10055641665</idIns>
<idInsLieu>S10055641666</idInsLieu>
<inscription>
<dateDeb>2023-02-01T00:00:00+01:00</dateDeb>
<dateFin>2023-06-30T00:00:00+02:00</dateFin>
<idAct>A10053179798</idAct>
<idInsAct>S10055641665</idInsAct>
<idInsLieu>S10055641666</idInsLieu>
<idLieu>A10053179757</idLieu>
<idRegie>A10049327667</idRegie>
<idUnit>A10053179809</idUnit>
<libAct>TEST ECOLE DES SPORTS 22/23 SEMESTRE 2 - MULTIACTIVITES</libAct>
<libLieu>ARGOULETS</libLieu>
<libUnit>MERCREDI - 15h30/17h - 8/15Ans</libUnit>
</inscription>
<qte>1.0</qte>
<prixUnit>150.0</prixUnit>
<montant>150.0</montant>
<datEchn>2023-12-31T00:00:00+01:00</datEchn>
<dateMaj>2023-04-20T12:05:51+02:00</dateMaj>
</lignes>
</baskets>
</getFamilyBasketResultBean>
</ns2:getFamilyBasketResponse>
</soap:Body>
</soap:Envelope>

View File

@ -10214,6 +10214,22 @@ def test_validate_basket(family_service, activity_service, con, app):
)
assert resp.json['err'] == 0
# subscribe again
resp = app.post_json(
get_endpoint('add-person-basket-subscription') + '?NameID=local',
params={
'person_id': '266148',
'activity_id': 'A10053179798',
'unit_id': 'A10053179809',
'place_id': 'A10053179757',
'start_date': '2023-02-01',
'end_date': '2023-06-30',
'form_api_url': 'https://wcs.example.com/api/forms/exemple-inscription-loisirs-1/13/',
'form_number': '13-13',
},
)
assert resp.json['err'] == 0
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 0
assert resp.json['data'] == {
@ -10284,6 +10300,80 @@ def test_validate_basket(family_service, activity_service, con, app):
invoice = con.invoice_set.get(regie_id=109, invoice_id=18)
assert invoice.status() == 'created'
assert invoice.basket_generation_date is not None
assert invoice.subscription_set.count() == 2
def test_validate_basket_having_a_previously_removed_line(
family_service, activity_service, con, app, freezer
):
family_service.add_soap_response('readFamily', get_xml_file('R_read_family_for_subscription.xml'))
activity_service.add_soap_response('getPersonUnitInfo', get_xml_file('R_get_person_unit_info.xml'))
activity_service.add_soap_response('addPersonUnitBasket', get_xml_file('R_add_person_unit_basket.xml'))
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_one_line.xml'))
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
activity_service.add_soap_response('validateBasket', get_xml_file('R_validate_basket.xml'))
url = get_endpoint('validate-basket')
params = {'basket_id': 'S10055641698'}
Link.objects.create(resource=con, family_id='1312', name_id='local')
# subscribe
freezer.move_to('2023-03-03 18:20:00')
resp = app.post_json(
get_endpoint('add-person-basket-subscription') + '?NameID=local',
params={
'person_id': '266145',
'activity_id': 'A10053179798',
'unit_id': 'A10053179809',
'place_id': 'A10053179757',
'start_date': '2023-02-01',
'end_date': '2023-06-30',
'form_api_url': 'https://wcs.example.com/api/forms/exemple-inscription-loisirs-1/12/',
'form_number': '13-12',
},
)
assert resp.json['err'] == 0
assert con.subscription_set.count() == 1
assert con.subscription_set.get(wcs_form_number='13-12').basket_removal_date is None
# subscribe again
freezer.move_to('2023-03-03 18:22:00')
resp = app.post_json(
get_endpoint('add-person-basket-subscription') + '?NameID=local',
params={
'person_id': '266148',
'activity_id': 'A10053179798',
'unit_id': 'A10053179809',
'place_id': 'A10053179757',
'start_date': '2023-02-01',
'end_date': '2023-06-30',
'form_api_url': 'https://wcs.example.com/api/forms/exemple-inscription-loisirs-1/13/',
'form_number': '13-13',
},
)
assert resp.json['err'] == 0
assert con.subscription_set.count() == 2
assert con.subscription_set.get(wcs_form_number='13-13').basket_removal_date is None
# maelis send the basket with one deleted line
freezer.move_to('2023-03-03 18:25:00')
resp = app.get(get_endpoint('get-baskets') + '?family_id=1312')
assert resp.json['err'] == 0
subscription = con.subscription_set.get(wcs_form_number='13-12')
assert subscription.basket_removal_date.isoformat() == '2023-03-03T18:25:00+00:00'
assert subscription.status() == 'removed'
assert subscription.trigger_status() == 'triggering'
# validate basket with maelis providing the previously deleted line
freezer.move_to('2023-03-03 18:30:00')
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 0
# created invoice is not linked to the removed subscription
invoice = con.invoice_set.get(regie_id=109, invoice_id=18)
assert invoice.status() == 'created'
assert invoice.basket_generation_date.isoformat() == '2023-03-03T18:30:00+00:00'
assert invoice.subscription_set.count() == 1
assert invoice.subscription_set.get() == con.subscription_set.get(wcs_form_number='13-13')
def test_validate_basket_not_linked_error(con, app):