diff --git a/messages/uniworx/de-de-formal.msg b/messages/uniworx/de-de-formal.msg index 0a5b633b2..34b721661 100644 --- a/messages/uniworx/de-de-formal.msg +++ b/messages/uniworx/de-de-formal.msg @@ -2801,4 +2801,8 @@ WorkflowDefinitionEditTitle: Workflow-Definition Bearbeiten WorkflowDefinitionListTitle: Workflow-Definitionen WorkflowDefinitionInstanceCount: Instanzen -WorkflowDefinitionWorkflowCount: Workflows \ No newline at end of file +WorkflowDefinitionWorkflowCount: Workflows +WorkflowDefinitionConcreteInstanceCount num@Int64: #{num} Instanzen +WorkflowDefinitionConcreteWorkflowCount num@Int64: #{num} Workflows +WorkflowDefinitionDeleteQuestion: Wollen Sie die unten aufgeführte Workflow-Definition wirklich löschen? +WorkflowDefinitionDeleted: Workflow-Definition gelöscht \ No newline at end of file diff --git a/src/Handler/Workflow/Definition/Delete.hs b/src/Handler/Workflow/Definition/Delete.hs index a8bca1f3f..616c8e06c 100644 --- a/src/Handler/Workflow/Definition/Delete.hs +++ b/src/Handler/Workflow/Definition/Delete.hs @@ -4,6 +4,49 @@ module Handler.Workflow.Definition.Delete import Import +import Handler.Utils.Delete + +import qualified Database.Esqueleto as E + +import qualified Data.Set as Set + + getAWDDeleteR, postAWDDeleteR :: WorkflowInstanceScope' -> WorkflowDefinitionName -> Handler Html getAWDDeleteR = postAWDDeleteR -postAWDDeleteR = error "not implemented" +postAWDDeleteR wds' wdn = do + wdId <- runDB . getKeyBy404 $ UniqueWorkflowDefinition wdn wds' + deleteR DeleteRoute + { drRecords = Set.singleton wdId + , drGetInfo = \workflowDefinition -> do + let instanceCount = E.subSelectCount . E.from $ \workflowInstance -> + E.where_ $ workflowInstance E.^. WorkflowInstanceDefinition E.==. E.just (workflowDefinition E.^. WorkflowDefinitionId) + workflowCount = E.subSelectCount . E.from $ \(workflowInstance `E.InnerJoin` workflow) -> do + E.on $ workflow E.^. WorkflowWorkflowInstance E.==. E.just (workflowInstance E.^. WorkflowInstanceId) + E.where_ $ workflowInstance E.^. WorkflowInstanceDefinition E.==. E.just (workflowDefinition E.^. WorkflowDefinitionId) + return ( workflowDefinition E.^. WorkflowDefinitionScope + , workflowDefinition E.^. WorkflowDefinitionName + , instanceCount, workflowCount + ) + , drUnjoin = id + , drRenderRecord = \(E.Value scope, E.Value name, E.Value instanceCount, E.Value workflowCount) -> + return [whamlet| + $newline never + #{name} + \ (_{scope} + $if instanceCount > 0 + ; _{MsgWorkflowDefinitionConcreteInstanceCount instanceCount} + $if workflowCount > 0 + ; _{MsgWorkflowDefinitionConcreteWorkflowCount workflowCount} + ) + |] + , drRecordConfirmString = \(E.Value scope, E.Value name, _, _) -> + return [st|#{toPathPiece scope}.#{name}|] + , drCaption = SomeMessage MsgWorkflowDefinitionDeleteQuestion + , drSuccessMessage = SomeMessage MsgWorkflowDefinitionDeleted + , drFormMessage = const $ return Nothing + , drAbort = SomeRoute AdminWorkflowDefinitionListR + , drSuccess = SomeRoute AdminWorkflowDefinitionListR + , drDelete = \k cascade -> do + updateWhere [WorkflowInstanceDefinition ==. Just k] [WorkflowInstanceDefinition =. Nothing] + cascade + }