From d0cccde53ff36e03d584660db7dc6092f3f3a1d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96zt=C3=BCrk?= Date: Sun, 7 Jun 2026 19:26:19 +0300 Subject: [PATCH] =?UTF-8?q?Workflow=20i=C3=A7in=20IsFilterUserName=20?= =?UTF-8?q?=C3=B6zelli=C4=9Fi=20eklendi.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ListForms/GridOptionsDto/WorkflowDto.cs | 1 + .../Seeds/LanguagesData.json | 18 + .../Seeds/SqlData/Sal_T_Approval.sql | 25 ++ .../WizardData/202606071923_Approval.json | 385 ++++++++++++++++++ .../Queries/SelectQueryManager.cs | 14 + .../Queries/Workflow.cs | 23 ++ ui/src/proxy/form/models.ts | 1 + .../admin/listForm/edit/FormTabWorkflow.tsx | 22 +- ui/src/views/admin/listForm/wizard/Wizard.tsx | 4 + .../admin/listForm/wizard/WizardStep6.tsx | 24 +- .../admin/listForm/wizard/WizardStep7.tsx | 1 + ui/src/views/list/useToolbar.tsx | 9 +- 12 files changed, 518 insertions(+), 9 deletions(-) create mode 100644 api/src/Sozsoft.Platform.DbMigrator/Seeds/SqlData/Sal_T_Approval.sql create mode 100644 api/src/Sozsoft.Platform.DbMigrator/Seeds/WizardData/202606071923_Approval.json create mode 100644 api/src/Sozsoft.Platform.Domain/Queries/Workflow.cs diff --git a/api/src/Sozsoft.Platform.Application.Contracts/ListForms/GridOptionsDto/WorkflowDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/ListForms/GridOptionsDto/WorkflowDto.cs index 2db2281..c0942b0 100644 --- a/api/src/Sozsoft.Platform.Application.Contracts/ListForms/GridOptionsDto/WorkflowDto.cs +++ b/api/src/Sozsoft.Platform.Application.Contracts/ListForms/GridOptionsDto/WorkflowDto.cs @@ -5,6 +5,7 @@ namespace Sozsoft.Platform.ListForms; public class WorkflowDto { public string ApprovalUserFieldName { get; set; } + public bool IsFilterUserName { get; set; } public string ApprovalDateFieldName { get; set; } public string ApprovalStatusFieldName { get; set; } public string ApprovalDescriptionFieldName { get; set; } diff --git a/api/src/Sozsoft.Platform.DbMigrator/Seeds/LanguagesData.json b/api/src/Sozsoft.Platform.DbMigrator/Seeds/LanguagesData.json index 996ecd3..1443502 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Seeds/LanguagesData.json +++ b/api/src/Sozsoft.Platform.DbMigrator/Seeds/LanguagesData.json @@ -16772,6 +16772,18 @@ "en": "Rejecter", "tr": "Reddet" }, + { + "resourceName": "Platform", + "key": "App.Listform.ListformField.ApprovalComment", + "en": "Approval or Rejection Comment", + "tr": "Onay veya red açıklaması" + }, + { + "resourceName": "Platform", + "key": "App.Listform.ListformField.WorkflowDecisionMessage", + "en": "Workflow decision will be made for {0} record(s).", + "tr": "{0} kayit icin workflow karari verilecek." + }, { "resourceName": "Platform", "key": "App.Listform.ListformField.NextOnStart", @@ -19058,6 +19070,12 @@ "en": "Approval Status Field Name", "tr": "Onay Durumu Alanı Adı" }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.Workflow.IsFilterUserName", + "en": "Filter User Name?", + "tr": "Kullanıcı Adı Filtresin mi?" + }, { "resourceName": "Platform", "key": "ListForms.ListFormEdit.Workflow.ApprovalDescriptionFieldName", diff --git a/api/src/Sozsoft.Platform.DbMigrator/Seeds/SqlData/Sal_T_Approval.sql b/api/src/Sozsoft.Platform.DbMigrator/Seeds/SqlData/Sal_T_Approval.sql new file mode 100644 index 0000000..eff1953 --- /dev/null +++ b/api/src/Sozsoft.Platform.DbMigrator/Seeds/SqlData/Sal_T_Approval.sql @@ -0,0 +1,25 @@ +IF OBJECT_ID(N'[dbo].[Sal_T_Approval]', 'U') IS NULL +BEGIN + CREATE TABLE [dbo].[Sal_T_Approval] + ( + [Id] uniqueidentifier NOT NULL DEFAULT NEWID(), + [CreationTime] datetime2 NOT NULL DEFAULT GETUTCDATE(), + [CreatorId] uniqueidentifier NULL, + [LastModificationTime] datetime2 NULL, + [LastModifierId] uniqueidentifier NULL, + [IsDeleted] bit NOT NULL DEFAULT 0, + [DeletionTime] datetime2 NULL, + [DeleterId] uniqueidentifier NULL, + [TenantId] uniqueidentifier NULL, + [ApprovalUserName] nvarchar(256) NULL, + [ApprovalStatus] nvarchar(50) NULL, + [ApprovalDate] datetime NULL, + [ApprovalDescription] nvarchar(200) NULL, + [Name] nvarchar(100) NULL, + CONSTRAINT [PK_Sal_T_Approval] PRIMARY KEY NONCLUSTERED + ( + [Id] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] + ) ON [PRIMARY] +END +GO \ No newline at end of file diff --git a/api/src/Sozsoft.Platform.DbMigrator/Seeds/WizardData/202606071923_Approval.json b/api/src/Sozsoft.Platform.DbMigrator/Seeds/WizardData/202606071923_Approval.json new file mode 100644 index 0000000..8284ede --- /dev/null +++ b/api/src/Sozsoft.Platform.DbMigrator/Seeds/WizardData/202606071923_Approval.json @@ -0,0 +1,385 @@ +{ + "Wizard": { + "WizardName": "Approval", + "ListFormCode": "App.Wizard.Approval", + "MenuCode": "App.Wizard.Approval", + "IsTenant": true, + "IsBranch": false, + "IsOrganizationUnit": false, + "AllowAdding": true, + "AllowUpdating": true, + "AllowDeleting": true, + "AllowDetail": false, + "ConfirmDelete": true, + "DefaultLayout": "grid", + "Grid": true, + "Pivot": true, + "Tree": true, + "Chart": true, + "Gantt": true, + "Scheduler": true, + "LanguageTextMenuEn": "Approval", + "LanguageTextMenuTr": "Approval", + "LanguageTextTitleEn": "Approval", + "LanguageTextTitleTr": "Onaylama", + "LanguageTextDescEn": "Approval", + "LanguageTextDescTr": "Onaylama", + "LanguageTextMenuParentEn": "Sales", + "LanguageTextMenuParentTr": "Sat\u0131\u015F", + "PermissionGroupName": "App.Wizard.Sales", + "MenuParentCode": "App.Wizard.Sales", + "MenuParentIcon": "FcAssistant", + "MenuIcon": "FcAndroidOs", + "DataSourceCode": "Default", + "DataSourceConnectionString": "", + "SelectCommandType": 1, + "SelectCommand": "Sal_T_Approval", + "KeyFieldName": "Id", + "KeyFieldDbSourceType": 9, + "TreeKeyExpr": "", + "TreeParentIdExpr": "", + "TreeAutoExpandAll": false, + "GanttKeyExpr": "", + "GanttParentIdExpr": "", + "GanttAutoExpandAll": false, + "GanttTitleExpr": "", + "GanttStartExpr": "", + "GanttEndExpr": "", + "GanttProgressExpr": "", + "SchedulerTextExpr": "", + "SchedulerStartDateExpr": "", + "SchedulerEndDateExpr": "", + "Groups": [ + { + "Caption": "", + "ColCount": 1, + "Items": [ + { + "DataField": "Id", + "CaptionName": "App.Listform.ListformField.Id", + "EditorType": "dxTextBox", + "EditorOptions": "", + "EditorScript": "", + "ColSpan": 1, + "IsRequired": true, + "IncludeInEditingForm": true, + "DbSourceType": 9, + "TurkishCaption": "Id", + "EnglishCaption": "Id", + "LookupDataSourceType": 1, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "LookupQuery": "" + }, + { + "DataField": "Name", + "CaptionName": "App.Listform.ListformField.Name", + "EditorType": "dxTextBox", + "EditorOptions": "", + "EditorScript": "", + "ColSpan": 1, + "IsRequired": false, + "IncludeInEditingForm": true, + "DbSourceType": 16, + "TurkishCaption": "Name", + "EnglishCaption": "Name", + "LookupDataSourceType": 1, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "LookupQuery": "" + }, + { + "DataField": "ApprovalUserName", + "CaptionName": "App.Listform.ListformField.ApprovalUserName", + "EditorType": "dxTextBox", + "EditorOptions": "", + "EditorScript": "", + "ColSpan": 1, + "IsRequired": false, + "IncludeInEditingForm": false, + "DbSourceType": 16, + "TurkishCaption": "Approval User Name", + "EnglishCaption": "Approval User Name", + "LookupDataSourceType": 1, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "LookupQuery": "" + }, + { + "DataField": "ApprovalStatus", + "CaptionName": "App.Listform.ListformField.ApprovalStatus", + "EditorType": "dxTextBox", + "EditorOptions": "", + "EditorScript": "", + "ColSpan": 1, + "IsRequired": false, + "IncludeInEditingForm": false, + "DbSourceType": 16, + "TurkishCaption": "Approval Status", + "EnglishCaption": "Approval Status", + "LookupDataSourceType": 1, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "LookupQuery": "" + }, + { + "DataField": "ApprovalDate", + "CaptionName": "App.Listform.ListformField.ApprovalDate", + "EditorType": "dxDateBox", + "EditorOptions": "", + "EditorScript": "", + "ColSpan": 1, + "IsRequired": false, + "IncludeInEditingForm": false, + "DbSourceType": 6, + "TurkishCaption": "Approval Date", + "EnglishCaption": "Approval Date", + "LookupDataSourceType": 1, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "LookupQuery": "" + }, + { + "DataField": "ApprovalDescription", + "CaptionName": "App.Listform.ListformField.ApprovalDescription", + "EditorType": "dxTextBox", + "EditorOptions": "", + "EditorScript": "", + "ColSpan": 1, + "IsRequired": false, + "IncludeInEditingForm": false, + "DbSourceType": 16, + "TurkishCaption": "Approval Description", + "EnglishCaption": "Approval Description", + "LookupDataSourceType": 1, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "LookupQuery": "" + } + ] + } + ], + "SubForms": [], + "Widgets": [], + "Workflow": { + "ApprovalUserFieldName": "ApprovalUserName", + "IsFilterUserName": true, + "ApprovalDateFieldName": "ApprovalDate", + "ApprovalStatusFieldName": "ApprovalStatus", + "ApprovalDescriptionFieldName": "ApprovalDescription", + "Criteria": [ + { + "ListFormCode": "App.Wizard.Approval", + "Kind": "Start", + "Title": "\u0130\u015F Ak\u0131\u015F\u0131 Ba\u015Flat1", + "CompareColumn": "Price", + "CompareOperator": "\u003E", + "CompareValue": 5000, + "Approver": "", + "NextOnStart": "N002", + "NextOnTrue": "", + "NextOnFalse": "", + "NextOnApprove": "", + "NextOnReject": "", + "PositionX": 34, + "PositionY": 104, + "CompareOutcomes": [], + "Id": "N001" + }, + { + "ListFormCode": "App.Wizard.Approval", + "Kind": "Approval", + "Title": "Onay1", + "CompareColumn": "Price", + "CompareOperator": "\u003E", + "CompareValue": 5000, + "Approver": "admin@sozsoft.com", + "NextOnStart": "", + "NextOnTrue": "", + "NextOnFalse": "", + "NextOnApprove": "N003", + "NextOnReject": "N004", + "PositionX": 323, + "PositionY": 104, + "CompareOutcomes": [], + "Id": "N002" + }, + { + "ListFormCode": "App.Wizard.Approval", + "Kind": "Approval", + "Title": "Onay2", + "CompareColumn": "Price", + "CompareOperator": "\u003E", + "CompareValue": 5000, + "Approver": "demo@sozsoft.com", + "NextOnStart": "", + "NextOnTrue": "", + "NextOnFalse": "", + "NextOnApprove": "N004", + "NextOnReject": "N004", + "PositionX": 586, + "PositionY": 104, + "CompareOutcomes": [], + "Id": "N003" + }, + { + "ListFormCode": "App.Wizard.Approval", + "Kind": "Inform", + "Title": "Bilgilendirme1", + "CompareColumn": "Price", + "CompareOperator": "\u003E", + "CompareValue": 5000, + "Approver": "system@sozsoft.com", + "NextOnStart": "N005", + "NextOnTrue": "", + "NextOnFalse": "", + "NextOnApprove": "", + "NextOnReject": "", + "PositionX": 458, + "PositionY": 411, + "CompareOutcomes": [], + "Id": "N004" + }, + { + "ListFormCode": "App.Wizard.Approval", + "Kind": "End", + "Title": "\u0130\u015F Ak\u0131\u015F\u0131 Bitir1", + "CompareColumn": "Price", + "CompareOperator": "\u003E", + "CompareValue": 5000, + "Approver": "", + "NextOnStart": "", + "NextOnTrue": "", + "NextOnFalse": "", + "NextOnApprove": "", + "NextOnReject": "", + "PositionX": 792, + "PositionY": 412, + "CompareOutcomes": [], + "Id": "N005" + } + ] + }, + "WorkflowCriteria": [ + { + "ListFormCode": "App.Wizard.Approval", + "Kind": "Start", + "Title": "\u0130\u015F Ak\u0131\u015F\u0131 Ba\u015Flat1", + "CompareColumn": "Price", + "CompareOperator": "\u003E", + "CompareValue": 5000, + "Approver": "", + "NextOnStart": "N002", + "NextOnTrue": "", + "NextOnFalse": "", + "NextOnApprove": "", + "NextOnReject": "", + "PositionX": 34, + "PositionY": 104, + "CompareOutcomes": [], + "Id": "N001" + }, + { + "ListFormCode": "App.Wizard.Approval", + "Kind": "Approval", + "Title": "Onay1", + "CompareColumn": "Price", + "CompareOperator": "\u003E", + "CompareValue": 5000, + "Approver": "admin@sozsoft.com", + "NextOnStart": "", + "NextOnTrue": "", + "NextOnFalse": "", + "NextOnApprove": "N003", + "NextOnReject": "N004", + "PositionX": 323, + "PositionY": 104, + "CompareOutcomes": [], + "Id": "N002" + }, + { + "ListFormCode": "App.Wizard.Approval", + "Kind": "Approval", + "Title": "Onay2", + "CompareColumn": "Price", + "CompareOperator": "\u003E", + "CompareValue": 5000, + "Approver": "demo@sozsoft.com", + "NextOnStart": "", + "NextOnTrue": "", + "NextOnFalse": "", + "NextOnApprove": "N004", + "NextOnReject": "N004", + "PositionX": 586, + "PositionY": 104, + "CompareOutcomes": [], + "Id": "N003" + }, + { + "ListFormCode": "App.Wizard.Approval", + "Kind": "Inform", + "Title": "Bilgilendirme1", + "CompareColumn": "Price", + "CompareOperator": "\u003E", + "CompareValue": 5000, + "Approver": "system@sozsoft.com", + "NextOnStart": "N005", + "NextOnTrue": "", + "NextOnFalse": "", + "NextOnApprove": "", + "NextOnReject": "", + "PositionX": 458, + "PositionY": 411, + "CompareOutcomes": [], + "Id": "N004" + }, + { + "ListFormCode": "App.Wizard.Approval", + "Kind": "End", + "Title": "\u0130\u015F Ak\u0131\u015F\u0131 Bitir1", + "CompareColumn": "Price", + "CompareOperator": "\u003E", + "CompareValue": 5000, + "Approver": "", + "NextOnStart": "", + "NextOnTrue": "", + "NextOnFalse": "", + "NextOnApprove": "", + "NextOnReject": "", + "PositionX": 792, + "PositionY": 412, + "CompareOutcomes": [], + "Id": "N005" + } + ] + }, + "IsDeletedField": true, + "IsCreatedField": true, + "InsertedRecords": { + "LanguageKeys": [ + "App.Wizard.Approval", + "App.Wizard.Approval.Title", + "App.Wizard.Approval.Desc", + "App.Listform.ListformField.ApprovalUserName", + "App.Listform.ListformField.ApprovalStatus", + "App.Listform.ListformField.ApprovalDate", + "App.Listform.ListformField.ApprovalDescription" + ], + "PermissionGroupNames": [ + "App.Wizard.Sales" + ], + "PermissionNames": [ + "App.Wizard.Approval", + "App.Wizard.Approval.Create", + "App.Wizard.Approval.Update", + "App.Wizard.Approval.Delete", + "App.Wizard.Approval.Export", + "App.Wizard.Approval.Import", + "App.Wizard.Approval.Note" + ], + "MenuCodes": [ + "App.Wizard.Approval" + ], + "DataSourceCodes": [] + } +} \ No newline at end of file diff --git a/api/src/Sozsoft.Platform.Domain/Queries/SelectQueryManager.cs b/api/src/Sozsoft.Platform.Domain/Queries/SelectQueryManager.cs index 96850b6..c4d1355 100644 --- a/api/src/Sozsoft.Platform.Domain/Queries/SelectQueryManager.cs +++ b/api/src/Sozsoft.Platform.Domain/Queries/SelectQueryManager.cs @@ -465,6 +465,20 @@ public class SelectQueryManager : PlatformDomainService, ISelectQueryManager } } + if (listform.WorkflowJson.IsNullOrWhiteSpace() == false) + { + var workflow = JsonSerializer.Deserialize(listform.WorkflowJson); + if (workflow != null && workflow.IsFilterUserName) + { + if (whereParts.Any()) + { + whereParts.Add("AND"); + } + + whereParts.Add($"\"{workflow.ApprovalUserFieldName}\" = '{CurrentUser.UserName}'"); + } + } + if (!whereParts.Any()) { whereParts.Add("1 = 1"); diff --git a/api/src/Sozsoft.Platform.Domain/Queries/Workflow.cs b/api/src/Sozsoft.Platform.Domain/Queries/Workflow.cs new file mode 100644 index 0000000..355c5b6 --- /dev/null +++ b/api/src/Sozsoft.Platform.Domain/Queries/Workflow.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using Volo.Abp.Domain.Values; + +namespace Sozsoft.Platform.Queries; + +public class Workflow : ValueObject +{ + public string ApprovalUserFieldName { get; set; } + public bool IsFilterUserName { get; set; } + public string ApprovalDateFieldName { get; set; } + public string ApprovalStatusFieldName { get; set; } + public string ApprovalDescriptionFieldName { get; set; } + + protected override IEnumerable GetAtomicValues() + { + yield return ApprovalUserFieldName; + yield return IsFilterUserName; + yield return ApprovalDateFieldName; + yield return ApprovalStatusFieldName; + yield return ApprovalDescriptionFieldName; + } +} + diff --git a/ui/src/proxy/form/models.ts b/ui/src/proxy/form/models.ts index 108cecc..4f0a8fe 100644 --- a/ui/src/proxy/form/models.ts +++ b/ui/src/proxy/form/models.ts @@ -908,6 +908,7 @@ export interface WidgetEditDto { export interface WorkflowDto { approvalUserFieldName: string + isFilterUserName: boolean approvalDateFieldName: string approvalStatusFieldName: string approvalDescriptionFieldName: string diff --git a/ui/src/views/admin/listForm/edit/FormTabWorkflow.tsx b/ui/src/views/admin/listForm/edit/FormTabWorkflow.tsx index 288475f..0fd245a 100644 --- a/ui/src/views/admin/listForm/edit/FormTabWorkflow.tsx +++ b/ui/src/views/admin/listForm/edit/FormTabWorkflow.tsx @@ -12,9 +12,9 @@ import { workflowService, type WorkflowCriteriaDto } from '@/services/workflow.s import { WorkflowDesigner } from '../workflow/WorkflowDesigner' import { SelectBoxOption } from '@/types/shared' import { Field, FieldProps, Form, Formik } from 'formik' -import { Button, Card, FormContainer, FormItem, Input, Select } from '@/components/ui' +import { Button, Card, Checkbox, FormContainer, FormItem, Input, Select } from '@/components/ui' import { ListFormEditTabs } from '@/proxy/admin/list-form/options' -import { object, string } from 'yup' +import { bool, object, string } from 'yup' import { useStoreState } from '@/store/store' import { FormEditProps } from './FormEdit' import { useLocalization } from '@/utils/hooks/useLocalization' @@ -309,6 +309,7 @@ export function FormTabWorkflow( const schema = object().shape({ workflowDto: object().shape({ approvalUserFieldName: string().required(), + isFilterUserName: bool(), approvalStatusFieldName: string().required(), approvalDateFieldName: string(), approvalDescriptionFieldName: string(), @@ -333,7 +334,7 @@ export function FormTabWorkflow(
-
+
- + + + + +