toulouse_maelis: trigger wcs after paid notification (#87168)
gitea/passerelle/pipeline/head This commit looks good
Details
gitea/passerelle/pipeline/head This commit looks good
Details
This commit is contained in:
parent
8b55756a20
commit
ca1e74129d
|
@ -4430,10 +4430,6 @@ class ToulouseMaelis(BaseResource, HTTPResource):
|
|||
invoice.lingo_notification_date = now()
|
||||
invoice.save(update_fields=['updated', 'lingo_notification_date', 'lingo_data'])
|
||||
|
||||
if invoice.basket_generation_date is not None:
|
||||
# match paid invoice with subscriptions and trigger w.c.s.
|
||||
invoice.set_trigger_subscriptions()
|
||||
|
||||
self.add_job(
|
||||
'notify_invoice_paid_job',
|
||||
regie_id=regie_id,
|
||||
|
@ -4657,6 +4653,10 @@ class Invoice(models.Model):
|
|||
obj.maelis_notification_date = now()
|
||||
obj.maelis_notification_data = result
|
||||
obj.save()
|
||||
|
||||
if obj.basket_generation_date is not None:
|
||||
# match paid invoice with subscriptions and trigger w.c.s.
|
||||
obj.set_trigger_subscriptions()
|
||||
return True
|
||||
|
||||
def match_subscriptions(self):
|
||||
|
@ -4734,15 +4734,17 @@ class Subscription(models.Model):
|
|||
|
||||
def status(self):
|
||||
if self.invoice is not None:
|
||||
if self.invoice.status() in ['paid', 'notified']:
|
||||
if self.invoice.status() == 'notified':
|
||||
# related invoice is paid
|
||||
return 'paid'
|
||||
if self.invoice.status() == 'cancelled':
|
||||
# related invoice is cancelled
|
||||
return 'cancelled'
|
||||
else:
|
||||
# there is a related invoice
|
||||
return 'pending_invoice'
|
||||
if self.invoice.status() == 'error':
|
||||
# related invoice cound not be notified
|
||||
return 'error'
|
||||
# there is a related invoice
|
||||
return 'pending_invoice'
|
||||
else:
|
||||
if self.basket_removal_date is not None:
|
||||
# no basket validation (no related invoice generated)
|
||||
|
@ -4755,7 +4757,7 @@ class Subscription(models.Model):
|
|||
if self.wcs_trigger_date is not None:
|
||||
# wcs demand was triggered
|
||||
return 'triggered'
|
||||
if self.status() in ['paid', 'cancelled', 'removed']:
|
||||
if self.status() in ['paid', 'cancelled', 'removed', 'error']:
|
||||
# wcs demand can be triggered
|
||||
return 'triggering'
|
||||
else:
|
||||
|
@ -4775,6 +4777,12 @@ class Subscription(models.Model):
|
|||
'invoice_id': self.invoice.invoice_id if self.invoice else None,
|
||||
'invoice_status': self.invoice.status() if self.invoice else None,
|
||||
'invoice_data': self.invoice.maelis_data if self.invoice else None,
|
||||
'invoice_maelis_notification_date': self.invoice.maelis_notification_date
|
||||
if self.invoice
|
||||
else None,
|
||||
'invoice_maelis_notification_data': self.invoice.maelis_notification_data
|
||||
if self.invoice
|
||||
else None,
|
||||
'subscription_id': self.pk,
|
||||
'subscription_status': self.status(),
|
||||
'subscription_data': self.maelis_data,
|
||||
|
|
|
@ -11821,7 +11821,7 @@ def test_pay_invoice_cron_maelis_error(invoice_service, con, app, freezer, caplo
|
|||
con.notify_invoices_paid()
|
||||
assert 'fails to notify' in caplog.text
|
||||
assert 'stopping' in caplog.text
|
||||
assert con.invoice_set.get(regie_id=102, invoice_id=30).status() == 'notified'
|
||||
assert con.invoice_set.get(regie_id=102, invoice_id=30).status() == 'error'
|
||||
assert con.invoice_set.get(regie_id=102, invoice_id=8).status() == 'notified'
|
||||
|
||||
|
||||
|
@ -12114,12 +12114,21 @@ def test_trigger_wcs_on_paid_subscriptions_cron(
|
|||
|
||||
subscription = con.subscription_set.get(wcs_form_number='13-12')
|
||||
assert subscription.invoice == invoice
|
||||
assert subscription.status() == 'pending_invoice'
|
||||
assert subscription.trigger_status() == 'pending'
|
||||
|
||||
invoice_service.add_soap_response('payInvoices', get_xml_file('R_pay_invoices.xml'))
|
||||
con.jobs(count=1) # only run the notify job
|
||||
|
||||
subscription.refresh_from_db()
|
||||
assert subscription.invoice == invoice
|
||||
assert subscription.status() == 'paid'
|
||||
assert subscription.trigger_status() == 'triggering'
|
||||
assert subscription.wcs_trigger_payload['data']['subscription_status'] == 'paid'
|
||||
|
||||
# send trigger to wcs
|
||||
con.hourly()
|
||||
con.hourly() # only run the trigger job
|
||||
|
||||
assert (
|
||||
'https://wcs.example.com/api/forms/exemple-inscription-loisirs-1/12/hooks/update_subscription/'
|
||||
in wcs_service.calls[-1].request.url
|
||||
|
@ -12127,7 +12136,7 @@ def test_trigger_wcs_on_paid_subscriptions_cron(
|
|||
trigger_body = json.loads(wcs_service.calls[-1].request.body)
|
||||
assert trigger_body['err'] == 0
|
||||
assert trigger_body['data']['subscription_status'] == 'paid'
|
||||
assert trigger_body['data']['invoice_status'] == 'paid'
|
||||
assert trigger_body['data']['invoice_status'] == 'notified'
|
||||
assert trigger_body['data']['regie_text'] == 'DSBL'
|
||||
assert any(['trigger wcs' in x.message for x in caplog.records])
|
||||
|
||||
|
@ -12211,12 +12220,20 @@ def test_trigger_wcs_on_paid_subscriptions_job(
|
|||
assert job.status == 'registered'
|
||||
|
||||
subscription = con.subscription_set.get(wcs_form_number='13-12')
|
||||
assert subscription.trigger_status() == 'triggering'
|
||||
assert subscription.trigger_status() == 'pending'
|
||||
|
||||
assert not Job.objects.filter(
|
||||
method_name='trigger_subscription_job', natural_id='13-12/%s' % subscription.pk
|
||||
).exists()
|
||||
|
||||
# notify paid invoice
|
||||
con.jobs(count=1)
|
||||
|
||||
job = Job.objects.get(method_name='trigger_subscription_job', natural_id='13-12/%s' % subscription.pk)
|
||||
assert job.status == 'registered'
|
||||
|
||||
# send trigger to wcs
|
||||
con.jobs()
|
||||
con.jobs(count=1)
|
||||
|
||||
assert any(
|
||||
[
|
||||
'https://wcs.example.com/api/forms/exemple-inscription-loisirs-1/12/hooks/update_subscription/'
|
||||
|
@ -12225,9 +12242,9 @@ def test_trigger_wcs_on_paid_subscriptions_job(
|
|||
]
|
||||
)
|
||||
|
||||
job = Job.objects.get(method_name='trigger_subscription_job', natural_id='13-12/%s' % subscription.pk)
|
||||
job.refresh_from_db()
|
||||
assert job.status == 'completed'
|
||||
subscription = con.subscription_set.get(wcs_form_number='13-12')
|
||||
subscription.refresh_from_db()
|
||||
assert subscription.trigger_status() == 'triggered'
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue