29
29
)
30
30
from local_units .serializers import (
31
31
DelegationOfficeSerializer ,
32
+ LocalUnitChangeRequestSerializer ,
32
33
LocalUnitDetailSerializer ,
33
34
LocalUnitOptionsSerializer ,
34
35
LocalUnitSerializer ,
35
36
PrivateLocalUnitDetailSerializer ,
36
37
PrivateLocalUnitSerializer ,
37
38
RejectedReasonSerialzier ,
38
39
)
39
- from local_units .utils import format_local_unit
40
+ from local_units .utils import get_local_unit_snapshot_data
40
41
from main .permissions import DenyGuestUserPermission
41
42
42
43
@@ -67,12 +68,10 @@ def create(self, request, *args, **kwargs):
67
68
serializer .is_valid (raise_exception = True )
68
69
self .perform_create (serializer )
69
70
70
- clean_data = format_local_unit (serializer .data )
71
-
72
71
# Creating a new change request for the local unit
73
72
LocalUnitChangeRequest .objects .create (
74
73
local_unit = serializer .instance ,
75
- previous_data = clean_data ,
74
+ previous_data = get_local_unit_snapshot_data ( serializer . data ) ,
76
75
status = LocalUnitChangeRequest .Status .PENDING ,
77
76
triggered_by = request .user ,
78
77
)
@@ -92,12 +91,10 @@ def update(self, request, *args, **kwargs):
92
91
serializer .is_valid (raise_exception = True )
93
92
self .perform_update (serializer )
94
93
95
- clean_data = format_local_unit (serializer .data )
96
-
97
94
# Creating a new change request for the local unit
98
95
LocalUnitChangeRequest .objects .create (
99
96
local_unit = local_unit ,
100
- previous_data = clean_data ,
97
+ previous_data = get_local_unit_snapshot_data ( serializer . data ) ,
101
98
status = LocalUnitChangeRequest .Status .PENDING ,
102
99
triggered_by = request .user ,
103
100
)
@@ -115,16 +112,22 @@ def get_validate(self, request, pk=None, version=None):
115
112
local_unit = self .get_object ()
116
113
117
114
serializer = PrivateLocalUnitDetailSerializer (local_unit , context = {"request" : request })
118
- clean_data = format_local_unit (serializer .data )
119
115
120
- LocalUnitChangeRequest .objects .create (
116
+ # NOTE: Updating the change request with the approval status
117
+ change_request_instance = LocalUnitChangeRequest .objects .filter (
121
118
local_unit = local_unit ,
122
- previous_data = clean_data ,
123
- status = LocalUnitChangeRequest .Status .APPROVED ,
124
- triggered_by = request .user ,
125
- updated_by = request .user ,
126
- updated_at = timezone .now (),
127
- )
119
+ status = LocalUnitChangeRequest .Status .PENDING ,
120
+ ).last ()
121
+
122
+ if not change_request_instance :
123
+ return bad_request ("No change request found to validate" )
124
+
125
+ change_request_instance .status = LocalUnitChangeRequest .Status .APPROVED
126
+ change_request_instance .previous_data = get_local_unit_snapshot_data (serializer .data )
127
+ change_request_instance .updated_by = request .user
128
+ change_request_instance .triggered_by = request .user
129
+ change_request_instance .updated_at = timezone .now ()
130
+ change_request_instance .save (update_fields = ["status" , "previous_data" , "updated_by" , "triggered_by" , "updated_at" ])
128
131
129
132
# Validate the local unit
130
133
local_unit .validated = True
@@ -148,18 +151,28 @@ def get_revert(self, request, pk=None, version=None):
148
151
return bad_request ("Local unit is already validated and cannot be reverted" )
149
152
150
153
full_serializer = PrivateLocalUnitDetailSerializer (local_unit , context = {"request" : request })
151
- clean_data = format_local_unit (full_serializer .data )
152
154
153
155
serializer = RejectedReasonSerialzier (data = request .data )
154
156
serializer .is_valid (raise_exception = True )
155
157
reason = serializer .validated_data ["reason" ]
156
158
157
- LocalUnitChangeRequest .objects .create (
159
+ # NOTE: Updating the change request with the rejection reason
160
+ change_request_instance = LocalUnitChangeRequest .objects .filter (
158
161
local_unit = local_unit ,
159
- previous_data = clean_data ,
160
- rejected_reason = reason ,
161
- status = LocalUnitChangeRequest .Status .REVERT ,
162
- triggered_by = request .user ,
162
+ status = LocalUnitChangeRequest .Status .PENDING ,
163
+ ).last ()
164
+
165
+ if not change_request_instance :
166
+ return bad_request ("No change request found to revert" )
167
+
168
+ change_request_instance .status = LocalUnitChangeRequest .Status .REVERT
169
+ change_request_instance .rejected_reason = reason
170
+ change_request_instance .updated_by = request .user
171
+ change_request_instance .updated_at = timezone .now ()
172
+ change_request_instance .triggered_by = request .user
173
+ change_request_instance .previous_data = get_local_unit_snapshot_data (full_serializer .data )
174
+ change_request_instance .save (
175
+ update_fields = ["status" , "rejected_reason" , "updated_at" , "updated_by" , "triggered_by" , "previous_data" ]
163
176
)
164
177
165
178
# Reverting the last change request related to this local unit
@@ -174,6 +187,7 @@ def get_revert(self, request, pk=None, version=None):
174
187
# NOTE: Unlocking the reverted local unit
175
188
local_unit .is_locked = False
176
189
local_unit .save (update_fields = ["is_locked" ])
190
+
177
191
# reverting the previous data of change request to local unit by passing through serializer
178
192
serializer = PrivateLocalUnitDetailSerializer (
179
193
local_unit ,
@@ -185,12 +199,12 @@ def get_revert(self, request, pk=None, version=None):
185
199
self .perform_update (serializer )
186
200
return response .Response (serializer .data )
187
201
188
- @extend_schema (request = None , responses = PrivateLocalUnitDetailSerializer )
202
+ @extend_schema (request = None , responses = LocalUnitChangeRequestSerializer )
189
203
@action (
190
204
detail = True ,
191
- url_path = "latest-changes " ,
205
+ url_path = "latest-change-request " ,
192
206
methods = ["post" ],
193
- serializer_class = PrivateLocalUnitDetailSerializer ,
207
+ serializer_class = LocalUnitChangeRequestSerializer ,
194
208
permission_classes = [permissions .IsAuthenticated , IsAuthenticatedForLocalUnit , DenyGuestUserPermission ],
195
209
)
196
210
def get_latest_changes (self , request , pk = None , version = None ):
@@ -204,7 +218,8 @@ def get_latest_changes(self, request, pk=None, version=None):
204
218
if not change_request :
205
219
return bad_request ("Last change request not found" )
206
220
207
- return response .Response (change_request .previous_data )
221
+ serializer = LocalUnitChangeRequestSerializer (change_request , context = {"request" : request })
222
+ return response .Response (serializer .data )
208
223
209
224
210
225
class LocalUnitViewSet (viewsets .ModelViewSet ):
0 commit comments