HostData düzenelemsi

This commit is contained in:
Sedat ÖZTÜRK 2026-07-16 08:49:30 +03:00
parent 6174253a40
commit d38e4f851a
7 changed files with 1196 additions and 412 deletions

View file

@ -5550,6 +5550,22 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep
EditorOptions=EditorOptionValues.NumberStandartFormat(),
TotalSummaryJson = DefaultColumnTotalSummaryJson("TotalPrice")
},
new ListFormField
{
ListFormCode = listForm.ListFormCode,
CultureName = LanguageCodes.En,
SourceDbType = DbType.Boolean,
FieldName = "IsActive",
CaptionName = "App.Listform.ListformField.IsActive",
Width = 0,
ListOrderNo = 10,
Visible = true,
IsActive = true,
ValidationRuleJson = DefaultValidationRuleRequiredJson,
ColumnCustomizationJson = DefaultColumnCustomizationJson,
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
PivotSettingsJson = DefaultPivotSettingsJson
},
new()
{
ListFormCode = listForm.ListFormCode,
@ -5558,7 +5574,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep
FieldName = "TenantId",
CaptionName = "App.Listform.ListformField.TenantId",
Width = 0,
ListOrderNo = 10,
ListOrderNo = 11,
Visible = false,
IsActive = true,

View file

@ -0,0 +1,917 @@
CREATE OR REPLACE FUNCTION dbo."Sas_H_ListFormFieldsDictionaryJson"
(
p_definition_culture_name VARCHAR(10) DEFAULT 'en',
p_ui_culture_name VARCHAR(10) DEFAULT 'tr',
p_list_form_code VARCHAR(64) DEFAULT NULL,
p_only_base_definitions BOOLEAN DEFAULT TRUE,
p_resource_name VARCHAR(64) DEFAULT NULL
)
RETURNS JSONB
LANGUAGE plpgsql
AS $$
DECLARE
v_result JSONB;
BEGIN
WITH list_form_source AS
(
SELECT
l."Id",
l."ListFormCode",
l."CultureName",
l."Name",
lt_name."Value" AS name_value,
l."Title",
lt_title."Value" AS title_value,
l."Description",
lt_desc."Value" AS description_value,
l."TableName",
NULLIF(
BTRIM(l."SelectCommand"::TEXT),
''
) AS select_command_text,
l."KeyFieldName",
l."UserId",
l."RoleId"
FROM dbo."Sas_H_ListForm" l
/*
SQL Server OUTER APPLY TOP (1)
PostgreSQL LEFT JOIN LATERAL ... LIMIT 1
*/
LEFT JOIN LATERAL
(
SELECT lt."Value"
FROM dbo."Sas_H_LanguageText" lt
WHERE lt."CultureName" = p_ui_culture_name
AND lt."Key" = l."Name"
AND
(
p_resource_name IS NULL
OR lt."ResourceName" = p_resource_name
)
ORDER BY lt."ResourceName"
LIMIT 1
) lt_name ON TRUE
LEFT JOIN LATERAL
(
SELECT lt."Value"
FROM dbo."Sas_H_LanguageText" lt
WHERE lt."CultureName" = p_ui_culture_name
AND lt."Key" = l."Title"
AND
(
p_resource_name IS NULL
OR lt."ResourceName" = p_resource_name
)
ORDER BY lt."ResourceName"
LIMIT 1
) lt_title ON TRUE
LEFT JOIN LATERAL
(
SELECT lt."Value"
FROM dbo."Sas_H_LanguageText" lt
WHERE lt."CultureName" = p_ui_culture_name
AND lt."Key" = l."Description"
AND
(
p_resource_name IS NULL
OR lt."ResourceName" = p_resource_name
)
ORDER BY lt."ResourceName"
LIMIT 1
) lt_desc ON TRUE
WHERE
(
p_definition_culture_name IS NULL
OR l."CultureName" = p_definition_culture_name
)
AND
(
p_list_form_code IS NULL
OR l."ListFormCode" = p_list_form_code
)
AND
(
p_only_base_definitions = FALSE
OR
(
l."UserId" IS NULL
AND l."RoleId" IS NULL
)
)
),
list_forms_json AS
(
SELECT
jsonb_build_object
(
'listFormCode',
l."ListFormCode",
'displayName',
COALESCE(
l.name_value::TEXT,
l."Name",
''
),
'title',
COALESCE(
l.title_value::TEXT,
l."Title",
''
),
'description',
COALESCE(
l.description_value::TEXT,
l."Description",
''
),
'tableName',
COALESCE(
l."TableName",
''
),
'sqlSourceName',
COALESCE(
NULLIF(
l."TableName",
''
),
l.select_command_text,
''
),
'sourceKind',
CASE
WHEN COALESCE(
NULLIF(
l."TableName",
''
),
l.select_command_text
) IS NULL
THEN 'unknown'
WHEN UPPER(
BTRIM(
COALESCE(
NULLIF(
l."TableName",
''
),
l.select_command_text
)
)
) LIKE 'SELECT%'
THEN 'selectSql'
ELSE 'table'
END,
'keyFieldName',
COALESCE(
l."KeyFieldName",
''
),
'searchText',
CONCAT_WS(
' ',
l."ListFormCode",
l."TableName",
l.select_command_text,
COALESCE(
l.name_value::TEXT,
l."Name"
),
COALESCE(
l.title_value::TEXT,
l."Title"
),
COALESCE(
l.description_value::TEXT,
l."Description"
)
),
'fields',
COALESCE
(
(
SELECT
jsonb_agg
(
jsonb_build_object
(
'field',
f."FieldName",
'displayName',
COALESCE(
lt_cap."Value"::TEXT,
f."CaptionName",
''
),
'sqlDataType',
sc.sql_data_type,
'listOrderNo',
f."ListOrderNo",
'isVisible',
COALESCE(
f."Visible",
TRUE
),
'isBooleanColumn',
CASE
WHEN sc.sql_data_type = 'boolean'
THEN TRUE
WHEN f."FieldName" LIKE 'Is%'
THEN TRUE
WHEN f."FieldName" LIKE 'Has%'
THEN TRUE
WHEN f."FieldName" IN
(
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday'
)
THEN TRUE
WHEN f."FieldName" IN
(
'EmailConfirmed',
'TwoFactorEnabled',
'IsVerified',
'IsDefault',
'IsPublic',
'IsEnabled',
'IsPublished',
'IsPinned',
'IsAnonymous',
'IsFixed',
'IsCustomized',
'IsEncrypted',
'IsInherited',
'ZipRequired',
'StateRequired'
)
THEN TRUE
ELSE FALSE
END,
'lookupJsonText',
lj.lookup_json_text_decoded,
'lookupTableName',
COALESCE
(
CASE
WHEN lj.lookup_json IS NOT NULL
THEN COALESCE
(
lj.lookup_json ->> 'tableName',
lj.lookup_json ->> 'sqlTableName',
lj.lookup_json ->> 'lookupTableName',
lj.lookup_json #>> '{dataSource,tableName}',
lj.lookup_json #>> '{dataSource,sqlTableName}'
)
END,
lkp.parsed_lookup_table_name
),
'lookupValueColumn',
COALESCE
(
CASE
WHEN lj.lookup_json IS NOT NULL
THEN COALESCE
(
lj.lookup_json ->> 'valueExpr',
lj.lookup_json ->> 'valueField',
lj.lookup_json ->> 'valueColumn',
lj.lookup_json ->> 'keyField',
lj.lookup_json ->> 'keyFieldName'
)
END,
lkp.parsed_lookup_value_column
),
'lookupDisplayColumn',
COALESCE
(
CASE
WHEN lj.lookup_json IS NOT NULL
THEN COALESCE
(
lj.lookup_json ->> 'displayExpr',
lj.lookup_json ->> 'displayField',
lj.lookup_json ->> 'displayColumn',
lj.lookup_json ->> 'textField',
lj.lookup_json ->> 'textColumn',
lj.lookup_json ->> 'nameField',
lj.lookup_json ->> 'nameColumn'
)
END,
lkp.parsed_lookup_display_column
),
'lookupJoinMode',
CASE
WHEN lj.lookup_json_text_decoded IS NOT NULL
AND f."FieldName" NOT LIKE '%Id'
AND COALESCE(
lkp.parsed_lookup_value_column,
''
) IN
(
'Name',
'Code',
'Key',
'Value',
'key',
'value'
)
THEN 'direct-string'
WHEN lj.lookup_json_text_decoded IS NOT NULL
AND f."FieldName" NOT LIKE '%Id'
THEN 'direct-string'
WHEN lj.lookup_json_text_decoded IS NOT NULL
OR f."FieldName" LIKE '%Id'
THEN 'convert-nvarchar-safe'
ELSE NULL
END,
'lookupFallbackToSourceColumn',
CASE
WHEN
lj.lookup_json_text_decoded IS NOT NULL
AND f."FieldName" NOT LIKE '%Id'
THEN TRUE
ELSE FALSE
END,
'lookupSearchText',
CASE
WHEN lj.lookup_json_text_decoded IS NOT NULL
THEN CONCAT_WS
(
' ',
f."FieldName",
f."CaptionName",
lt_cap."Value"::TEXT,
lj.lookup_json_text_decoded
)
END,
'isActiveStatusColumn',
f."FieldName" IN
(
'IsActive',
'IsEnabled',
'IsPublished'
),
'isDeletedStatusColumn',
f."FieldName" IN
(
'IsDeleted',
'Deleted',
'IsRemoved'
),
'isSensitive',
CASE
WHEN f."FieldName" LIKE '%Password%'
OR f."FieldName" LIKE '%ConnectionString%'
OR f."FieldName" LIKE '%Token%'
OR f."FieldName" LIKE '%Secret%'
OR f."FieldName" LIKE '%ApiKey%'
OR f."FieldName" LIKE '%PrivateKey%'
THEN TRUE
ELSE FALSE
END,
'isDefaultSelectColumn',
CASE
WHEN
COALESCE(
f."Visible",
TRUE
) = TRUE
AND COALESCE(
f."IsActive",
TRUE
) = TRUE
AND f."FieldName" NOT LIKE '%Password%'
AND f."FieldName" NOT LIKE '%ConnectionString%'
AND f."FieldName" NOT LIKE '%Token%'
AND f."FieldName" NOT LIKE '%Secret%'
AND f."FieldName" NOT LIKE '%ApiKey%'
AND f."FieldName" NOT LIKE '%PrivateKey%'
AND f."FieldName" NOT IN
(
'Avatar',
'ExtraProperties'
)
THEN TRUE
ELSE FALSE
END
)
ORDER BY
COALESCE(
f."ListOrderNo",
999999
),
f."FieldName"
)
FROM dbo."Sas_H_ListFormField" f
/*
SQL Server:
sys.tables
sys.columns
TYPE_NAME()
PostgreSQL:
information_schema.columns
*/
LEFT JOIN LATERAL
(
SELECT
c.data_type AS sql_data_type
FROM information_schema.columns c
WHERE
c.table_schema = 'dbo'
AND c.table_name =
l."TableName"
AND c.column_name =
f."FieldName"
LIMIT 1
) sc ON TRUE
/*
LookupJson decode
*/
LEFT JOIN LATERAL
(
SELECT
NULLIF
(
BTRIM
(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
NULLIF(
BTRIM(
f."LookupJson"::TEXT
),
''
),
'\\u0022',
'"'
),
'\u0022',
'"'
),
'\\u0027',
''''
),
'\u0027',
''''
),
'"',
'"'
)
),
''
) AS lookup_json_text_decoded
) lj_text ON TRUE
/*
PostgreSQL'de ISJSON yerine
güvenli JSON parse işlemi gerekiyor.
LookupJson kolonu zaten JSON/JSONB ise
doğrudan kullanılabilir.
*/
LEFT JOIN LATERAL
(
SELECT
lj_text.lookup_json_text_decoded,
CASE
WHEN
lj_text.lookup_json_text_decoded
~ '^\s*[\{\[]'
THEN
lj_text.lookup_json_text_decoded::JSONB
ELSE NULL
END AS lookup_json
) lj ON TRUE
/*
LookupQuery değerini al
*/
LEFT JOIN LATERAL
(
SELECT
CASE
WHEN lj.lookup_json IS NOT NULL
THEN
lj.lookup_json
->> 'LookupQuery'
END AS lookup_query_text
) lq ON TRUE
/*
LookupQuery temizleme
*/
LEFT JOIN LATERAL
(
SELECT
NULLIF
(
BTRIM
(
REGEXP_REPLACE
(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
COALESCE(
lq.lookup_query_text,
''
),
'"',
''
),
'[',
''
),
']',
''
),
'`',
''
),
'\s+',
' ',
'g'
)
),
''
) AS clean_lookup_query
) lqc ON TRUE
/*
SQL Server prosedürü LookupQuery içerisindeki
SELECT ... FROM ... ifadesini string işlemleri
ile parse ediyor.
PostgreSQL'de regexp_match daha temiz.
*/
LEFT JOIN LATERAL
(
SELECT
(
REGEXP_MATCH
(
lqc.clean_lookup_query,
'(?i)\bFROM\s+([a-zA-Z0-9_\."]+)'
)
)[1] AS parsed_table,
COALESCE
(
NULLIF(
lj.lookup_json
->> 'ValueExpr',
''
),
NULLIF(
lj.lookup_json
->> 'valueExpr',
''
),
NULLIF(
lj.lookup_json
->> 'valueField',
''
),
NULLIF(
lj.lookup_json
->> 'valueColumn',
''
),
NULLIF(
lj.lookup_json
->> 'keyField',
''
),
NULLIF(
lj.lookup_json
->> 'keyFieldName',
''
)
)
AS parsed_lookup_value_column,
COALESCE
(
NULLIF(
lj.lookup_json
->> 'DisplayExpr',
''
),
NULLIF(
lj.lookup_json
->> 'displayExpr',
''
),
NULLIF(
lj.lookup_json
->> 'displayField',
''
),
NULLIF(
lj.lookup_json
->> 'displayColumn',
''
),
NULLIF(
lj.lookup_json
->> 'textField',
''
),
NULLIF(
lj.lookup_json
->> 'textColumn',
''
),
NULLIF(
lj.lookup_json
->> 'nameField',
''
),
NULLIF(
lj.lookup_json
->> 'nameColumn',
''
)
)
AS parsed_lookup_display_column
) parsed ON TRUE
LEFT JOIN LATERAL
(
SELECT
NULLIF
(
REGEXP_REPLACE
(
COALESCE(
parsed.parsed_table,
''
),
'^(?i:dbo\.)',
''
),
''
)
AS parsed_lookup_table_name,
parsed.parsed_lookup_value_column,
parsed.parsed_lookup_display_column
) lkp ON TRUE
/*
Caption translation
*/
LEFT JOIN LATERAL
(
SELECT
lt."Value"
FROM dbo."Sas_H_LanguageText" lt
WHERE
lt."CultureName" =
p_ui_culture_name
AND lt."Key" =
f."CaptionName"
AND
(
p_resource_name IS NULL
OR lt."ResourceName" =
p_resource_name
)
ORDER BY
lt."ResourceName"
LIMIT 1
) lt_cap ON TRUE
WHERE
f."ListFormCode" =
l."ListFormCode"
AND f."CultureName" =
l."CultureName"
AND
(
p_definition_culture_name IS NULL
OR f."CultureName" =
p_definition_culture_name
)
AND
(
p_only_base_definitions = FALSE
OR
(
f."UserId" IS NULL
AND f."RoleId" IS NULL
)
)
),
'[]'::JSONB
)
)
AS form_json,
l."ListFormCode"
FROM list_form_source l
)
SELECT
jsonb_build_object
(
'listForms',
COALESCE
(
jsonb_agg
(
form_json
ORDER BY
"ListFormCode"
),
'[]'::JSONB
)
)
INTO v_result
FROM list_forms_json;
RETURN COALESCE
(
v_result,
jsonb_build_object
(
'listForms',
'[]'::JSONB
)
);
END;
$$;

