@@ -95,26 +95,80 @@ def update(self, instance, validated_data: dict[str, typing.Any]):
9595 return super ().update (instance , validated_data )
9696
9797
98+ class EAPFileInputSerializer (serializers .Serializer ):
99+ file = serializers .ListField (child = serializers .FileField (required = True ))
100+
101+
102+ class EAPGlobalFilesSerializer (serializers .Serializer ):
103+ url = serializers .URLField (read_only = True )
104+
105+
106+ class EAPFileSerializer (BaseEAPSerializer ):
107+ id = serializers .IntegerField (required = False )
108+ file = serializers .FileField (required = True )
109+
110+ class Meta :
111+ model = EAPFile
112+ fields = "__all__"
113+ read_only_fields = (
114+ "created_by" ,
115+ "modified_by" ,
116+ )
117+
118+ def validate_file (self , file ):
119+ validate_file_type (file )
120+ return file
121+
122+
123+ # NOTE: Separate serializer for partial updating EAPFile instance
124+ class EAPFileUpdateSerializer (BaseEAPSerializer ):
125+ id = serializers .IntegerField (required = True )
126+ file = serializers .FileField (required = False )
127+
128+ class Meta :
129+ model = EAPFile
130+ fields = "__all__"
131+ read_only_fields = (
132+ "created_by" ,
133+ "modified_by" ,
134+ )
135+
136+ def validate_id (self , id : int ) -> int :
137+ try :
138+ EAPFile .objects .get (id = id )
139+ except EAPFile .DoesNotExist :
140+ raise serializers .ValidationError (gettext ("Invalid pk '%s' - object does not exist." ) % id )
141+ return id
142+
143+ def validate_file (self , file ):
144+ validate_file_type (file )
145+ return file
146+
147+
98148# NOTE: Mini Serializers used for basic listing purpose
99149
100150
101151class MiniSimplifiedEAPSerializer (
102152 serializers .ModelSerializer ,
103153):
154+ updated_checklist_file_details = EAPFileSerializer (source = "updated_checklist_file" , read_only = True )
155+ budget_file_details = EAPFileSerializer (source = "budget_file" , read_only = True )
156+
104157 class Meta :
105158 model = SimplifiedEAP
106159 fields = [
107160 "id" ,
108- "eap_registration" ,
109161 "total_budget" ,
110162 "readiness_budget" ,
111163 "pre_positioning_budget" ,
112164 "early_action_budget" ,
113165 "seap_timeframe" ,
114166 "budget_file" ,
167+ "budget_file_details" ,
115168 "version" ,
116169 "is_locked" ,
117- "updated_checklist_file" ,
170+ "review_checklist_file" ,
171+ "updated_checklist_file_details" ,
118172 "created_at" ,
119173 "modified_at" ,
120174 ]
@@ -123,19 +177,23 @@ class Meta:
123177class MiniFullEAPSerializer (
124178 serializers .ModelSerializer ,
125179):
180+ updated_checklist_file_details = EAPFileSerializer (source = "updated_checklist_file" , read_only = True )
181+ budget_file_details = EAPFileSerializer (source = "budget_file" , read_only = True )
182+
126183 class Meta :
127184 model = FullEAP
128185 fields = [
129186 "id" ,
130- "eap_registration" ,
131187 "total_budget" ,
132188 "readiness_budget" ,
133189 "pre_positioning_budget" ,
134190 "early_action_budget" ,
135191 "budget_file" ,
192+ "budget_file_details" ,
136193 "version" ,
137194 "is_locked" ,
138- "updated_checklist_file" ,
195+ "review_checklist_file" ,
196+ "updated_checklist_file_details" ,
139197 "created_at" ,
140198 "modified_at" ,
141199 ]
@@ -199,6 +257,7 @@ class Meta:
199257 "latest_simplified_eap" ,
200258 "latest_full_eap" ,
201259 "deadline" ,
260+ "summary_file" ,
202261 ]
203262
204263 def create (self , validated_data : dict [str , typing .Any ]):
@@ -241,56 +300,6 @@ def validate(self, validated_data: dict[str, typing.Any]) -> dict[str, typing.An
241300 return validated_data
242301
243302
244- class EAPFileInputSerializer (serializers .Serializer ):
245- file = serializers .ListField (child = serializers .FileField (required = True ))
246-
247-
248- class EAPGlobalFilesSerializer (serializers .Serializer ):
249- url = serializers .URLField (read_only = True )
250-
251-
252- class EAPFileSerializer (BaseEAPSerializer ):
253- id = serializers .IntegerField (required = False )
254- file = serializers .FileField (required = True )
255-
256- class Meta :
257- model = EAPFile
258- fields = "__all__"
259- read_only_fields = (
260- "created_by" ,
261- "modified_by" ,
262- )
263-
264- def validate_file (self , file ):
265- validate_file_type (file )
266- return file
267-
268-
269- # NOTE: Separate serializer for partial updating EAPFile instance
270- class EAPFileUpdateSerializer (BaseEAPSerializer ):
271- id = serializers .IntegerField (required = True )
272- file = serializers .FileField (required = False )
273-
274- class Meta :
275- model = EAPFile
276- fields = "__all__"
277- read_only_fields = (
278- "created_by" ,
279- "modified_by" ,
280- )
281-
282- def validate_id (self , id : int ) -> int :
283- try :
284- EAPFile .objects .get (id = id )
285- except EAPFile .DoesNotExist :
286- raise serializers .ValidationError (gettext ("Invalid pk '%s' - object does not exist." ) % id )
287- return id
288-
289- def validate_file (self , file ):
290- validate_file_type (file )
291- return file
292-
293-
294303ALLOWED_MAP_TIMEFRAMES_VALUE = {
295304 TimeFrame .YEARS : list (YearsTimeFrameChoices .values ),
296305 TimeFrame .MONTHS : list (MonthsTimeFrameChoices .values ),
@@ -303,6 +312,7 @@ class OperationActivitySerializer(
303312 serializers .ModelSerializer ,
304313):
305314 id = serializers .IntegerField (required = False )
315+ previous_id = serializers .IntegerField (read_only = True )
306316 timeframe = serializers .ChoiceField (
307317 choices = TimeFrame .choices ,
308318 required = True ,
@@ -340,6 +350,7 @@ class IndicatorSerializer(
340350 serializers .ModelSerializer ,
341351):
342352 id = serializers .IntegerField (required = False )
353+ previous_id = serializers .IntegerField (read_only = True )
343354
344355 class Meta :
345356 model = Indicator
@@ -352,6 +363,7 @@ class PlannedOperationSerializer(
352363 serializers .ModelSerializer ,
353364):
354365 id = serializers .IntegerField (required = False )
366+ previous_id = serializers .IntegerField (read_only = True )
355367
356368 sector_display = serializers .CharField (source = "get_sector_display" , read_only = True )
357369 indicators = IndicatorSerializer (many = True , required = True )
@@ -372,6 +384,7 @@ class EnableApproachSerializer(
372384 serializers .ModelSerializer ,
373385):
374386 id = serializers .IntegerField (required = False )
387+ previous_id = serializers .IntegerField (read_only = True )
375388
376389 approach_display = serializers .CharField (source = "get_approach_display" , read_only = True )
377390 indicators = IndicatorSerializer (many = True , required = True )
@@ -384,16 +397,13 @@ class EnableApproachSerializer(
384397 class Meta :
385398 model = EnableApproach
386399 fields = "__all__"
387- read_only_fields = (
388- "created_by" ,
389- "modified_by" ,
390- )
391400
392401
393402class EAPSourceInformationSerializer (
394403 serializers .ModelSerializer ,
395404):
396405 id = serializers .IntegerField (required = False )
406+ previous_id = serializers .IntegerField (read_only = True )
397407
398408 class Meta :
399409 model = SourceInformation
@@ -404,6 +414,7 @@ class KeyActorSerializer(
404414 serializers .ModelSerializer ,
405415):
406416 id = serializers .IntegerField (required = False )
417+ previous_id = serializers .IntegerField (read_only = True )
407418 national_society_details = MiniCountrySerializer (source = "national_society" , read_only = True )
408419
409420 class Meta :
@@ -413,6 +424,7 @@ class Meta:
413424
414425class EAPActionSerializer (serializers .ModelSerializer ):
415426 id = serializers .IntegerField (required = False )
427+ previous_id = serializers .IntegerField (read_only = True )
416428
417429 class Meta :
418430 model = EAPAction
@@ -421,6 +433,7 @@ class Meta:
421433
422434class ImpactSerializer (serializers .ModelSerializer ):
423435 id = serializers .IntegerField (required = False )
436+ previous_id = serializers .IntegerField (read_only = True )
424437
425438 class Meta :
426439 model = EAPImpact
@@ -429,6 +442,7 @@ class Meta:
429442
430443class EAPContactSerializer (serializers .ModelSerializer ):
431444 id = serializers .IntegerField (required = False )
445+ previous_id = serializers .IntegerField (read_only = True )
432446
433447 class Meta :
434448 model = EAPContact
@@ -449,6 +463,7 @@ class CommonEAPFieldsSerializer(serializers.ModelSerializer):
449463 admin2_details = Admin2Serializer (source = "admin2" , many = True , read_only = True )
450464 budget_file = serializers .PrimaryKeyRelatedField (queryset = EAPFile .objects .all (), required = True )
451465 budget_file_details = EAPFileSerializer (source = "budget_file" , read_only = True )
466+ updated_checklist_file_details = EAPFileSerializer (source = "updated_checklist_file" , read_only = True )
452467
453468 def get_fields (self ):
454469 fields = super ().get_fields ()
@@ -460,6 +475,7 @@ def get_fields(self):
460475 fields ["enable_approaches" ] = EnableApproachSerializer (many = True , required = True )
461476 fields ["budget_file" ] = serializers .PrimaryKeyRelatedField (queryset = EAPFile .objects .all (), required = True )
462477 fields ["budget_file_details" ] = EAPFileSerializer (source = "budget_file" , read_only = True )
478+ fields ["updated_checklist_file_details" ] = EAPFileSerializer (source = "updated_checklist_file" , read_only = True )
463479 return fields
464480
465481 def validate_budget_file (self , file : typing .Optional [EAPFile ]) -> typing .Optional [EAPFile ]:
0 commit comments