Skip to content

Commit 3982877

Browse files
committed
Validate the local unit on revert (#2350)
* set validate local unit to true on revert * Change revert to approved state
1 parent 75b6419 commit 3982877

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

local_units/serializers.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,8 +379,6 @@ def update(self, instance, validated_data):
379379
)
380380
validated_data["location"] = GEOSGeometry("POINT(%f %f)" % (lng, lat))
381381
validated_data["modified_by"] = self.context["request"].user
382-
# NOTE: Each time form is updated change validated status to `False`
383-
validated_data["validated"] = False
384382
return super().update(instance, validated_data)
385383

386384

local_units/test_views.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,7 @@ def test_revert_local_unit(self):
560560
response = self.client.post(f"/api/v2/local-units/{local_unit_id}/validate/")
561561
self.assert_200(response)
562562
self.assertEqual(response.data["is_locked"], False)
563+
self.assertEqual(response.data["validated"], True)
563564

564565
# saving the previous data
565566
previous_data = response.data
@@ -589,6 +590,7 @@ def test_revert_local_unit(self):
589590
self.assertEqual(local_unit_change_request.rejected_reason, revert_data["reason"])
590591
# Checking if the local unit is unlocked
591592
self.assertEqual(local_unit.is_locked, False)
593+
self.assertEqual(local_unit.validated, True)
592594

593595
def test_latest_changes(self):
594596
region = Region.objects.create(name=2)

local_units/views.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ def update(self, request, *args, **kwargs):
9090

9191
# NOTE: Locking the local unit after the change request is created
9292
local_unit.is_locked = True
93+
local_unit.validated = False
94+
local_unit.save(update_fields=["is_locked", "validated"])
9395
serializer = self.get_serializer(local_unit, data=request.data, partial=True)
9496
serializer.is_valid(raise_exception=True)
9597
self.perform_update(serializer)
@@ -123,6 +125,8 @@ def get_validate(self, request, pk=None, version=None):
123125
if not change_request_instance:
124126
return bad_request("No change request found to validate")
125127

128+
previous_data = PrivateLocalUnitDetailSerializer(local_unit, context={"request": request}).data
129+
126130
# Checking the validator type
127131
validator = LocalUnitChangeRequest.Validator.LOCAL
128132
if request.user.is_superuser or request.user.has_perm("local_units.local_unit_global_validator"):
@@ -139,10 +143,11 @@ def get_validate(self, request, pk=None, version=None):
139143
validator = LocalUnitChangeRequest.Validator.REGIONAL
140144

141145
change_request_instance.current_validator = validator
146+
change_request_instance.previous_data = previous_data
142147
change_request_instance.status = LocalUnitChangeRequest.Status.APPROVED
143148
change_request_instance.updated_by = request.user
144149
change_request_instance.updated_at = timezone.now()
145-
change_request_instance.save(update_fields=["status", "updated_by", "updated_at", "current_validator"])
150+
change_request_instance.save(update_fields=["status", "updated_by", "updated_at", "current_validator", "previous_data"])
146151

147152
# Validate the local unit
148153
local_unit.validated = True
@@ -200,14 +205,24 @@ def get_revert(self, request, pk=None, version=None):
200205
)
201206
return response.Response(PrivateLocalUnitDetailSerializer(local_unit, context={"request": request}).data)
202207

208+
# Reverting the last approved change request related to this local unit
209+
last_approved_change_request = LocalUnitChangeRequest.objects.filter(
210+
local_unit=local_unit,
211+
status=LocalUnitChangeRequest.Status.APPROVED,
212+
).last()
213+
214+
if not last_approved_change_request:
215+
return bad_request("No change request found to revert")
216+
203217
# NOTE: Unlocking the reverted local unit
204218
local_unit.is_locked = False
205-
local_unit.save(update_fields=["is_locked"])
219+
local_unit.validated = True
220+
local_unit.save(update_fields=["is_locked", "validated"])
206221

207222
# reverting the previous data of change request to local unit by passing through serializer
208223
serializer = PrivateLocalUnitDetailSerializer(
209224
local_unit,
210-
data=change_request_instance.previous_data,
225+
data=last_approved_change_request.previous_data,
211226
context={"request": request},
212227
partial=True,
213228
)

0 commit comments

Comments
 (0)