View file

@ -0,0 +1,239 @@
CREATE OR REPLACE FUNCTION dbo."Sas_H_ListFormFieldsDictionaryJson_SaveDbTableColumns"
(
p_tenant_name VARCHAR(128) DEFAULT 'Sozsoft',
p_definition_culture_name VARCHAR(10) DEFAULT 'en',
p_ui_culture_name VARCHAR(10) DEFAULT 'tr',
p_list_form_code VARCHAR(64) DEFAULT NULL,
p_only_base_definitions BOOLEAN DEFAULT TRUE,
p_resource_name VARCHAR(64) DEFAULT NULL,
p_max_forms INTEGER DEFAULT 500,
p_deactivate_previous BOOLEAN DEFAULT TRUE,
p_note VARCHAR(4000) DEFAULT NULL
)
RETURNS TABLE
(
"TenantName" VARCHAR,
"DictionaryType" VARCHAR,
"DefinitionCultureName" VARCHAR,
"UiCultureName" VARCHAR,
"ListFormCode" VARCHAR,
"OnlyBaseDefinitions" BOOLEAN,
"ResourceName" VARCHAR,
"MaxForms" INTEGER,
"CacheKey" TEXT,
"FormCount" INTEGER,
"FieldCount" INTEGER,
"JsonLength" INTEGER,
"IsActive" BOOLEAN,
"RefreshedAt" TIMESTAMP,
"SourceProcedure" VARCHAR,
"Note" VARCHAR
)
LANGUAGE plpgsql
AS $$
DECLARE
v_json_data JSONB;
v_cache_key TEXT;
v_form_count INTEGER := 0;
v_field_count INTEGER := 0;
v_json_length INTEGER := 0;
BEGIN
/*
SQL Server:
EXEC dbo.Sas_H_ListFormFieldsDictionaryJson
PostgreSQL tarafında bunun JSON / JSONB döndüren bir FUNCTION
olduğu varsayılmıştır.
*/
SELECT dbo."Sas_H_ListFormFieldsDictionaryJson"
(
p_definition_culture_name,
p_ui_culture_name,
p_list_form_code,
p_only_base_definitions,
p_resource_name
)
INTO v_json_data;
/*
JSON boş kontrolü
*/
IF v_json_data IS NULL THEN
RAISE EXCEPTION
'JSON veri sözlüğü boş döndü. dbo.Sas_H_ListFormFieldsDictionaryJson çıktısını kontrol edin.'
USING ERRCODE = 'P0001';
END IF;
/*
CacheKey oluşturulması
*/
v_cache_key :=
'ListFormJson|'
|| COALESCE(p_tenant_name, '')
|| '|'
|| COALESCE(p_definition_culture_name, '')
|| '|'
|| COALESCE(p_ui_culture_name, '')
|| '|'
|| COALESCE(p_list_form_code, '')
|| '|'
|| CASE
WHEN COALESCE(p_only_base_definitions, TRUE)
THEN '1'
ELSE '0'
END
|| '|'
|| COALESCE(p_resource_name, '')
|| '|'
|| COALESCE(p_max_forms, 500)::TEXT;
/*
Form sayısı
JSON:
{
"listForms": [...]
}
*/
IF jsonb_typeof(v_json_data -> 'listForms') = 'array' THEN
v_form_count :=
jsonb_array_length(v_json_data -> 'listForms');
END IF;
/*
Toplam Field sayısı
Her listForms elemanının:
{
"fields": [...]
}
alanındaki kayıtlar sayılır.
*/
SELECT COUNT(*)::INTEGER
INTO v_field_count
FROM jsonb_array_elements(
COALESCE(
v_json_data -> 'listForms',
'[]'::JSONB
)
) AS lf
CROSS JOIN LATERAL jsonb_array_elements(
CASE
WHEN jsonb_typeof(lf -> 'fields') = 'array'
THEN lf -> 'fields'
ELSE '[]'::JSONB
END
) AS ff;
/*
JSON karakter uzunluğu
*/
v_json_length := LENGTH(v_json_data::TEXT);
/*
PostgreSQL function çağrısı kendi transaction'ı içerisinde
çalıştığı için SQL Server'daki BEGIN TRAN / COMMIT burada
ayrıca kullanılmaz.
*/
/*
Önceki aktif kaydı pasif yap
*/
IF p_deactivate_previous THEN
UPDATE dbo."Sas_H_DbTableColumn"
SET "IsActive" = FALSE
WHERE "DictionaryType" = 'ListFormJson'
AND "CacheKey" = v_cache_key
AND COALESCE("IsActive", FALSE) = TRUE;
END IF;
/*
Yeni JSON kaydını ekle
*/
INSERT INTO dbo."Sas_H_DbTableColumn"
(
"TenantName",
"DictionaryType",
"DefinitionCultureName",
"UiCultureName",
"ListFormCode",
"OnlyBaseDefinitions",
"ResourceName",
"MaxForms",
"CacheKey",
"JsonData",
"FormCount",
"FieldCount",
"JsonLength",
"IsActive",
"RefreshedAt",
"SourceProcedure",
"Note"
)
VALUES
(
COALESCE(p_tenant_name, 'Sozsoft'),
'ListFormJson',
COALESCE(p_definition_culture_name, 'en'),
COALESCE(p_ui_culture_name, 'tr'),
p_list_form_code,
COALESCE(p_only_base_definitions, TRUE),
p_resource_name,
COALESCE(p_max_forms, 500),
v_cache_key,
v_json_data,
v_form_count,
v_field_count,
v_json_length,
TRUE,
CURRENT_TIMESTAMP,
'dbo.Sas_H_ListFormFieldsDictionaryJson',
p_note
);
/*
Eklenen aktif kaydı döndür
*/
RETURN QUERY
SELECT
T."TenantName",
T."DictionaryType",
T."DefinitionCultureName",
T."UiCultureName",
T."ListFormCode",
T."OnlyBaseDefinitions",
T."ResourceName",
T."MaxForms",
T."CacheKey",
T."FormCount",
T."FieldCount",
T."JsonLength",
T."IsActive",
T."RefreshedAt",
T."SourceProcedure",
T."Note"
FROM dbo."Sas_H_DbTableColumn" T
WHERE T."DictionaryType" = 'ListFormJson'
AND T."CacheKey" = v_cache_key
AND T."IsActive" = TRUE
ORDER BY T."RefreshedAt" DESC
LIMIT 1;
END;
$$;

