@@ -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