@@ -184,6 +184,7 @@ class DrefSerializer(
184184 ALLOWED_ASSESSMENT_REPORT_EXTENSIONS = ["pdf" , "docx" , "pptx" ]
185185 MAX_OPERATION_TIMEFRAME = 30
186186 ASSESSMENT_REPORT_MAX_OPERATION_TIMEFRAME = 2
187+ DREF_UPDATE_ERROR_MESSAGE = "OBSOLETE_PAYLOAD"
187188 national_society_actions = NationalSocietyActionSerializer (many = True , required = False )
188189 needs_identified = IdentifiedNeedSerializer (many = True , required = False )
189190 planned_interventions = PlannedInterventionSerializer (many = True , required = False )
@@ -206,6 +207,7 @@ class DrefSerializer(
206207 assessment_report_details = DrefFileSerializer (source = 'assessment_report' , read_only = True )
207208 supporting_document_details = DrefFileSerializer (read_only = True , source = 'supporting_document' )
208209 risk_security = RiskSecuritySerializer (many = True , required = False )
210+ modified_at = serializers .DateTimeField (required = False )
209211
210212 class Meta :
211213 model = Dref
@@ -349,6 +351,9 @@ def create(self, validated_data):
349351 def update (self , instance , validated_data ):
350352 validated_data ['modified_by' ] = self .context ['request' ].user
351353 is_assessment_report = validated_data .get ('is_assessment_report' )
354+ modified_at = validated_data .pop ('modified_at' , None )
355+ if modified_at is None :
356+ raise serializers .ValidationError ({ 'modified_at' : 'Modified At is required!' })
352357 if is_assessment_report :
353358 # Previous Operations
354359 validated_data ['lessons_learned' ] = None
@@ -374,12 +379,15 @@ def update(self, instance, validated_data):
374379 dref_assessment_report = super ().update (instance , validated_data )
375380 dref_assessment_report .needs_identified .clear ()
376381 return dref_assessment_report
382+
377383 # we don't send notification again to the already notified users:
378384 if 'users' in validated_data :
379385 to = {u .email for u in validated_data ['users' ]
380386 if u .email not in {t .email for t in instance .users .iterator ()}}
381387 else :
382388 to = None
389+ if modified_at and instance .modified_at and modified_at < instance .modified_at :
390+ raise serializers .ValidationError ({ 'modified_at' : self .DREF_UPDATE_ERROR_MESSAGE })
383391 dref = super ().update (instance , validated_data )
384392 if to :
385393 transaction .on_commit (
0 commit comments