View file

@ -0,0 +1,22 @@
CREATE OR REPLACE VIEW dbo."Sas_H_OrderItem_ByTenantId"
AS
SELECT
oi."Id",
o."TenantId",
oi."ProductId",
oi."ProductName",
oi."BillingCycle",
oi."Period",
oi."Quantity",
oi."Price",
oi."VatRate",
oi."VatAmount",
oi."TotalPrice",
oi."OrderId",
o."IsActive"
FROM dbo."Sas_H_Order" o
INNER JOIN dbo."Sas_H_OrderItem" oi
ON o."Id" = oi."OrderId";

View file

@ -3,6 +3,6 @@ CREATE OR ALTER VIEW [dbo].[Sas_H_OrderItem_ByTenantId]
AS
SELECT dbo.Sas_H_OrderItem.Id, dbo.Sas_H_Order.TenantId, dbo.Sas_H_OrderItem.ProductId, dbo.Sas_H_OrderItem.ProductName, dbo.Sas_H_OrderItem.BillingCycle, dbo.Sas_H_OrderItem.Period, dbo.Sas_H_OrderItem.Quantity,
dbo.Sas_H_OrderItem.Price, dbo.Sas_H_OrderItem.VatRate, dbo.Sas_H_OrderItem.VatAmount, dbo.Sas_H_OrderItem.TotalPrice, dbo.Sas_H_OrderItem.OrderId
dbo.Sas_H_OrderItem.Price, dbo.Sas_H_OrderItem.VatRate, dbo.Sas_H_OrderItem.VatAmount, dbo.Sas_H_OrderItem.TotalPrice, dbo.Sas_H_OrderItem.OrderId, dbo.Sas_H_Order.IsActive
FROM dbo.Sas_H_Order INNER JOIN
dbo.Sas_H_OrderItem ON dbo.Sas_H_Order.Id = dbo.Sas_H_OrderItem.OrderId

View file

@ -1,25 +0,0 @@
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

View file

@ -1,385 +0,0 @@
{
"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": true,
"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": []
}
}