@@ -759,6 +759,61 @@ def get_queryset(self):
759759 .distinct ()
760760 )
761761
762+ @extend_schema (
763+ methods = ["GET" ],
764+ responses = {
765+ status .HTTP_200_OK : serializers .RiskAcceptanceToNotesSerializer ,
766+ },
767+ )
768+ @extend_schema (
769+ methods = ["POST" ],
770+ request = serializers .AddNewNoteOptionSerializer ,
771+ responses = {status .HTTP_201_CREATED : serializers .NoteSerializer },
772+ )
773+ @action (detail = True , methods = ["get" , "post" ], permission_classes = (IsAuthenticated , permissions .UserHasRiskAcceptanceRelatedObjectPermission ))
774+ def notes (self , request , pk = None ):
775+ risk_acceptance = self .get_object ()
776+ if request .method == "POST" :
777+ new_note = serializers .AddNewNoteOptionSerializer (data = request .data )
778+ if new_note .is_valid ():
779+ entry = new_note .validated_data ["entry" ]
780+ private = new_note .validated_data .get ("private" , False )
781+ note_type = new_note .validated_data .get ("note_type" , None )
782+ else :
783+ return Response (new_note .errors , status = status .HTTP_400_BAD_REQUEST )
784+
785+ notes = risk_acceptance .notes .filter (note_type = note_type ).first ()
786+ if notes and note_type and note_type .is_single :
787+ return Response ("Only one instance of this note_type allowed on a risk acceptance." , status = status .HTTP_400_BAD_REQUEST )
788+
789+ author = request .user
790+ note = Notes (entry = entry , author = author , private = private , note_type = note_type )
791+ note .save ()
792+ history = NoteHistory .objects .create (data = note .entry , time = note .date , current_editor = note .author )
793+ note .history .add (history )
794+ risk_acceptance .notes .add (note )
795+ engagement = risk_acceptance .engagement
796+ if engagement :
797+ process_tag_notifications (
798+ request = request ,
799+ note = note ,
800+ parent_url = request .build_absolute_uri (
801+ reverse ("view_risk_acceptance" , args = (engagement .id , risk_acceptance .id )),
802+ ),
803+ parent_title = f"Risk Acceptance: { risk_acceptance .name } " ,
804+ )
805+
806+ serialized_note = serializers .NoteSerializer (
807+ {"author" : author , "entry" : entry , "private" : private },
808+ )
809+ return Response (serialized_note .data , status = status .HTTP_201_CREATED )
810+
811+ notes = risk_acceptance .notes .all ()
812+ serialized_notes = serializers .RiskAcceptanceToNotesSerializer (
813+ {"risk_acceptance_id" : risk_acceptance , "notes" : notes },
814+ )
815+ return Response (serialized_notes .data , status = status .HTTP_200_OK )
816+
762817 @extend_schema (
763818 methods = ["GET" ],
764819 responses = {
0 commit comments