From d38e4f851a3620b313e13f9512bdc3b8d7e4d582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96ZT=C3=9CRK?= <76204082+iamsedatozturk@users.noreply.github.com> Date: Thu, 16 Jul 2026 08:49:30 +0300 Subject: [PATCH] =?UTF-8?q?HostData=20d=C3=BCzenelemsi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Seeds/ListFormSeeder_Administration.cs | 18 +- .../Sas_H_ListFormFieldsDictionaryJson.sql | 917 ++++++++++++++++++ ...ieldsDictionaryJson_SaveDbTableColumns.sql | 239 +++++ .../HostData/Sas_H_OrderItem_ByTenantId.sql | 22 + .../HostData/Sas_H_OrderItem_ByTenantId.sql | 2 +- .../Seeds/SqlData/Sal_T_Approval.xsql | 25 - .../WizardData/202606071923_Approval.xjson | 385 -------- 7 files changed, 1196 insertions(+), 412 deletions(-) create mode 100644 api/src/Sozsoft.Platform.DbMigrator/Seeds/PostgresData/HostData/Sas_H_ListFormFieldsDictionaryJson.sql create mode 100644 api/src/Sozsoft.Platform.DbMigrator/Seeds/PostgresData/HostData/Sas_H_ListFormFieldsDictionaryJson_SaveDbTableColumns.sql create mode 100644 api/src/Sozsoft.Platform.DbMigrator/Seeds/PostgresData/HostData/Sas_H_OrderItem_ByTenantId.sql delete mode 100644 api/src/Sozsoft.Platform.DbMigrator/Seeds/SqlData/Sal_T_Approval.xsql delete mode 100644 api/src/Sozsoft.Platform.DbMigrator/Seeds/WizardData/202606071923_Approval.xjson diff --git a/api/src/Sozsoft.Platform.DbMigrator/Seeds/ListFormSeeder_Administration.cs b/api/src/Sozsoft.Platform.DbMigrator/Seeds/ListFormSeeder_Administration.cs index 0a2a54b..0bd822f 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Seeds/ListFormSeeder_Administration.cs +++ b/api/src/Sozsoft.Platform.DbMigrator/Seeds/ListFormSeeder_Administration.cs @@ -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, diff --git a/api/src/Sozsoft.Platform.DbMigrator/Seeds/PostgresData/HostData/Sas_H_ListFormFieldsDictionaryJson.sql b/api/src/Sozsoft.Platform.DbMigrator/Seeds/PostgresData/HostData/Sas_H_ListFormFieldsDictionaryJson.sql new file mode 100644 index 0000000..ec605be --- /dev/null +++ b/api/src/Sozsoft.Platform.DbMigrator/Seeds/PostgresData/HostData/Sas_H_ListFormFieldsDictionaryJson.sql @@ -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; +$$; \ No newline at end of file diff --git a/api/src/Sozsoft.Platform.DbMigrator/Seeds/PostgresData/HostData/Sas_H_ListFormFieldsDictionaryJson_SaveDbTableColumns.sql b/api/src/Sozsoft.Platform.DbMigrator/Seeds/PostgresData/HostData/Sas_H_ListFormFieldsDictionaryJson_SaveDbTableColumns.sql new file mode 100644 index 0000000..6a72d38 --- /dev/null +++ b/api/src/Sozsoft.Platform.DbMigrator/Seeds/PostgresData/HostData/Sas_H_ListFormFieldsDictionaryJson_SaveDbTableColumns.sql @@ -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; +$$; \ No newline at end of file diff --git a/api/src/Sozsoft.Platform.DbMigrator/Seeds/PostgresData/HostData/Sas_H_OrderItem_ByTenantId.sql b/api/src/Sozsoft.Platform.DbMigrator/Seeds/PostgresData/HostData/Sas_H_OrderItem_ByTenantId.sql new file mode 100644 index 0000000..05d2872 --- /dev/null +++ b/api/src/Sozsoft.Platform.DbMigrator/Seeds/PostgresData/HostData/Sas_H_OrderItem_ByTenantId.sql @@ -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"; \ No newline at end of file diff --git a/api/src/Sozsoft.Platform.DbMigrator/Seeds/SqlData/HostData/Sas_H_OrderItem_ByTenantId.sql b/api/src/Sozsoft.Platform.DbMigrator/Seeds/SqlData/HostData/Sas_H_OrderItem_ByTenantId.sql index e909969..cb2f4f9 100644 --- a/api/src/Sozsoft.Platform.DbMigrator/Seeds/SqlData/HostData/Sas_H_OrderItem_ByTenantId.sql +++ b/api/src/Sozsoft.Platform.DbMigrator/Seeds/SqlData/HostData/Sas_H_OrderItem_ByTenantId.sql @@ -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 \ No newline at end of file diff --git a/api/src/Sozsoft.Platform.DbMigrator/Seeds/SqlData/Sal_T_Approval.xsql b/api/src/Sozsoft.Platform.DbMigrator/Seeds/SqlData/Sal_T_Approval.xsql deleted file mode 100644 index eff1953..0000000 --- a/api/src/Sozsoft.Platform.DbMigrator/Seeds/SqlData/Sal_T_Approval.xsql +++ /dev/null @@ -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 \ No newline at end of file diff --git a/api/src/Sozsoft.Platform.DbMigrator/Seeds/WizardData/202606071923_Approval.xjson b/api/src/Sozsoft.Platform.DbMigrator/Seeds/WizardData/202606071923_Approval.xjson deleted file mode 100644 index 621c920..0000000 --- a/api/src/Sozsoft.Platform.DbMigrator/Seeds/WizardData/202606071923_Approval.xjson +++ /dev/null @@ -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": [] - } -} \ No newline at end of file