LP1845240 Survey API delete improvements
authorBill Erickson <berickxx@gmail.com>
Tue, 15 Oct 2019 15:41:57 +0000 (11:41 -0400)
committerBill Erickson <berickxx@gmail.com>
Tue, 15 Oct 2019 15:41:57 +0000 (11:41 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Survey.pm

index c5b7818..11342d3 100644 (file)
@@ -54,10 +54,12 @@ sub update_survey {
 
     if ($survey->isdeleted) {
 
-        # Remove questions and dependent data first.
+        $questions = $e->search_action_survey_question({survey => $survey->id});
         $_->isdeleted(1) for @$questions;
-        return $e->die_event unless update_questions($e, $survey);
+        $survey->questions($questions);
 
+        # Remove dependent data first.
+        return $e->die_event if update_questions($e, $survey);
         return $e->die_event unless $e->delete_action_survey($survey);
 
     } else {
@@ -90,19 +92,16 @@ sub update_questions {
 
         if ($question->isdeleted) {
 
-            # delete all of the linked data first.
-
-            my $responses = $e->search_action_survey_response({question => $question->id});
-            for my $response (@$responses) {
-                return $e->die_event unless $e->delete_action_survey_response($response);
-            }
-
-            my $answers = $e->search_action_survey_answer({question => $question->id});
-            for my $answer (@$answers) {
-                return $e->die_event unless $e->delete_action_survey_answer($answer);
-            }
+            # Get the full set
+            my $answers = 
+                $e->search_action_survey_answer({question => $question->id});
+            $_->isdeleted(1) for @$answers;
+            $question->answers($answers);
 
-            return $e->die_event unless $e->delete_action_survey_question($question);
+            # Delete linked objects first.
+            return 1 if update_answers($e, $question);
+            return $e->die_event 
+                unless $e->delete_action_survey_question($question);
 
         } else {