@@ -73,7 +73,6 @@ def create(self, request, *args, **kwargs):
7373 # Creating a new change request for the local unit
7474 LocalUnitChangeRequest .objects .create (
7575 local_unit = serializer .instance ,
76- previous_data = serializer .data ,
7776 status = LocalUnitChangeRequest .Status .PENDING ,
7877 triggered_by = request .user ,
7978 )
@@ -82,6 +81,8 @@ def create(self, request, *args, **kwargs):
8281 def update (self , request , * args , ** kwargs ):
8382 local_unit = self .get_object ()
8483
84+ previous_data = PrivateLocalUnitDetailSerializer (local_unit , context = {"request" : request }).data
85+
8586 # NOTE: Checking if the local unit is locked.
8687 # TODO: This should be moved to a permission class and validators can update the local unit
8788 if local_unit .is_locked :
@@ -96,7 +97,7 @@ def update(self, request, *args, **kwargs):
9697 # Creating a new change request for the local unit
9798 LocalUnitChangeRequest .objects .create (
9899 local_unit = local_unit ,
99- previous_data = serializer . data ,
100+ previous_data = previous_data ,
100101 status = LocalUnitChangeRequest .Status .PENDING ,
101102 triggered_by = request .user ,
102103 )
@@ -123,7 +124,6 @@ def get_validate(self, request, pk=None, version=None):
123124 return bad_request ("No change request found to validate" )
124125
125126 # Checking the validator type
126-
127127 validator = LocalUnitChangeRequest .Validator .LOCAL
128128 if request .user .is_superuser or request .user .has_perm ("local_units.local_unit_global_validator" ):
129129 validator = LocalUnitChangeRequest .Validator .GLOBAL
@@ -165,7 +165,7 @@ def get_revert(self, request, pk=None, version=None):
165165 if local_unit .validated :
166166 return bad_request ("Local unit is already validated and cannot be reverted" )
167167
168- full_serializer = PrivateLocalUnitDetailSerializer (local_unit , context = {"request" : request })
168+ rejected_data = PrivateLocalUnitDetailSerializer (local_unit , context = {"request" : request }). data
169169
170170 serializer = RejectedReasonSerialzier (data = request .data )
171171 serializer .is_valid (raise_exception = True )
@@ -184,17 +184,21 @@ def get_revert(self, request, pk=None, version=None):
184184 change_request_instance .rejected_reason = reason
185185 change_request_instance .updated_by = request .user
186186 change_request_instance .updated_at = timezone .now ()
187- change_request_instance .rejected_data = full_serializer . data
187+ change_request_instance .rejected_data = rejected_data
188188 change_request_instance .save (update_fields = ["status" , "rejected_reason" , "updated_at" , "updated_by" , "rejected_data" ])
189189
190- # Reverting the last change request related to this local unit
191- last_change_request = LocalUnitChangeRequest .objects .filter (
192- local_unit = local_unit ,
193- status = LocalUnitChangeRequest .Status .APPROVED ,
194- ).last ()
195-
196- if not last_change_request :
197- return bad_request ("No change request found to revert" )
190+ # NOTE: Handling the first change request
191+ if change_request_instance .previous_data == {}:
192+ total_change_request_count = LocalUnitChangeRequest .objects .filter (local_unit = local_unit ).count ()
193+ assert (
194+ total_change_request_count == 1
195+ ), f"There should be one change request and it is the first one { total_change_request_count } "
196+ local_unit .is_deprecated = True
197+ local_unit .deprecated_reason = reason
198+ local_unit .save (
199+ update_fields = ["is_deprecated" , "deprecated_reason" ],
200+ )
201+ return response .Response (PrivateLocalUnitDetailSerializer (local_unit , context = {"request" : request }).data )
198202
199203 # NOTE: Unlocking the reverted local unit
200204 local_unit .is_locked = False
@@ -203,7 +207,7 @@ def get_revert(self, request, pk=None, version=None):
203207 # reverting the previous data of change request to local unit by passing through serializer
204208 serializer = PrivateLocalUnitDetailSerializer (
205209 local_unit ,
206- data = last_change_request .previous_data ,
210+ data = change_request_instance .previous_data ,
207211 context = {"request" : request },
208212 partial = True ,
209213 )
@@ -224,7 +228,6 @@ def get_latest_changes(self, request, pk=None, version=None):
224228
225229 change_request = LocalUnitChangeRequest .objects .filter (
226230 local_unit = local_unit ,
227- status = LocalUnitChangeRequest .Status .APPROVED ,
228231 ).last ()
229232
230233 if not change_request :
0 commit comments