Skip to content

Commit 6160312

Browse files
committed
feat: add ability to configure sigmax return state
1 parent 9adc90a commit 6160312

File tree

4 files changed

+74
-2
lines changed

4 files changed

+74
-2
lines changed

app/signals/apps/sigmax/stuf_protocol/incoming/actualiseerZaakstatus_Lk01.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import logging
88
import re
99

10+
from django.conf import settings
1011
from django.core.exceptions import ValidationError
1112
from django.shortcuts import render
1213
from lxml import etree
@@ -105,9 +106,20 @@ def _update_status_actualiseerZaakstatus_Lk01(signal, request_data):
105106
Note: this is the happy flow, only happens when the Signal was in the
106107
expected state in SIA --- else see _add_note_actualiseerZaakstatus_Lk01.
107108
"""
108-
status_text = _get_status_text_actualiseerZaakstatus_Lk01(request_data)
109+
resultaat_text = request_data.get('resultaat', '').strip()
110+
111+
if settings.SIGMAX_END_STATE_IS_AFGEHANDELD and resultaat_text == 'afgerond':
112+
set_status_to_afgehandeld = True
113+
note_text = _get_status_text_actualiseerZaakstatus_Lk01(request_data)
114+
status_text = settings.SIGMAX_END_STATE_IS_AFGEHANDELD_STATUS_TEXT
115+
else:
116+
set_status_to_afgehandeld = False
117+
note_text = None
118+
status_text = _get_status_text_actualiseerZaakstatus_Lk01(request_data)
119+
109120
status_data = {
110-
'state': workflow.AFGEHANDELD_EXTERN,
121+
'state': workflow.AFGEHANDELD if set_status_to_afgehandeld else workflow.AFGEHANDELD_EXTERN,
122+
'send_email': True if set_status_to_afgehandeld else False,
111123
'text': status_text,
112124
'extra_properties': {
113125
'sigmax_datum_afgehandeld': request_data['datum_afgehandeld'],
@@ -116,6 +128,10 @@ def _update_status_actualiseerZaakstatus_Lk01(signal, request_data):
116128
}
117129
}
118130

131+
if note_text:
132+
note_data = {'text': note_text}
133+
Signal.actions.create_note(note_data, signal)
134+
119135
# We let exceptions bubble up (must lead to a error message to CityControl).
120136
Signal.actions.update_status(data=status_data, signal=signal)
121137

app/signals/apps/sigmax/tests/rest_framework/test_views.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,3 +326,53 @@ def test_with_signal_for_message_correct_state_no_resultaat_toelichting(self):
326326
})
327327
self.assertEqual(signal.status.state, workflow.AFGEHANDELD_EXTERN)
328328
self.assertEqual(signal.status.state, workflow.AFGEHANDELD_EXTERN)
329+
330+
@mock.patch('signals.settings.SIGMAX_END_STATE_IS_AFGEHANDELD', True)
331+
@mock.patch('signals.settings.SIGMAX_END_STATE_IS_AFGEHANDELD_STATUS_TEXT', 'Test opgelost bericht')
332+
def test_with_sigmax_end_state_is_afgehandeld_enabled_and_afgerond_result(self):
333+
"""Test that when SIGMAX_END_STATE_IS_AFGEHANDELD=True and resultaat='afgerond',
334+
the signal gets AFGEHANDELD status instead of AFGEHANDELD_EXTERN"""
335+
signal = SignalFactoryValidLocation.create()
336+
signal.status.state = workflow.VERZONDEN
337+
signal.status.save()
338+
signal.refresh_from_db()
339+
340+
self.assertEqual(Signal.objects.count(), 1)
341+
342+
incoming_context = {
343+
'signal': signal,
344+
'tijdstipbericht': '20180927100000',
345+
'resultaat_omschrijving': 'afgerond', # This triggers the special behavior
346+
'resultaat_toelichting': 'Het probleem is opgelost',
347+
'resultaat_datum': '2018101111485276',
348+
}
349+
incoming_msg = render_to_string('sigmax/actualiseerZaakstatus_Lk01.xml', incoming_context)
350+
351+
# authenticate
352+
self.client.force_authenticate(user=self.sigmax_user)
353+
354+
# call our SOAP endpoint
355+
response = self.client.post(
356+
SOAP_ENDPOINT,
357+
data=incoming_msg,
358+
HTTP_SOAPACTION=ACTUALISEER_ZAAK_STATUS,
359+
content_type='text/xml',
360+
)
361+
362+
self.assertEqual(response.status_code, 200)
363+
364+
signal.refresh_from_db()
365+
# Should be AFGEHANDELD instead of AFGEHANDELD_EXTERN when setting is enabled
366+
self.assertEqual(signal.status.state, workflow.AFGEHANDELD)
367+
# Should use the special status text
368+
self.assertEqual(signal.status.text, 'Test opgelost bericht')
369+
# Should have the same extra properties
370+
self.assertEqual(signal.status.extra_properties, {
371+
'sigmax_datum_afgehandeld': incoming_context['resultaat_datum'],
372+
'sigmax_resultaat': incoming_context['resultaat_omschrijving'],
373+
'sigmax_reden': incoming_context['resultaat_toelichting'],
374+
})
375+
# Check that a note was added with the regular status text
376+
self.assertEqual(signal.notes.count(), 1)
377+
note = signal.notes.first()
378+
self.assertEqual(note.text, 'afgerond: Het probleem is opgelost')

app/signals/apps/signals/workflow.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@
119119
],
120120
VERZONDEN: [
121121
AFGEHANDELD_EXTERN,
122+
AFGEHANDELD,
122123
GEANNULEERD, # SIG-2987
123124
],
124125
VERZENDEN_MISLUKT: [

app/signals/settings.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,11 @@ def is_super_user(user) -> bool:
399399
SIGMAX_CLIENT_CERT: str | None = os.getenv('SIGMAX_CLIENT_CERT', None)
400400
SIGMAX_CLIENT_KEY: str | None = os.getenv('SIGMAX_CLIENT_KEY', None)
401401
SIGMAX_SEND_FAIL_TIMEOUT_MINUTES: str | int = os.getenv('SIGMAX_SEND_FAIL_TIMEOUT_MINUTES', 60*24) # noqa Default is 24hrs.
402+
SIGMAX_END_STATE_IS_AFGEHANDELD: bool = os.getenv('SIGMAX_END_STATE_IS_AFGEHANDELD', False) in TRUE_VALUES
403+
SIGMAX_END_STATE_IS_AFGEHANDELD_STATUS_TEXT: str = os.getenv(
404+
'SIGMAX_END_STATE_IS_AFGEHANDELD_STATUS_TEXT',
405+
'We hebben uw melding opgelost. Bedankt voor het doorgeven!'
406+
)
402407

403408
SIGMAX_TRANSFORM_DESCRIPTION_BASED_ON_SOURCE: str | None = os.getenv(
404409
'SIGMAX_TRANSFORM_DESCRIPTION_BASED_ON_SOURCE', None

0 commit comments

Comments
 (0)