wip/86373-parsifal-do-not-link-invoice-to-removed-subscriptions #454
|
@ -4016,13 +4016,14 @@ class ToulouseMaelis(BaseResource, HTTPResource):
|
|||
)
|
||||
def validate_basket(self, request, post_data, NameID=None, family_id=None):
|
||||
family_id = family_id or self.get_link(NameID).family_id
|
||||
self.get_basket_raw(family_id, post_data['basket_id'])
|
||||
basket_id = post_data['basket_id']
|
||||
self.get_basket_raw(family_id, basket_id)
|
||||
|
||||
response = self.call(
|
||||
'Activity',
|
||||
'validateBasket',
|
||||
validateBasketRequestBean={
|
||||
'idBasket': post_data['basket_id'],
|
||||
'idBasket': basket_id,
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -4044,7 +4045,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
|
|||
if not invoice:
|
||||
self.logger.error(
|
||||
"Pas de facture à la validation du panier '%s' sur la famille '%s'",
|
||||
post_data['basket_id'],
|
||||
basket_id,
|
||||
family_id,
|
||||
)
|
||||
return {'data': response}
|
||||
|
@ -4647,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')
|
||||
|
|
|
@ -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>
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue