From 19da180f63977195b7ed7038b69f700d9ba0cb67 Mon Sep 17 00:00:00 2001
From: chausman <chausman@nrao.edu>
Date: Fri, 12 May 2023 11:43:37 -0600
Subject: [PATCH] - make intentionally Failed requests closable - make sure
 closing requests saves the change

---
 .../request-operations/request-operations.component.ts    | 8 ++++----
 .../capability/capability/views/capability_request.py     | 6 ++++++
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/apps/web/src/app/workspaces/components/capability-request/components/request-operations/request-operations.component.ts b/apps/web/src/app/workspaces/components/capability-request/components/request-operations/request-operations.component.ts
index 104b083a8..2f541bed3 100644
--- a/apps/web/src/app/workspaces/components/capability-request/components/request-operations/request-operations.component.ts
+++ b/apps/web/src/app/workspaces/components/capability-request/components/request-operations/request-operations.component.ts
@@ -152,14 +152,14 @@ export class RequestOperationsComponent implements OnInit {
   }
 
   /**
-   * The request is closable if it's failed in an error state.
+   * The request is closable if it's failed or in an error state.
    */
   isRequestCloseable(): boolean {
     return (
       this.selectedVersion &&
-      this.selectedVersion.state === 'Error' &&
-      this.selectedVersion.current_execution.state_name === 'Error'
-    )
+      (this.selectedVersion.state === 'Error' || this.selectedVersion.state === 'Failed') &&
+      (this.selectedVersion.current_execution.state_name === 'Error' || this.selectedVersion.current_execution.state_name === 'Failed')
+    );
   }
 
   public loadDefaultCC() {
diff --git a/services/capability/capability/views/capability_request.py b/services/capability/capability/views/capability_request.py
index a6e453adf..0f5453b80 100644
--- a/services/capability/capability/views/capability_request.py
+++ b/services/capability/capability/views/capability_request.py
@@ -227,6 +227,12 @@ def close_capability_request(request: Request) -> Response:
     if capability_request:
         if capability_request.state == "Failed":
             capability_request.update_sealed(True)
+            try:
+                request.capability_info.save_entity(capability_request)
+            except Exception as exc:
+                detail = f"sealing of {capability_request.id} failed: {exc}"
+                return HTTPBadRequest(detail=detail)
+
             return Response(body=f"Capability request with ID {request_id} successfully closed.")
         else:
             not_failed_msg = f"Capability with ID {request_id} is not in a failed state and cannot be closed."
-- 
GitLab