diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index e71bb676600..0c2da87ce84 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -24660,6 +24660,9 @@ importers: ../../plugins/process-resources: dependencies: + '@hcengineering/account-client': + specifier: workspace:^0.7.21 + version: link:../../foundations/core/packages/account-client '@hcengineering/analytics': specifier: workspace:^0.7.17 version: link:../../foundations/core/packages/analytics @@ -24681,6 +24684,9 @@ importers: '@hcengineering/core': specifier: workspace:^0.7.24 version: link:../../foundations/core/packages/core + '@hcengineering/login': + specifier: workspace:^0.7.0 + version: link:../login '@hcengineering/platform': specifier: workspace:^0.7.19 version: link:../../foundations/core/packages/platform diff --git a/models/process/src/actions.ts b/models/process/src/actions.ts index edf1d91533d..86d2e427a30 100644 --- a/models/process/src/actions.ts +++ b/models/process/src/actions.ts @@ -31,6 +31,23 @@ export function defineMethods (builder: Builder): void { process.method.RunSubProcess ) + builder.createDoc( + process.class.Method, + core.space.Model, + { + label: process.string.RequestApproval, + objectClass: process.class.ApproveRequest, + editor: process.component.ApproveRequestEditor, + presenter: process.component.ApproveRequestPresenter, + createdContext: { + _class: process.class.ApproveRequest, + nameField: 'title' + }, + requiredParams: ['user'] + }, + process.method.RequestApproval + ) + builder.createDoc( process.class.Method, core.space.Model, @@ -103,4 +120,30 @@ export function defineMethods (builder: Builder): void { }, process.method.AddTag ) + + builder.createDoc( + process.class.Method, + core.space.Model, + { + label: process.string.LockCard, + objectClass: card.class.Card, + requiredParams: [], + createdContext: null + }, + process.method.LockCard + ) + + builder.createDoc( + process.class.Method, + core.space.Model, + { + label: process.string.LockSection, + objectClass: card.class.Card, + editor: process.component.LockSectionEditor, + presenter: process.component.LockSectionPresenter, + requiredParams: ['_id'], + createdContext: null + }, + process.method.LockSection + ) } diff --git a/models/process/src/index.ts b/models/process/src/index.ts index f265763b71d..89b2d7f5508 100644 --- a/models/process/src/index.ts +++ b/models/process/src/index.ts @@ -46,6 +46,7 @@ import workbench from '@hcengineering/model-workbench' import notification from '@hcengineering/notification' import { type Asset, type IntlString, type Resource } from '@hcengineering/platform' import { + type ApproveRequest, type CheckFunc, type ContextId, type CreatedContext, @@ -204,6 +205,19 @@ export class TProcessToDo extends TToDo implements ProcessToDo { withRollback!: boolean } +@Model(process.class.ApproveRequest, process.class.ProcessToDo) +export class TApproveRequest extends TProcessToDo implements ApproveRequest { + @Prop(TypeBoolean(), process.string.IsApproved) + approved?: boolean + + @Prop(TypeString(), process.string.RejectionReason) + reason?: string + + group!: string + + card!: Ref +} + @Model(process.class.Method, core.class.Doc, DOMAIN_MODEL) export class TMethod extends TDoc implements Method { label!: IntlString @@ -290,6 +304,7 @@ export function createModel (builder: Builder): void { TProcess, TExecution, TProcessToDo, + TApproveRequest, TMethod, TState, TProcessFunction, @@ -323,6 +338,28 @@ export function createModel (builder: Builder): void { process.ids.ProcessToDoCreated ) + builder.createDoc( + notification.class.NotificationType, + core.space.Model, + { + hidden: false, + generated: false, + allowedForAuthor: true, + label: process.string.ApproveRequest, + group: time.ids.TimeNotificationGroup, + txClasses: [core.class.TxCreateDoc], + objectClass: process.class.ApproveRequest, + onlyOwn: true, + defaultEnabled: true, + templates: { + textTemplate: '{body}', + htmlTemplate: '

{body}

', + subjectTemplate: '{title}' + } + }, + process.ids.ApproveRequestCreated + ) + createAction(builder, { action: view.actionImpl.Delete, label: view.string.Delete, @@ -413,6 +450,42 @@ export function createModel (builder: Builder): void { presenter: process.component.StatePresenter }) + builder.createDoc( + view.class.Viewlet, + core.space.Model, + { + variant: 'cardRequests', + attachTo: process.class.ApproveRequest, + descriptor: view.viewlet.List, + props: { + baseMenuClass: process.class.ApproveRequest + }, + viewOptions: { + groupBy: ['user', 'approved'], + orderBy: [ + ['approved', SortingOrder.Descending], + ['modifiedOn', SortingOrder.Descending], + ['createdOn', SortingOrder.Descending] + ], + other: [] + }, + configOptions: { + strict: true + }, + config: [ + { + key: '', + label: process.string.ApproveRequest, + presenter: process.component.ApproveRequestPresenter + }, + 'user', + 'approved', + 'reason' + ] + }, + process.viewlet.CardRequests + ) + builder.createDoc( view.class.Viewlet, core.space.Model, @@ -600,6 +673,12 @@ export function createModel (builder: Builder): void { props: {} }) + builder.createDoc(presentation.class.ComponentPointExtension, core.space.Model, { + extension: card.extensions.EditCardExtension, + component: process.component.RequestsExtension, + props: {} + }) + builder.createDoc(presentation.class.ComponentPointExtension, core.space.Model, { extension: card.extensions.EditCardHeaderExtension, component: process.component.ProcessesHeaderExtension, @@ -623,6 +702,19 @@ export function createModel (builder: Builder): void { process.section.CardProcesses ) + builder.createDoc( + card.class.CardSection, + core.space.Model, + { + label: process.string.ApproveRequest, + component: process.component.RequestsCardSection, + checkVisibility: process.function.CheckRequestsSectionVisibility, + order: 360, + navigation: [] + }, + process.section.CardApproveRequest + ) + builder.createDoc(card.class.MasterTagEditorSection, core.space.Model, { id: 'processes', label: process.string.Processes, diff --git a/models/process/src/plugin.ts b/models/process/src/plugin.ts index d788ab848fa..728b3b1ef6c 100644 --- a/models/process/src/plugin.ts +++ b/models/process/src/plugin.ts @@ -24,14 +24,16 @@ export default mergeIds(processId, process, { Process: '' as Ref }, section: { - CardProcesses: '' as Ref + CardProcesses: '' as Ref, + CardApproveRequest: '' as Ref }, pipeline: { ProcessMiddleware: '' as Ref }, ids: { ProcessSettings: '' as Ref, - ProcessToDoCreated: '' as Ref + ProcessToDoCreated: '' as Ref, + ApproveRequestCreated: '' as Ref }, actionImpl: { ContinueExecution: '' as ViewAction diff --git a/models/process/src/triggers.ts b/models/process/src/triggers.ts index 600dd2b84be..a96bc53aab2 100644 --- a/models/process/src/triggers.ts +++ b/models/process/src/triggers.ts @@ -16,6 +16,38 @@ import { type Builder } from '@hcengineering/model' import process from './plugin' export function defineTriggers (builder: Builder): void { + builder.createDoc( + process.class.Trigger, + core.space.Model, + { + label: process.string.OnApproveRequestApproved, + icon: process.icon.ToDo, + editor: process.component.ApproveRequestTriggerEditor, + presenter: process.component.ApproveRequestTriggerPresenter, + requiredParams: ['_id'], + checkFunction: process.triggerCheck.ApproveRequestApproved, + init: false, + auto: true + }, + process.trigger.OnApproveRequestApproved + ) + + builder.createDoc( + process.class.Trigger, + core.space.Model, + { + label: process.string.OnApproveRequestRejected, + icon: process.icon.ToDoRemove, + editor: process.component.ApproveRequestTriggerEditor, + presenter: process.component.ApproveRequestTriggerPresenter, + requiredParams: ['_id'], + checkFunction: process.triggerCheck.ApproveRequestRejected, + init: false, + auto: true + }, + process.trigger.OnApproveRequestRejected + ) + builder.createDoc( process.class.Trigger, core.space.Model, diff --git a/models/server-process/src/index.ts b/models/server-process/src/index.ts index 0de963d6db9..a7409512362 100644 --- a/models/server-process/src/index.ts +++ b/models/server-process/src/index.ts @@ -70,6 +70,16 @@ export function createModel (builder: Builder): void { serverCheckFunc: serverProcess.func.FieldChangedCheck }) + builder.mixin(process.trigger.OnApproveRequestApproved, process.class.Trigger, serverProcess.mixin.TriggerImpl, { + preventRollback: true, + serverCheckFunc: serverProcess.func.ApproveRequestApproved + }) + + builder.mixin(process.trigger.OnApproveRequestRejected, process.class.Trigger, serverProcess.mixin.TriggerImpl, { + preventRollback: true, + serverCheckFunc: serverProcess.func.ApproveRequestRejected + }) + builder.mixin(process.trigger.OnExecutionStart, process.class.Trigger, serverProcess.mixin.TriggerImpl, { preventRollback: true }) @@ -117,6 +127,18 @@ export function createModel (builder: Builder): void { func: serverProcess.func.AddTag }) + builder.mixin(process.method.RequestApproval, process.class.Method, serverProcess.mixin.MethodImpl, { + func: serverProcess.func.RequestApproval + }) + + builder.mixin(process.method.LockCard, process.class.Method, serverProcess.mixin.MethodImpl, { + func: serverProcess.func.LockCard + }) + + builder.mixin(process.method.LockSection, process.class.Method, serverProcess.mixin.MethodImpl, { + func: serverProcess.func.LockSection + }) + builder.mixin(process.function.FirstValue, process.class.ProcessFunction, serverProcess.mixin.FuncImpl, { func: serverProcess.transform.FirstValue }) diff --git a/plugins/card-resources/src/components/CardAttributeEditor.svelte b/plugins/card-resources/src/components/CardAttributeEditor.svelte index 5e45d36d43e..7037c17b877 100644 --- a/plugins/card-resources/src/components/CardAttributeEditor.svelte +++ b/plugins/card-resources/src/components/CardAttributeEditor.svelte @@ -55,14 +55,26 @@
{/if}
- +
{#if mixins.length > 0}
{#each mixins as tag, i (tag._id)}
- +
{/each}
diff --git a/plugins/card-resources/src/components/sections/ContentSection.svelte b/plugins/card-resources/src/components/sections/ContentSection.svelte index d264a1a02aa..5db069be7e8 100644 --- a/plugins/card-resources/src/components/sections/ContentSection.svelte +++ b/plugins/card-resources/src/components/sections/ContentSection.svelte @@ -52,7 +52,7 @@
| null rank: Rank - readonly?: boolean peerId?: string + + readonlySections?: Ref[] } export interface CardSpace extends TypedSpace { diff --git a/plugins/login-resources/src/plugin.ts b/plugins/login-resources/src/plugin.ts index 4a1817fd2b9..abc687ea8a1 100644 --- a/plugins/login-resources/src/plugin.ts +++ b/plugins/login-resources/src/plugin.ts @@ -34,9 +34,6 @@ export default mergeIds(loginId, login, { HaveAccount: '' as IntlString, LoadingAccount: '' as IntlString, Join: '' as IntlString, - Email: '' as IntlString, - Password: '' as IntlString, - PasswordRepeat: '' as IntlString, Workspace: '' as IntlString, SignUp: '' as IntlString, DoNotHaveAnAccount: '' as IntlString, diff --git a/plugins/login/src/index.ts b/plugins/login/src/index.ts index ca023d4534f..4d2d8d194b0 100644 --- a/plugins/login/src/index.ts +++ b/plugins/login/src/index.ts @@ -89,7 +89,10 @@ export default plugin(loginId, { WorkspaceArchived: '' as IntlString, WorkspaceArchivedDesc: '' as IntlString, RestoreArchivedWorkspace: '' as IntlString, - PasswordExpiredDesc: '' as IntlString + PasswordExpiredDesc: '' as IntlString, + Email: '' as IntlString, + Password: '' as IntlString, + PasswordRepeat: '' as IntlString }, function: { SendInvite: '' as Resource<(email: string, role: AccountRole) => Promise>, diff --git a/plugins/process-assets/lang/cs.json b/plugins/process-assets/lang/cs.json index 07e1dbe9375..7726ac1c8d8 100644 --- a/plugins/process-assets/lang/cs.json +++ b/plugins/process-assets/lang/cs.json @@ -121,7 +121,23 @@ "RunProcessPermission": "Spustit proces", "CancelProcessPermission": "Zrušit proces", "ForbidRunProcessPermission": "Zakázat spuštění procesu", - "ForbidCancelProcessPermission": "Zakázat zrušení procesu" + "ForbidCancelProcessPermission": "Forbid cancelling process", + "RequestApproval": "Požádat o schválení", + "IsApproved": "Schváleno", + "Approve": "Schválit", + "Reject": "Odmítnout", + "Reason": "Důvod", + "ApproveRequest": "Schválit požadavek", + "OnApproveRequestApproved": "Při schválení požadavku", + "OnApproveRequestRejected": "Při zamítnutí požadavku", + "ConfirmApproval": "Potvrdit schválení", + "ConfirmRejection": "Potvrdit zamítnutí", + "RejectionReason": "Důvod zamítnutí", + "ProvideRejectionReason": "Poskytnout důvod zamítnutí", + "FieldIsEmpty": "Pole je prázdné", + "Reviewers": "Recenzenti", + "LockCard": "Zamknout kartu", + "LockSection": "Zamknout sekci" }, "error": { "MethodNotFound": "Metoda nenalezena: {methodId}", diff --git a/plugins/process-assets/lang/de.json b/plugins/process-assets/lang/de.json index 03dc68f10e4..df1f9975f1b 100644 --- a/plugins/process-assets/lang/de.json +++ b/plugins/process-assets/lang/de.json @@ -121,7 +121,23 @@ "RunProcessPermission": "Prozess ausführen", "CancelProcessPermission": "Prozess abbrechen", "ForbidRunProcessPermission": "Ausführen des Prozesses verbieten", - "ForbidCancelProcessPermission": "Abbrechen des Prozesses verbieten" + "ForbidCancelProcessPermission": "Abbrechen des Prozesses verbieten", + "RequestApproval": "Genehmigung anfordern", + "IsApproved": "Ist genehmigt", + "Approve": "Genehmigen", + "Reject": "Ablehnen", + "Reason": "Grund", + "ApproveRequest": "Genehmigungsanfrage", + "OnApproveRequestApproved": "Bei Genehmigung der Anfrage", + "OnApproveRequestRejected": "Bei Ablehnung der Anfrage", + "ConfirmApproval": "Genehmigung bestätigen", + "ConfirmRejection": "Ablehnung bestätigen", + "RejectionReason": "Ablehnungsgrund", + "ProvideRejectionReason": "Ablehnungsgrund angeben", + "FieldIsEmpty": "Feld ist leer", + "Reviewers": "Prüfer", + "LockCard": "Karte sperren", + "LockSection": "Abschnitt sperren" }, "error": { "MethodNotFound": "Methode nicht gefunden: {methodId}", diff --git a/plugins/process-assets/lang/en.json b/plugins/process-assets/lang/en.json index 813ab612974..8635ab5b272 100644 --- a/plugins/process-assets/lang/en.json +++ b/plugins/process-assets/lang/en.json @@ -126,7 +126,23 @@ "RunProcessPermission": "Run process", "CancelProcessPermission": "Cancel process", "ForbidRunProcessPermission": "Forbid running process", - "ForbidCancelProcessPermission": "Forbid cancelling process" + "ForbidCancelProcessPermission": "Forbid cancelling process", + "RequestApproval": "Request approval", + "IsApproved": "Is approved", + "Approve": "Approve", + "Reject": "Reject", + "Reason": "Reason", + "ApproveRequest": "Approve request", + "OnApproveRequestApproved": "On approved", + "OnApproveRequestRejected": "On rejected", + "ConfirmApproval": "Confirm approval", + "ConfirmRejection": "Confirm rejection", + "RejectionReason": "Rejection reason", + "ProvideRejectionReason": "Provide rejection reason", + "FieldIsEmpty": "Field is empty", + "Reviewers": "Reviewers", + "LockCard": "Lock card", + "LockSection": "Lock section" }, "error": { "MethodNotFound": "Method not found: {methodId}", diff --git a/plugins/process-assets/lang/es.json b/plugins/process-assets/lang/es.json index 86810cd6d14..085fb7af8e0 100644 --- a/plugins/process-assets/lang/es.json +++ b/plugins/process-assets/lang/es.json @@ -126,7 +126,23 @@ "RunProcessPermission": "Ejecutar proceso", "CancelProcessPermission": "Cancelar proceso", "ForbidRunProcessPermission": "Prohibir ejecución de proceso", - "ForbidCancelProcessPermission": "Prohibir cancelación de proceso" + "ForbidCancelProcessPermission": "Forbid cancelling process", + "RequestApproval": "Solicitar aprobación", + "IsApproved": "Aprobado", + "Approve": "Aprobar", + "Reject": "Rechazar", + "Reason": "Razón", + "ApproveRequest": "Aprobar solicitud", + "OnApproveRequestApproved": "Al aprobar la solicitud", + "OnApproveRequestRejected": "Al rechazar la solicitud", + "ConfirmApproval": "Confirmar aprobación", + "ConfirmRejection": "Confirmar rechazo", + "RejectionReason": "Razón de rechazo", + "ProvideRejectionReason": "Proporcionar razón de rechazo", + "FieldIsEmpty": "Campo vacío", + "Reviewers": "Revisores", + "LockCard": "Bloquear tarjeta", + "LockSection": "Bloquear sección" }, "error": { "MethodNotFound": "Método no encontrado: {methodId}", diff --git a/plugins/process-assets/lang/fr.json b/plugins/process-assets/lang/fr.json index 29835949f48..6d9c7d2ff0f 100644 --- a/plugins/process-assets/lang/fr.json +++ b/plugins/process-assets/lang/fr.json @@ -126,7 +126,23 @@ "RunProcessPermission": "Exécuter le processus", "CancelProcessPermission": "Annuler le processus", "ForbidRunProcessPermission": "Interdire l'exécution du processus", - "ForbidCancelProcessPermission": "Interdire l'annulation du processus" + "ForbidCancelProcessPermission": "Forbid cancelling process", + "RequestApproval": "Demander l'approbation", + "IsApproved": "Approuvé", + "Approve": "Approuver", + "Reject": "Rejeter", + "Reason": "Raison", + "ApproveRequest": "Demander l'approbation", + "OnApproveRequestApproved": "Lors de l'approbation", + "OnApproveRequestRejected": "Lors du rejet", + "ConfirmApproval": "Confirmer l'approbation", + "ConfirmRejection": "Confirmer le rejet", + "RejectionReason": "Raison du rejet", + "ProvideRejectionReason": "Fournir la raison du rejet", + "FieldIsEmpty": "Le champ est vide", + "Reviewers": "Relecteurs", + "LockCard": "Verrouiller la carte", + "LockSection": "Verrouiller la section" }, "error": { "MethodNotFound": "Méthode introuvable : {methodId}", diff --git a/plugins/process-assets/lang/it.json b/plugins/process-assets/lang/it.json index 61902d99275..0d5f353d660 100644 --- a/plugins/process-assets/lang/it.json +++ b/plugins/process-assets/lang/it.json @@ -121,12 +121,28 @@ "ExecutionStarted": "Esecuzione avviata", "Filter": "Filtro", "FirstMatchValue": "Primo valore corrispondente", - "ConfigLabel": "Configurazione del processo", - "ConfigDescription": "Definire i processi per automatizzare i flussi di lavoro e i processi aziendali.", - "RunProcessPermission": "Esegui processo", - "CancelProcessPermission": "Annulla processo", - "ForbidRunProcessPermission": "Vieta l'esecuzione del processo", - "ForbidCancelProcessPermission": "Vieta l'annullamento del processo" + "ConfigLabel": "Configurazione del processo", + "ConfigDescription": "Definire i processi per automatizzare i flussi di lavoro e i processi aziendali.", + "RunProcessPermission": "Esegui processo", + "CancelProcessPermission": "Annulla processo", + "ForbidRunProcessPermission": "Vieta l'esecuzione del processo", + "ForbidCancelProcessPermission": "Vieta l'annullamento del processo", + "RequestApproval": "Richiedi approvazione", + "IsApproved": "Approvato", + "Approve": "Approva", + "Reject": "Rifiuta", + "Reason": "Motivo", + "ApproveRequest": "Richiedi approvazione", + "OnApproveRequestApproved": "Quando approvato", + "OnApproveRequestRejected": "Quando rifiutato", + "ConfirmApproval": "Conferma approvazione", + "ConfirmRejection": "Conferma rifiuto", + "RejectionReason": "Motivo del rifiuto", + "ProvideRejectionReason": "Fornisci motivo del rifiuto", + "FieldIsEmpty": "Campo vuoto", + "Reviewers": "Revisori", + "LockCard": "Blocca scheda", + "LockSection": "Blocca sezione" }, "error": { "MethodNotFound": "Metodo non trovato: {methodId}", diff --git a/plugins/process-assets/lang/ja.json b/plugins/process-assets/lang/ja.json index 30566a8179d..56a26b99e80 100644 --- a/plugins/process-assets/lang/ja.json +++ b/plugins/process-assets/lang/ja.json @@ -125,7 +125,23 @@ "RunProcessPermission": "プロセスを実行", "CancelProcessPermission": "プロセスをキャンセル", "ForbidRunProcessPermission": "プロセスの実行を禁止", - "ForbidCancelProcessPermission": "プロセスのキャンセルを禁止" + "ForbidCancelProcessPermission": "Forbid cancelling process", + "RequestApproval": "承認をリクエスト", + "IsApproved": "承認済み", + "Approve": "承認", + "Reject": "拒否", + "Reason": "理由", + "ApproveRequest": "承認をリクエスト", + "OnApproveRequestApproved": "承認リクエストが承認されたとき", + "OnApproveRequestRejected": "承認リクエストが拒否されたとき", + "ConfirmApproval": "承認を確認", + "ConfirmRejection": "拒否を確認", + "RejectionReason": "拒否理由", + "ProvideRejectionReason": "拒否理由を提供する", + "FieldIsEmpty": "フィールドが空です", + "Reviewers": "レビュー担当者", + "LockCard": "カードをロック", + "LockSection": "セクションをロック" }, "error": { "MethodNotFound": "メソッドが見つかりません: {methodId}", diff --git a/plugins/process-assets/lang/pt.json b/plugins/process-assets/lang/pt.json index deeb5f22375..162e25f9d29 100644 --- a/plugins/process-assets/lang/pt.json +++ b/plugins/process-assets/lang/pt.json @@ -126,7 +126,23 @@ "RunProcessPermission": "Executar processo", "CancelProcessPermission": "Cancelar processo", "ForbidRunProcessPermission": "Proibir execução do processo", - "ForbidCancelProcessPermission": "Proibir cancelamento do processo" + "ForbidCancelProcessPermission": "Proibir cancelamento do processo", + "RequestApproval": "Solicitar aprovação", + "IsApproved": "Está aprovado", + "Approve": "Aprovar", + "Reject": "Rejeitar", + "Reason": "Razão", + "ApproveRequest": "Aprovar solicitação", + "OnApproveRequestApproved": "Ao aprovar solicitação aprovada", + "OnApproveRequestRejected": "Ao aprovar solicitação rejeitada", + "ConfirmApproval": "Confirmar aprovação", + "ConfirmRejection": "Confirmar rejeição", + "RejectionReason": "Razão de rejeição", + "ProvideRejectionReason": "Fornecer razão de rejeição", + "FieldIsEmpty": "Campo está vazio", + "Reviewers": "Revisores", + "LockCard": "Bloquear cartão", + "LockSection": "Bloquear seção" }, "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 e89507ceccc..10bc40202e2 100644 --- a/plugins/process-assets/lang/ru.json +++ b/plugins/process-assets/lang/ru.json @@ -126,7 +126,23 @@ "RunProcessPermission": "Запустить процесс", "CancelProcessPermission": "Отменить процесс", "ForbidRunProcessPermission": "Запретить запуск процесса", - "ForbidCancelProcessPermission": "Запретить отмену процесса" + "ForbidCancelProcessPermission": "Запретить отмену процесса", + "RequestApproval": "Запрос на утверждение", + "IsApproved": "Утверждено", + "Approve": "Утвердить", + "Reject": "Отклонить", + "Reason": "Причина", + "ApproveRequest": "Запрос на утверждение", + "OnApproveRequestApproved": "При утверждении", + "OnApproveRequestRejected": "При отклонении", + "ConfirmApproval": "Подтвердить утверждение", + "ConfirmRejection": "Подтвердить отклонение", + "RejectionReason": "Причина отклонения", + "ProvideRejectionReason": "Укажите причину отклонения", + "FieldIsEmpty": "Поле пустое", + "Reviewers": "Рецензенты", + "LockCard": "Заблокировать карточку", + "LockSection": "Заблокировать секцию" }, "error": { "MethodNotFound": "Метод не найден: {methodId}", diff --git a/plugins/process-assets/lang/tr.json b/plugins/process-assets/lang/tr.json index 85274e6b1ad..ecd0341305a 100644 --- a/plugins/process-assets/lang/tr.json +++ b/plugins/process-assets/lang/tr.json @@ -123,7 +123,23 @@ "RunProcessPermission": "Süreci çalıştır", "CancelProcessPermission": "Süreci iptal et", "ForbidRunProcessPermission": "Süreci çalıştırmayı yasakla", - "ForbidCancelProcessPermission": "Süreci iptal etmeyi yasakla" + "ForbidCancelProcessPermission": "Forbid cancelling process", + "RequestApproval": "Onay iste", + "IsApproved": "Onaylandı", + "Approve": "Onayla", + "Reject": "Reddet", + "Reason": "Sebep", + "ApproveRequest": "Onay iste", + "OnApproveRequestApproved": "Onay isteği onaylandığında", + "OnApproveRequestRejected": "Onay isteği reddedildiğinde", + "ConfirmApproval": "Onayı onayla", + "ConfirmRejection": "Reddi onayla", + "RejectionReason": "Red sebebi", + "ProvideRejectionReason": "Red sebebini sağla", + "FieldIsEmpty": "Alan boş", + "Reviewers": "Gözden geçirenler", + "LockCard": "Kartı kilitle", + "LockSection": "Bölümü kilitle" }, "error": { "MethodNotFound": "Metod bulunamadı: {methodId}", diff --git a/plugins/process-assets/lang/zh.json b/plugins/process-assets/lang/zh.json index 0cb91207354..ff00ed66264 100644 --- a/plugins/process-assets/lang/zh.json +++ b/plugins/process-assets/lang/zh.json @@ -126,7 +126,23 @@ "RunProcessPermission": "运行过程", "CancelProcessPermission": "取消过程", "ForbidRunProcessPermission": "禁止运行过程", - "ForbidCancelProcessPermission": "禁止取消过程" + "ForbidCancelProcessPermission": "禁止取消过程", + "RequestApproval": "请求批准", + "IsApproved": "批准", + "Approve": "批准", + "Reject": "拒绝", + "Reason": "原因", + "ApproveRequest": "批准请求", + "OnApproveRequestApproved": "批准请求批准时", + "OnApproveRequestRejected": "批准请求拒绝时", + "ConfirmApproval": "确认批准", + "ConfirmRejection": "确认拒绝", + "RejectionReason": "拒绝原因", + "ProvideRejectionReason": "提供拒绝原因", + "FieldIsEmpty": "字段为空", + "Reviewers": "审查员", + "LockCard": "锁定卡片", + "LockSection": "锁定部分" }, "error": { "MethodNotFound": "找不到方法:{methodId}", diff --git a/plugins/process-resources/package.json b/plugins/process-resources/package.json index 1e19d19a76d..bd9d2c9d1cb 100644 --- a/plugins/process-resources/package.json +++ b/plugins/process-resources/package.json @@ -58,6 +58,8 @@ "@hcengineering/rank": "workspace:^0.7.17", "@hcengineering/platform": "workspace:^0.7.19", "@hcengineering/process": "workspace:^0.7.0", + "@hcengineering/login": "workspace:^0.7.0", + "@hcengineering/account-client": "workspace:^0.7.21", "svelte": "^4.2.20", "fast-equals": "^5.2.2" } diff --git a/plugins/process-resources/src/components/ApproveRequestButtons.svelte b/plugins/process-resources/src/components/ApproveRequestButtons.svelte new file mode 100644 index 00000000000..c9901c46f71 --- /dev/null +++ b/plugins/process-resources/src/components/ApproveRequestButtons.svelte @@ -0,0 +1,48 @@ + + + +