1616from django .http import Http404
1717from django .utils .timezone import now
1818from django_cte import CTEQuerySet
19+ from django_filters .rest_framework import BooleanFilter
1920from django_filters .rest_framework import CharFilter
2021from django_filters .rest_framework import UUIDFilter
21- from django_filters .rest_framework import BooleanFilter
2222from le_utils .constants import completion_criteria
2323from le_utils .constants import content_kinds
2424from le_utils .constants import roles
@@ -412,6 +412,21 @@ def _check_completion_criteria(self, kind, complete, validated_data):
412412 except DjangoValidationError as e :
413413 raise ValidationError (e )
414414
415+ def _ensure_complete (self , instance ):
416+ """
417+ If an instance is marked as complete, ensure that it is actually complete.
418+ If it is not, update the value, save, and issue a change event.
419+ """
420+ if instance .complete :
421+ instance .mark_complete ()
422+ if not instance .complete :
423+ instance .save ()
424+ Change .create_change (
425+ generate_update_event (
426+ instance .id , CONTENTNODE , {"complete" : False }, channel_id = instance .channel_id
427+ ), created_by_id = self .context ["request" ].user .id , applied = True
428+ )
429+
415430 def create (self , validated_data ):
416431 tags = None
417432 if "tags" in validated_data :
@@ -424,6 +439,8 @@ def create(self, validated_data):
424439 if tags :
425440 set_tags ({instance .id : tags })
426441
442+ self ._ensure_complete (instance )
443+
427444 return instance
428445
429446 def update (self , instance , validated_data ):
@@ -439,7 +456,10 @@ def update(self, instance, validated_data):
439456
440457 self ._check_completion_criteria (validated_data .get ("kind" , instance .kind_id ), validated_data .get ("complete" , instance .complete ), validated_data )
441458
442- return super (ContentNodeSerializer , self ).update (instance , validated_data )
459+ instance = super (ContentNodeSerializer , self ).update (instance , validated_data )
460+
461+ self ._ensure_complete (instance )
462+ return instance
443463
444464
445465def retrieve_thumbail_src (item ):
0 commit comments