From 601fabd7126ccd901266ac6eac689f809e5d004f Mon Sep 17 00:00:00 2001 From: Denis Bykhov Date: Thu, 10 Apr 2025 19:47:00 +0500 Subject: [PATCH] Wait subprocesses end (#8521) Signed-off-by: Denis Bykhov --- models/process/src/index.ts | 14 ++ models/server-process/src/index.ts | 4 + models/time/src/index.ts | 2 +- plugins/process-assets/assets/icons.svg | 30 ++-- plugins/process-assets/lang/cs.json | 4 +- plugins/process-assets/lang/de.json | 4 +- plugins/process-assets/lang/en.json | 4 +- plugins/process-assets/lang/es.json | 4 +- plugins/process-assets/lang/fr.json | 4 +- plugins/process-assets/lang/it.json | 4 +- plugins/process-assets/lang/pt.json | 4 +- plugins/process-assets/lang/ru.json | 4 +- plugins/process-assets/lang/zh.json | 4 +- plugins/process-assets/src/index.ts | 4 +- .../src/components/ProcessEditor.svelte | 20 +-- .../src/components/StateEditor.svelte | 2 +- .../src/components/TransitionEditor.svelte | 60 ++++++++ .../contextEditors/RequestUserInput.svelte | 20 ++- plugins/process-resources/src/plugin.ts | 4 +- plugins/process-resources/src/utils.ts | 40 ++++- plugins/process/src/index.ts | 8 +- server-plugins/process-resources/src/index.ts | 141 +++++++++++++----- server-plugins/process/src/index.ts | 3 +- 23 files changed, 303 insertions(+), 85 deletions(-) create mode 100644 plugins/process-resources/src/components/TransitionEditor.svelte diff --git a/models/process/src/index.ts b/models/process/src/index.ts index 45e05057a5..b4d5430ae3 100644 --- a/models/process/src/index.ts +++ b/models/process/src/index.ts @@ -114,6 +114,8 @@ export class TExecution extends TDoc implements Execution { @Prop(TypeAny(process.component.ErrorPresenter, process.string.Error), process.string.Error) @ReadOnly() error?: ExecutionError[] | null + + parentId?: Ref } @Model(process.class.ProcessToDo, time.class.ToDo) @@ -520,6 +522,18 @@ export function createModel (builder: Builder): void { process.method.UpdateCard ) + builder.createDoc( + process.class.Method, + core.space.Model, + { + label: process.string.OnSubProcessesDone, + objectClass: process.class.Execution, + systemOnly: true, + requiredParams: [] + }, + process.method.WaitSubProcess + ) + builder.createDoc(card.class.MasterTagEditorSection, core.space.Model, { id: 'processes', label: process.string.Processes, diff --git a/models/server-process/src/index.ts b/models/server-process/src/index.ts index e7cec29a72..9c58af5b4f 100644 --- a/models/server-process/src/index.ts +++ b/models/server-process/src/index.ts @@ -51,6 +51,10 @@ export function createModel (builder: Builder): void { func: serverProcess.func.UpdateCard }) + builder.mixin(process.method.WaitSubProcess, process.class.Method, serverProcess.mixin.MethodImpl, { + func: serverProcess.func.WaitSubProcess + }) + builder.mixin(process.function.FirstValue, process.class.ProcessFunction, serverProcess.mixin.FuncImpl, { func: serverProcess.transform.FirstValue }) diff --git a/models/time/src/index.ts b/models/time/src/index.ts index 0ec198781b..b1609dd4fc 100644 --- a/models/time/src/index.ts +++ b/models/time/src/index.ts @@ -116,7 +116,7 @@ export class TToDo extends TAttachedDoc implements ToDo { doneOn?: Timestamp | null - @Prop(TypeRef(contactPlugin.class.Person), contactPlugin.string.For) + @Prop(TypeRef(contactPlugin.class.Person), contactPlugin.string.Employee) user!: Ref @Prop(Collection(time.class.WorkSlot, time.string.WorkSlot), time.string.WorkSlot) diff --git a/plugins/process-assets/assets/icons.svg b/plugins/process-assets/assets/icons.svg index bb727a9139..758725a6c2 100644 --- a/plugins/process-assets/assets/icons.svg +++ b/plugins/process-assets/assets/icons.svg @@ -1,14 +1,20 @@ - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/plugins/process-assets/lang/cs.json b/plugins/process-assets/lang/cs.json index 29992c7598..d9ebc1119a 100644 --- a/plugins/process-assets/lang/cs.json +++ b/plugins/process-assets/lang/cs.json @@ -48,7 +48,9 @@ "Error": "Chyba", "Continue": "Pokračovat", "RequestFromUser": "Požádat uživatele", - "EnterValue": "Zadat hodnotu" + "EnterValue": "Zadat hodnotu", + "OnToDoClose": "Při zavření úkolu", + "OnSubProcessesDone": "Při dokončení podprocesů" }, "error": { "MethodNotFound": "Metoda nenalezena: {methodId}", diff --git a/plugins/process-assets/lang/de.json b/plugins/process-assets/lang/de.json index 96ca6e8c01..92682acee3 100644 --- a/plugins/process-assets/lang/de.json +++ b/plugins/process-assets/lang/de.json @@ -48,7 +48,9 @@ "Error": "Fehler", "Continue": "Fortsetzen", "RequestFromUser": "Anfrage von Benutzer", - "EnterValue": "Wert eingeben" + "EnterValue": "Wert eingeben", + "OnToDoClose": "Beim Schließen von Aufgabe", + "OnSubProcessesDone": "Beim Abschluss von Unterprozessen" }, "error": { "MethodNotFound": "Methode nicht gefunden: {methodId}", diff --git a/plugins/process-assets/lang/en.json b/plugins/process-assets/lang/en.json index 26830a7e87..d25750c8ea 100644 --- a/plugins/process-assets/lang/en.json +++ b/plugins/process-assets/lang/en.json @@ -48,7 +48,9 @@ "Error": "Error", "Continue": "Continue", "RequestFromUser": "Request from user", - "EnterValue": "Enter value" + "EnterValue": "Enter value", + "OnToDoClose": "On ToDo close", + "OnSubProcessesDone": "On sub processes done" }, "error": { "MethodNotFound": "Method not found: {methodId}", diff --git a/plugins/process-assets/lang/es.json b/plugins/process-assets/lang/es.json index 80f877a287..51821f4cb6 100644 --- a/plugins/process-assets/lang/es.json +++ b/plugins/process-assets/lang/es.json @@ -48,7 +48,9 @@ "Error": "Error", "Continue": "Continuar", "RequestFromUser": "Solicitar desde el usuario", - "EnterValue": "Ingrese un valor" + "EnterValue": "Ingrese un valor", + "OnToDoClose": "Al cerrar la tarea", + "OnSubProcessesDone": "Al finalizar los subprocesos" }, "error": { "MethodNotFound": "Método no encontrado: {methodId}", diff --git a/plugins/process-assets/lang/fr.json b/plugins/process-assets/lang/fr.json index cfcf23fda4..4cfb1bfdac 100644 --- a/plugins/process-assets/lang/fr.json +++ b/plugins/process-assets/lang/fr.json @@ -48,7 +48,9 @@ "Error": "Erreur", "Continue": "Continuer", "RequestFromUser": "Demander à partir de l'utilisateur", - "EnterValue": "Saisir une valeur" + "EnterValue": "Saisir une valeur", + "OnToDoClose": "Au fermeture de la tâche", + "OnSubProcessesDone": "Au fin des sous-processus" }, "error": { "MethodNotFound": "Méthode introuvable : {methodId}", diff --git a/plugins/process-assets/lang/it.json b/plugins/process-assets/lang/it.json index 126b4eeba1..5f9c55160e 100644 --- a/plugins/process-assets/lang/it.json +++ b/plugins/process-assets/lang/it.json @@ -48,7 +48,9 @@ "Error": "Errore", "Continue": "Continua", "RequestFromUser": "Richiedi da utente", - "EnterValue": "Inserisci valore" + "EnterValue": "Inserisci valore", + "OnToDoClose": "Alla chiusura Attività", + "OnSubProcessesDone": "Alla fine dei sottoprocessi" }, "error": { "MethodNotFound": "Metodo non trovato: {methodId}", diff --git a/plugins/process-assets/lang/pt.json b/plugins/process-assets/lang/pt.json index f7bb5d3e47..fa9a9dddbd 100644 --- a/plugins/process-assets/lang/pt.json +++ b/plugins/process-assets/lang/pt.json @@ -48,7 +48,9 @@ "Error": "Erro", "Continue": "Continuar", "RequestFromUser": "Solicitar do usuário", - "EnterValue": "Insira valor" + "EnterValue": "Insira valor", + "OnToDoClose": "Ao fechar Tarefa", + "OnSubProcessesDone": "Ao concluir processos sub" }, "error": { "MethodNotFound": "Método não encontrado: {methodId}", diff --git a/plugins/process-assets/lang/ru.json b/plugins/process-assets/lang/ru.json index a786836f26..321dcfb63f 100644 --- a/plugins/process-assets/lang/ru.json +++ b/plugins/process-assets/lang/ru.json @@ -48,7 +48,9 @@ "Error": "Ошибка", "Continue": "Продолжить", "RequestFromUser": "Запросить у пользователя", - "EnterValue": "Введите значение" + "EnterValue": "Введите значение", + "OnToDoClose": "При закрытии ToDo", + "OnSubProcessesDone": "При завершении подпроцессов" }, "error": { "MethodNotFound": "Метод не найден: {methodId}", diff --git a/plugins/process-assets/lang/zh.json b/plugins/process-assets/lang/zh.json index d02d073139..ace43f942f 100644 --- a/plugins/process-assets/lang/zh.json +++ b/plugins/process-assets/lang/zh.json @@ -48,7 +48,9 @@ "Error": "错误", "Continue": "继续", "RequestFromUser": "从用户请求", - "EnterValue": "输入值" + "EnterValue": "输入值", + "OnToDoClose": "关闭待办事项", + "OnSubProcessesDone": "子进程完成时" }, "error": { "MethodNotFound": "找不到方法:{methodId}", diff --git a/plugins/process-assets/src/index.ts b/plugins/process-assets/src/index.ts index f5566afe9d..91207988a9 100644 --- a/plugins/process-assets/src/index.ts +++ b/plugins/process-assets/src/index.ts @@ -20,5 +20,7 @@ const icons = require('../assets/icons.svg') as string // eslint-disable-line loadMetadata(process.icon, { Process: `${icons}#process`, States: `${icons}#trigger`, - Steps: `${icons}#steps` + Steps: `${icons}#steps`, + ToDo: `${icons}#todo`, + WaitSubprocesses: `${icons}#subprocesses` }) diff --git a/plugins/process-resources/src/components/ProcessEditor.svelte b/plugins/process-resources/src/components/ProcessEditor.svelte index 46c7fea67c..54b0639eb4 100644 --- a/plugins/process-resources/src/components/ProcessEditor.svelte +++ b/plugins/process-resources/src/components/ProcessEditor.svelte @@ -41,6 +41,8 @@ import ArrowEnd from './icons/ArrowEnd.svelte' import ArrowStart from './icons/ArrowStart.svelte' import StateEditor from './StateEditor.svelte' + import TransitionEditor from './TransitionEditor.svelte' + import { getToDoEndAction } from '../utils' export let _id: Ref export let visibleSecondNav: boolean = true @@ -103,20 +105,7 @@ await client.update(value, { states: [...value.states, id] }) if (prevState !== undefined) { - const contex: SelectedUserRequest = { - id: generateId(), - type: 'userRequest', - key: 'user', - _class: process.class.ProcessToDo - } - const endAction = { - methodId: process.method.CreateToDo, - params: { - state: id, - title: prevState.title, - user: '$' + JSON.stringify(contex) - } - } + const endAction = getToDoEndAction(prevState) prevState.endAction = endAction await client.update(prevState, { endAction }) $settingsStore = { id: value._id, component: Aside, props: { process: value, value: prevState, index: -1 } } @@ -204,6 +193,9 @@
+ {#if state.endAction !== undefined} + + {/if}
diff --git a/plugins/process-resources/src/components/StateEditor.svelte b/plugins/process-resources/src/components/StateEditor.svelte index e50a9ee2e4..675e054192 100644 --- a/plugins/process-resources/src/components/StateEditor.svelte +++ b/plugins/process-resources/src/components/StateEditor.svelte @@ -103,7 +103,7 @@ - {#if value.endAction != null} + {#if value.endAction != null && value.endAction.methodId !== plugin.method.WaitSubProcess}