diff --git a/models/server-controlled-documents/src/index.ts b/models/server-controlled-documents/src/index.ts index 1cd559ce0a..a97537945b 100644 --- a/models/server-controlled-documents/src/index.ts +++ b/models/server-controlled-documents/src/index.ts @@ -49,6 +49,14 @@ export function createModel (builder: Builder): void { } }) + builder.createDoc(serverCore.class.Trigger, core.space.Model, { + trigger: serverDocuments.trigger.OnDocTitleChanged, + txMatch: { + _class: core.class.TxUpdateDoc, + objectClass: documents.class.ControlledDocument + } + }) + builder.mixin(documents.class.DocumentMeta, core.class.Class, serverCore.mixin.SearchPresenter, { iconConfig: { component: documents.component.DocumentIcon diff --git a/plugins/controlled-documents-resources/src/components/document/EditDocContent.svelte b/plugins/controlled-documents-resources/src/components/document/EditDocContent.svelte index b59243e9ba..5c7b4e71fd 100644 --- a/plugins/controlled-documents-resources/src/components/document/EditDocContent.svelte +++ b/plugins/controlled-documents-resources/src/components/document/EditDocContent.svelte @@ -43,10 +43,8 @@ documentCommentsDisplayRequested, documentCommentsHighlightUpdated, documentCommentsLocationNavigateRequested, - $documentReleasedVersions as documentReleasedVersions, $isEditable as isEditable } from '../../stores/editors/document' - import { syncDocumentMetaTitle } from '../../utils' import DocumentPrintTitlePage from '../print/DocumentPrintTitlePage.svelte' import DocumentTitle from './DocumentTitle.svelte' @@ -116,9 +114,6 @@ if (titleTrimmed.length > 0 && titleTrimmed !== $controlledDocument.title) { await client.update($controlledDocument, { title: titleTrimmed }) - if ($documentReleasedVersions.length === 0 && $controlledDocument.state === DocumentState.Draft) { - await syncDocumentMetaTitle(client, $controlledDocument.attachedTo, $controlledDocument.code, titleTrimmed) - } } } diff --git a/plugins/controlled-documents-resources/src/components/document/popups/ChangeDocCodePopup.svelte b/plugins/controlled-documents-resources/src/components/document/popups/ChangeDocCodePopup.svelte index aeea262934..5ad51dbcce 100644 --- a/plugins/controlled-documents-resources/src/components/document/popups/ChangeDocCodePopup.svelte +++ b/plugins/controlled-documents-resources/src/components/document/popups/ChangeDocCodePopup.svelte @@ -21,7 +21,6 @@ import IconWarning from '../../icons/IconWarning.svelte' import documentsRes from '../../../plugin' - import { syncDocumentMetaTitle } from '../../../utils' export let object: ControlledDocument @@ -60,7 +59,6 @@ } await client.update(object, { code }) - await syncDocumentMetaTitle(client, object.attachedTo, code, object.title) dispatch('close') } diff --git a/plugins/controlled-documents-resources/src/utils.ts b/plugins/controlled-documents-resources/src/utils.ts index b15d05fcc2..da30168e5c 100644 --- a/plugins/controlled-documents-resources/src/utils.ts +++ b/plugins/controlled-documents-resources/src/utils.ts @@ -1016,18 +1016,6 @@ export function createDocumentHierarchyQuery (): DocumentHiearchyQuery { return new DocumentHiearchyQuery() } -export async function syncDocumentMetaTitle ( - client: Client & TxOperations, - _id: Ref, - code: string, - title: string -): Promise { - const meta = await client.findOne(documents.class.DocumentMeta, { _id }) - if (meta !== undefined) { - await client.update(meta, { title: `${code} ${title}` }) - } -} - export async function extractValidationWorkflow ( hierarchy: Hierarchy, bundle: DocumentBundle diff --git a/server-plugins/controlled-documents-resources/src/index.ts b/server-plugins/controlled-documents-resources/src/index.ts index 8ff8337049..ca876732f0 100644 --- a/server-plugins/controlled-documents-resources/src/index.ts +++ b/server-plugins/controlled-documents-resources/src/index.ts @@ -287,6 +287,29 @@ export async function OnDocHasBecomeEffective ( return result } +export async function OnDocTitleChanged ( + txes: TxUpdateDoc[], + control: TriggerControl +): Promise { + const result: Tx[] = [] + for (const tx of txes) { + if (tx.operations.code === undefined && tx.operations.title === undefined) { + continue + } + + const doc = (await control.findAll(control.ctx, tx.objectClass, { _id: tx.objectId }, { limit: 1 })).shift() + if (doc === undefined) { + continue + } + + const olderEffective = await getDocsOlderThanDoc(doc, control, [DocumentState.Effective]) + if (olderEffective.length === 0 && doc.state === DocumentState.Draft) { + result.push(...updateMeta(doc, control.txFactory)) + } + } + return result +} + export async function OnDocEnteredNonActionableState ( txes: TxUpdateDoc[], control: TriggerControl @@ -431,7 +454,8 @@ export default async () => ({ OnDocEnteredNonActionableState, OnDocPlannedEffectiveDateChanged, OnDocApprovalRequestApproved, - OnDocHasBecomeEffective + OnDocHasBecomeEffective, + OnDocTitleChanged }, function: { ControlledDocumentTextPresenter, diff --git a/server-plugins/controlled-documents/src/index.ts b/server-plugins/controlled-documents/src/index.ts index eefdedff4c..9dd154976f 100644 --- a/server-plugins/controlled-documents/src/index.ts +++ b/server-plugins/controlled-documents/src/index.ts @@ -21,7 +21,8 @@ export default plugin(serverDocumentsId, { OnDocEnteredNonActionableState: '' as Resource, OnDocPlannedEffectiveDateChanged: '' as Resource, OnDocApprovalRequestApproved: '' as Resource, - OnDocHasBecomeEffective: '' as Resource + OnDocHasBecomeEffective: '' as Resource, + OnDocTitleChanged: '' as Resource }, function: { ControlledDocumentTextPresenter: '' as Resource,