diff --git a/.github/instructions/lowcode.instructions.md b/.github/instructions/lowcode.instructions.md index d4185859..a42bff65 100644 --- a/.github/instructions/lowcode.instructions.md +++ b/.github/instructions/lowcode.instructions.md @@ -709,6 +709,12 @@ Kısa ve karar odaklı yaz; talebi tekrar anlatma. üç seviyedir; analiz talebin istemediği bir ara seviye eklemez. Talep menü yolunu yazıyorsa (başlıkta ya da açıklamada) o yol girdidir ve seviye seviye aynen alınır. Wizard karşılığı: ekranın bir üstü `MenuParentCode`, daha üstündekiler `MenuParentPath` (iki seviyede boş, §4.4). + Seviyenin kodu menü kaydının `Code`'udur, `DisplayName` dil anahtarı değildir: "Human Resources › + Definitions" `App.Hr.Definitions`'tır, `App.Platform.Definitions` değil. Deploy yine de yanlış + yazılmış yolu var olan dala bağlar: kodu bulunamayan seviye, aynı üstün altında `DisplayName` + anahtarı koda eşit ya da EN/TR adı aynı olan bir dal varsa o dalın koduna çevrilir + (`ListFormWizardAppService.BindExistingMenuParentsAsync`); ikinci bir ara menü ve ara yetki + açılmaz. Eşleşme yoksa seviye yenidir ve kurulur. **Yetki ağacı menü ağacıyla aynıdır**: deploy, izin grubu dışındaki her menü seviyesini aynı kodlu ara yetki yapar ve ekranın okuma yetkisini onun altına yazar. Analiz bunu menü tablosunun altında tek satırda gösterir — `Yetki: {İzin grubu} › {Ara yetki} › {ListFormCode}` — ve her ara @@ -1678,7 +1684,7 @@ ile ekler (§4.0). Sıra değerleri veritabanı ile dosyadaki satırların birle | Dil anahtarları | `{MenuCode}` (menü), `{ListFormCode}.Title`, `{ListFormCode}.Desc`, `{PermissionGroupName}` ve her alan için `CaptionName` | | Yetkiler | `{MenuCode}` kökü + `.Create/.Update/.Delete` (+ List yolunda `.Export/.Import/.Note`) | | Yetkilerin dil anahtarları | Ortak sabitler: `App.Platform.Create/Update/Delete/Export/Import/Note` | -| Üst menü zinciri | `MenuParentPath` + `MenuParentCode` kökten yürünür; eksik seviye bir üstünün altına `Order = max(kardeş Order) + 1` ile yaratılır (kökte kök menülerin sonu) | +| Üst menü zinciri | `MenuParentPath` + `MenuParentCode` kökten yürünür; kodu bulunamayan seviye önce aynı üstün altındaki dallarla adıyla eşleştirilir (dalın `DisplayName` anahtarı = verilen kod, ya da EN/TR adı aynı) ve eşleşen dalın koduna bağlanır; eşleşme yoksa bir üstünün altına `Order = max(kardeş Order) + 1` ile yaratılır (kökte kök menülerin sonu) | | Menü sırası | `MenuOrder` 0/boş ise `max(kardeş Order) + 1` | | `DataSource` | `DataSourceCode` yoksa migrate yaratır; bağlantı metninde `Server` geçiyorsa `Mssql`, aksi hâlde `Postgresql` | | `LayoutJson` | Görünüm bayrakları + `DefaultLayout` | diff --git a/README.md b/README.md index 5da81b25..78243eb6 100644 --- a/README.md +++ b/README.md @@ -951,7 +951,11 @@ zincirinden kurar, böylece çocuk her zaman ebeveyninin altında kalır. Değer yazar: üst menü zincirindeki (`MenuParentPath` + `MenuParentCode`) her seviye, izin grubunun kendisi hariç, aynı kodlu bir ara yetkidir (`İnsan Kaynakları › Tanımlamalar › Ekran` → `App.Hr.Definitions › App.Hr.Doctor`). Var olan ara yetki kullanılır, eksik olan menü seviyesinin -görünen adıyla wizard'a ait üretilir; başka bir gruptaki aynı adlı yetki atlanır. Menüsüz wizard'ın +görünen adıyla wizard'a ait üretilir; başka bir gruptaki aynı adlı yetki atlanır. Kodu bulunamayan +bir seviye önce aynı üstün altındaki dallarla adıyla eşleştirilir (dalın `DisplayName` anahtarı = +verilen kod ya da EN/TR adı aynı) ve eşleşen dalın koduna bağlanır; böylece MCP'nin yalnızca yol +verdiği deploy'da ikinci bir "Tanımlamalar" menüsü ve ara yetkisi oluşmaz +(`ListFormWizardAppService.BindExistingMenuParentsAsync`). Menüsüz wizard'ın (`CreateMenu: false`, alt form) okuma yetkisi onu `SubForms` içinde taşıyan listenin yetkisine bağlanır: `ParentName` = listenin yetki kodu (`App.Hr.HealthCard › App.Hr.HealthCardFile`), sırası listenin alt yetkilerinin (Create/Update/…) ardındandır. Alt form listeden önce deploy edildiği için diff --git a/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.Application/McpQueryAppService.cs b/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.Application/McpQueryAppService.cs index f81bc34a..6b7c7ad2 100644 --- a/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.Application/McpQueryAppService.cs +++ b/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.Application/McpQueryAppService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Data.Common; using System.Linq; using System.Text.Json; using System.Threading.Tasks; @@ -105,7 +106,17 @@ public class McpQueryAppService( var context = await queryExecutor.ResolveDataSourceAsync(); var limitedSql = sqlGuard.ApplyRowLimit(sql, maxRows, context.DataSourceType); - return ToResult(await queryExecutor.ExecuteAsync(context, limitedSql, parameters, maxRows)); + // Sorguyu model yazar ve tablonun kolonlarini tahmin eder (her tabloda IsDeleted yok). + // Saglayici hatasi cevrilmezse istemciye yalnizca genel hata gider ve model sorguyu + // duzeltemez. Arac zaten SQL yetkisi istedigi icin hata metni yeni bilgi sizdirmaz. + try + { + return ToResult(await queryExecutor.ExecuteAsync(context, limitedSql, parameters, maxRows)); + } + catch (DbException ex) + { + throw new UserFriendlyException(L[McpErrorCodes.SelectFailed, ex.Message]); + } } public async Task> GetSavedQueriesAsync(string? search = null) diff --git a/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.Domain.Shared/McpErrorCodes.cs b/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.Domain.Shared/McpErrorCodes.cs index f056b22f..1baaf778 100644 --- a/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.Domain.Shared/McpErrorCodes.cs +++ b/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.Domain.Shared/McpErrorCodes.cs @@ -47,6 +47,7 @@ public static class McpErrorCodes public const string VerifyPermissionMissing = Prefix + "VerifyPermissionMissing"; public const string VerifySelectPassed = Prefix + "VerifySelectPassed"; public const string VerifySelectFailed = Prefix + "VerifySelectFailed"; + public const string SelectFailed = Prefix + "SelectFailed"; public const string VerifyComponentInactive = Prefix + "VerifyComponentInactive"; public const string VerifyComponentRouteMismatch = Prefix + "VerifyComponentRouteMismatch"; public const string VerifySeedClosureIncomplete = Prefix + "VerifySeedClosureIncomplete"; diff --git a/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.HttpApi/Tools/McpQueryTools.cs b/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.HttpApi/Tools/McpQueryTools.cs index ef086da0..8111563e 100644 --- a/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.HttpApi/Tools/McpQueryTools.cs +++ b/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.HttpApi/Tools/McpQueryTools.cs @@ -42,7 +42,7 @@ public sealed class McpQueryTools(IMcpQueryAppService queryAppService) }); [McpServerTool(Name = McpToolNames.RunSelect, ReadOnly = true)] - [Description("Yalnizca uygulamada SQL Query Manager yetkisi olan kullanicilar icin: tek bir parametreli SELECT ifadesi kosturur. Liste verisi icin query_list tercih edilir. Coklu ifade, DDL ve DML reddedilir; satir sayisi sunucu kaydindaki tavana kirpilir. Sorguya deger gomme, @ad parametresi kullan.")] + [Description("Yalnizca uygulamada SQL Query Manager yetkisi olan kullanicilar icin: tek bir parametreli SELECT ifadesi kosturur. Liste verisi icin query_list tercih edilir. Coklu ifade, DDL ve DML reddedilir; satir sayisi sunucu kaydindaki tavana kirpilir. Sorguya deger gomme, @ad parametresi kullan. Kolonun var oldugunu varsayma: IsDeleted, TenantId, IsActive her tabloda yoktur; emin degilsen once INFORMATION_SCHEMA.COLUMNS (PostgreSQL: information_schema.columns) uzerinden tablonun kolonlarini oku, filtreyi yalnizca var olan kolona yaz.")] public async Task RunSelectAsync( [Description("Tek bir SELECT (ya da WITH ... SELECT) ifadesi. Degerler @ad bicimindeki parametrelerle verilir.")] string sql, diff --git a/api/src/Sozsoft.Platform.Application/ListForms/ListFormWizardAppService.cs b/api/src/Sozsoft.Platform.Application/ListForms/ListFormWizardAppService.cs index 9823feb7..eb2ffe89 100644 --- a/api/src/Sozsoft.Platform.Application/ListForms/ListFormWizardAppService.cs +++ b/api/src/Sozsoft.Platform.Application/ListForms/ListFormWizardAppService.cs @@ -121,6 +121,7 @@ public class ListFormWizardAppService( input.SeededAt = previous.Wizard.SeededAt; var rows = await WizardSeedRowStore.LoadAsync(ResolveScopeRoot()); + await BindExistingMenuParentsAsync(input, rows, previous); // Ad ve kod catismalari, dosyalar yazilmaya baslamadan once reddedilir; aksi halde yarim // kalan bir deploy mevcut menu/permission satirlarini bozabilir. @@ -139,6 +140,73 @@ public class ListFormWizardAppService( await DeployWizardAsync(input, previous, editFileName, rows, devRequest); } + /// + /// Ust menu zincirinde var olmayan bir seviye, ayni ustun altinda ayni ada sahip bir dal varsa o + /// dalin koduna baglanir. Model (ya da kullanici) dalin kodu yerine dil anahtarini + /// (App.Platform.Definitions) ya da yeni bir kod verdiginde deploy ikinci bir "Tanimlamalar" + /// menusu ve ara yetkisi acmaz; ekran var olan dalin altina, yetkisi de o dalin yetkisinin altina + /// yazilir. Ad, dalin dil anahtariyla ya da EN/TR metniyle karsilastirilir. Wizard'in onceki + /// surumde kendisinin kurdugu seviye var sayilir ve degistirilmez. + /// + private async Task BindExistingMenuParentsAsync(ListFormWizardDto input, WizardSeedRowStore rows, WizardSeedFileDto? previous) + { + static bool Same(string? a, string? b) => string.Equals(a?.Trim(), b?.Trim(), StringComparison.OrdinalIgnoreCase); + + var chain = input.ResolveMenuParentChain(); + if (chain.Count == 0) + return; + + var ownedCodes = previous?.InsertedRecords?.MenuCodes ?? []; + var menus = (await repoMenu.GetListAsync()) + .Select(m => (Code: (string?)m.Code, ParentCode: (string?)m.ParentCode, DisplayName: (string?)m.DisplayName)) + .Concat(rows.Rows(WizardSeedRowStore.MenuFile).Select(r => ( + Code: WizardSeedRowStore.Text(r, nameof(Menu.Code)), + ParentCode: WizardSeedRowStore.Text(r, nameof(Menu.ParentCode)), + DisplayName: WizardSeedRowStore.Text(r, nameof(Menu.DisplayName))))) + .Where(m => !string.IsNullOrWhiteSpace(m.Code)) + .ToList(); + + var changed = false; + string? parentCode = null; + foreach (var level in chain) + { + var exists = menus.Any(m => Same(m.Code, level.Code)) || + ownedCodes.Contains(level.Code, StringComparer.OrdinalIgnoreCase); + + if (!exists) + { + foreach (var sibling in menus.Where(m => Same(m.ParentCode ?? string.Empty, parentCode ?? string.Empty))) + { + var displayKey = string.IsNullOrWhiteSpace(sibling.DisplayName) ? sibling.Code! : sibling.DisplayName; + var (en, tr) = await GetLangTextsAsync(rows, displayKey); + + if (Same(displayKey, level.Code) || + (!string.IsNullOrWhiteSpace(level.En) && Same(en, level.En)) || + (!string.IsNullOrWhiteSpace(level.Tr) && Same(tr, level.Tr))) + { + level.Code = sibling.Code; + changed = true; + break; + } + } + } + + parentCode = level.Code; + } + + if (!changed) + return; + + if (string.IsNullOrWhiteSpace(input.MenuParentCode)) + { + input.MenuParentPath = chain; + return; + } + + input.MenuParentCode = chain[^1].Code; + input.MenuParentPath = chain[..^1]; + } + /// /// Dosyaya yazilacak talep bagi. MCP etkin talebi verdiyse o talep yazilir; ayni wizard'i /// sonradan baska bir talep degistirirse bag o talebe gecer ve talep export'u degisikligi tasir. diff --git a/configs/seeds/host/data/Abp.Identity.Permissions.json b/configs/seeds/host/data/Abp.Identity.Permissions.json index a0e7a4e7..c95d6254 100644 --- a/configs/seeds/host/data/Abp.Identity.Permissions.json +++ b/configs/seeds/host/data/Abp.Identity.Permissions.json @@ -8183,6 +8183,146 @@ "IsEnabled": true, "MultiTenancySide": 3, "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.Shift", + "ParentName": "App.Hr.Definitions", + "DisplayName": "App.Hr.Shift", + "Order": 11, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.Shift.Create", + "ParentName": "App.Hr.Shift", + "DisplayName": "App.Platform.Create", + "Order": 1, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.Shift.Update", + "ParentName": "App.Hr.Shift", + "DisplayName": "App.Platform.Update", + "Order": 2, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.Shift.Delete", + "ParentName": "App.Hr.Shift", + "DisplayName": "App.Platform.Delete", + "Order": 3, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.Shift.Export", + "ParentName": "App.Hr.Shift", + "DisplayName": "App.Platform.Export", + "Order": 4, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.Shift.Import", + "ParentName": "App.Hr.Shift", + "DisplayName": "App.Platform.Import", + "Order": 5, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.Shift.Note", + "ParentName": "App.Hr.Shift", + "DisplayName": "App.Platform.Note", + "Order": 6, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.EventLog", + "ParentName": null, + "DisplayName": "App.Hr.EventLog", + "Order": 14, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.EventLog.Create", + "ParentName": "App.Hr.EventLog", + "DisplayName": "App.Platform.Create", + "Order": 1, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.EventLog.Update", + "ParentName": "App.Hr.EventLog", + "DisplayName": "App.Platform.Update", + "Order": 2, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.EventLog.Delete", + "ParentName": "App.Hr.EventLog", + "DisplayName": "App.Platform.Delete", + "Order": 3, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.EventLog.Export", + "ParentName": "App.Hr.EventLog", + "DisplayName": "App.Platform.Export", + "Order": 4, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.EventLog.Import", + "ParentName": "App.Hr.EventLog", + "DisplayName": "App.Platform.Import", + "Order": 5, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.EventLog.Note", + "ParentName": "App.Hr.EventLog", + "DisplayName": "App.Platform.Note", + "Order": 6, + "IsEnabled": true, + "MultiTenancySide": 3, + "Modules": "Hr" } ] } diff --git a/configs/seeds/host/data/App.DevRequests/31f9867d-f243-4e29-9819-bcd9dee19d5a.json b/configs/seeds/host/data/App.DevRequests/31f9867d-f243-4e29-9819-bcd9dee19d5a.json index 24cb5224..2e37b061 100644 --- a/configs/seeds/host/data/App.DevRequests/31f9867d-f243-4e29-9819-bcd9dee19d5a.json +++ b/configs/seeds/host/data/App.DevRequests/31f9867d-f243-4e29-9819-bcd9dee19d5a.json @@ -17,7 +17,7 @@ "Assignees": null, "Priority": null, "Completed": true, - "SortOrder": 0, + "SortOrder": 4, "Timesheets": "[{\"id\":\"b0877f68-e287-6a71-ee2e-3a2403820cf5\",\"date\":\"2026-09-30\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_Doctor tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"f2dc9019-5288-2d82-f9f7-3a2403828035\",\"date\":\"2026-09-30\",\"userName\":\"system@sozsoft.com\",\"description\":\"Doctor.json wizard\\u0027\\u0131 deploy edildi (1 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"c554eecc-b9af-3152-70f2-3a240382925d\",\"date\":\"2026-09-30\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_Certificate tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"29a2829f-e1a5-8ca6-5f78-3a240382dd1d\",\"date\":\"2026-09-30\",\"userName\":\"system@sozsoft.com\",\"description\":\"Certificate.json wizard\\u0027\\u0131 deploy edildi (16 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"5bdece23-8a14-d008-4128-3a24038341a7\",\"date\":\"2026-09-30\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_Hospital tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"cf4e73e7-e879-529f-5110-3a240383bec6\",\"date\":\"2026-09-30\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hospital.json wizard\\u0027\\u0131 deploy edildi (45 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"ee05f153-cea5-71f7-1f9a-3a240383cdc4\",\"date\":\"2026-09-30\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_HospitalDepartment tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"520a8e77-e28f-71e9-7bf3-3a2403842ca9\",\"date\":\"2026-09-30\",\"userName\":\"system@sozsoft.com\",\"description\":\"HospitalDepartment.json wizard\\u0027\\u0131 deploy edildi (31 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"b24ad81f-1406-6b3f-6abd-3a2403843c21\",\"date\":\"2026-09-30\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_DocumentType tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"24faa132-3d57-03ab-6397-3a240384d3a2\",\"date\":\"2026-09-30\",\"userName\":\"system@sozsoft.com\",\"description\":\"DocumentType.json wizard\\u0027\\u0131 deploy edildi (48 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"3d4f555a-a723-418a-d3d0-3a240384e6f8\",\"date\":\"2026-09-30\",\"userName\":\"system@sozsoft.com\",\"description\":\"10 tamamlanm\\u0131\\u015F alt g\\u00F6rev eklendi\",\"duration\":0.0167},{\"id\":\"c461de20-dc4b-72c4-c29c-3a2403852945\",\"date\":\"2026-09-30\",\"userName\":\"system@sozsoft.com\",\"description\":\"Analize \\u00FCretim notu eklendi\",\"duration\":0.0167},{\"id\":\"17a0bb99-9fc2-e1ef-f94e-3a2403854b2e\",\"date\":\"2026-09-30\",\"userName\":\"system@sozsoft.com\",\"description\":\"App.DevRequests ekran\\u0131nda sat\\u0131r g\\u00FCncellendi (Status)\",\"duration\":0.0167},{\"id\":\"a1defc25-7594-3a9a-cb07-3a2406a03b80\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Talep analiz edildi\",\"duration\":0.0333}]", "SubTasks": "[{\"id\":\"8ec8d59b-2dee-b142-e656-3a240384e6e3\",\"title\":\"create_table: Hr_T_Doctor\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-09-30\",\"completed\":true},{\"id\":\"1a95dfc3-0b5c-5e04-53c4-3a240384e6e3\",\"title\":\"deploy_wizard: Doctor.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-09-30\",\"completed\":true},{\"id\":\"adb1a974-5df2-87e3-d144-3a240384e6e3\",\"title\":\"create_table: Hr_T_Certificate\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-09-30\",\"completed\":true},{\"id\":\"a0bcc99d-766d-ea7a-df0d-3a240384e6e3\",\"title\":\"deploy_wizard: Certificate.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-09-30\",\"completed\":true},{\"id\":\"479cc491-407a-d6ea-7b5c-3a240384e6e3\",\"title\":\"create_table: Hr_T_Hospital\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-09-30\",\"completed\":true},{\"id\":\"44c91f37-c4f0-9d8a-5bed-3a240384e6e3\",\"title\":\"deploy_wizard: Hospital.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-09-30\",\"completed\":true},{\"id\":\"a4bc6a6d-1fc6-1e1c-af69-3a240384e6e3\",\"title\":\"create_table: Hr_T_HospitalDepartment\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-09-30\",\"completed\":true},{\"id\":\"db359bee-ce61-9cd0-f1e8-3a240384e6e3\",\"title\":\"deploy_wizard: HospitalDepartment.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-09-30\",\"completed\":true},{\"id\":\"36ece9eb-28d9-8614-d8e3-3a240384e6e3\",\"title\":\"create_table: Hr_T_DocumentType\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-09-30\",\"completed\":true},{\"id\":\"c3337738-46c6-951f-5343-3a240384e6e3\",\"title\":\"deploy_wizard: DocumentType.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-09-30\",\"completed\":true}]", "Analysis": "

Amaç

İK modülünün Tanımlamalar menüsüne, personel sağlık ve özlük süreçlerinde seçim kaynağı olarak kullanılacak beş tanım listesi eklenir: Kurum Doktorları, Yeterlilik Belgeleri, Hastaneler, Hastane Bölümleri ve Evrak Türleri. Kullanıcı İK ekibidir.

Görsel analizi

  • [image-1] Kurum Doktorları: grid ve filtre satırı. Alanlar: Doktor Adı Soyadı (metin), Diploma No (metin), Diploma Tarihi (tarih), İşyeri Hekimi Belge No (metin), İşyeri Hekimi Belge Tarihi (tarih), T.C. Kimlik No (metin). Demo satır: Rıza YILMAZ · 6522 · 01.01.1991 · 1700 · 20.02.2014 · 5213546542.
  • [image-2] Yeterlilik Belgeleri: tek kolonlu grid (Belge Adı) ve filtre satırı. 16 satır var: Bitim İşlemleri Operatörü, Boyama Operatörü, İplik Bitim İşlemleri Operatörü, Ön İplik Operatörü, İplik Eğirme Operatörü, Ön Terbiye Operatörü, Makine Bakımcı, Çelik Kaynakçısı, SRC 4, Forklift Operatörü, Asansör Bakım ve Onarımcısı, Mezuniyet Belgesi (Lise), Mezuniyet Belgesi (Ön Lisans), Mezuniyet Belgesi (Lisans), Çıraklık-Ustalık Belgesi, Kaynak Operatörü.
  • [image-3] Hastaneler: tek kolonlu grid (Kurum Adı) ve filtre satırı. Kurum türleri (İşyeri Hekimliği, Sağlık Ocağı, Devlet Hastanesi, Özel Hastane, Özel Poliklinik, Özel Tıp Merkezi, Ağız ve Diş Sağlığı Merkezi) ile İstanbul'daki kurum adları aynı listede duruyor. 47 satır okunuyor; görselde son satır kesik.
  • [image-4] Hastane Bölümleri: tek kolonlu grid (Bölüm Adı) ve filtre satırı. 31 satır var: Acil Servis, Aile Hekimliği, Beyin ve Sinir Cerrahisi, Çocuk Polikliniği, İç Hastalıkları (Dahiliye), Diş Hastalıkları ve Tedavisi, Fiziksel Tıp ve Rehabilitasyon, Gastroenteroloji, Genel Cerrahi, Göğüs Hastalıkları, Göz Hastalıkları, Kadın Hastalıkları ve Doğum, Kalp ve Damar Cerrahisi, Kardiyoloji, Kulak Burun Boğaz Hastalıkları, Nöroloji, Ortopedi ve Travmatoloji, Psikiyatri, Üroloji, İşyeri Hekimliği, Plastik Rekonstrüktif ve Estetik Cerrahi, Pratisyen Hekim, Tıbbi Onkoloji, Enfeksiyon Hastalıkları, Dermatoloji, El Cerrahisi ve Mikrocerrahi, Deri ve Zührevi Hastalıkları, Endokrinoloji ve Metabolizma Hastalıkları, Ortodonti, Göğüs Cerrahisi, Radyasyon Onkolojisi.
  • [image-5] Evrak Türleri: Excel görüntüsü, gruplu liste. Kolonlar: Dosya Grubu (seçim), Dosya Türü (metin), Zorunlu (Evet/Hayır). Üç grup görünüyor: Genel, Özlük Evrakları, Sağlık. Görsel düşük çözünürlüklü; satırların bir kısmı ve Zorunlu değerleri net okunmuyor.

Çözüm yolu

Her ekran Wizard List (ComponentKind 0) ile üretilir: kayıt listesi, ekle/düzenle/sil, filtre ve arama. Her ekranın arkasında yeni bir tablo durur. Serbest yerleşim ihtiyacı yok.

Menü yeri

İnsan Kaynakları › Tanımlamalar › {Ekran}

Seviye

Kod

Ad (TR / EN)

İkon

Durum

Kök

App.Hr

İnsan Kaynakları / Human Resources

FcConferenceCall

Var

Ara

App.Hr.Definitions

Tanımlamalar / Definitions

FcFilingCabinet

Var

Ekran

App.Hr.Doctor

Kurum Doktorları / Company Doctors

FcPortraitMode

Yeni

Ekran

App.Hr.Certificate

Yeterlilik Belgeleri / Qualification Certificates

FcDiploma2

Yeni

Ekran

App.Hr.Hospital

Hastaneler / Hospitals

FcOrganization

Yeni

Ekran

App.Hr.HospitalDepartment

Hastane Bölümleri / Hospital Departments

FcList

Yeni

Ekran

App.Hr.DocumentType

Evrak Türleri / Document Types

FcDocument

Yeni

ModuleId: Hr · İzin grubu: App.Hr (var) · MenuParentCode: App.Hr.Definitions, MenuParentPath: App.Hr · Route: /admin/list/{ListFormCode}. Ekranlar arasında lookup bağımlılığı yok; menüde talepteki sırayla, var olan Yetenek Tipleri, Departmanlar ve Pozisyonlar ekranlarının ardından yer alırlar.

Veri modeli

Beş tablo da yenidir. Her birinde Multi-Tenant ve Full Audited kolon setleri bulunur (Id uniqueidentifier PK, TenantId, audit kolonları). Kapsam IsTenant = true, IsBranch = false.

Hr_T_Doctor — Tanım tablosu: Evet. Tanımlamalar menüsünde duruyor ve sağlık kayıtlarına doktor seçim kaynağı olacak.

Kolon

Tip

Zorunlu

Başlık

FullName

nvarchar(200)

Evet

Doktor Adı Soyadı

DiplomaNo

nvarchar(50)

Hayır

Diploma No

DiplomaDate

date

Hayır

Diploma Tarihi

OhsCertificateNo

nvarchar(50)

Hayır

İşyeri Hekimi Belge No

OhsCertificateDate

date

Hayır

İşyeri Hekimi Belge Tarihi

IdentityNo

nvarchar(11)

Hayır

T.C. Kimlik No

IsActive

bit, varsayılan 1

Evet

Aktif

Hr_T_Certificate — Tanım tablosu: Evet. Belge listesi personel yeterlilik kayıtlarının seçim kaynağıdır.

Kolon

Tip

Zorunlu

Başlık

Name

nvarchar(200)

Evet

Belge Adı

IsActive

bit, varsayılan 1

Evet

Aktif

Hr_T_Hospital — Tanım tablosu: Evet. Sağlık raporu ve muayene kayıtlarında kurum seçim kaynağıdır.

Kolon

Tip

Zorunlu

Başlık

Name

nvarchar(250)

Evet

Kurum Adı

IsActive

bit, varsayılan 1

Evet

Aktif

Hr_T_HospitalDepartment — Tanım tablosu: Evet. Muayene kayıtlarında bölüm seçim kaynağıdır.

Kolon

Tip

Zorunlu

Başlık

Name

nvarchar(200)

Evet

Bölüm Adı

IsActive

bit, varsayılan 1

Evet

Aktif

Hr_T_DocumentType — Tanım tablosu: Evet. Personel özlük dosyasına yüklenecek evrakların tür listesidir.

Kolon

Tip

Zorunlu

Başlık

GroupName

nvarchar(50)

Evet

Dosya Grubu — sabit liste: Genel · Özlük Evrakları · Sağlık

Name

nvarchar(200)

Evet

Dosya Türü

IsRequired

bit, varsayılan 0

Evet

Zorunlu

IsActive

bit, varsayılan 1

Evet

Aktif

Etkilenen kısımlar

  • Beş yeni liste ekranı ve bunların menü kayıtları (App.Hr.Definitions altında).
  • Her ekran için yetkiler: {ListFormCode} ile .Create, .Update, .Delete, .Export, .Import ve .Note, App.Hr grubunda.
  • Dil anahtarları (EN + TR): beş ekran başlığı; alanlar için App.Listform.ListformField. + FullName, DiplomaNo, DiplomaDate, OhsCertificateNo, OhsCertificateDate, IdentityNo, GroupName, IsRequired (Name ve IsActive anahtarları zaten var); Dosya Grubu sabit listesinin üç değeri.
  • Var olan ekranlara etki yok.

Görünümler ve davranış

  • Görünümler Grid, Card, Pivot ve Chart; açılış görünümü Grid. Filtre satırı ve arama açık. Form popup, tek grup, 2 kolon.
  • Kurum Doktorları: tarih alanları dxDateBox (gg.aa.yyyy). T.C. Kimlik No için 11 haneli sayı kuralı (^[0-9]{11}$) uygulanır; alan boş bırakılabilir.
  • Evrak Türleri: Dosya Grubu dxSelectBox, Zorunlu dxCheckBox. Grid, Dosya Grubu'na göre gruplu açılır.
  • Widget kartları: Kurum Doktorları, Yeterlilik Belgeleri, Hastaneler ve Hastane Bölümleri için Toplam · Aktif · Pasif (3 kart, ColSpan 4). Evrak Türleri için Toplam · Aktif · Pasif · Zorunlu (4 kart, ColSpan 3). Her kartta "TenantId" = '@TENANTID' koşulu bulunur.

Kararlar

  • Beş ekran için beş ayrı tablo kurulur. Yeterlilik Belgeleri var olan Yetenek (Hr_T_Skill) tablosuyla birleştirilmez, çünkü belge resmi bir evraktır, yetenek ise seviyeli bir yetkinliktir.
  • Hastane Bölümleri hastanelerden bağımsız düz bir listedir; talepte hastane–bölüm ilişkisi yok.
  • Hastaneler listesindeki kurum türü satırları (İşyeri Hekimliği, Sağlık Ocağı vb.) görseldeki gibi aynı listede kalır; ayrı bir kurum türü kolonu açılmaz.
  • T.C. Kimlik No zorunlu tutulmaz ve tekil indeks konmaz. Görseldeki demo değer (5213546542) 10 hanelidir ve kuralı geçmez; demo satır bu alan boş bırakılarak yazılır.
  • (onay) Evrak Türleri'nin ikinci grubunun adı görselde net okunmuyor; "Özlük Evrakları" olarak alınır.
  • (onay) Evrak Türleri görselindeki Zorunlu değerleri okunmadığı için demo satırlar Zorunlu = Hayır ile yazılır. Demo veri aşağıdaki net okunan satırlarla sınırlıdır; tam liste Import yetkisiyle Excel'den yüklenir.
  • Genel: CV (Öz Geçmiş), Çocuk Durumu Formu, Değerlendirme Formu, Diğer, Dilekçe, Ehliyet, Evlilik Belgesi, Fesih, Fotoğraf, Gizlilik Taahhütnamesi, Görev Tanımı, İbraname, İhtarname, Makine Kullanım Talimatı, Sertifika, Taahhütname, Zimmet Formu.
  • Özlük Evrakları: Askerlik Belgesi, Çalışma Belgesi, Devamsızlık Tutanağı, İkametgah, İstifa Dilekçesi, Kimlik Fotokopisi, Mesleki Yeterlilik Belgesi, Nüfus Kayıt Örneği, Öğrenim Belgesi, Referans, Sabıka Kaydı, Savunma, SGK İşe Giriş Bildirgesi, SGK İşten Çıkış Bildirgesi, Sözleşme, Vukuatlı Nüfus Kayıt Örneği.
  • Sağlık: Akciğer Grafisi, Biyokimya, Engelli Raporu, Göz Muayenesi, Hemogram (Tam Kan) Testi, Heyet Raporu, Hijyen Belgesi, İdrar Testi, Kan Grubu Kartı, Odyometri (İşitme) Testi, Periyodik Muayene, Portör Muayenesi, Renk Körlüğü Testi, Sağlık Raporu (Genel), Solunum Fonksiyon Testi.
  • Hastaneler demo verisi görselde okunan 47 satırdır; kesik son satır alınmaz. Diğer ekranların demo verisi görseldeki satırların tamamıdır. Tüm demo satırlar IsActive = true ile yazılır.

Üretim planı

  1. create_table: Hr_T_Doctor
  2. deploy_wizard: Doctor.json
  3. create_table: Hr_T_Certificate
  4. deploy_wizard: Certificate.json
  5. create_table: Hr_T_Hospital
  6. deploy_wizard: Hospital.json
  7. create_table: Hr_T_HospitalDepartment
  8. deploy_wizard: HospitalDepartment.json
  9. create_table: Hr_T_DocumentType
  10. deploy_wizard: DocumentType.json

Üretime hazır

Evet


MCP

\n

Üretilenler (menü: İnsan Kaynakları › Tanımlamalar, izin grubu App.Hr, IsTenant = true, IsBranch = false; görünümler Grid/Card/Pivot/Chart, açılış Grid; form tek grup 2 kolon):

\n
    \n
  • Hr_T_Doctor → App.Hr.Doctor (Doctor.json): FullName, DiplomaNo, DiplomaDate, OhsCertificateNo, OhsCertificateDate, IdentityNo, IsActive. Demo: 1 satır (Rıza YILMAZ, T.C. Kimlik No boş). Widget: Toplam · Aktif · Pasif.
  • \n
  • Hr_T_Certificate → App.Hr.Certificate (Certificate.json): Name, IsActive. Demo: 16 satır. Widget: Toplam · Aktif · Pasif.
  • \n
  • Hr_T_Hospital → App.Hr.Hospital (Hospital.json): Name (250), IsActive. Demo: 45 satır. Widget: Toplam · Aktif · Pasif.
  • \n
  • Hr_T_HospitalDepartment → App.Hr.HospitalDepartment (HospitalDepartment.json): Name, IsActive. Demo: 31 satır. Widget: Toplam · Aktif · Pasif.
  • \n
  • Hr_T_DocumentType → App.Hr.DocumentType (DocumentType.json): GroupName (dxSelectBox, sabit liste Genel · Özlük Evrakları · Sağlık), Name, IsRequired (dxCheckBox), IsActive. Demo: 48 satır (17 + 16 + 15), hepsi Zorunlu = Hayır. Widget: Toplam · Aktif · Pasif · Zorunlu (ColSpan 3).
  • \n
\n

Yetkiler her ekranda {ListFormCode} + .Create/.Update/.Delete/.Export/.Import/.Note; hiçbir role atanmadı. Yeni dil anahtarları: beş ekran başlığı/menüsü, alan başlıkları (FullName, DiplomaNo, DiplomaDate, OhsCertificateNo, OhsCertificateDate, IdentityNo, GroupName, IsRequired) ve Dosya Grubu değerleri App.Hr.DocumentType.Group.General/Personnel/Health. Tüm demo satırlar IsActive = true.

\n

Varsayılanlar ve sapmalar

\n
    \n
  • T.C. Kimlik No: wizard alanı ValidationRule (pattern) taşımadığı için 11 haneli sayı kuralı editör maskesiyle (mask: 00000000000, maxLength 11) uygulandı; alan boş bırakılabilir.
  • \n
  • Evrak Türleri gridinin Dosya Grubu'na göre gruplu açılması wizard cevabında karşılığı olmadığından üretilmedi; ListForm editöründe GroupName alanına grup indeksi verilerek ya da kullanıcı gruplama paneliyle tamamlanabilir.
  • \n
  • Hastaneler: analizde 47 satır öngörülmüştü; görselin düşük çözünürlüğü nedeniyle güvenle okunan 45 satır yazıldı (Filyasyon Merkezi'nden sonraki satırlar alınmadı). Eksik kurumlar Import yetkisiyle Excel'den yüklenebilir.
  • \n
  • Menü sırası sunucu tarafından verildi (yeni ekranlar mevcut Tanımlamalar kardeşlerinin sonunda, deploy sırasıyla).
  • \n
\n

DB Migrate bekleyen wizard'lar: Doctor.json, Certificate.json, Hospital.json, HospitalDepartment.json, DocumentType.json.

" diff --git a/configs/seeds/host/data/App.DevRequests/5853d035-ecd7-41a3-878d-e3756b3110ee.json b/configs/seeds/host/data/App.DevRequests/5853d035-ecd7-41a3-878d-e3756b3110ee.json new file mode 100644 index 00000000..e8854eb3 --- /dev/null +++ b/configs/seeds/host/data/App.DevRequests/5853d035-ecd7-41a3-878d-e3756b3110ee.json @@ -0,0 +1,26 @@ +{ + "ListFormCode": "App.DevRequests", + "KeyFieldName": "Id", + "GeneratedAt": "2026-10-02T11:02:13.2182593Z", + "Order": 0, + "Rows": [ + { + "Id": "5853d035-ecd7-41a3-878d-e3756b3110ee", + "TenantId": null, + "UserName": "system@sozsoft.com", + "RequestDate": null, + "Status": "Testing", + "Title": "Human Resources -> Olay Günlüğü", + "Description": "

Olay Günlüğü : Vardiya Amiri, Güvenlik Odası, Gözlem Odası gibi kısımların gün içerisinde önemli buldukları olayları kaydettiği listedir. Burada Vardiya Amiri denilen kişi yerine Kullanıcı listesinde olayı yaşayan kişi seçilebilir. Önem Durumu 5 seçenekli yıldızlı olabilir ve Vardiya seçilebilmeli. Ancak sistemde Vardiya tanımlama listesi yok. Ayrıca Vardiya tanımlama listesi eklenmesi gerekiyor.


Vardiya listesi Human Resources menüsündeki Definitions altına eklenmelidir. Yani şu anda Human Resources -> Definitions alt menüsü zaten var. Onun altına eklenecek. Aynı şekilde Role -> Permission kısımlarıda bu şekilde yönetilmeli.


Olay Günlüğü listesi Human Resources en altına eklenecektir.


", + "DueDate": "2026-10-02T11:06:00", + "Tags": "HR", + "Assignees": "system@sozsoft.com", + "Priority": "5", + "Completed": false, + "SortOrder": 0, + "Timesheets": "[{\"id\":\"3bae274a-3436-f9bc-830a-3a240ead359b\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Talep analiz edildi\",\"duration\":0.0167},{\"id\":\"ebf2867f-f582-b7ae-3d47-3a240eadda23\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_Shift tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"e6022fc8-351b-fc03-900f-3a240eadece6\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_EventLog tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"5eb27418-4a1b-4f2f-8ad3-3a240eae2c7c\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Shift.json wizard\\u0027\\u0131 deploy edildi (3 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"69d6ba44-63ea-e8a8-0063-3a240eaea22d\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"EventLog.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"93bb0982-d82a-186d-9bd5-3a240eaec698\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"4 tamamlanm\\u0131\\u015F alt g\\u00F6rev eklendi\",\"duration\":0.0167},{\"id\":\"8b8d12de-3242-4e40-b129-3a240eaeef11\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Analize \\u00FCretim notu eklendi\",\"duration\":0.0167}]", + "SubTasks": "[{\"id\":\"ffd91461-edf6-bbaf-bee9-3a240eaec685\",\"title\":\"create_table: Hr_T_Shift\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"c039e7d5-b13a-2b8b-b78c-3a240eaec685\",\"title\":\"create_table: Hr_T_EventLog\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"349095f7-bed6-e5c3-1cf0-3a240eaec685\",\"title\":\"deploy_wizard: Shift.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"d9cfdc40-d467-856e-1d8b-3a240eaec685\",\"title\":\"deploy_wizard: EventLog.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true}]", + "Analysis": "

Amaç

\n

Vardiya Amiri, Güvenlik Odası, Gözlem Odası gibi birimlerin gün içinde önemli buldukları olayları; olayı yaşayan kişi, tarih-saat, vardiya ve önem derecesiyle tek bir günlükte kaydetmesi. Bunun için gereken Vardiya tanım listesinin de eklenmesi.

\n\n

Görsel analizi

\n
    \n
  • [image-1] Vardiya Amiri Olay Günlüğü — liste + popup form. Üstte üç sekme var: Vardiya Amiri / Güvenlik / Gözlem Odası Olay Günlüğü (aynı yapıda üç günlük).
  • \n
  • Liste kolonları: KayıtID, Şube Adı, Kayıt Tarihi, Tarih, Saat, Vardiya, Vardiya Ustası, Önem Durumu, Açıklama, Kullanıcı Adı.
  • \n
  • Form alanları: Vardiya Amiri (kişi lookup), Olay Tarihi (bugün), Olay Saati (şimdi), Önem Durumu (görselde Rutin/Önemli/Çok Önemli), Vardiya, Açıklama (çok satırlı).
  • \n
  • Salt okunur alanlar: Kayıt Tarihi, Şube Adı, Kayıt (kaydı giren kullanıcı).
  • \n
  • Görselde satır yok, demo veri yok.
  • \n
\n\n

Çözüm yolu

\n

İki Wizard List ekranı: Vardiyalar (tanım) ve Olay Günlüğü. Görseldeki üç günlük tek tabloda tutulur, ayrımı LogSource alanı yapar. Önem Durumu 1–5 yıldızlı statik lookup'tır; platformda yıldız editörü yok. Custom component gerekmez.

\n\n

Ortamın durumu (keşif)

\n
    \n
  • Hr_T_Shift ve Hr_T_EventLog tabloları ile Shift.json ve EventLog.json wizard'ları yok. Üretim sıfırdan yapılır.
  • \n
  • Menü tablosunda App.Hr.Shift, App.Hr.EventLog ve App.Platform.Definitions kayıtları yok; kalıntı yok.
  • \n
  • Yetki tablosunda da bu üç kayıt yok; kalıntı yok.
  • \n
  • Hedef menü App.Hr.Definitions var (App.Hr altında).
  • \n
  • Hedef yetki App.Hr.Definitions var. App.Hr grubunda kök seviyede; Department, JobPosition, SkillType, Skill, SkillLevel, Doctor, Certificate, Hospital, HospitalDepartment ve DocumentType yetkileri bunun altında.
  • \n
\n\n

Menü yeri

\n\n\n\n\n\n\n
SeviyeKodAd (TR / EN)İkonDurum
KökApp.Hrİnsan Kaynakları / Human Resources—Var
AraApp.Hr.DefinitionsTanımlamalar / DefinitionsFcFilingCabinetVar
EkranApp.Hr.ShiftVardiyalar / ShiftsFcClockYeni — App.Hr.Definitions altında, kardeşlerin sonunda
EkranApp.Hr.EventLogOlay Günlüğü / Event LogFcViewDetailsYeni — App.Hr'nin doğrudan altında, en sonda
\n

ModuleId: Hr · İzin grubu: App.Hr · Route: /admin/list/{ListFormCode}.

\n
    \n
  • Vardiyalar: MenuParentCode App.Hr.Definitions, MenuParentPath [App.Hr].
  • \n
  • Olay Günlüğü: MenuParentCode App.Hr.
  • \n
\n\n

Yetki yeri (Rol › Yetkiler)

\n

Talebe göre yetki ağacı menüyle aynı yapıda olur.

\n
    \n
  • App.Hr (grup) › App.Hr.Definitions (var) › App.Hr.Shift › .Create .Update .Delete .Export .Import .Note
  • \n
  • App.Hr (grup) › App.Hr.EventLog (kök) › .Create .Update .Delete .Export .Import .Note
  • \n
\n

Yeni ara yetki açılmaz. Rol yetki penceresinde Human Resources altında tek bir \"Definitions\" kalır; Vardiyalar onun içinde, Olay Günlüğü en altta görünür. Deploy sonrası App.Hr.Shift yetkisinin ParentName değerinin App.Hr.Definitions olduğu yetki tablosunda doğrulanır.

\n\n

Veri modeli

\n

Tablolar yeni; kiracı, audit ve soft delete standart.

\n

Hr_T_Shift — Tanım tablosu: Evet. Alanlar:

\n
    \n
  • Name nvarchar(64), zorunlu
  • \n
  • StartTime nvarchar(5) (SS:dd)
  • \n
  • EndTime nvarchar(5) (SS:dd)
  • \n
  • IsActive bit = 1, zorunlu
  • \n
\n

Hr_T_EventLog — Tanım: Hayır. Alanlar:

\n
    \n
  • BranchId uniqueidentifier (Sas_T_Branch)
  • \n
  • LogSource nvarchar(32), zorunlu: ShiftSupervisor (Vardiya Amiri), SecurityRoom (Güvenlik Odası), ObservationRoom (Gözlem Odası)
  • \n
  • UserId uniqueidentifier, zorunlu (AbpUsers)
  • \n
  • EventDate date, zorunlu
  • \n
  • EventTime nvarchar(5), zorunlu
  • \n
  • Importance int, zorunlu, varsayılan 1
  • \n
  • ShiftId uniqueidentifier (Hr_T_Shift)
  • \n
  • Description nvarchar(MAX)
  • \n
\n

Kayıt Tarihi ve Kayıt için standart CreationTime ve CreatorId salt okunur gösterilir.

\n\n

Etkilenen kısımlar

\n
    \n
  • Var olan App.Hr.Definitions menü ve yetki dalına, ayrıca App.Hr köküne birer ekran eklenir. Yeni ara menü ya da ara yetki açılmaz.
  • \n
  • İki ekranın C/R/U/D/E/I/N yetkileri ve dil anahtarları.
  • \n
  • Var olan ekranlara dokunulmaz.
  • \n
\n\n

Görünümler ve davranış

\n
    \n
  • Grid/Card/Pivot/Chart açık, varsayılan grid. Olay Günlüğü popup formda açılır.
  • \n
  • Vardiyalar widget'ları: Toplam / Aktif / Pasif.
  • \n
  • Olay Günlüğü widget'ları: Toplam / Bugün / Önemli (Önem ≥ 4).
  • \n
  • Önem: 1 ★ Rutin, 2 ★★ Düşük, 3 ★★★ Önemli, 4 ★★★★ Çok Önemli, 5 ★★★★★ Kritik.
  • \n
  • Kaynak (LogSource) seçilir, listede filtrelenir; görseldeki üç sekmenin yerini alır.
  • \n
  • Açılışta EventDate = bugün, EventTime = şimdi.
  • \n
  • Kullanıcı ve Vardiya lookup'ları yalnız aktif kayıtları listeler.
  • \n
  • Şube alanı seçilebilir lookup'tır; ekran IsBranch: true.
  • \n
\n\n

Kararlar

\n
    \n
  • \"Human Resources › Definitions\", hem menüde hem yetki ağacında App.Hr.Definitions kodlu var olan daldır (iki tabloda da doğrulandı). Görünen adının dil anahtarı App.Platform.Definitions'tır; kod olarak kullanılmaz.
  • \n
  • Üç günlük tek ekranda birleşir, LogSource ile ayrılır (onay).
  • \n
  • Önemdeki 2 \"Düşük\" ve 5 \"Kritik\" analiz kararıdır; görseldeki üç seçenek 1, 3, 4'e eşlenir.
  • \n
  • Saatler SS:dd; saniye tutulmaz.
  • \n
  • Vardiya demo verisi: Sabah 08:00–16:00, Akşam 16:00–00:00, Gece 00:00–08:00 (onay).
  • \n
\n\n

Üretim planı

\n
    \n
  1. create_table: Hr_T_Shift
  2. \n
  3. create_table: Hr_T_EventLog
  4. \n
  5. deploy_wizard: Shift.json
  6. \n
  7. deploy_wizard: EventLog.json
  8. \n
\n\n

Üretime hazır

\n

Evet

MCP

\n

Tablolar: Hr_T_Shift, Hr_T_EventLog.

\n

Ekranlar ve yerleri:

\n
    \n
  • Vardiyalar (App.Hr.Shift): menüde ve yetki ağacında App.Hr › App.Hr.Definitions altında. Deploy menuPath'i App.Hr › App.Hr.Definitions olarak doğruladı.
  • \n
  • Olay Günlüğü (App.Hr.EventLog): App.Hr'nin doğrudan altında, en sonda.
  • \n
\n

Demo veri: Vardiyalar için 3 satır (Sabah, Akşam, Gece).

\n

Widget'lar: Vardiyalar: Toplam / Aktif / Pasif. Olay Günlüğü: Toplam / Bugün / Önemli (Önem ≥ 4).

\n

Yetki doğrulaması: Yetkiler DB Migrate ile kurulur. Deploy sonrası yetki tablosunda App.Hr.Shift, App.Hr.EventLog ve App.Platform.Definitions kayıtları yok (beklenen: migrate öncesi). Migrate sonrası App.Hr.Shift yetkisinin ParentName değerinin App.Hr.Definitions olduğu kontrol edilmeli.

\n

DB Migrate bekleyen wizard'lar: Shift.json, EventLog.json.

" + } + ] +} diff --git a/configs/seeds/host/data/App.DevRequests/b0b200d4-f3f6-4fe3-9f11-5bff3040a110.json b/configs/seeds/host/data/App.DevRequests/b0b200d4-f3f6-4fe3-9f11-5bff3040a110.json index 0d88b8df..1e24a6dd 100644 --- a/configs/seeds/host/data/App.DevRequests/b0b200d4-f3f6-4fe3-9f11-5bff3040a110.json +++ b/configs/seeds/host/data/App.DevRequests/b0b200d4-f3f6-4fe3-9f11-5bff3040a110.json @@ -9,16 +9,16 @@ "TenantId": null, "UserName": "system@sozsoft.com", "RequestDate": null, - "Status": "Testing", + "Status": "Staging", "Title": "Human Resources -> Araçlar", "Description": "

Araç Belgeleri : Araçlarda kullanılmak üzere belge tanımlama listesidir.


Araçlar : Şubeye ait araçların listesidir. Araç listesinin detay formu ile aşağıdaki form açılacaktır. detay formunda araç belgeleri ve pdf, resim vs. belgeleri uplaod edilebilmelidir.


Gidilecek Yerler: Araçlar ile gidilebilecek tanımlı yerlerin listesidir.


Şoför Tanımlama : Şirket araçlarını kullanan kullanıcıların listesidir. SubFormlardaki Belge Adı bilgisi Araç Belgelerinden gelmektedir. Ayrıca bu belgeleri pdf, image vs dosyalarını subformlara upload edilebilmelidir.


Masraf Tanımlama: Araçlara ait masrafların listesidir.


Masraf Girişleri : Her araç için girilen masrafların tanımlandığı alandır. Masraf Girişleri Listesi üzerinden detay formu ile ulaşılabilir. Firma Adı sütunu aslında Gidilecek Yerler listesinden seçilecektir. Yine Belge adı bilgisi Araç Belgelerinden seçilmelidir. Ayrıca dosya upoad edilebilmelidir.


Araç Giriş-Çıkış Takip Listesi: Bu liste aracın şirkette mi yoksa dışarıda mı olduğunu takip eder. Ayrıca araçların giriş ve çıkış km bilgilerinin kaydedildiği bir listedir. Durum bilgisi içeride ve dışarıda gibi bir bilgi olabilir. Eğer giriş km yazıldıysa Durum otomatik değişecektir.

", "DueDate": null, "Tags": null, "Assignees": null, "Priority": null, - "Completed": false, + "Completed": true, "SortOrder": 0, - "Timesheets": "[{\"id\":\"87a0dad1-aa21-0163-32d6-3a240d7cbea7\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Talep analiz edildi\",\"duration\":0.0333},{\"id\":\"e139bb8c-42e1-2f28-79f7-3a240d7ed4ea\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Talep analiz edildi\",\"duration\":0.0333},{\"id\":\"87dd9960-9acd-a82e-5891-3a240d80900a\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleDocument tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"327c8521-bd5a-6f89-468d-3a240d80a840\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_Vehicle tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"257b0522-fd77-870a-3825-3a240d80b8f2\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleFile tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"1939f0ab-9a60-bd17-771b-3a240d80cabd\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleDestination tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"208bd1ea-93cf-6f7c-546c-3a240d80db09\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_Driver tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"450fce6f-02ed-2498-4a05-3a240d80fd1f\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_DriverDocument tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"270693c6-f840-990c-6ba9-3a240d810bca\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_DriverPenalty tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"3060eff7-569e-70ab-f13c-3a240d811d6c\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_DriverAccident tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"f32f3f07-94c6-f967-403c-3a240d81342f\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleExpenseDefinition tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"005c285b-bb51-7ca1-5bc7-3a240d81430b\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleExpense tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"f33f1ade-7111-1a8f-52a6-3a240d8157e3\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleExpenseLine tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"02bcf651-0fa7-a8b4-99c4-3a240d817801\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleMovement tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"2b88f672-39e3-521e-8685-3a240d82e369\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleDocument.json wizard\\u0027\\u0131 deploy edildi (17 demo sat\\u0131r)\",\"duration\":0.0333},{\"id\":\"ed991c40-4f8a-9677-7752-3a240d8329d4\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleFile.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"7f9d727c-781d-4a2c-4442-3a240d83ce08\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Vehicle.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"84f0f709-3940-42d4-7782-3a240d840c84\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleDestination.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"1d9810dc-f036-4a81-aa38-3a240d8440d6\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"DriverDocument.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"b32b85aa-5a2b-736d-a7fc-3a240d84815e\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"DriverPenalty.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"d7bb665d-a06b-afb7-3251-3a240d84bd1f\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"DriverAccident.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"8a94b2d1-6d64-d1a0-320d-3a240d852bdb\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Driver.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"2e683fbc-06e2-0adf-a7f7-3a240d857120\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleExpenseDefinition.json wizard\\u0027\\u0131 deploy edildi (9 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"46273579-18ad-54b7-56cb-3a240d85cbd0\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleExpenseLine.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"f1aeb641-913d-14c4-055a-3a240d862ef1\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleExpense.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"cb567bce-0707-bb0a-6eb6-3a240d8766b0\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleMovement.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"30ad3527-7e77-fe48-c6be-3a240d87bc25\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"24 tamamlanm\\u0131\\u015F alt g\\u00F6rev eklendi\",\"duration\":0.0167},{\"id\":\"3c685956-4a82-1045-e6e4-3a240d87ea75\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Analize \\u00FCretim notu eklendi\",\"duration\":0.0167}]", + "Timesheets": "[{\"id\":\"87a0dad1-aa21-0163-32d6-3a240d7cbea7\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Talep analiz edildi\",\"duration\":0.0333},{\"id\":\"e139bb8c-42e1-2f28-79f7-3a240d7ed4ea\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Talep analiz edildi\",\"duration\":0.0333},{\"id\":\"87dd9960-9acd-a82e-5891-3a240d80900a\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleDocument tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"327c8521-bd5a-6f89-468d-3a240d80a840\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_Vehicle tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"257b0522-fd77-870a-3825-3a240d80b8f2\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleFile tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"1939f0ab-9a60-bd17-771b-3a240d80cabd\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleDestination tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"208bd1ea-93cf-6f7c-546c-3a240d80db09\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_Driver tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"450fce6f-02ed-2498-4a05-3a240d80fd1f\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_DriverDocument tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"270693c6-f840-990c-6ba9-3a240d810bca\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_DriverPenalty tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"3060eff7-569e-70ab-f13c-3a240d811d6c\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_DriverAccident tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"f32f3f07-94c6-f967-403c-3a240d81342f\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleExpenseDefinition tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"005c285b-bb51-7ca1-5bc7-3a240d81430b\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleExpense tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"f33f1ade-7111-1a8f-52a6-3a240d8157e3\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleExpenseLine tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"02bcf651-0fa7-a8b4-99c4-3a240d817801\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_VehicleMovement tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"2b88f672-39e3-521e-8685-3a240d82e369\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleDocument.json wizard\\u0027\\u0131 deploy edildi (17 demo sat\\u0131r)\",\"duration\":0.0333},{\"id\":\"ed991c40-4f8a-9677-7752-3a240d8329d4\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleFile.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"7f9d727c-781d-4a2c-4442-3a240d83ce08\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Vehicle.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"84f0f709-3940-42d4-7782-3a240d840c84\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleDestination.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"1d9810dc-f036-4a81-aa38-3a240d8440d6\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"DriverDocument.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"b32b85aa-5a2b-736d-a7fc-3a240d84815e\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"DriverPenalty.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"d7bb665d-a06b-afb7-3251-3a240d84bd1f\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"DriverAccident.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"8a94b2d1-6d64-d1a0-320d-3a240d852bdb\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Driver.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"2e683fbc-06e2-0adf-a7f7-3a240d857120\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleExpenseDefinition.json wizard\\u0027\\u0131 deploy edildi (9 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"46273579-18ad-54b7-56cb-3a240d85cbd0\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleExpenseLine.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"f1aeb641-913d-14c4-055a-3a240d862ef1\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleExpense.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"cb567bce-0707-bb0a-6eb6-3a240d8766b0\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"VehicleMovement.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"30ad3527-7e77-fe48-c6be-3a240d87bc25\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"24 tamamlanm\\u0131\\u015F alt g\\u00F6rev eklendi\",\"duration\":0.0167},{\"id\":\"3c685956-4a82-1045-e6e4-3a240d87ea75\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"Analize \\u00FCretim notu eklendi\",\"duration\":0.0167},{\"id\":\"fa80ab64-0c67-7d80-57f6-3a240d881724\",\"date\":\"2026-10-02\",\"userName\":\"system@sozsoft.com\",\"description\":\"App.DevRequests ekran\\u0131nda sat\\u0131r g\\u00FCncellendi (Status)\",\"duration\":0.0167}]", "SubTasks": "[{\"id\":\"a4005ecf-0dd2-0e12-76b8-3a240d87bc08\",\"title\":\"create_table: Hr_T_VehicleDocument\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"527d4eed-a251-392a-4344-3a240d87bc08\",\"title\":\"create_table: Hr_T_Vehicle\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"e94e3a12-b300-84fb-3a0a-3a240d87bc08\",\"title\":\"create_table: Hr_T_VehicleFile\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"2d6cb483-bd7f-73bd-db4b-3a240d87bc08\",\"title\":\"create_table: Hr_T_VehicleDestination\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"2871c794-b11e-9a7d-5df3-3a240d87bc08\",\"title\":\"create_table: Hr_T_Driver\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"6ebcd1de-99fc-3e75-f88b-3a240d87bc08\",\"title\":\"create_table: Hr_T_DriverDocument\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"64d12e1f-b88d-3b91-f1c2-3a240d87bc08\",\"title\":\"create_table: Hr_T_DriverPenalty\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"e864e706-cd6e-dd41-e4eb-3a240d87bc08\",\"title\":\"create_table: Hr_T_DriverAccident\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"aa8870d0-767b-5635-6a8e-3a240d87bc08\",\"title\":\"create_table: Hr_T_VehicleExpenseDefinition\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"605da2a6-f865-884d-9d74-3a240d87bc08\",\"title\":\"create_table: Hr_T_VehicleExpense\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"cfb07951-f39e-19db-ff06-3a240d87bc08\",\"title\":\"create_table: Hr_T_VehicleExpenseLine\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"1173e91e-5757-cf34-9836-3a240d87bc08\",\"title\":\"create_table: Hr_T_VehicleMovement\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"ac224359-cbb1-dd60-14a0-3a240d87bc08\",\"title\":\"deploy_wizard: VehicleDocument.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"e1e7b2b4-2da0-247f-21f3-3a240d87bc08\",\"title\":\"deploy_wizard: VehicleFile.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"1302130d-7a47-82bc-0329-3a240d87bc08\",\"title\":\"deploy_wizard: Vehicle.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"ce493b28-c0a5-f6be-b815-3a240d87bc08\",\"title\":\"deploy_wizard: VehicleDestination.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"6837ca22-8bd5-dcef-3eff-3a240d87bc08\",\"title\":\"deploy_wizard: DriverDocument.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"67a29d99-776d-8164-77e6-3a240d87bc08\",\"title\":\"deploy_wizard: DriverPenalty.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"2afb97d0-efb0-66d3-c333-3a240d87bc08\",\"title\":\"deploy_wizard: DriverAccident.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"5d4fe6e0-e01c-7082-f5cd-3a240d87bc08\",\"title\":\"deploy_wizard: Driver.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"ebaa5348-dafa-e4dc-b414-3a240d87bc08\",\"title\":\"deploy_wizard: VehicleExpenseDefinition.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"b386ff82-091f-93e6-6983-3a240d87bc08\",\"title\":\"deploy_wizard: VehicleExpenseLine.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"aced9314-9822-db05-5b6b-3a240d87bc08\",\"title\":\"deploy_wizard: VehicleExpense.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true},{\"id\":\"92b9bb22-7599-71e6-ed7f-3a240d87bc08\",\"title\":\"deploy_wizard: VehicleMovement.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-02\",\"completed\":true}]", "Analysis": "

Amaç

\n

İK / idari işler ekibinin şirket araçlarını, şoförlerini, araç ve şoför belgelerini, araç masraflarını ve güvenlik noktasındaki araç giriş-çıkış hareketlerini (km ve Geldi/Gitti durumu) tek menü altında takip etmesi.

\n\n

Görsel analizi

\n
    \n
  • [image-1] Araç Belgeleri — liste. Alanlar: Belge Grubu (ARAÇ/ŞOFÖR), Belge Tipi (SİGORTA, BELGE, VERGİ, GEÇİŞ, MUAYENE, BAKIM, CEZA, KAZA), Belge Adı. 17 görünen satır → demo veri (\"BELDE\" yazım hatası \"BELGE\" olarak alınır).
  • \n
  • [image-2] Araç Tanımlama — detay formu. Sol: Tesis Adı (lookup), Araç Adı, Markası, Modeli, Cinsi, Kullanıldığı Yer, Tescil Tarihi, Plakası, Aktif/Pasif, Durumu (salt okunur, \"Geldi\"), Araç Km'si (salt okunur). Alt grup: Muayene / Sigorta / Egzoz Muayene / Takograf Kalib. tarihleri, her biri Başlangıç–Bitiş. Sağ: \"Araç Belgeleri\" alt listesi (Belge Adı lookup, Belge Dizini, Gör/Sil, Dosya Ekle).
  • \n
  • [image-3] Gidilecek Yer Tanımlama — liste: Gidilecek Yerin Adı, Uzaklığı. Satır yok.
  • \n
  • [image-4] Araç Şoför Tanımlama — detay formu. Sicil No (kullanıcı lookup), Adı, Soyadı (kullanıcıdan gelir), Zimmetli Araç 1–5 (araç lookup), Yapılan KM. Üç alt liste: Şoför Belgeleri (Belge Adı, dosya), Ceza Belgeleri (Ceza Tarihi, Tutarı, Açıklama, Belge Adı, dosya), Kaza Belgeleri (Kaza Tarihi, Açıklama, Belge Adı, dosya).
  • \n
  • [image-5] Araç Masraf Tanımlamaları — liste: Masraf Tipi, Masraf Adı. 9 satır → demo veri.
  • \n
  • [image-6] Araç Masraf Girişleri — başlık + satır formu. Başlık: Araç Adı, Fatura No, Fatura Tarihi, Firma Adı (Gidilecek Yerler'den), Belge Adı (Araç Belgeleri'nden), Belge Yolu (dosya). Satırlar: Masraf Adı, Masraf Detay Adı, Miktar, Tutarı, İskonto Oranı, Net Tutar, Masraf Açıklama; Tutar ve Net Tutar dip toplamlı.
  • \n
  • [image-7] Araç Giriş-Çıkış Takip Listesi — liste + popup form. Çıkış: Çıkış Tarihi (bugün), Çıkış Şube (salt okunur), Çıkış Saati, Çıkış Km, Gönderen Personel, Güvenlik Personeli, Kullanan Personel, Araç Adı (+plaka), Gidilen Yer, Gidiş Sebebi. Giriş: Giriş Yapan Güvenlik Per., Giriş Tarihi, Giriş Şube (salt okunur), Giriş Saati, Giriş Km, Yapılan Km, Durum. Alt: Olması Gereken Km, \"Yanlış KM Girişini Düzelt\". Listede ek kolonlar: Gezinti Süresi/Dk, Hareket No, Konum.
  • \n
\n\n

Çözüm yolu

\n

Tümü Wizard List: yedi menülü liste ekranı + beş menüsüz alt form (List sekmesi). Dosya yükleme, Eğitim talebindeki App.Hr.TrainingFile kalıbıyla (FileName + FileContent nvarchar(MAX), dxImageUpload). Otomatik durum/km güncellemesi EditorScript ve InsertAfterCommand/UpdateAfterCommand SQL'iyle yapılır; custom component gerekmez.

\n\n

Menü yeri

\n

İnsan Kaynakları › Araçlar › {Ekran}

\n\n\n\n\n\n\n\n\n\n\n\n
SeviyeKodAd (TR / EN)İkonDurum
KökApp.Hrİnsan Kaynakları / Human Resources—Var
AraApp.Hr.VehiclesAraçlar / VehiclesFcAutomotiveYeni
EkranApp.Hr.VehicleDocumentAraç Belgeleri / Vehicle DocumentsFcDocumentYeni
EkranApp.Hr.VehicleAraçlar / VehiclesFcAutomotiveYeni
EkranApp.Hr.VehicleDestinationGidilecek Yerler / DestinationsFcGlobeYeni
EkranApp.Hr.DriverŞoför Tanımlama / DriversFcBusinessmanYeni
EkranApp.Hr.VehicleExpenseDefinitionMasraf Tanımlama / Expense DefinitionsFcListYeni
EkranApp.Hr.VehicleExpenseMasraf Girişleri / Vehicle ExpensesFcMoneyTransferYeni
EkranApp.Hr.VehicleMovementAraç Giriş-Çıkış Takip / Vehicle Gate LogFcInspectionYeni
\n

ModuleId: Hr · İzin grubu: App.Hr · Route: /admin/list/{ListFormCode} · MenuParentCode: App.Hr.Vehicles, MenuParentPath: [App.Hr].

\n

Yetki: App.Hr › App.Hr.Vehicles (Yeni) › {ListFormCode}. Alt formlar: … › App.Hr.Vehicle › App.Hr.VehicleFile; … › App.Hr.Driver › App.Hr.DriverDocument / App.Hr.DriverPenalty / App.Hr.DriverAccident; … › App.Hr.VehicleExpense › App.Hr.VehicleExpenseLine.

\n\n

Veri modeli

\n

Tüm tablolar yeni, kiracı + audit + soft delete (standing default). Dosya kolonları: FileName nvarchar(256), FileContent nvarchar(MAX).

\n

Hr_T_VehicleDocument — Tanım tablosu: Evet (başka ekranların \"Belge Adı\" lookup kaynağı). DocumentGroup nvarchar(16) zorunlu (Vehicle/Driver, ekranda ARAÇ/ŞOFÖR); DocumentType nvarchar(32) zorunlu (Insurance, Document, Tax, Toll, Inspection, Maintenance, Penalty, Accident; TR karşılıkları statik lookup); Name nvarchar(128) zorunlu; IsActive bit=1 zorunlu.

\n

Hr_T_VehicleDestination — Tanım: Evet (Gidilen Yer ve Firma lookup kaynağı). Name nvarchar(128) zorunlu; Distance decimal(18,2) (km); IsActive.

\n

Hr_T_VehicleExpenseDefinition — Tanım: Evet. ExpenseType nvarchar(32) zorunlu (SİGORTA, VERGİ, BAKIM, MUAYENE, GEÇİŞ, CEZA, YAKIT — serbest metin, görseldeki gibi); Name nvarchar(128) zorunlu; IsActive.

\n

Hr_T_Vehicle — Tanım: Evet (Aktif/Pasif görselde var; şoför, masraf ve hareket lookup kaynağı). BranchId uniqueidentifier zorunlu (Sas_T_Branch); Name nvarchar(128) zorunlu; Brand, Model, BodyType, UsagePlace nvarchar(64); RegistrationDate date; PlateNumber nvarchar(16) zorunlu; IsActive; Status nvarchar(16) varsayılan Arrived (Geldi, salt okunur); CurrentKm int varsayılan 0 (salt okunur, hareketlerden hesaplanır); InspectionStart/End, InsuranceStart/End, EmissionStart/End, TachographStart/End date.

\n

Hr_T_VehicleFile — Tanım: Hayır. VehicleId zorunlu; VehicleDocumentId zorunlu (Group=Vehicle); FileName zorunlu; FileContent zorunlu.

\n

Hr_T_Driver — Tanım: Hayır (kişi kaydı; pasiflik kullanıcı kaydında). UserId uniqueidentifier zorunlu, tekil (AbpUsers); Name/Surname kullanıcıdan salt okunur gösterilir (tabloda tutulmaz); Vehicle1Id…Vehicle5Id uniqueidentifier (Hr_T_Vehicle); TotalKm int varsayılan 0 (salt okunur, hareketlerden hesaplanır).

\n

Hr_T_DriverDocument — DriverId, VehicleDocumentId (Group=Driver, Type≠Penalty/Accident), FileName, FileContent.

\n

Hr_T_DriverPenalty — DriverId, PenaltyDate date zorunlu, Amount decimal(18,2), Description nvarchar(512), VehicleDocumentId (Type=Penalty), FileName, FileContent.

\n

Hr_T_DriverAccident — DriverId, AccidentDate date zorunlu, Description nvarchar(512), VehicleDocumentId (Type=Accident), FileName, FileContent.

\n

Hr_T_VehicleExpense — VehicleId zorunlu; InvoiceNo nvarchar(32) zorunlu; InvoiceDate date zorunlu; DestinationId (Hr_T_VehicleDestination, ekranda \"Firma Adı\"); VehicleDocumentId (Group=Vehicle); FileName; FileContent.

\n

Hr_T_VehicleExpenseLine — VehicleExpenseId zorunlu; ExpenseDefinitionId zorunlu; DetailName nvarchar(128); Quantity decimal(18,2) varsayılan 1; Amount decimal(18,2); DiscountRate decimal(5,2) varsayılan 0; NetAmount decimal(18,2) (salt okunur, hesaplı); Description nvarchar(512).

\n

Hr_T_VehicleMovement — MovementNo int (otomatik, kiracı içi MAX+1, salt okunur); VehicleId zorunlu; ExitBranchId (oturumdaki şube, salt okunur); ExitDate date zorunlu (bugün); ExitTime nvarchar(5) zorunlu (SS:dd); ExitKm int zorunlu; SenderUserId, SecurityUserId, DriverUserId (AbpUsers, DriverUserId zorunlu); DestinationId; Reason nvarchar(MAX); EntrySecurityUserId; EntryBranchId (salt okunur); EntryDate date; EntryTime nvarchar(5); EntryKm int; TravelledKm int (salt okunur); Status nvarchar(16) (Left=Gitti / Arrived=Geldi, salt okunur); DurationMinutes int (salt okunur); Location nvarchar(128); ExpectedKm int (salt okunur).

\n\n

Alt form ağacı

\n\n\n\n\n\n\n\n
SekmeHedef ListFormCodeTabTypeMenüİlişkiEkle / Düzenle / SilYetki yolu
Araç BelgeleriApp.Hr.VehicleFileListMenüsüzId → VehicleId✓ / ✓ / ✓… › App.Hr.Vehicle › App.Hr.VehicleFile
Şoför BelgeleriApp.Hr.DriverDocumentListMenüsüzId → DriverId✓ / ✓ / ✓… › App.Hr.Driver › App.Hr.DriverDocument
Ceza BelgeleriApp.Hr.DriverPenaltyListMenüsüzId → DriverId✓ / ✓ / ✓… › App.Hr.Driver › App.Hr.DriverPenalty
Kaza BelgeleriApp.Hr.DriverAccidentListMenüsüzId → DriverId✓ / ✓ / ✓… › App.Hr.Driver › App.Hr.DriverAccident
Masraf KalemleriApp.Hr.VehicleExpenseLineListMenüsüzId → VehicleExpenseId✓ / ✓ / ✓… › App.Hr.VehicleExpense › App.Hr.VehicleExpenseLine
\n

Silme talepte Gör/Sil butonlarıyla açıkça istendiği için tüm alt listelerde açıktır.

\n\n

Etkilenen kısımlar

\n
    \n
  • Yeni menü dalı App.Hr.Vehicles ve aynı kodlu ara yetki; 12 ekranın C/R/U/D/E/I/N yetkileri.
  • \n
  • Dil anahtarları: ekran başlık/açıklamaları, yeni alan başlıkları, statik lookup değerleri (Vehicle/Driver, belge tipleri, Arrived=Geldi / Left=Gitti).
  • \n
  • Var olan ekranlara dokunulmaz; AbpUsers ve Sas_T_Branch yalnızca lookup kaynağıdır.
  • \n
\n\n

Görünümler ve davranış

\n
    \n
  • Tüm ana ekranlarda Grid/Card/Pivot/Chart açık, varsayılan grid. Tanım ekranlarında Aktif/Pasif widget'ı; Araçlar ekranında Toplam / Geldi / Gitti widget'ları; Giriş-Çıkış'ta Gitti (dışarıdaki araç) ve Bugünkü Hareket widget'ları. Alt formlarda widget yok.
  • \n
  • Araç / Şoför / Masraf Girişleri düzenleme popup'ı tam ekran, alt formlar sekmede; Giriş-Çıkış popup (Çıkış Bilgileri ve Giriş Bilgileri iki grup).
  • \n
  • Belge Adı lookup'ları: VehicleFile → Group=Vehicle; DriverDocument → Group=Driver ve Type Penalty/Accident dışı; DriverPenalty → Type=Penalty; DriverAccident → Type=Accident; VehicleExpense → Group=Vehicle. Görünüm: \"Belge Adı (Tip)\".
  • \n
  • Araç lookup'ları \"Ad – Plaka\" gösterir ve yalnız aktif araçları listeler. Giriş-Çıkış'taki ikinci araç kutusu plakadır (salt okunur, araçtan gelir).
  • \n
  • Şoför: kullanıcı seçilince Ad/Soyad kullanıcı kaydından salt okunur gösterilir; Sicil No lookup'ı kullanıcı adı + ad soyad gösterir.
  • \n
  • Araç Km'si ve şoförün Yapılan KM'si formda salt okunurdur, elle girilmez; yalnızca hareket kayıtlarından hesaplanır.
  • \n
  • Masraf satırı EditorScript: NetAmount = Quantity × Amount × (1 − DiscountRate/100); Amount ve NetAmount sütunlarında toplam (sum) özeti.
  • \n
  • Giriş-Çıkış EditorScript: açılışta ExitDate=bugün, ExitTime=şimdi, ExitBranchId=oturum şubesi; araç seçilince ExpectedKm = aracın CurrentKm'i ve ExitKm boşsa ona eşitlenir; Status = EntryKm doluysa Arrived (Geldi), değilse Left (Gitti); EntryKm girilince TravelledKm = EntryKm − ExitKm, EntryBranchId=oturum şubesi, DurationMinutes = (EntryDate+EntryTime) − (ExitDate+ExitTime) dakika.
  • \n
  • Doğrulama: ExitKm ≥ ExpectedKm; EntryKm ≥ ExitKm. \"Yanlış KM Girişini Düzelt\": ExitKm alanının EditorScript'i ExitKm < ExpectedKm ise değeri ExpectedKm'e düzeltir ve uyarı gösterir.
  • \n
  • InsertAfterCommand / UpdateAfterCommand (VehicleMovement): aracın Status'unu hareketin Status'una, EntryKm doluysa CurrentKm'ini EntryKm'e günceller; şoförün (Hr_T_Driver.UserId = DriverUserId) TotalKm'ini o kullanıcının hareketlerindeki TravelledKm toplamıyla yeniler. DeleteAfterCommand aynı yeniden hesaplamayı yapar (aracın CurrentKm'i son girişli hareketin EntryKm'i, yoksa 0). MovementNo InsertBeforeCommand'de MAX+1.
  • \n
\n\n

Kararlar

\n
    \n
  • \"Tesis Adı\" = şube (Sas_T_Branch); araç ekranı BranchId kolonu taşır ve IsBranch: true — talep \"Şubeye ait araçlar\" diyor. Hareket ekranı da IsBranch: true (çıkış şubesi). Tanım ekranları ve Şoför şubeden bağımsız.
  • \n
  • Şoför = AbpUsers kullanıcısı; ad, soyad, sicil tabloya kopyalanmaz (kullanıcı bilgisi kuralı).
  • \n
  • Zimmetli araçlar görseldeki gibi 5 ayrı lookup kolonu (girdi görseldir).
  • \n
  • Araç Km'si ve şoförün Yapılan KM'si otomatik hesaplanır, elle girilmez (kullanıcı onayladı).
  • \n
  • Durum değerleri: Geldi (Arrived) / Gitti (Left); yeni araç Geldi başlar (kullanıcı onayladı; karşı değer \"Gitti\" analiz kararı).
  • \n
  • \"Firma Adı\"ndaki \"…\" (yeni firma tanımla) butonu üretilmez; yeni firma Gidilecek Yerler ekranından eklenir — lookup aynı tablodan okur (onay).
  • \n
  • \"Masraf Detay Adı\" serbest metin (görselde kaynağı yok).
  • \n
  • \"Konum\" serbest metin; hareket listesinde ve formda Çıkış grubunda yer alır.
  • \n
  • Saatler nvarchar(5) SS:dd maskeli; tarih alanları ayrı (görsel düzeni).
  • \n
  • Belge tipleri sabit statik lookup (8 değer); masraf tipleri serbest metin (görselde ayrı tip seti var).
  • \n
  • Demo veri: Araç Belgeleri 17 satır, Masraf Tanımları 9 satır (görsellerden), IsActive: true.
  • \n
\n\n

Üretim planı

\n
    \n
  1. create_table: Hr_T_VehicleDocument
  2. \n
  3. create_table: Hr_T_Vehicle
  4. \n
  5. create_table: Hr_T_VehicleFile
  6. \n
  7. create_table: Hr_T_VehicleDestination
  8. \n
  9. create_table: Hr_T_Driver
  10. \n
  11. create_table: Hr_T_DriverDocument
  12. \n
  13. create_table: Hr_T_DriverPenalty
  14. \n
  15. create_table: Hr_T_DriverAccident
  16. \n
  17. create_table: Hr_T_VehicleExpenseDefinition
  18. \n
  19. create_table: Hr_T_VehicleExpense
  20. \n
  21. create_table: Hr_T_VehicleExpenseLine
  22. \n
  23. create_table: Hr_T_VehicleMovement
  24. \n
  25. deploy_wizard: VehicleDocument.json
  26. \n
  27. deploy_wizard: VehicleFile.json
  28. \n
  29. deploy_wizard: Vehicle.json
  30. \n
  31. deploy_wizard: VehicleDestination.json
  32. \n
  33. deploy_wizard: DriverDocument.json
  34. \n
  35. deploy_wizard: DriverPenalty.json
  36. \n
  37. deploy_wizard: DriverAccident.json
  38. \n
  39. deploy_wizard: Driver.json
  40. \n
  41. deploy_wizard: VehicleExpenseDefinition.json
  42. \n
  43. deploy_wizard: VehicleExpenseLine.json
  44. \n
  45. deploy_wizard: VehicleExpense.json
  46. \n
  47. deploy_wizard: VehicleMovement.json
  48. \n
\n\n

Üretime hazır

\n

Evet

MCP

\n

Tablolar (12): Hr_T_VehicleDocument, Hr_T_Vehicle, Hr_T_VehicleFile, Hr_T_VehicleDestination, Hr_T_Driver, Hr_T_DriverDocument, Hr_T_DriverPenalty, Hr_T_DriverAccident, Hr_T_VehicleExpenseDefinition, Hr_T_VehicleExpense, Hr_T_VehicleExpenseLine, Hr_T_VehicleMovement.

\n

Ekranlar: İnsan Kaynakları › Araçlar altında 7 menülü ekran (VehicleDocument, Vehicle, VehicleDestination, Driver, VehicleExpenseDefinition, VehicleExpense, VehicleMovement) ve 5 menüsüz alt form (VehicleFile, DriverDocument, DriverPenalty, DriverAccident, VehicleExpenseLine). Demo veri: Araç Belgeleri 17, Masraf Tanımları 9 satır.

\n

DB Migrate bekleyen wizard'lar: 12 wizard'ın tamamı.

\n

Analizden sapmalar / varsayımlar:

\n
    \n
  • Hareket tablosunda çıkış şubesi kolonu BranchId olarak açıldı (IsBranch filtresi bu kolonu kullanır). Çıkış/Giriş Şube alanları seçilebilir lookup: oturum şubesi için bir varsayılan token'ı yok.
  • \n
  • Şoför formunda Ad/Soyad ayrı alan değil; kullanıcı lookup'ı \"Kullanıcı adı – Ad Soyad\" gösterir. Araç plakası da araç lookup'ının metninde (\"Ad – Plaka\").
  • \n
  • Kayıt sonrası SQL kancaları wizard ile taşınamadı: deploy, InsertAfterCommand / UpdateAfterCommand / DeleteAfterCommand alanlarını dosyaya yazmıyor. Bu yüzden aracın Durum ve Km'si, şoförün Yapılan KM'si ve Hareket No otomatik güncellenmez. Bu SQL'lerin DB Migrate sonrası ListForm editöründe (App.Hr.VehicleMovement › Komutlar) eklenmesi gerekiyor. Formdaki anlık hesaplar (Durum, Yapılan Km, Gezinti Süresi, Olması Gereken Km, km doğrulamaları) EditorScript ile çalışır.
  • \n
  • Masraf kalemlerindeki Tutar / Net Tutar dip toplamı wizard alanıyla gönderildi; migrate sonrası görünmüyorsa ListForm editöründen Toplam Özet (sum) açılmalı.
  • \n
" } diff --git a/configs/seeds/host/data/App.DevRequests/c8017276-eef2-4ede-b060-ec86339fee18.json b/configs/seeds/host/data/App.DevRequests/c8017276-eef2-4ede-b060-ec86339fee18.json index 0c3e5dfd..179879e4 100644 --- a/configs/seeds/host/data/App.DevRequests/c8017276-eef2-4ede-b060-ec86339fee18.json +++ b/configs/seeds/host/data/App.DevRequests/c8017276-eef2-4ede-b060-ec86339fee18.json @@ -17,7 +17,7 @@ "Assignees": "system@sozsoft.com", "Priority": "5", "Completed": true, - "SortOrder": 3, + "SortOrder": 2, "Timesheets": "[{\"id\":\"9c8efcea-1873-defb-8ca5-3a240a04f659\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Talep analiz edildi\",\"duration\":0.1},{\"id\":\"51b5039e-452d-b4c9-7407-3a240a072646\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_TrainingType tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"472faf9f-a816-5f2e-5f79-3a240a073b97\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_TrainingSubject tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"60423b33-ee26-d440-0168-3a240a075d34\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_Training tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"fe75c8ff-de63-20ce-550a-3a240a076f6a\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_TrainingParticipant tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"5a955586-ca3e-b04e-c9c6-3a240a077d7e\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_TrainingFile tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"0277b484-25a2-78ea-3ab8-3a240a07f4cf\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"TrainingType.json wizard\\u0027\\u0131 deploy edildi (8 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"fc653661-f16b-9821-a2ac-3a240a082abb\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"TrainingType.json wizard\\u0027\\u0131 silindi\",\"duration\":0.0167},{\"id\":\"71f75d76-8711-6e11-e741-3a240a086d4e\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"TrainingType.json wizard\\u0027\\u0131 deploy edildi (8 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"a7a5aec4-af2f-c398-447b-3a240a08e779\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"TrainingSubject.json wizard\\u0027\\u0131 deploy edildi (18 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"110bcbac-1131-88d8-19e4-3a240a09d350\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"TrainingParticipant.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"796ed9d9-dd28-4b24-1fe8-3a240a0aa526\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"TrainingParticipant.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"320777bd-9eb4-3cf2-ed94-3a240a0ae44c\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"TrainingFile.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"b5f2b813-6b49-0648-05db-3a240a0b04c6\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Kat\\u0131l\\u0131m Belgesi rapor \\u015Fablonu kaydedildi\",\"duration\":0.0167},{\"id\":\"ae71bc2b-34be-c82e-9492-3a240a0b98ff\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"TrainingParticipant.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"8453d3ce-3f86-10cc-6ddf-3a240a0c7ddc\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Training.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"43ccf5a1-5d4b-e325-7b18-3a240a0c981c\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"12 tamamlanm\\u0131\\u015F alt g\\u00F6rev eklendi\",\"duration\":0.0167},{\"id\":\"47ad1246-b808-c1a5-450a-3a240a0cd1d0\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Analize \\u00FCretim notu eklendi\",\"duration\":0.0167},{\"id\":\"5d9092ec-9bb5-da18-8e9f-3a240a0ce535\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"App.DevRequests ekran\\u0131nda sat\\u0131r g\\u00FCncellendi (Status)\",\"duration\":0.0167}]", "SubTasks": "[{\"id\":\"10dc06b0-2795-74d6-418a-3a240a0c97d4\",\"title\":\"create_table: Hr_T_TrainingType\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"baa105a5-0d81-ee4e-c0e2-3a240a0c97d4\",\"title\":\"create_table: Hr_T_TrainingSubject\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"90b09cb6-6e55-95f1-98a4-3a240a0c97d4\",\"title\":\"create_table: Hr_T_Training\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"71140083-b2cb-e42a-09df-3a240a0c97d4\",\"title\":\"create_table: Hr_T_TrainingParticipant\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"58070af2-25b3-ff25-11c5-3a240a0c97d4\",\"title\":\"create_table: Hr_T_TrainingFile\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"ba684747-a5cb-e120-ccf3-3a240a0c97d4\",\"title\":\"deploy_wizard: TrainingType.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"12c89343-f59f-13ae-802d-3a240a0c97d4\",\"title\":\"deploy_wizard: TrainingSubject.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"0a5cd7a7-16e0-9121-644f-3a240a0c97d4\",\"title\":\"deploy_wizard: TrainingParticipant.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"52f0ea63-cea2-70d8-8e3c-3a240a0c97d4\",\"title\":\"deploy_wizard: TrainingFile.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"cf17163e-0932-9b28-f2c2-3a240a0c97d4\",\"title\":\"save_report_template: Kat\\u0131l\\u0131m Belgesi\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"0de0fc14-2c70-f6ef-9539-3a240a0c97d4\",\"title\":\"deploy_wizard: TrainingParticipant.json (Sertifika sat\\u0131r butonu ile g\\u00FCncelleme)\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"e0ff237a-0ac0-c8e3-dc72-3a240a0c97d4\",\"title\":\"deploy_wizard: Training.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true}]", "Analysis": "

Amaç

\n

İK, eski sistemdeki 8 ayrı eğitim formunu (İş Başı, Oryantasyon, Teknik Oryantasyon, Grup, Dış, Sosyal Faaliyet, Akademi, Rotasyon) tek bir Eğitim ekranında toplamak; katılımcı, katılım durumu, puan/not, dosya, yetkinlik ve maliyet bilgisini aynı kayıtta tutmak ve katılan personele Katılım Belgesi basmak istiyor.

\n\n

Görsel analizi

\n
    \n
  • [image-1] Liste: Eğitim Tipi (lookup), Eğitim Konusu (metin), Değerlendirilsin mi? (Evet/Hayır). 19 satır → Eğitim Konuları demo verisi.
  • \n
  • [image-2…9] Form (tip başına bir varyant). Ortak alanlar: Eğitim Konusu, Giriş Tarihi, Şube Adı, Eğitim Baş./Bit. Tarihi, Baş./Bit. Saati, Top. Eğitim Süresi, Eğitim Veren Kişi, Açıklama, Eğitim Veren Kurum, Durum (Açık/Kapalı). Artan alanlar: Eğitim Yeri (Grup/Dış/Akademi), Bölüm/Birim (Teknik Oryantasyon — talep gereği alınmaz). Sekmeler: Dosyalar (Dosya Türü, Tarih, Dosya, Gör/Sil), Yetkinlikler (Tipi, Yetkinlik Adı), Maliyet. Katılımcılar ızgarası: Katıldı, S.No, Adı Soyadı, İşe Giriş Tarihi, Bölüm, Görevi, Değerlendirme, Sınav Not Durumu, Ayrılma Tarihi; Grup ekranında satır başı SERTİFİKA butonu. İş Başı ekranındaki konuya özel onay kutusu kolonları genelleştirilmez (Değerlendirme puanı karşılar).
  • \n
  • [image-10] A4 yatay Katılım Belgesi: başlık, \"Sayın: {Ad Soyad}\", \"{Bitiş tarihi} tarihinde düzenlenen {süre} saatlik \"{Konu}\" eğitimine katılmıştır.\", Eğitmen adı, İşveren / İşveren Vekili imza alanı.
  • \n
  • [image-11] Maliyet grubu: Eğitim Yeri, Eğitmen, Konaklama, Ulaşım, İkram, Diğer (decimal) ve Toplam (hesaplanan).
  • \n
\n\n

Çözüm yolu

\n

Wizard List ekranları (tanımlar + ana ekran + alt formlar) ve DynamicReport şablonu. Tüm ihtiyaçlar (cascading lookup, TagBox, hesaplanan alan, alt form sekmeleri, satır butonu) ListForm sözleşmesiyle karşılanır; custom component gerekmez.

\n\n

Menü yeri

\n

İnsan Kaynakları › Eğitim › {Eğitim Tipleri | Eğitim Konuları | Eğitimler}

\n\n\n\n\n\n\n\n
SeviyeKodAd (TR / EN)İkonDurum
KökApp.Hrİnsan Kaynakları / Human ResourcesFcConferenceCallVar
AraApp.Hr.TrainingsEğitim / TrainingFcGraduationCapYeni
EkranApp.Hr.TrainingTypeEğitim Tipleri / Training TypesFcListYeni
EkranApp.Hr.TrainingSubjectEğitim Konuları / Training SubjectsFcViewDetailsYeni
EkranApp.Hr.TrainingEğitimler / TrainingsFcGraduationCapYeni
\n

ModuleId: Hr · İzin grubu: App.Hr · Route: /admin/list/{ListFormCode}.
\nYetki: App.Hr › App.Hr.Trainings (Yeni) › App.Hr.TrainingType / App.Hr.TrainingSubject / App.Hr.Training
\nYetki (alt formlar): App.Hr › App.Hr.Trainings › App.Hr.Training › App.Hr.TrainingParticipant / App.Hr.TrainingFile

\n\n

Veri modeli

\n

Tüm tablolar kiracı + audit + soft delete (standing default). Id uniqueidentifier.

\n

Hr_T_TrainingType (yeni) — Tanım tablosu: Evet (talep: \"seçenekler olmalı\", lookup kaynağı).

\n\n\n
KolonTipZorunlu
Namenvarchar(128)✓
IsActivebit, vars. 1✓
\n\n

Hr_T_TrainingSubject (yeni) — Tanım tablosu: Evet (Eğitimler ekranının cascading lookup kaynağı).

\n\n\n\n\n
KolonTipZorunluKaynak
TrainingTypeIduniqueidentifier✓Hr_T_TrainingType
Namenvarchar(256)✓
IsEvaluatedbit, vars. 1✓\"Değerlendirilsin mi?\"
IsActivebit, vars. 1✓
\n\n

Hr_T_Training (yeni) — Tanım tablosu: Hayır (hareket kaydı).

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
KolonTipZorunluNot
TrainingTypeIduniqueidentifier✓Hr_T_TrainingType
TrainingSubjectIduniqueidentifier✓Hr_T_TrainingSubject, TrainingTypeId'ye cascade
EntryDatedate✓Giriş Tarihi, vars. bugün
BranchIduniqueidentifier✓Sas_T_Branch
StartDate / EndDatedate✓
StartTime / EndTimetime
TotalHoursdecimal(10,2)Top. Eğitim Süresi (saat)
TrainerNamenvarchar(200)Eğitim Veren Kişi
TrainingPlacenvarchar(MAX)Eğitim Yeri
TrainingInstitutionnvarchar(MAX)Eğitim Veren Kurum
Descriptionnvarchar(MAX)Açıklama
Statusnvarchar(16)✓Open / Closed, vars. Open
SkillIdsnvarchar(MAX)Yetkinlikler, Hr_T_Skill çoklu seçim
CostPlace, CostTrainer, CostAccommodation, CostTransport, CostCatering, CostOtherdecimal(18,2), vars. 0Maliyet
CostTotaldecimal(18,2)Hesaplanan, salt okunur
\n\n

Hr_T_TrainingParticipant (yeni) — Tanım tablosu: Hayır.

\n\n\n\n\n\n\n\n\n\n\n
KolonTipZorunluNot
TrainingIduniqueidentifier✓Hr_T_Training
UserIduniqueidentifier✓AbpUsers
HireDatedateAbpUsers.HireDate kopyası
DepartmentIduniqueidentifierAbpUsers.DepartmentId kopyası (Bölüm)
JobPositionIduniqueidentifierAbpUsers.JobPositionId kopyası (Görevi)
AttendanceStatusnvarchar(16)✓Attended / NotAttended / Excused (Katıldı / Katılmadı / Mazeretli), vars. Attended
EvaluationScoredecimal(5,2)0–100
ExamScoredecimal(5,2)Sınav Not Durumu, 0–100
LeaveDatedateAyrılma Tarihi
Notenvarchar(MAX)
\n\n

Hr_T_TrainingFile (yeni) — Tanım tablosu: Hayır.

\n\n\n\n\n\n
KolonTipZorunluNot
TrainingIduniqueidentifier✓Hr_T_Training
DocumentTypeIduniqueidentifierApp.Hr.DocumentType (var)
FileDatedate✓vars. bugün
FileNamenvarchar(256)✓
FileContentnvarchar(MAX)✓base64, dxImageUpload
\n\n

Alt form ağacı

\n\n\n\n
SekmeHedefTabTypeMenüİlişkiEkle / Düzenle / SilYetki yolu
KatılımcılarApp.Hr.TrainingParticipantListMenüsüzId → TrainingId✓ / ✓ / ✓App.Hr › App.Hr.Trainings › App.Hr.Training › App.Hr.TrainingParticipant
DosyalarApp.Hr.TrainingFileListMenüsüzId → TrainingId✓ / ✓ / ✓App.Hr › App.Hr.Trainings › App.Hr.Training › App.Hr.TrainingFile
\n

Yetkinlikler ve Maliyet ayrı sekme değil, ana formda grup olarak durur (Maliyet listede görünsün diye ana tabloda).

\n\n

Etkilenen kısımlar

\n
    \n
  • Yeni 5 tablo, 5 wizard ekranı (3 menülü, 2 menüsüz alt form), yeni ara menü App.Hr.Trainings ve ara yetkisi.
  • \n
  • Her ekran için C/R/U/D/Export/Import/Note yetkileri; dil anahtarları (TR/EN) ve durum/katılım statik lookup metinleri.
  • \n
  • Rapor: \"Raporlar\" kategorisine Katılım Belgesi DynamicReport şablonu; Katılımcılar alt formuna satır butonu.
  • \n
  • Var olan ekranlara etki yok; App.Hr.SkillType/Skill, App.Hr.DocumentType, Sas_T_Branch ve AbpUsers yalnızca lookup kaynağı.
  • \n
\n\n

Görünümler ve davranış

\n
    \n
  • Tüm liste ekranlarında Grid/Card/Pivot/Chart açık, varsayılan grid.
  • \n
  • Eğitimler formu grupları: Genel (2 kolon) · Yetkinlikler · Maliyet (2 kolon). Grid sütunları tüm Genel alanları + 7 maliyet kolonu; CostTotal sütununda toplam özet.
  • \n
  • Cascading: TrainingSubjectId lookup'ı CascadeParentFields: TrainingTypeId; TrainingTypeId değişince TrainingSubjectId boşaltılır (CascadeEmptyFields). Konu lookup'ı yalnızca aktif konuları getirir; gridde ad her zaman görünür (lookup filtresiz display).
  • \n
  • TotalHours: StartDate/EndDate/StartTime/EndTime değişince EditorScript ile (gün sayısı) × (EndTime − StartTime) saat hesaplanır, elle düzeltilebilir.
  • \n
  • CostTotal: altı maliyet alanından herhangi biri değişince EditorScript toplar; salt okunur.
  • \n
  • SkillIds: dxTagBox, kaynak Hr_T_Skill (görüntü: \"{SkillType} - {Skill}\"), aktif kayıtlar.
  • \n
  • Status: dxRadioGroup Açık/Kapalı; Hr.Training widget'ları: Bu Yılki Eğitim sayısı, Açık Eğitim sayısı, Bu Yılki Toplam Maliyet.
  • \n
  • Katılımcılar: UserId seçilince EditorScript AbpUsers'tan HireDate, DepartmentId, JobPositionId'yi doldurur. AttendanceStatus dxSelectBox (3 seçenek). EvaluationScore/ExamScore dxNumberBox 0–100 range doğrulaması. Satırda \"Sertifika\" butonu yalnızca AttendanceStatus = 'Attended' iken görünür.
  • \n
  • Dosyalar: FileContent dxImageUpload; FileName dosya seçilince doldurulur; DocumentTypeId dxSelectBox.
  • \n
  • Doğrulama: EndDate ≥ StartDate, EndTime > StartTime (aynı gün).
  • \n
\n\n

Kararlar

\n
    \n
  • Eğitim tipi ekranı tek; tipe özgü alan farkları birleşik alan kümesine indirildi (talep: \"ortak ve artan tüm bilgiler\"). Teknik Oryantasyon'daki Bölüm/Birim talep gereği alınmadı.
  • \n
  • Yetkinlikler ayrı alt tablo yerine Eğitim kaydında çoklu seçim kolonu (SkillIds) — talepte açıkça izin verilen yol, daha az artefakt.
  • \n
  • Maliyet ana tabloda kolonlar; böylece Eğitimler listesinde doğrudan görünür ve pivotlanır.
  • \n
  • Katılım durumu kodları İngilizce saklanır, ekranda TR metinleriyle gösterilir (statik lookup).
  • \n
  • Eğitim Veren Kişi serbest metin (dış eğitmenler kullanıcı değildir).
  • \n
  • Durum Açık/Kapalı korunur; Kapalı eğitim düzenlemeye kilitlenmez (onay).
  • \n
  • Dijital eğitim dosyaları base64 olarak FileContent nvarchar(MAX)'a dxImageUpload ile kaydedilir; PDF/Office dosyaları için yükleyicinin kabul ettiği türler ImageUploadOptions ile genişletilir, dosya başına 10 MB sınır (onay).
  • \n
  • Katılım Belgesi şablonu Katılımcılar alt formu (App.Hr.TrainingParticipant) üzerinde çalışır; yer tutucular için katılımcı ekranına salt okunur birleştirme alanları eklenir: ParticipantFullName (AbpUsers.Name + Surname), TrainingSubjectName, TrainingEndDate, TrainingTotalHours, TrainerName (ColumnJoinTableDto ile Hr_T_Training / Hr_T_TrainingSubject) (onay).
  • \n
  • Belge metni: \"Firmamızda {{TrainingEndDate}} tarihinde düzenlenen {{TrainingTotalHours}} saatlik \"{{TrainingSubjectName}}\" eğitimine katılmıştır.\", A4 yatay, İşveren imza alanı boş.
  • \n
  • Demo veri: 8 Eğitim Tipi; [image-1]'deki 19 konu, TrainingTypeId tip kaydının Id'si ile (tip adıyla eşlenerek); IsEvaluated tümü Evet. Eğitim/katılımcı demo verisi eklenmez (kullanıcı ve şube Id'leri kiracıya özgü).
  • \n
\n\n

Üretim planı

\n
    \n
  1. create_table: Hr_T_TrainingType
  2. \n
  3. create_table: Hr_T_TrainingSubject
  4. \n
  5. create_table: Hr_T_Training
  6. \n
  7. create_table: Hr_T_TrainingParticipant
  8. \n
  9. create_table: Hr_T_TrainingFile
  10. \n
  11. deploy_wizard: TrainingType.json
  12. \n
  13. deploy_wizard: TrainingSubject.json
  14. \n
  15. deploy_wizard: TrainingParticipant.json
  16. \n
  17. deploy_wizard: TrainingFile.json
  18. \n
  19. save_report_template: Katılım Belgesi
  20. \n
  21. deploy_wizard: TrainingParticipant.json (Sertifika satır butonu ile güncelleme)
  22. \n
  23. deploy_wizard: Training.json
  24. \n
\n\n

Üretime hazır

\n

Evet

MCP

\n

Üretilenler: Hr_T_TrainingType, Hr_T_TrainingSubject, Hr_T_Training, Hr_T_TrainingParticipant, Hr_T_TrainingFile tabloları; App.Hr.TrainingType, App.Hr.TrainingSubject, App.Hr.Training (menülü, İnsan Kaynakları › Eğitim), App.Hr.TrainingParticipant ve App.Hr.TrainingFile (menüsüz alt form) ekranları; \"Raporlar\" kategorisinde Katılım Belgesi şablonu (Id 3840a20d-3233-4d17-bc06-ccfd8d87b32a) ve Katılımcılar satırında yalnızca AttendanceStatus = 'Attended' iken görünen Sertifika butonu.

\n

Demo veri: 8 Eğitim Tipi sabit Id'lerle (a1e00001-0000-4000-8000-00000000000N); [image-1]'deki 18 konu bu Id'lerle (analizde 19 yazıyordu, görselde 18 satır var).

\n

Analizden sapmalar / varsayılanlar:

\n
    \n
  • create_table time tipini desteklemediği için StartTime/EndTime datetime (saat editörü); decimal kolonlar platform gereği decimal(18,4).
  • \n
  • deploy_wizard alan düzeyinde ColumnJoinTableDto'yu taşımadığı için katılımcı ekranına birleştirme alanları eklenemedi. Belgedeki tarih, süre ve konu, TrainingId lookup'ının görünen metninden (\"dd/MM/yyyy tarihinde düzenlenen N saatlik \"Konu\"\") gelir. Bu yüzden belgedeki Eğitmen adı basılmaz; Eğitmen altı imza alanı olarak boş kalır.
  • \n
  • \"Katılım Belgesi\" adında var olan bir şablon bulundu ve yeni içerikle güncellendi (önceki sürümün yer tutucuları ekranda olmayan alanlara işaret ediyordu).
  • \n
  • Dosya yükleme alanı dxImageUpload; PDF/Office kabulü için ImageUploadOptions sözleşmesi doğrulanamadı, varsayılan bırakıldı. Dosya Adı elle girilir.
  • \n
  • Bitiş tarihi kontrolü sunucu doğrulaması değil, EndDate EditorScript'inde uyarı + geri alma.
  • \n
  • Widget: Toplam · Açık · Kapalı · Toplam Maliyet (yıl filtresi sağlayıcıdan bağımsız SQL ile yazılamadığından \"bu yıl\" kırılımı yerine).
  • \n
\n

DB Migrate bekleyen wizard'lar: TrainingType.json, TrainingSubject.json, TrainingParticipant.json, TrainingFile.json, Training.json.

" diff --git a/configs/seeds/host/data/App.DevRequests/ec7d68c2-2dae-466a-8f8b-f28f6042746a.json b/configs/seeds/host/data/App.DevRequests/ec7d68c2-2dae-466a-8f8b-f28f6042746a.json index 4bb92d09..a53c2357 100644 --- a/configs/seeds/host/data/App.DevRequests/ec7d68c2-2dae-466a-8f8b-f28f6042746a.json +++ b/configs/seeds/host/data/App.DevRequests/ec7d68c2-2dae-466a-8f8b-f28f6042746a.json @@ -17,7 +17,7 @@ "Assignees": "system@sozsoft.com", "Priority": null, "Completed": true, - "SortOrder": 2, + "SortOrder": 3, "Timesheets": "[{\"id\":\"fe72afa0-9b50-e90a-a166-3a24088f5087\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Talep analiz edildi\",\"duration\":0.0833},{\"id\":\"0bad51df-91ee-6eba-2d25-3a2408986e70\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"HealthCardHistory.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.05},{\"id\":\"20934d75-88dd-5a98-7314-3a2408991d44\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"HealthCardLabPhysical.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"7fb1d459-e85f-6a5b-2b17-3a24089a350e\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"HealthCardAnamnesis.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"196f9b32-8294-f469-e553-3a24089a843e\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"HealthCardResult.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"09c813af-f6ed-0bde-590f-3a24089ae48f\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"HealthCardPeriodicExamination.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"12563d83-6c1a-5e01-3590-3a24089b59bb\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"HealthCardPatientProtocol.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"7e0681de-3e80-120e-8039-3a24089bd0c7\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"HealthCardSickLeave.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"57ed3514-62b1-3a13-7aa3-3a24089c6423\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"HealthCard.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"3f790c75-99c4-3d11-e2d7-3a24089c7ac0\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"8 tamamlanm\\u0131\\u015F alt g\\u00F6rev eklendi\",\"duration\":0.0167},{\"id\":\"95e09967-9627-2e6b-50ac-3a24089cb3e7\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Analize \\u00FCretim notu eklendi\",\"duration\":0.0167},{\"id\":\"d7e031b1-84a9-ccea-56f8-3a24089cde4a\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"App.DevRequests ekran\\u0131nda sat\\u0131r g\\u00FCncellendi (Status)\",\"duration\":0.0167}]", "SubTasks": "[{\"id\":\"40ca1e11-348e-6a1f-44da-3a24089c7aae\",\"title\":\"deploy_wizard: HealthCardHistory.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"c531aead-5088-8d56-f0c0-3a24089c7aae\",\"title\":\"deploy_wizard: HealthCardLabPhysical.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"0e8ffd2f-24e8-389a-69d1-3a24089c7aae\",\"title\":\"deploy_wizard: HealthCardAnamnesis.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"f46a3065-6d16-6afa-9651-3a24089c7aae\",\"title\":\"deploy_wizard: HealthCardResult.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"6d5926eb-db17-b024-ff88-3a24089c7aae\",\"title\":\"deploy_wizard: HealthCardPeriodicExamination.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"bbf66052-8bc3-cbd3-e089-3a24089c7aae\",\"title\":\"deploy_wizard: HealthCardPatientProtocol.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"db2f5469-4f39-16be-6954-3a24089c7aae\",\"title\":\"deploy_wizard: HealthCardSickLeave.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"1fea5028-41a1-a95e-601e-3a24089c7aae\",\"title\":\"deploy_wizard: HealthCard.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true}]", "Analysis": "

Amaç

\n

İK / işyeri hekimliği ekibi, kullanıcı yönetimi yetkisi (AbpIdentity.Users.Update) olmadan çalışanların sağlık kartını İnsan Kaynakları menüsünden açıp güncelleyebilsin. Liste kullanıcı listesine benzer, yalnızca Detay butonu taşır; detay formu üstte çalışan bilgisi, altta User Detail › Health Card ile aynı yedi sekmeyi gösterir.

\n\n

Görsel analizi

\n

[image-1] — Sekmeli düzenleme formu (User Detail › Health Card'ın kopyası). Sekmeler: Family / Personal History (açık), Laboratory - Physical Examination, Anamnesis, Result, Periodic Examinations, Patient Protocol Book, Sick Leaves. Sağ altta Save.

\n
    \n
  • Family History grubu: Mother / Father / Sibling / Child — her satırda durum seçimi (selectbox) + not (textbox).
  • \n
  • Personal History grubu: Blood Type (selectbox, örnek değer \"B Rh+\"), Congenital / Chronic Disease (textbox), Immunization alt başlığı altında Tetanus, Hepatitis, Other (textbox).
  • \n
  • Görünen satır yok; demo veri adayı yok (veri mevcut kullanıcı kayıtlarıdır).
  • \n
\n\n

Çözüm yolu

\n

Wizard List + Form alt formları. Sağlık kartı alanlarının tamamı AbpUsers'ta, çok kayıtlı bölümler mevcut Adm_T_User* tablolarında durur; yeni tablo gerekmez. Ana liste AbpUsers üzerinde salt okunur bir ListForm'dur ve hazır Detay butonuyla form görünümünü (/admin/form/App.Hr.HealthCard/{Id}) açar; formun üst kısmı çalışan bilgisi (salt okunur), sekmeler SubForms'tur: ilk dört sekme AbpUsers üzerinde TabType: Form (Id → Id, 1:1), son üç sekme Adm_T_User* üzerinde TabType: List (Id → UserId). Custom component gerekmez; User Detail React sayfasına dokunulmaz.

\n\n

Menü yeri

\n

İnsan Kaynakları › Sağlık Kartı

\n\n\n\n\n
SeviyeKodAd (TR / EN)İkonDurum
KökApp.Hrİnsan Kaynakları / Human ResourcesFcConferenceCallVar
EkranApp.Hr.HealthCardSağlık Kartı / Health CardFcInspectionYeni
\n

ModuleId: Hr · izin grubu App.Hr · route /admin/list/App.Hr.HealthCard · MenuParentCode: App.Hr, MenuParentPath boş.

\n

Yetki: App.Hr › App.Hr.HealthCard (Yeni; izin grubu App.Hr Var). Alt formlar: App.Hr › App.Hr.HealthCard › App.Hr.HealthCard{History|LabPhysical|Anamnesis|Result|PeriodicExamination|PatientProtocol|SickLeave} (hepsi Yeni).

\n\n

Veri modeli

\n

Yeni tablo yok. Tanım tablosu: Hayır (yeni tablo açılmıyor).

\n

Ana ekran App.Hr.HealthCard — AbpUsers (var), SelectCommandType: 1, anahtar Id (Guid, KeyFieldDbSourceType: 9), IsTenant: true, IsBranch: false, DefaultFilter \"IsDeleted\" = 'false'. Salt okunur alanlar (grid + formun üst grubu): Name, Surname, IdentityNumber, BirthDate, Gender (Male/Female, App.StaticLookup.*), Email, PhoneNumber, DepartmentId (lookup Hr_T_Department), JobPositionId (lookup Hr_T_JobPosition), HireDate, SskNo, BloodType, IsActive. Başlıklar AbpIdentity.Users ekranındaki anahtarlar.

\n

Form sekmeleri — tablo AbpUsers, anahtar Id, alan adı/tip/boy kolonla aynı:

\n\n\n\n\n\n\n
EkranGruplar ve alanlar
App.Hr.HealthCardHistoryFamilyHistory: {Mother|Father|Sibling|Child}HealthStatus nvarchar(16) dxSelectBox (Alive / Disease / Deceased) + …HealthNote nvarchar(512) dxTextBox. PersonalHistory: BloodType nvarchar(16) dxSelectBox (0 Rh+, 0 Rh-, A Rh+, A Rh-, B Rh+, B Rh-, AB Rh+, AB Rh-; anahtar = görünen metin), ChronicDisease nvarchar(512), Immunization: TetanusVaccination, HepatitisVaccination nvarchar(256), OtherVaccination nvarchar(512).
App.Hr.HealthCardLabPhysicalLaboratoryFindings: LabBiologicalAnalysis, LabBlood, LabUrine, LabRadiological, LabRadiologicalPhysiological, LabAudiometry, LabPulmonaryFunction, LabPsychologicalTests, LabOther (nvarchar(256)). PhysicalExamResults: ExamSensoryOrgans, ExamEye, ExamEnt, ExamSkin, ExamCardiovascular, ExamRespiratory, ExamDigestive, ExamUrogenital, ExamMusculoskeletal, ExamNeurological, ExamPsychiatric, ExamOther (nvarchar(256)), ExamBloodPressure, ExamPulse (nvarchar(16)), ExamHeight, ExamWeight (decimal, dxNumberBox).
App.Hr.HealthCardAnamnesisComplaintsQuestion: 7 × Complaint* bit dxCheckBox. DiagnosesQuestion: 10 × Diagnosis* bit dxCheckBox. Anamnesis (3–10. sorular): Hospitalized, HadSurgery, HadWorkAccident, OccupationalDiseaseExam, DisabilityPension, UnderTreatment bit dxCheckBox + her birinin …Note nvarchar(512); Smoking, Alcohol nvarchar(16) dxSelectBox (None / Occasionally / Normal / Quit) + SmokingNote, AlcoholNote.
App.Hr.HealthCardResultFitForWorkJob nvarchar(256), FitForWorkCondition nvarchar(512), FitnessDoctorId Guid, ShiftWorkFit, NightWorkFit bit dxCheckBox, ShiftNightDoctorId Guid. Doktor lookup'ı: SELECT \"Id\" AS \"Key\", \"FullName\" AS \"Name\" FROM \"Hr_T_Doctor\" WHERE \"IsDeleted\" = 'false' AND \"IsActive\" = 'true' AND \"TenantId\" = '@TENANTID' ORDER BY \"FullName\".
\n

Alan başlıkları var olan Abp.Identity.User.HealthCard.{FieldName} anahtarlarıdır; grup başlıkları Abp.Identity.User.HealthCard.{FamilyHistory|PersonalHistory|Immunization|LaboratoryFindings|PhysicalExamResults|ComplaintsQuestion|DiagnosesQuestion|Anamnesis}. Durum seçeneklerinin başlıkları var olan App.StaticLookup.{Alive|Disease|Deceased|None|Occasionally|Normal|Quit} anahtarları.

\n

Liste sekmeleri — var olan tablolar, alanlar kolonla aynı:

\n\n\n\n\n\n
EkranTabloAlanlar
App.Hr.HealthCardPeriodicExaminationAdm_T_UserPeriodicExaminationExamDate (zorunlu), Examination nvarchar(256) zorunlu, Result nvarchar(512), DoctorId (Hr_T_Doctor), DoctorDiplomaNo nvarchar(50) salt okunur; UserId gizli, ilişki kolonu.
App.Hr.HealthCardPatientProtocolAdm_T_UserPatientProtocolSequenceNo int, ProtocolDate zorunlu, ProtocolType nvarchar(32) zorunlu (Disease / WorkAccident / OccupationalDisease / Control / Other), ProtocolResult nvarchar(32) (TreatmentDischarged / Rest / Referral), RestDays int, ReferralPlace nvarchar(256), DoctorId; UserId gizli.
App.Hr.HealthCardSickLeaveAdm_T_UserSickLeaveStartDate, EndDate zorunlu, Days int zorunlu, SickLeaveType nvarchar(32) zorunlu (Disease / WorkAccident / OccupationalDisease / Maternity), Institution, Clinic nvarchar(256), SickLeaveReason nvarchar(512); UserId gizli.
\n

Üç tabloda kiracı + audit + soft delete kolonları var (TenantId, Creation*, LastModification*, IsDeleted, Deleter*); silme soft delete.

\n\n

Alt form ağacı

\n\n\n\n\n\n\n\n\n\n
SekmeHedef ListFormCodeTabTypeMenüİlişkiEkle / Düzenle / SilYetki yolu
Family / Personal HistoryApp.Hr.HealthCardHistoryFormMenüsüzId → Id✓ / ✓ / –App.Hr › App.Hr.HealthCard › App.Hr.HealthCardHistory
Laboratory - Physical ExaminationApp.Hr.HealthCardLabPhysicalFormMenüsüzId → Id✓ / ✓ / –… › App.Hr.HealthCard › App.Hr.HealthCardLabPhysical
AnamnesisApp.Hr.HealthCardAnamnesisFormMenüsüzId → Id✓ / ✓ / –… › App.Hr.HealthCard › App.Hr.HealthCardAnamnesis
ResultApp.Hr.HealthCardResultFormMenüsüzId → Id✓ / ✓ / –… › App.Hr.HealthCard › App.Hr.HealthCardResult
Periodic ExaminationsApp.Hr.HealthCardPeriodicExaminationListMenüsüzId → UserId✓ / ✓ / ✓… › App.Hr.HealthCard › App.Hr.HealthCardPeriodicExamination
Patient Protocol BookApp.Hr.HealthCardPatientProtocolListMenüsüzId → UserId✓ / ✓ / ✓… › App.Hr.HealthCard › App.Hr.HealthCardPatientProtocol
Sick LeavesApp.Hr.HealthCardSickLeaveListMenüsüzId → UserId✓ / ✓ / ✓… › App.Hr.HealthCard › App.Hr.HealthCardSickLeave
\n

Sekme başlıkları var olan anahtarlar: Abp.Identity.User.HealthCard.{History|LabPhysical|Anamnesis|Result}, App.IdentityManagement.{UserPeriodicExamination|UserPatientProtocol|UserSickLeave}. IsRefresh: true, DbType: 11 (Guid). Alt formlarda widget yok; tek gruplu formlarda (Result ve liste sekmeleri) grup başlığı yazılmaz.

\n\n

Etkilenen kısımlar

\n
    \n
  • Yeni ekranlar: App.Hr.HealthCard (menülü) + 7 menüsüz alt form.
  • \n
  • Menü: App.Hr altına App.Hr.HealthCard.
  • \n
  • Yetkiler: App.Hr.HealthCard (R) + .Create/.Update/.Delete/.Export/.Import; her alt form için aynı küme, ana ekranın altında.
  • \n
  • Dil anahtarları (yeni): App.Hr.HealthCard, App.Hr.HealthCard.Title, App.Hr.HealthCard.Desc ve 7 alt form kodu/başlığı. Alan, grup, sekme ve lookup başlıkları var olan anahtarlardan.
  • \n
  • Var olan ekranlar: değişmez. User Detail › Health Card ve App.IdentityManagement.User* listeleri aynı veriyi okumaya/yazmaya devam eder; iki ekrandaki değişiklik birbirinde görünür.
  • \n
\n\n

Görünümler ve davranış

\n
    \n
  • Ana ekran: Grid / Card / Pivot / Chart açık, varsayılan grid. EditingOptionDto: AllowDetail: true, AllowAdding / AllowUpdating / AllowDeleting: false — satırda yalnızca hazır Detay butonu. SelectionDto.Mode: none, CommandColumnDto: [].
  • \n
  • Ana ekran widget'ı (tek kayıt, 3 kart, ColSpan: 4): App.Widget.Total (blue, FaUsers), App.Widget.Active (\"IsActive\" = 'true', green, FaCheckCircle), App.Widget.Passive (\"IsActive\" = 'false', gray, FaTimesCircle); FROM \"AbpUsers\" WHERE \"TenantId\" = '@TENANTID', SubTitle = App.Hr.HealthCard.
  • \n
  • Form sekmeleri: UpdateServiceAddress: list-form-data/update; UpdateFieldsDefaultValue = LastModificationTime @NOW, LastModifierId @USERID. Komutu ekranın alanlarını yazar, kullanıcı kaydının diğer kolonlarına dokunmaz.
  • \n
  • Family History grubu ColCount: 2 (durum + not yan yana); diğer gruplar ColCount: 2, not/metin alanları ColSpan: 2. Anamnez notları ilgili soru işaretli değilse EditorScript ile salt okunur (Hospitalized → HospitalizedNote, …; Smoking/Alcohol = None → not salt okunur).
  • \n
  • Sick Leaves: EditorScript — StartDate / EndDate değişince Days = (EndDate − StartDate) + 1, alan elle değiştirilebilir; EndDate >= StartDate doğrulaması.
  • \n
  • Periodic Examinations: DoctorId seçilince DoctorDiplomaNo seçilen hekimin DiplomaNo'su ile doldurulur (lookup ek kolonu + EditorScript); ExamDate açılışta bugün.
  • \n
  • Patient Protocol Book: ProtocolDate açılışta bugün; RestDays yalnızca ProtocolResult = Rest, ReferralPlace yalnızca Referral iken düzenlenebilir.
  • \n
  • Liste sekmelerinde DeleteCommand soft delete (IsDeleted = 'true', DeleterId, DeletionTime).
  • \n
\n\n

Kararlar

\n
    \n
  • Yazma hedefi (onay): ilk dört sekme doğrudan AbpUsers'ın sağlık kolonlarını günceller (list-form-data/update); kullanıcı servisi (user-update) kullanılmaz, çünkü parola/rol akışı bu ekranın işi değildir ve yalnızca sağlık kolonları yazılır.
  • \n
  • Liste sekmeleri yeni menüsüz ekranlardır: var olan App.IdentityManagement.User* listelerinin yetkisi AbpIdentity.Users'tır; onları sekme yapmak İK kullanıcısına kullanıcı yönetimi yetkisi vermeyi gerektirirdi. Aynı tablolara App.Hr.HealthCard dalında yetkili yeni alt formlar açılır.
  • \n
  • Form sekmelerinde AllowAdding: true: standart gereği; ilişki Id → Id ve kullanıcı kaydı her zaman var olduğundan \"Yeni\" düğmesi hiç görünmez, ikinci kayıt açılmaz.
  • \n
  • Üst bilgi salt okunur: çalışan bilgisi Kullanıcılar ekranında yönetilir; burada yalnızca gösterilir.
  • \n
  • Avatar gösterilmez: kolon nvarchar(512) URL'dir, görsel alanı sözleşmesi (dxImageUpload, base64 nvarchar(MAX)) ile uyuşmaz; platform tablosunda kolon değişikliği çerçeve dışıdır.
  • \n
  • Vücut Kitle İndeksi ve hekim diploma/İSG belge bilgisi (onay): User Detail'de ekranda hesaplanan/türetilen değerlerdir, tabloda kolonu yoktur; formda alan olarak açılmaz. Boy ve kilo girilir.
  • \n
  • Değer kümeleri (onay): aile sağlık durumu Alive / Disease / Deceased; sigara/alkol None / Occasionally / Normal / Quit; protokol ve istirahat tipleri tablo açıklamalarındaki kümeler. Anahtarlar var olan App.StaticLookup.*, User Detail ile aynı değerler yazılır.
  • \n
  • Kullanıcı kapsamı: kiracının tüm kullanıcıları (aktif + pasif) listelenir; pasif çalışanın geçmiş sağlık kaydı da erişilebilir kalır, ayrımı widget ve IsActive kolonu gösterir.
  • \n
  • Demo veri yok: kayıtlar mevcut kullanıcılardır.
  • \n
\n\n

Üretim planı

\n
    \n
  1. deploy_wizard: HealthCardHistory.json
  2. \n
  3. deploy_wizard: HealthCardLabPhysical.json
  4. \n
  5. deploy_wizard: HealthCardAnamnesis.json
  6. \n
  7. deploy_wizard: HealthCardResult.json
  8. \n
  9. deploy_wizard: HealthCardPeriodicExamination.json
  10. \n
  11. deploy_wizard: HealthCardPatientProtocol.json
  12. \n
  13. deploy_wizard: HealthCardSickLeave.json
  14. \n
  15. deploy_wizard: HealthCard.json
  16. \n
\n\n

Üretime hazır

\n

Evet

MCP

\n

Üretilenler (8 wizard, yeni tablo yok): HealthCardHistory, HealthCardLabPhysical, HealthCardAnamnesis, HealthCardResult (AbpUsers, menüsüz, Form sekmesi, Ekle/Düzenle açık, Sil kapalı) · HealthCardPeriodicExamination, HealthCardPatientProtocol, HealthCardSickLeave (Adm_T_User*, menüsüz, List sekmesi, Ekle/Düzenle/Sil açık, soft delete) · HealthCard (AbpUsers, menülü, yalnızca Detay butonu, 7 alt form sekmesi, Toplam/Aktif/Pasif widget'ı).

\n

Menü / yetki: İnsan Kaynakları › Sağlık Kartları (App.Hr.HealthCard, FcInspection, /admin/list/App.Hr.HealthCard). Alt form yetkileri App.Hr.HealthCard altına taşınır. Yetkiler hiçbir role otomatik atanmaz.

\n

Analizden sapma / varsayımlar:

\n
    \n
  • Kullanıcı isteğiyle menü ve ekran başlığı Health Cards / Sağlık Kartları yazıldı (analizde \"Health Card / Sağlık Kartı\").
  • \n
  • Form sekmelerindeki UpdateFieldsDefaultValue (LastModificationTime @NOW, LastModifierId @USERID) wizard cevabında karşılığı olmadığı için yazılamadı; UpdateServiceAddress varsayılan list-form-data/update. Gerekirse ListForm editöründen eklenmeli.
  • \n
  • Liste sekmelerinde UserId gizlenemedi (wizard'da Visible yok); formda yer almaz, gridde kullanıcı adını gösteren lookup ile çıkar. İstenirse ListForm editöründen gizlenebilir.
  • \n
  • Sick Leaves'te EndDate >= StartDate kuralı ValidationRule olarak yazılamadı; EndDate script'i uyarı (notify) verir.
  • \n
  • ExamDate / ProtocolDate \"bugün\" varsayılanı, yalnızca alan boşken açılışta çalışan script ile verildi.
  • \n
  • Ana ekranın üst bilgi alanları readOnly; JobPosition lookup'ı salt okunur gösterim için cascade'siz yazıldı.
  • \n
\n

DB Migrate bekleyen wizard'lar: HealthCardHistory, HealthCardLabPhysical, HealthCardAnamnesis, HealthCardResult, HealthCardPeriodicExamination, HealthCardPatientProtocol, HealthCardSickLeave, HealthCard. Demo veri yok.

" diff --git a/configs/seeds/host/data/App.Hr.Shift.json b/configs/seeds/host/data/App.Hr.Shift.json new file mode 100644 index 00000000..d184f1d3 --- /dev/null +++ b/configs/seeds/host/data/App.Hr.Shift.json @@ -0,0 +1,29 @@ +{ + "ListFormCode": "App.Hr.Shift", + "KeyFieldName": "Id", + "GeneratedAt": "2026-10-02T12:05:29.2891234Z", + "Order": 0, + "Rows": [ + { + "Name": "Sabah", + "StartTime": "08:00", + "EndTime": "16:00", + "IsActive": true, + "Id": "df1b7d79-07a5-4afd-5c2c-3a240eae2c48" + }, + { + "Name": "Akşam", + "StartTime": "16:00", + "EndTime": "00:00", + "IsActive": true, + "Id": "72968eb6-c7b5-1ab2-942b-3a240eae2c49" + }, + { + "Name": "Gece", + "StartTime": "00:00", + "EndTime": "08:00", + "IsActive": true, + "Id": "6d625cbb-aec9-4edf-86d2-3a240eae2c49" + } + ] +} diff --git a/configs/seeds/host/data/App.Languages.LanguageText.json b/configs/seeds/host/data/App.Languages.LanguageText.json index 3d8f4a87..86ec8cfd 100644 --- a/configs/seeds/host/data/App.Languages.LanguageText.json +++ b/configs/seeds/host/data/App.Languages.LanguageText.json @@ -69080,6 +69080,20 @@ "Key": "App.Mcp.Error.VerifySelectFailed", "Value": "Ekran sorgusu başarısız: {0}" }, + { + "Id": "ffd914ea-7f36-58e1-a72a-506b7eb07cb9", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Mcp.Error.SelectFailed", + "Value": "The query failed: {0} Do not assume a column exists (IsDeleted, TenantId, IsActive are not on every table); check the table's columns with search_schema or a SELECT on INFORMATION_SCHEMA.COLUMNS, then fix the query." + }, + { + "Id": "beb659d6-fabd-5964-be42-ffe996044afc", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Mcp.Error.SelectFailed", + "Value": "Sorgu çalışmadı: {0} Bir kolonun var olduğunu varsayma (IsDeleted, TenantId, IsActive her tabloda yoktur); tablonun kolonlarını search_schema ya da INFORMATION_SCHEMA.COLUMNS üzerinde bir SELECT ile kontrol edip sorguyu düzelt." + }, { "Id": "aac27480-88f4-5230-9820-f9c7472ef178", "CultureName": "en", @@ -74917,6 +74931,202 @@ "ResourceName": "Platform", "Key": "App.ListFormField.DragToReorder", "Value": "Sürükleyerek sırala" + }, + { + "Id": "35a42330-e286-5fb5-9d9e-b61749533a17", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Hr.Shift", + "Value": "Shifts" + }, + { + "Id": "2c426526-1141-569f-ad8f-7b2b2c0efd35", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Hr.Shift", + "Value": "Vardiyalar" + }, + { + "Id": "bb0b9c7a-cde2-5ed0-8c27-6950ea7f3b53", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Hr.Shift.Title", + "Value": "Shifts" + }, + { + "Id": "ff8eb858-9c0a-5b9e-8181-bdc6a6a16ab5", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Hr.Shift.Title", + "Value": "Vardiyalar" + }, + { + "Id": "3d3d8758-b436-5159-9708-007993e8eeab", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Hr.Shift.Desc", + "Value": "Shift definitions" + }, + { + "Id": "cf02c928-6d89-517a-8d38-69526f714816", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Hr.Shift.Desc", + "Value": "Vardiya tanımları" + }, + { + "Id": "aeb48e3b-03d4-5adb-a19d-e437a8d2a7b4", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.ShiftName", + "Value": "Shift Name" + }, + { + "Id": "78ad15d9-5df6-5f12-88e5-44bfadf139a0", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.ShiftName", + "Value": "Vardiya Adı" + }, + { + "Id": "9c1aa263-53d3-5870-8cbd-ae9cc6fed884", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Hr.EventLog", + "Value": "Event Log" + }, + { + "Id": "7b2a90ad-f9d7-5edb-a532-8976c3b7bfdd", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Hr.EventLog", + "Value": "Olay Günlüğü" + }, + { + "Id": "2cdc7085-010a-57b4-a1b0-92b822160bae", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Hr.EventLog.Title", + "Value": "Event Log" + }, + { + "Id": "5aa973c2-efcd-5d74-aa8c-d81f32455e9d", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Hr.EventLog.Title", + "Value": "Olay Günlüğü" + }, + { + "Id": "4aa7bad2-8c10-5f8a-ae6c-e31d5af3234d", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Hr.EventLog.Desc", + "Value": "Important events recorded by shift supervisors, security and observation rooms" + }, + { + "Id": "b3e31a80-2040-594e-8019-172da369656f", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Hr.EventLog.Desc", + "Value": "Vardiya amiri, güvenlik ve gözlem odasının kaydettiği önemli olaylar" + }, + { + "Id": "b41120f5-2c85-50a4-a6f4-9745641e0330", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Hr.EventLog.Widget.Important", + "Value": "Important" + }, + { + "Id": "cf863bdb-3b42-53db-a8b6-b7adf7298001", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Hr.EventLog.Widget.Important", + "Value": "Önemli" + }, + { + "Id": "aa2b144c-246a-5da6-a51f-99a12aed48f7", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.LogSource", + "Value": "Source" + }, + { + "Id": "f35114e6-4f92-5177-ba2a-d1a0ebc26a49", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.LogSource", + "Value": "Kaynak" + }, + { + "Id": "5b2206b0-e108-5e3a-a2e3-376a13b06425", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.EventUserId", + "Value": "Person Involved" + }, + { + "Id": "fc6db7c5-13de-54bc-8e41-030e3f610dd9", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.EventUserId", + "Value": "Vardiya Amiri / Olayı Yaşayan" + }, + { + "Id": "124e1013-22c9-591a-8993-174fb9036cb5", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.EventDate", + "Value": "Event Date" + }, + { + "Id": "ec854e6d-a44e-54b0-ba08-5e1b0339cb83", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.EventDate", + "Value": "Olay Tarihi" + }, + { + "Id": "9f0010c1-702c-5bd9-81dc-56b3ca171341", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.EventTime", + "Value": "Event Time" + }, + { + "Id": "75fe3dff-f1fe-56de-ba17-681f507e655a", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.EventTime", + "Value": "Olay Saati" + }, + { + "Id": "51bc2879-a43d-5fef-a425-92000db88fce", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.ShiftId", + "Value": "Shift" + }, + { + "Id": "06cd6a46-45b4-5d04-9a7d-96072355f654", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.ShiftId", + "Value": "Vardiya" + }, + { + "Id": "c4bebb07-722e-5292-a6d1-43ca79ac6b24", + "CultureName": "en", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.CreatorId", + "Value": "Created By" + }, + { + "Id": "cf65fff8-a56e-5b77-bad3-a144c881b8fe", + "CultureName": "tr", + "ResourceName": "Platform", + "Key": "App.Listform.ListformField.CreatorId", + "Value": "Kayıt" } ] } diff --git a/configs/seeds/host/data/App.Menus.Menu.json b/configs/seeds/host/data/App.Menus.Menu.json index 9863ec82..742cf0e9 100644 --- a/configs/seeds/host/data/App.Menus.Menu.json +++ b/configs/seeds/host/data/App.Menus.Menu.json @@ -1583,7 +1583,7 @@ "Id": "ae8c7c61-8b57-4335-bacb-d54bcce3d661", "Code": "App.Hr.Visitor", "DisplayName": "App.Hr.Visitor", - "Order": 4, + "Order": 7, "Url": "/admin/list/App.Hr.Visitor", "Icon": "FcBusinessman", "ParentCode": "App.Hr", @@ -1598,7 +1598,7 @@ "Id": "8803f8c5-e85b-491d-9330-a9dd5a95f1a1", "Code": "App.Hr.HealthCard", "DisplayName": "App.Hr.HealthCard", - "Order": 2, + "Order": 4, "Url": "/admin/list/App.Hr.HealthCard", "Icon": "FcInspection", "ParentCode": "App.Hr", @@ -1610,135 +1610,213 @@ "ModuleId": "Hr" }, { - "ParentCode": "App.Hr", + "Id": "aa47dc14-483f-41ad-83f5-f304050db135", "Code": "App.Hr.Trainings", "DisplayName": "App.Hr.Trainings", "Order": 5, "Url": null, "Icon": "FcGraduationCap", + "ParentCode": "App.Hr", "RequiredPermissionName": null, + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Hr" }, { - "ParentCode": "App.Hr.Trainings", + "Id": "0912d86d-80ee-48b2-8926-560112cf24d1", "Code": "App.Hr.TrainingType", "DisplayName": "App.Hr.TrainingType", "Order": 1, "Url": "/admin/list/App.Hr.TrainingType", "Icon": "FcList", + "ParentCode": "App.Hr.Trainings", "RequiredPermissionName": "App.Hr.TrainingType", + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Hr" }, { - "ParentCode": "App.Hr.Trainings", + "Id": "484a01d3-b27d-4453-8411-a31f88d05a23", "Code": "App.Hr.TrainingSubject", "DisplayName": "App.Hr.TrainingSubject", "Order": 2, "Url": "/admin/list/App.Hr.TrainingSubject", "Icon": "FcViewDetails", + "ParentCode": "App.Hr.Trainings", "RequiredPermissionName": "App.Hr.TrainingSubject", + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Hr" }, { - "ParentCode": "App.Hr.Trainings", + "Id": "b35fc8d6-a535-41ff-9b28-ef4ae900187f", "Code": "App.Hr.Training", "DisplayName": "App.Hr.Training", "Order": 3, "Url": "/admin/list/App.Hr.Training", "Icon": "FcGraduationCap", + "ParentCode": "App.Hr.Trainings", "RequiredPermissionName": "App.Hr.Training", + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Hr" }, { - "ParentCode": "App.Hr", + "Id": "18146db0-b2aa-49d8-b39c-0165a1d85e53", "Code": "App.Hr.Vehicles", "DisplayName": "App.Hr.Vehicles", "Order": 6, "Url": null, "Icon": "FcAutomotive", + "ParentCode": "App.Hr", "RequiredPermissionName": null, + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Hr" }, { - "ParentCode": "App.Hr.Vehicles", + "Id": "1d5c26e2-c8eb-49b4-99d3-e77b76220d2c", "Code": "App.Hr.VehicleDocument", "DisplayName": "App.Hr.VehicleDocument", "Order": 1, "Url": "/admin/list/App.Hr.VehicleDocument", "Icon": "FcDocument", + "ParentCode": "App.Hr.Vehicles", "RequiredPermissionName": "App.Hr.VehicleDocument", + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Hr" }, { - "ParentCode": "App.Hr.Vehicles", + "Id": "e07191b4-f6b0-42f2-a19a-fd22a41abf39", "Code": "App.Hr.Vehicle", "DisplayName": "App.Hr.Vehicle", "Order": 2, "Url": "/admin/list/App.Hr.Vehicle", "Icon": "FcAutomotive", + "ParentCode": "App.Hr.Vehicles", "RequiredPermissionName": "App.Hr.Vehicle", + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Hr" }, { - "ParentCode": "App.Hr.Vehicles", + "Id": "6830fe01-a678-45c9-96e2-a6daefc77ff6", "Code": "App.Hr.VehicleDestination", "DisplayName": "App.Hr.VehicleDestination", "Order": 3, "Url": "/admin/list/App.Hr.VehicleDestination", "Icon": "FcGlobe", + "ParentCode": "App.Hr.Vehicles", "RequiredPermissionName": "App.Hr.VehicleDestination", + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Hr" }, { - "ParentCode": "App.Hr.Vehicles", + "Id": "e61fd31e-265b-410e-9e71-4862aea4bdff", "Code": "App.Hr.Driver", "DisplayName": "App.Hr.Driver", "Order": 4, "Url": "/admin/list/App.Hr.Driver", "Icon": "FcBusinessman", + "ParentCode": "App.Hr.Vehicles", "RequiredPermissionName": "App.Hr.Driver", + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Hr" }, { - "ParentCode": "App.Hr.Vehicles", + "Id": "d2672ea5-55a2-43fc-8832-901cfd3bcf4d", "Code": "App.Hr.VehicleExpenseDefinition", "DisplayName": "App.Hr.VehicleExpenseDefinition", "Order": 5, "Url": "/admin/list/App.Hr.VehicleExpenseDefinition", "Icon": "FcList", + "ParentCode": "App.Hr.Vehicles", "RequiredPermissionName": "App.Hr.VehicleExpenseDefinition", + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Hr" }, { - "ParentCode": "App.Hr.Vehicles", + "Id": "be5ca380-4054-4cc5-80f6-67bee385a145", "Code": "App.Hr.VehicleExpense", "DisplayName": "App.Hr.VehicleExpense", "Order": 6, "Url": "/admin/list/App.Hr.VehicleExpense", "Icon": "FcMoneyTransfer", + "ParentCode": "App.Hr.Vehicles", "RequiredPermissionName": "App.Hr.VehicleExpense", + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, "ModuleId": "Hr" }, { - "ParentCode": "App.Hr.Vehicles", + "Id": "65918815-4fd4-49b7-aed1-477e0acc4e16", "Code": "App.Hr.VehicleMovement", "DisplayName": "App.Hr.VehicleMovement", "Order": 7, "Url": "/admin/list/App.Hr.VehicleMovement", "Icon": "FcInspection", + "ParentCode": "App.Hr.Vehicles", "RequiredPermissionName": "App.Hr.VehicleMovement", + "CssClass": null, + "Target": null, "IsDisabled": false, + "ElementId": null, + "ModuleId": "Hr" + }, + { + "Id": "0f1b3f0c-f9d8-4f09-9506-59fb19272176", + "Code": "App.Hr.Shift", + "DisplayName": "App.Hr.Shift", + "Order": 2, + "Url": "/admin/list/App.Hr.Shift", + "Icon": "FcClock", + "ParentCode": "App.Hr", + "RequiredPermissionName": "App.Hr.Shift", + "CssClass": null, + "Target": null, + "IsDisabled": false, + "ElementId": null, + "ModuleId": "Hr" + }, + { + "Id": "5786d92e-0501-4775-bf1b-697a41a90f40", + "Code": "App.Hr.EventLog", + "DisplayName": "App.Hr.EventLog", + "Order": 8, + "Url": "/admin/list/App.Hr.EventLog", + "Icon": "FcViewDetails", + "ParentCode": "App.Hr", + "RequiredPermissionName": "App.Hr.EventLog", + "CssClass": null, + "Target": null, + "IsDisabled": false, + "ElementId": null, "ModuleId": "Hr" } ] diff --git a/configs/seeds/host/sql/object/Hr_T_EventLog.sql b/configs/seeds/host/sql/object/Hr_T_EventLog.sql new file mode 100644 index 00000000..5e0c9b07 --- /dev/null +++ b/configs/seeds/host/sql/object/Hr_T_EventLog.sql @@ -0,0 +1,28 @@ +IF OBJECT_ID(N'[dbo].[Hr_T_EventLog]', 'U') IS NULL +BEGIN + CREATE TABLE [dbo].[Hr_T_EventLog] + ( + [Id] uniqueidentifier NOT NULL DEFAULT NEWID(), + [TenantId] uniqueidentifier NULL, + [BranchId] uniqueidentifier NULL, + [LogSource] nvarchar(32) NOT NULL, + [UserId] uniqueidentifier NOT NULL, + [EventDate] date NOT NULL, + [EventTime] nvarchar(5) NOT NULL, + [Importance] int NOT NULL DEFAULT 1, + [ShiftId] uniqueidentifier NULL, + [Description] nvarchar(MAX) NULL, + [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, + CONSTRAINT [PK_Hr_T_EventLog] 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/configs/seeds/host/sql/object/Hr_T_Shift.sql b/configs/seeds/host/sql/object/Hr_T_Shift.sql new file mode 100644 index 00000000..04925c59 --- /dev/null +++ b/configs/seeds/host/sql/object/Hr_T_Shift.sql @@ -0,0 +1,24 @@ +IF OBJECT_ID(N'[dbo].[Hr_T_Shift]', 'U') IS NULL +BEGIN + CREATE TABLE [dbo].[Hr_T_Shift] + ( + [Id] uniqueidentifier NOT NULL DEFAULT NEWID(), + [TenantId] uniqueidentifier NULL, + [Name] nvarchar(64) NOT NULL, + [StartTime] nvarchar(5) NULL, + [EndTime] nvarchar(5) NULL, + [IsActive] bit NOT NULL DEFAULT 1, + [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, + CONSTRAINT [PK_Hr_T_Shift] 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/configs/seeds/host/wizard/EventLog.json b/configs/seeds/host/wizard/EventLog.json new file mode 100644 index 00000000..cccb21e8 --- /dev/null +++ b/configs/seeds/host/wizard/EventLog.json @@ -0,0 +1,1930 @@ +{ + "Wizard": { + "ComponentKind": 0, + "WizardName": "EventLog", + "WizardCode": "App.Hr.EventLog", + "SeededAt": "2026-10-02T15:05:59.289021+03:00", + "CustomComponentName": null, + "PermissionGroupName": "App.Hr", + "ModuleId": "Hr", + "Menu": { + "MenuParentCode": "App.Hr", + "MenuParentIcon": "FcConferenceCall", + "MenuCode": "App.Hr.EventLog", + "MenuOrder": 7, + "MenuUrl": "/admin/list/App.Hr.EventLog", + "MenuIcon": "FcViewDetails" + }, + "Language": { + "MenuParentEn": "Human Resources", + "MenuParentTr": "İnsan Kaynakları", + "PermissionGroupEn": "Human Resources", + "PermissionGroupTr": "İnsan Kaynakları", + "MenuEn": "Event Log", + "MenuTr": "Olay Günlüğü", + "TitleEn": "Event Log", + "TitleTr": "Olay Günlüğü", + "DescEn": "Important events recorded by shift supervisors, security and observation rooms", + "DescTr": "Vardiya amiri, güvenlik ve gözlem odasının kaydettiği önemli olaylar", + "Texts": [ + { + "Key": "App.Hr.EventLog.Widget.Important", + "En": "Important", + "Tr": "Önemli" + } + ] + }, + "Groups": [ + { + "Items": [ + { + "FieldName": "Id", + "CaptionName": "App.Listform.ListformField.Id", + "En": "Id", + "Tr": "Kimlik" + }, + { + "FieldName": "LogSource", + "CaptionName": "App.Listform.ListformField.LogSource", + "En": "Source", + "Tr": "Kaynak" + }, + { + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", + "En": "Branch", + "Tr": "Şube Adı" + }, + { + "FieldName": "UserId", + "CaptionName": "App.Listform.ListformField.EventUserId", + "En": "Person Involved", + "Tr": "Vardiya Amiri / Olayı Yaşayan" + }, + { + "FieldName": "EventDate", + "CaptionName": "App.Listform.ListformField.EventDate", + "En": "Event Date", + "Tr": "Olay Tarihi" + }, + { + "FieldName": "EventTime", + "CaptionName": "App.Listform.ListformField.EventTime", + "En": "Event Time", + "Tr": "Olay Saati" + }, + { + "FieldName": "Importance", + "CaptionName": "App.Listform.ListformField.Importance", + "En": "Importance", + "Tr": "Önem Durumu" + }, + { + "FieldName": "ShiftId", + "CaptionName": "App.Listform.ListformField.ShiftId", + "En": "Shift", + "Tr": "Vardiya" + }, + { + "FieldName": "Description", + "CaptionName": "App.Listform.ListformField.Description", + "En": "Description", + "Tr": "Açıklama" + } + ] + } + ] + }, + "ListForm": { + "EditType": null, + "DataSourceCode": "Default", + "KeyFieldDbSourceType": 9, + "TableName": null, + "DefaultFilter": "\"IsDeleted\" = 'false'", + "SelectCommand": "Hr_T_EventLog", + "SelectCommandType": 1, + "SelectFieldsDefaultValueDto": [], + "SeedFilePath": null, + "SeedSyncInsert": false, + "SeedSyncUpdate": false, + "SeedSyncDelete": false, + "DeleteCommand": "UPDATE \"Hr_T_EventLog\" SET \"DeleterId\"=@DeleterId, \"DeletionTime\"=CURRENT_TIMESTAMP, \"IsDeleted\"='true' WHERE \"Id\" IN @Id", + "DeleteBeforeCommand": null, + "DeleteAfterCommand": null, + "DeleteFieldsDefaultValueDto": [ + { + "FieldName": "DeleterId", + "FieldDbType": 9, + "Value": "@USERID", + "CustomValueType": 2, + "SqlQuery": null + }, + { + "FieldName": "Id", + "FieldDbType": 9, + "Value": "@ID", + "CustomValueType": 2, + "SqlQuery": null + } + ], + "InsertCommand": null, + "InsertBeforeCommand": null, + "InsertAfterCommand": null, + "InsertFieldsDefaultValueDto": [ + { + "FieldName": "CreationTime", + "FieldDbType": 6, + "Value": "@NOW", + "CustomValueType": 2, + "SqlQuery": null + }, + { + "FieldName": "CreatorId", + "FieldDbType": 9, + "Value": "@USERID", + "CustomValueType": 2, + "SqlQuery": null + }, + { + "FieldName": "IsDeleted", + "FieldDbType": 3, + "Value": "false", + "CustomValueType": 1, + "SqlQuery": null + }, + { + "FieldName": "Id", + "FieldDbType": 9, + "Value": "@NEWID", + "CustomValueType": 2, + "SqlQuery": null + } + ], + "UpdateCommand": null, + "UpdateBeforeCommand": null, + "UpdateAfterCommand": null, + "UpdateFieldsDefaultValueDto": [], + "FormFieldsDefaultValueDto": [], + "WidgetsDto": [ + { + "ColGap": 3, + "ColSpan": 4, + "SqlQuery": "SELECT 'App.Widget.Total' AS \"Title\", CAST(COUNT(*) AS VARCHAR(32)) AS \"Value\", 'blue' AS \"Color\", 'App.Hr.EventLog' AS \"SubTitle\", 'FaClipboardList' AS \"Icon\" FROM \"Hr_T_EventLog\" WHERE \"TenantId\" = '@TENANTID' UNION ALL SELECT 'App.Widget.Today', CAST(COUNT(*) AS VARCHAR(32)), 'green', 'App.Hr.EventLog', 'FaCalendarDay' FROM \"Hr_T_EventLog\" WHERE \"TenantId\" = '@TENANTID' AND CAST(\"EventDate\" AS DATE) = CAST(CURRENT_TIMESTAMP AS DATE) UNION ALL SELECT 'App.Hr.EventLog.Widget.Important', CAST(COUNT(*) AS VARCHAR(32)), 'red', 'App.Hr.EventLog', 'FaExclamationTriangle' FROM \"Hr_T_EventLog\" WHERE \"TenantId\" = '@TENANTID' AND \"Importance\" >= 4", + "Title": "Title", + "Value": "Value", + "ValueClassName": "text-3xl", + "Color": "Color", + "Icon": "Icon", + "SubTitle": "SubTitle", + "OnClick": null, + "ClassName": "mb-3", + "IsActive": true + } + ], + "ExtraFilterEditDto": [], + "ListFormCode": "App.Hr.EventLog", + "CultureName": "en", + "Name": "App.Hr.EventLog", + "KeyFieldName": "Id", + "Title": "App.Hr.EventLog.Title", + "SortMode": "single", + "PageSize": 10, + "Width": 0, + "Height": 0, + "FullHeight": false, + "Description": "App.Hr.EventLog.Desc", + "FilterRowDto": { + "Visible": true, + "ApplyFilter": "auto", + "AllowUserUiFilterSave": true + }, + "RowDto": { + "RowHeight": "auto", + "WhiteSpace": "normal", + "OverflowWrap": "break-word" + }, + "HeaderFilterDto": { + "Visible": true, + "AllowSearch": false, + "Height": 325, + "SearchTimeout": 500, + "Width": 252 + }, + "FilterPanelDto": { + "Visible": false, + "Texts": null, + "FilterEnabled": false, + "CustomizeText": null + }, + "SearchPanelDto": { + "Visible": true, + "Width": 160 + }, + "GroupPanelDto": { + "Visible": true, + "AutoExpandAll": false + }, + "SelectionDto": { + "Mode": "none", + "AllowSelectAll": false, + "SelectAllMode": "allPages", + "ShowCheckBoxesMode": "always" + }, + "ColumnOptionDto": { + "ShowBorders": true, + "ShowRowLines": true, + "ShowColumnLines": false, + "RowAlternationEnabled": true, + "AllowColumnReordering": true, + "AllowColumnResizing": true, + "ColumnResizingMode": "widget", + "ColumnAutoWidth": true, + "RtlEnabled": false, + "ColumnFixingEnabled": true, + "ColumnChooserEnabled": true, + "ColumnChooserMode": "dragAndDrop", + "HoverStateEnabled": false, + "ColumnHidingEnabled": true, + "FocusedRowEnabled": true, + "ShowColumnHeaders": true + }, + "PivotOptionDto": { + "ColumnChooserEnabled": false, + "AllowFieldDragging": true, + "ShowFieldPanel": true, + "ShowDataFields": true, + "ShowColumnFields": true, + "ShowRowFields": true, + "ShowFilterFields": true, + "ShowChart": false, + "ChartHeight": 320, + "ChartCommonSeriesType": "bar" + }, + "TreeOptionDto": { + "KeyExpr": null, + "ParentIdExpr": null, + "HasItemsExpr": null, + "RootValue": null, + "ExpandedRowKeys": [], + "AutoExpandAll": false, + "RecursiveSelection": false, + "TitleExpr": null, + "StartExpr": null, + "EndExpr": null, + "ProgressExpr": null + }, + "GanttOptionDto": { + "KeyExpr": null, + "ParentIdExpr": null, + "HasItemsExpr": null, + "RootValue": null, + "ExpandedRowKeys": [], + "AutoExpandAll": false, + "RecursiveSelection": false, + "TitleExpr": null, + "ScaleType": "weeks", + "StartExpr": null, + "EndExpr": null, + "ProgressExpr": null, + "EditingEnabled": false, + "AllowTaskAdding": false, + "AllowTaskUpdating": false, + "AllowTaskResourceUpdating": false, + "AllowTaskDeleting": false, + "AllowDependencyAdding": false, + "AllowDependencyDeleting": false, + "AllowResourceAdding": false, + "AllowResourceUpdating": false, + "AllowResourceDeleting": false + }, + "SchedulerOptionDto": { + "TextExpr": null, + "UserNameExpr": null, + "DescriptionExpr": null, + "StartDateExpr": null, + "EndDateExpr": null, + "AllDayExpr": null, + "RecurrenceRuleExpr": null, + "RecurrenceExceptionExpr": null, + "StartDayHour": 8, + "EndDayHour": 20, + "DefaultView": "week", + "ShowAllDayPanel": true, + "CellDuration": 30, + "FirstDayOfWeek": 1, + "CrossScrollingEnabled": false, + "AllowResizing": false, + "AllowDragging": false, + "AllowDeleting": false, + "AllowEditing": false, + "AllowAdding": false + }, + "TodoOptionDto": { + "TitleExpr": null, + "StatusExpr": null, + "DescriptionExpr": null, + "AnalysisExpr": null, + "DueDateExpr": null, + "TagExpr": null, + "AssigneeExpr": null, + "PriorityExpr": null, + "CompletedExpr": null, + "OrderExpr": null, + "TimesheetExpr": null, + "SubTaskExpr": null, + "StatusOrder": null, + "AllowDragging": true + }, + "PagerOptionDto": { + "Visible": true, + "ShowPageSizeSelector": true, + "ShowInfo": false, + "ShowNavigationButtons": true, + "AllowedPageSizes": "10,20,50,100", + "InfoText": "Page {0} of {1} ({2} items)", + "DisplayMode": "adaptive", + "ScrollingMode": "standard", + "LoadPanelEnabled": "auto", + "LoadPanelText": "Loading..." + }, + "EditingOptionDto": { + "Mode": "popup", + "RefreshMode": "full", + "AllowUpdating": true, + "AllowDetail": false, + "AllowDeleting": true, + "AllowAllDeleting": false, + "AllowAdding": true, + "AllowDuplicate": false, + "UseIcons": false, + "ConfirmDelete": true, + "NewRowPosition": "viewportTop", + "SelectTextOnEditStart": false, + "StartEditAction": "click", + "EditColumnName": null, + "Popup": { + "Title": "App.Hr.EventLog.Title", + "ShowTitle": true, + "Width": 800, + "Height": 500, + "FullScreen": false, + "HideOnOutsideClick": true, + "ResizeEnabled": true, + "DragEnabled": true, + "RestorePosition": true, + "Position": "center" + }, + "SendOnlyChangedFormValuesUpdate": false, + "AddPageUrl": null, + "AddDialogName": null, + "AddDialogParameters": null + }, + "EditingFormDto": [ + { + "Order": 1, + "ItemType": "group", + "Caption": "", + "ColCount": 2, + "ColSpan": 2 + } + ], + "PermissionDto": { + "C": "App.Hr.EventLog.Create", + "R": "App.Hr.EventLog", + "U": "App.Hr.EventLog.Update", + "D": "App.Hr.EventLog.Delete", + "E": "App.Hr.EventLog.Export", + "I": "App.Hr.EventLog.Import", + "N": "App.Hr.EventLog.Note" + }, + "CommandColumnDto": [], + "StateStoringDto": { + "Enabled": true, + "Type": "custom", + "StorageKey": "listFormGridStorage-App.Hr.EventLog", + "SavingTimeout": 5000 + }, + "CustomJsSources": [], + "CustomStyleSources": [], + "UpdateServiceAddress": "list-form-data/update", + "InsertServiceAddress": "list-form-data/insert", + "DeleteServiceAddress": "list-form-data/delete", + "IsTenant": true, + "IsBranch": true, + "IsOrganizationUnit": false, + "ListFormType": "List", + "IsSubForm": false, + "ShowNote": false, + "SubFormsListFormType": "Form", + "SubFormsDto": [], + "ExtraFilterDto": [], + "LayoutDto": { + "Grid": true, + "Card": true, + "Pivot": true, + "Chart": true, + "Tree": false, + "Gantt": false, + "Scheduler": false, + "Todo": false, + "DefaultLayout": "grid" + }, + "WorkflowDto": { + "ApprovalUserFieldName": null, + "ApprovalDateFieldName": null, + "ApprovalStatusFieldName": null, + "ApprovalDescriptionFieldName": null, + "ApprovalIsFilterUserName": false, + "ApprovalIsResetWorkflow": false, + "Criteria": [] + }, + "UserId": null, + "RoleId": null, + "CommonDto": { + "AdjustOnZoom": true, + "ContainerBackgroundColor": "#FFFFFF", + "Palette": "Material", + "PaletteExtensionMode": "blend", + "DefaultPane": null, + "Disabled": false, + "Theme": "generic.light" + }, + "AdaptivelayoutDto": { + "Height": 80, + "Width": 80, + "KeepLabels": true + }, + "AnimationDto": { + "Duration": 1000, + "Easing": "easeOutCubic", + "Enabled": true, + "MaxPointCountSupported": 300 + }, + "AnnotationsDto": [], + "ArgumentAxisDto": { + "ArgumentType": null, + "AggregationInterval": null, + "Grid": { + "Color": "#d3d3d3", + "Visible": false, + "Width": 1 + }, + "HoverMode": "none", + "Label": { + "DisplayMode": "standard", + "RotationAngle": 90, + "OverlappingBehavior": "hide" + }, + "Position": "bottom", + "Title": null, + "Visible": true, + "Width": 1, + "WorkdaysOnly": false + }, + "CommonAnnotationSettingsDto": { + "Argument": null, + "Border": { + "Color": "#d3d3d3", + "CornerRadius": 0, + "DashStyle": "solid", + "Visible": false, + "Width": 1 + }, + "Color": "#ffffff", + "Description": null, + "Font": { + "Color": "#FFFFFF", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Height": -1, + "Image": null, + "OffsetX": -1, + "OffsetY": -1, + "PaddingLeftRight": 10, + "PaddingTopBottom": 10, + "Series": null, + "Text": null, + "TooltipEnabled": true, + "Type": null, + "Value": null, + "Width": 0, + "WordWrap": "normal", + "X": 0, + "Y": 0 + }, + "CommonAxisSettingsDto": { + "Grid": { + "Color": "#d3d3d3", + "Visible": false, + "Width": 1 + }, + "Title": null, + "Visible": true, + "Width": 1 + }, + "CommonPaneSettingsDto": { + "BackgroundColor": null + }, + "CommonSeriesSettingsDto": { + "ArgumentField": "arg", + "Axis": null, + "BarOverlapGroup": null, + "BarPadding": 0, + "BarWidth": 0, + "Color": null, + "CornerRadius": 0, + "DashStyle": "solid", + "IgnoreEmptyPoints": false, + "Pane": null, + "RangeValue1Field": "val1", + "RangeValue2Field": "val2", + "SelectionMode": "none", + "ShowInLegend": true, + "Type": null, + "ValueField": null, + "Visible": true, + "Width": 2, + "Label": null + }, + "CrosshairDto": { + "Color": "#f05b41", + "DashStyle": "dot", + "Enabled": false, + "Width": 1, + "HorizontalLine": { + "Color": "#f05b41", + "DashStyle": "dot", + "Label": { + "BackgroundColor": "#f05b41", + "CustomizeText": null, + "Font": { + "Color": "#FFFFFF", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Visible": false, + "Format": null + }, + "Visible": true, + "Width": 1 + }, + "Label": { + "BackgroundColor": "#f05b41", + "CustomizeText": null, + "Font": { + "Color": "#FFFFFF", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Visible": false, + "Format": null + }, + "VerticalLine": { + "Color": "#f05b41", + "DashStyle": "dot", + "Label": { + "BackgroundColor": "#f05b41", + "CustomizeText": null, + "Font": { + "Color": "#FFFFFF", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Visible": false, + "Format": null + }, + "Visible": true, + "Width": 1 + } + }, + "ExportDto": { + "BackgroundColor": "#FFFFFF", + "Enabled": true, + "AllowExportSelectedData": false, + "Margin": 10, + "PrintingEnabled": true + }, + "LegendDto": { + "BackgroundColor": null, + "Border": { + "Color": "#d3d3d3", + "CornerRadius": 0, + "DashStyle": "solid", + "Visible": false, + "Width": 1 + }, + "ColumnCount": 0, + "Orientation": "vertical", + "Position": "outside", + "RowCount": 0, + "Title": null, + "Visible": true + }, + "MarginDto": { + "Bottom": 0, + "Left": 0, + "Right": 0, + "Top": 0 + }, + "PanesDto": [], + "ScrollBarDto": { + "Color": "gray", + "Offset": 5, + "Position": "top", + "Visible": false, + "Width": 10 + }, + "SeriesDto": [], + "SizeDto": { + "UseSize": false, + "Width": 400, + "Height": 200 + }, + "TitleDto": { + "Text": null, + "VerticalAlignment": "top", + "HorizontalAlignment": "center", + "Subtitle": null, + "TextOverflow": "ellipsis", + "WordWrap": null + }, + "TooltipDto": { + "ArgumentFormat": null, + "ArrowLength": 10, + "Border": { + "Color": "#d3d3d3", + "CornerRadius": 0, + "DashStyle": "solid", + "Visible": false, + "Width": 1 + }, + "Color": "#ffffff", + "Enabled": false, + "Font": { + "Color": "#000000", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Format": null, + "Location": "center", + "PaddingLeftRight": 18, + "PaddingTopBottom": 15, + "Shared": false + }, + "ValueAxisDto": [], + "ZoomAndPanDto": { + "AllowMouseWheel": true, + "AllowTouchGestures": true, + "ArgumentAxis": "none", + "DragToZoom": false, + "PanKey": "shift", + "ValueAxis": "none", + "DragBoxStyle": { + "Color": null, + "Opacity": 0 + } + }, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + "Fields": [ + { + "EditType": null, + "ListFormCode": "App.Hr.EventLog", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "Id", + "CaptionName": "App.Listform.ListformField.Id", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": false, + "IsActive": true, + "Width": 0, + "ListOrderNo": 1, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.EventLog.Create", + "R": "App.Hr.EventLog", + "U": "App.Hr.EventLog.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": null, + "EditGroupOrderNo": null, + "EditorType2": "dxTextBox", + "ColSpan": 1, + "EditorOptions": null, + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Hr.EventLog", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "LogSource", + "CaptionName": "App.Listform.ListformField.LogSource", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 2, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 1, + "ValueExpr": "key", + "DisplayExpr": "name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": "[{\"key\":\"ShiftSupervisor\",\"name\":\"Vardiya Amiri\"},{\"key\":\"SecurityRoom\",\"name\":\"Güvenlik Odası\"},{\"key\":\"ObservationRoom\",\"name\":\"Gözlem Odası\"}]" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.EventLog.Create", + "R": "App.Hr.EventLog", + "U": "App.Hr.EventLog.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 1, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": null, + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Hr.EventLog", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "BranchId", + "CaptionName": "App.Listform.ListformField.BranchId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 3, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Sas_T_Branch WHERE IsDeleted = 'false' AND TenantId = '@TENANTID' ORDER BY Name" + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.EventLog.Create", + "R": "App.Hr.EventLog", + "U": "App.Hr.EventLog.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 2, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"searchEnabled\":true,\"showClearButton\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Hr.EventLog", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "UserId", + "CaptionName": "App.Listform.ListformField.EventUserId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 4, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": "SELECT Id AS [Key], COALESCE(Name, '') + ' ' + COALESCE(Surname, '') AS [Name] FROM AbpUsers WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.EventLog.Create", + "R": "App.Hr.EventLog", + "U": "App.Hr.EventLog.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 3, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 2, + "EditorOptions": "{\"searchEnabled\":true,\"showClearButton\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Hr.EventLog", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "EventDate", + "CaptionName": "App.Listform.ListformField.EventDate", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 5, + "SourceDbType": 5, + "CultureName": "en", + "DataType": "date", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.EventLog.Create", + "R": "App.Hr.EventLog", + "U": "App.Hr.EventLog.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 4, + "EditGroupOrderNo": 1, + "EditorType2": "dxDateBox", + "ColSpan": 1, + "EditorOptions": "{\"type\":\"date\",\"displayFormat\":\"dd.MM.yyyy\",\"dateSerializationFormat\":\"yyyy-MM-dd\",\"useMaskBehavior\":true,\"showClearButton\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": "// @runOnOpen\nif (isReady && !get(\"EventDate\")) set(\"EventDate\", new Date().toISOString().slice(0, 10))\nif (isReady && !get(\"EventTime\")) { const n = new Date(); set(\"EventTime\", String(n.getHours()).padStart(2, \"0\") + \":\" + String(n.getMinutes()).padStart(2, \"0\")) }", + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Hr.EventLog", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "EventTime", + "CaptionName": "App.Listform.ListformField.EventTime", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 6, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.EventLog.Create", + "R": "App.Hr.EventLog", + "U": "App.Hr.EventLog.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 5, + "EditGroupOrderNo": 1, + "EditorType2": "dxTextBox", + "ColSpan": 1, + "EditorOptions": "{\"mask\":\"00:00\",\"useMaskedValue\":true,\"maxLength\":5}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Hr.EventLog", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "Importance", + "CaptionName": "App.Listform.ListformField.Importance", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 7, + "SourceDbType": 11, + "CultureName": "en", + "DataType": "number", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 1, + "ValueExpr": "key", + "DisplayExpr": "name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": "[{\"key\":1,\"name\":\"★ Rutin\"},{\"key\":2,\"name\":\"★★ Düşük\"},{\"key\":3,\"name\":\"★★★ Önemli\"},{\"key\":4,\"name\":\"★★★★ Çok Önemli\"},{\"key\":5,\"name\":\"★★★★★ Kritik\"}]" + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.EventLog.Create", + "R": "App.Hr.EventLog", + "U": "App.Hr.EventLog.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 6, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": null, + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Hr.EventLog", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "ShiftId", + "CaptionName": "App.Listform.ListformField.ShiftId", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 8, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 2, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": "SELECT Id AS [Key], Name AS [Name] FROM Hr_T_Shift WHERE IsDeleted = 'false' AND IsActive = 1 AND TenantId = '@TENANTID' ORDER BY Name" + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.EventLog.Create", + "R": "App.Hr.EventLog", + "U": "App.Hr.EventLog.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 7, + "EditGroupOrderNo": 1, + "EditorType2": "dxSelectBox", + "ColSpan": 1, + "EditorOptions": "{\"searchEnabled\":true,\"showClearButton\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Hr.EventLog", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "Description", + "CaptionName": "App.Listform.ListformField.Description", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 9, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.EventLog.Create", + "R": "App.Hr.EventLog", + "U": "App.Hr.EventLog.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": "left", + "Format": null, + "EditOrderNo": 8, + "EditGroupOrderNo": 1, + "EditorType2": "dxTextArea", + "ColSpan": 2, + "EditorOptions": "{\"minHeight\":160,\"autoResizeEnabled\":true}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + } + ], + "IsDeletedField": true, + "IsCreatedField": true, + "InsertedRecords": { + "LanguageKeys": [ + "App.Hr.EventLog", + "App.Hr.EventLog.Title", + "App.Hr.EventLog.Desc", + "App.Hr.EventLog.Widget.Important", + "App.Listform.ListformField.LogSource", + "App.Listform.ListformField.EventUserId", + "App.Listform.ListformField.EventDate", + "App.Listform.ListformField.EventTime", + "App.Listform.ListformField.ShiftId", + "App.Listform.ListformField.CreatorId" + ], + "PermissionGroupNames": [], + "PermissionNames": [ + "App.Hr.EventLog", + "App.Hr.EventLog.Create", + "App.Hr.EventLog.Update", + "App.Hr.EventLog.Delete", + "App.Hr.EventLog.Export", + "App.Hr.EventLog.Import", + "App.Hr.EventLog.Note" + ], + "MenuCodes": [ + "App.Hr.EventLog" + ], + "DataSourceCodes": [], + "ModuleIds": [] + }, + "DevRequest": { + "Id": "5853d035-ecd7-41a3-878d-e3756b3110ee", + "Title": "Human Resources -> Olay Günlüğü" + } +} \ No newline at end of file diff --git a/configs/seeds/host/wizard/Shift.json b/configs/seeds/host/wizard/Shift.json new file mode 100644 index 00000000..563494c0 --- /dev/null +++ b/configs/seeds/host/wizard/Shift.json @@ -0,0 +1,1361 @@ +{ + "Wizard": { + "ComponentKind": 0, + "WizardName": "Shift", + "WizardCode": "App.Hr.Shift", + "SeededAt": "2026-10-02T15:05:28.9785817+03:00", + "CustomComponentName": null, + "PermissionGroupName": "App.Hr", + "ModuleId": "Hr", + "Menu": { + "MenuParentPath": [ + { + "Code": "App.Hr", + "Icon": "FcConferenceCall", + "En": "Human Resources", + "Tr": "İnsan Kaynakları" + } + ], + "MenuParentCode": "App.Hr.Definitions", + "MenuParentIcon": "FcFilingCabinet", + "MenuCode": "App.Hr.Shift", + "MenuOrder": 9, + "MenuUrl": "/admin/list/App.Hr.Shift", + "MenuIcon": "FcClock" + }, + "Language": { + "MenuParentEn": null, + "MenuParentTr": null, + "PermissionGroupEn": "Human Resources", + "PermissionGroupTr": "İnsan Kaynakları", + "MenuEn": "Shifts", + "MenuTr": "Vardiyalar", + "TitleEn": "Shifts", + "TitleTr": "Vardiyalar", + "DescEn": "Shift definitions", + "DescTr": "Vardiya tanımları" + }, + "Groups": [ + { + "Items": [ + { + "FieldName": "Id", + "CaptionName": "App.Listform.ListformField.Id", + "En": "Id", + "Tr": "Kimlik" + }, + { + "FieldName": "Name", + "CaptionName": "App.Listform.ListformField.ShiftName", + "En": "Shift Name", + "Tr": "Vardiya Adı" + }, + { + "FieldName": "StartTime", + "CaptionName": "App.Listform.ListformField.StartTime", + "En": "Start Time", + "Tr": "Başlangıç Saati" + }, + { + "FieldName": "EndTime", + "CaptionName": "App.Listform.ListformField.EndTime", + "En": "End Time", + "Tr": "Bitiş Saati" + }, + { + "FieldName": "IsActive", + "CaptionName": "App.Listform.ListformField.IsActive", + "En": "Active", + "Tr": "Aktif" + } + ] + } + ] + }, + "ListForm": { + "EditType": null, + "DataSourceCode": "Default", + "KeyFieldDbSourceType": 9, + "TableName": null, + "DefaultFilter": "\"IsDeleted\" = 'false'", + "SelectCommand": "Hr_T_Shift", + "SelectCommandType": 1, + "SelectFieldsDefaultValueDto": [], + "SeedFilePath": "data/App.Hr.Shift.json", + "SeedSyncInsert": true, + "SeedSyncUpdate": true, + "SeedSyncDelete": true, + "DeleteCommand": "UPDATE \"Hr_T_Shift\" SET \"DeleterId\"=@DeleterId, \"DeletionTime\"=CURRENT_TIMESTAMP, \"IsDeleted\"='true' WHERE \"Id\" IN @Id", + "DeleteBeforeCommand": null, + "DeleteAfterCommand": null, + "DeleteFieldsDefaultValueDto": [ + { + "FieldName": "DeleterId", + "FieldDbType": 9, + "Value": "@USERID", + "CustomValueType": 2, + "SqlQuery": null + }, + { + "FieldName": "Id", + "FieldDbType": 9, + "Value": "@ID", + "CustomValueType": 2, + "SqlQuery": null + } + ], + "InsertCommand": null, + "InsertBeforeCommand": null, + "InsertAfterCommand": null, + "InsertFieldsDefaultValueDto": [ + { + "FieldName": "CreationTime", + "FieldDbType": 6, + "Value": "@NOW", + "CustomValueType": 2, + "SqlQuery": null + }, + { + "FieldName": "CreatorId", + "FieldDbType": 9, + "Value": "@USERID", + "CustomValueType": 2, + "SqlQuery": null + }, + { + "FieldName": "IsDeleted", + "FieldDbType": 3, + "Value": "false", + "CustomValueType": 1, + "SqlQuery": null + }, + { + "FieldName": "Id", + "FieldDbType": 9, + "Value": "@NEWID", + "CustomValueType": 2, + "SqlQuery": null + } + ], + "UpdateCommand": null, + "UpdateBeforeCommand": null, + "UpdateAfterCommand": null, + "UpdateFieldsDefaultValueDto": [], + "FormFieldsDefaultValueDto": [], + "WidgetsDto": [ + { + "ColGap": 3, + "ColSpan": 4, + "SqlQuery": "SELECT 'App.Widget.Total' AS \"Title\", CAST(COUNT(*) AS VARCHAR(32)) AS \"Value\", 'blue' AS \"Color\", 'App.Hr.Shift' AS \"SubTitle\", 'FaClock' AS \"Icon\" FROM \"Hr_T_Shift\" WHERE \"TenantId\" = '@TENANTID' UNION ALL SELECT 'App.Widget.Active', CAST(COUNT(*) AS VARCHAR(32)), 'green', 'App.Hr.Shift', 'FaCheckCircle' FROM \"Hr_T_Shift\" WHERE \"TenantId\" = '@TENANTID' AND \"IsActive\" = 1 UNION ALL SELECT 'App.Widget.Passive', CAST(COUNT(*) AS VARCHAR(32)), 'gray', 'App.Hr.Shift', 'FaTimesCircle' FROM \"Hr_T_Shift\" WHERE \"TenantId\" = '@TENANTID' AND \"IsActive\" = 0", + "Title": "Title", + "Value": "Value", + "ValueClassName": "text-3xl", + "Color": "Color", + "Icon": "Icon", + "SubTitle": "SubTitle", + "OnClick": null, + "ClassName": "mb-3", + "IsActive": true + } + ], + "ExtraFilterEditDto": [], + "ListFormCode": "App.Hr.Shift", + "CultureName": "en", + "Name": "App.Hr.Shift", + "KeyFieldName": "Id", + "Title": "App.Hr.Shift.Title", + "SortMode": "single", + "PageSize": 10, + "Width": 0, + "Height": 0, + "FullHeight": false, + "Description": "App.Hr.Shift.Desc", + "FilterRowDto": { + "Visible": true, + "ApplyFilter": "auto", + "AllowUserUiFilterSave": true + }, + "RowDto": { + "RowHeight": "auto", + "WhiteSpace": "normal", + "OverflowWrap": "break-word" + }, + "HeaderFilterDto": { + "Visible": true, + "AllowSearch": false, + "Height": 325, + "SearchTimeout": 500, + "Width": 252 + }, + "FilterPanelDto": { + "Visible": false, + "Texts": null, + "FilterEnabled": false, + "CustomizeText": null + }, + "SearchPanelDto": { + "Visible": true, + "Width": 160 + }, + "GroupPanelDto": { + "Visible": true, + "AutoExpandAll": false + }, + "SelectionDto": { + "Mode": "none", + "AllowSelectAll": false, + "SelectAllMode": "allPages", + "ShowCheckBoxesMode": "always" + }, + "ColumnOptionDto": { + "ShowBorders": true, + "ShowRowLines": true, + "ShowColumnLines": false, + "RowAlternationEnabled": true, + "AllowColumnReordering": true, + "AllowColumnResizing": true, + "ColumnResizingMode": "widget", + "ColumnAutoWidth": true, + "RtlEnabled": false, + "ColumnFixingEnabled": true, + "ColumnChooserEnabled": true, + "ColumnChooserMode": "dragAndDrop", + "HoverStateEnabled": false, + "ColumnHidingEnabled": true, + "FocusedRowEnabled": true, + "ShowColumnHeaders": true + }, + "PivotOptionDto": { + "ColumnChooserEnabled": false, + "AllowFieldDragging": true, + "ShowFieldPanel": true, + "ShowDataFields": true, + "ShowColumnFields": true, + "ShowRowFields": true, + "ShowFilterFields": true, + "ShowChart": false, + "ChartHeight": 320, + "ChartCommonSeriesType": "bar" + }, + "TreeOptionDto": { + "KeyExpr": null, + "ParentIdExpr": null, + "HasItemsExpr": null, + "RootValue": null, + "ExpandedRowKeys": [], + "AutoExpandAll": false, + "RecursiveSelection": false, + "TitleExpr": null, + "StartExpr": null, + "EndExpr": null, + "ProgressExpr": null + }, + "GanttOptionDto": { + "KeyExpr": null, + "ParentIdExpr": null, + "HasItemsExpr": null, + "RootValue": null, + "ExpandedRowKeys": [], + "AutoExpandAll": false, + "RecursiveSelection": false, + "TitleExpr": null, + "ScaleType": "weeks", + "StartExpr": null, + "EndExpr": null, + "ProgressExpr": null, + "EditingEnabled": false, + "AllowTaskAdding": false, + "AllowTaskUpdating": false, + "AllowTaskResourceUpdating": false, + "AllowTaskDeleting": false, + "AllowDependencyAdding": false, + "AllowDependencyDeleting": false, + "AllowResourceAdding": false, + "AllowResourceUpdating": false, + "AllowResourceDeleting": false + }, + "SchedulerOptionDto": { + "TextExpr": null, + "UserNameExpr": null, + "DescriptionExpr": null, + "StartDateExpr": null, + "EndDateExpr": null, + "AllDayExpr": null, + "RecurrenceRuleExpr": null, + "RecurrenceExceptionExpr": null, + "StartDayHour": 8, + "EndDayHour": 20, + "DefaultView": "week", + "ShowAllDayPanel": true, + "CellDuration": 30, + "FirstDayOfWeek": 1, + "CrossScrollingEnabled": false, + "AllowResizing": false, + "AllowDragging": false, + "AllowDeleting": false, + "AllowEditing": false, + "AllowAdding": false + }, + "TodoOptionDto": { + "TitleExpr": null, + "StatusExpr": null, + "DescriptionExpr": null, + "AnalysisExpr": null, + "DueDateExpr": null, + "TagExpr": null, + "AssigneeExpr": null, + "PriorityExpr": null, + "CompletedExpr": null, + "OrderExpr": null, + "TimesheetExpr": null, + "SubTaskExpr": null, + "StatusOrder": null, + "AllowDragging": true + }, + "PagerOptionDto": { + "Visible": true, + "ShowPageSizeSelector": true, + "ShowInfo": false, + "ShowNavigationButtons": true, + "AllowedPageSizes": "10,20,50,100", + "InfoText": "Page {0} of {1} ({2} items)", + "DisplayMode": "adaptive", + "ScrollingMode": "standard", + "LoadPanelEnabled": "auto", + "LoadPanelText": "Loading..." + }, + "EditingOptionDto": { + "Mode": "popup", + "RefreshMode": "full", + "AllowUpdating": true, + "AllowDetail": false, + "AllowDeleting": true, + "AllowAllDeleting": false, + "AllowAdding": true, + "AllowDuplicate": false, + "UseIcons": false, + "ConfirmDelete": true, + "NewRowPosition": "viewportTop", + "SelectTextOnEditStart": false, + "StartEditAction": "click", + "EditColumnName": null, + "Popup": { + "Title": "App.Hr.Shift.Title", + "ShowTitle": true, + "Width": 800, + "Height": 275, + "FullScreen": false, + "HideOnOutsideClick": true, + "ResizeEnabled": true, + "DragEnabled": true, + "RestorePosition": true, + "Position": "center" + }, + "SendOnlyChangedFormValuesUpdate": false, + "AddPageUrl": null, + "AddDialogName": null, + "AddDialogParameters": null + }, + "EditingFormDto": [ + { + "Order": 1, + "ItemType": "group", + "Caption": "", + "ColCount": 2, + "ColSpan": 2 + } + ], + "PermissionDto": { + "C": "App.Hr.Shift.Create", + "R": "App.Hr.Shift", + "U": "App.Hr.Shift.Update", + "D": "App.Hr.Shift.Delete", + "E": "App.Hr.Shift.Export", + "I": "App.Hr.Shift.Import", + "N": "App.Hr.Shift.Note" + }, + "CommandColumnDto": [], + "StateStoringDto": { + "Enabled": true, + "Type": "custom", + "StorageKey": "listFormGridStorage-App.Hr.Shift", + "SavingTimeout": 5000 + }, + "CustomJsSources": [], + "CustomStyleSources": [], + "UpdateServiceAddress": "list-form-data/update", + "InsertServiceAddress": "list-form-data/insert", + "DeleteServiceAddress": "list-form-data/delete", + "IsTenant": true, + "IsBranch": false, + "IsOrganizationUnit": false, + "ListFormType": "List", + "IsSubForm": false, + "ShowNote": false, + "SubFormsListFormType": "Form", + "SubFormsDto": [], + "ExtraFilterDto": [], + "LayoutDto": { + "Grid": true, + "Card": true, + "Pivot": true, + "Chart": true, + "Tree": false, + "Gantt": false, + "Scheduler": false, + "Todo": false, + "DefaultLayout": "grid" + }, + "WorkflowDto": { + "ApprovalUserFieldName": null, + "ApprovalDateFieldName": null, + "ApprovalStatusFieldName": null, + "ApprovalDescriptionFieldName": null, + "ApprovalIsFilterUserName": false, + "ApprovalIsResetWorkflow": false, + "Criteria": [] + }, + "UserId": null, + "RoleId": null, + "CommonDto": { + "AdjustOnZoom": true, + "ContainerBackgroundColor": "#FFFFFF", + "Palette": "Material", + "PaletteExtensionMode": "blend", + "DefaultPane": null, + "Disabled": false, + "Theme": "generic.light" + }, + "AdaptivelayoutDto": { + "Height": 80, + "Width": 80, + "KeepLabels": true + }, + "AnimationDto": { + "Duration": 1000, + "Easing": "easeOutCubic", + "Enabled": true, + "MaxPointCountSupported": 300 + }, + "AnnotationsDto": [], + "ArgumentAxisDto": { + "ArgumentType": null, + "AggregationInterval": null, + "Grid": { + "Color": "#d3d3d3", + "Visible": false, + "Width": 1 + }, + "HoverMode": "none", + "Label": { + "DisplayMode": "standard", + "RotationAngle": 90, + "OverlappingBehavior": "hide" + }, + "Position": "bottom", + "Title": null, + "Visible": true, + "Width": 1, + "WorkdaysOnly": false + }, + "CommonAnnotationSettingsDto": { + "Argument": null, + "Border": { + "Color": "#d3d3d3", + "CornerRadius": 0, + "DashStyle": "solid", + "Visible": false, + "Width": 1 + }, + "Color": "#ffffff", + "Description": null, + "Font": { + "Color": "#FFFFFF", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Height": -1, + "Image": null, + "OffsetX": -1, + "OffsetY": -1, + "PaddingLeftRight": 10, + "PaddingTopBottom": 10, + "Series": null, + "Text": null, + "TooltipEnabled": true, + "Type": null, + "Value": null, + "Width": 0, + "WordWrap": "normal", + "X": 0, + "Y": 0 + }, + "CommonAxisSettingsDto": { + "Grid": { + "Color": "#d3d3d3", + "Visible": false, + "Width": 1 + }, + "Title": null, + "Visible": true, + "Width": 1 + }, + "CommonPaneSettingsDto": { + "BackgroundColor": null + }, + "CommonSeriesSettingsDto": { + "ArgumentField": "arg", + "Axis": null, + "BarOverlapGroup": null, + "BarPadding": 0, + "BarWidth": 0, + "Color": null, + "CornerRadius": 0, + "DashStyle": "solid", + "IgnoreEmptyPoints": false, + "Pane": null, + "RangeValue1Field": "val1", + "RangeValue2Field": "val2", + "SelectionMode": "none", + "ShowInLegend": true, + "Type": null, + "ValueField": null, + "Visible": true, + "Width": 2, + "Label": null + }, + "CrosshairDto": { + "Color": "#f05b41", + "DashStyle": "dot", + "Enabled": false, + "Width": 1, + "HorizontalLine": { + "Color": "#f05b41", + "DashStyle": "dot", + "Label": { + "BackgroundColor": "#f05b41", + "CustomizeText": null, + "Font": { + "Color": "#FFFFFF", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Visible": false, + "Format": null + }, + "Visible": true, + "Width": 1 + }, + "Label": { + "BackgroundColor": "#f05b41", + "CustomizeText": null, + "Font": { + "Color": "#FFFFFF", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Visible": false, + "Format": null + }, + "VerticalLine": { + "Color": "#f05b41", + "DashStyle": "dot", + "Label": { + "BackgroundColor": "#f05b41", + "CustomizeText": null, + "Font": { + "Color": "#FFFFFF", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Visible": false, + "Format": null + }, + "Visible": true, + "Width": 1 + } + }, + "ExportDto": { + "BackgroundColor": "#FFFFFF", + "Enabled": true, + "AllowExportSelectedData": false, + "Margin": 10, + "PrintingEnabled": true + }, + "LegendDto": { + "BackgroundColor": null, + "Border": { + "Color": "#d3d3d3", + "CornerRadius": 0, + "DashStyle": "solid", + "Visible": false, + "Width": 1 + }, + "ColumnCount": 0, + "Orientation": "vertical", + "Position": "outside", + "RowCount": 0, + "Title": null, + "Visible": true + }, + "MarginDto": { + "Bottom": 0, + "Left": 0, + "Right": 0, + "Top": 0 + }, + "PanesDto": [], + "ScrollBarDto": { + "Color": "gray", + "Offset": 5, + "Position": "top", + "Visible": false, + "Width": 10 + }, + "SeriesDto": [], + "SizeDto": { + "UseSize": false, + "Width": 400, + "Height": 200 + }, + "TitleDto": { + "Text": null, + "VerticalAlignment": "top", + "HorizontalAlignment": "center", + "Subtitle": null, + "TextOverflow": "ellipsis", + "WordWrap": null + }, + "TooltipDto": { + "ArgumentFormat": null, + "ArrowLength": 10, + "Border": { + "Color": "#d3d3d3", + "CornerRadius": 0, + "DashStyle": "solid", + "Visible": false, + "Width": 1 + }, + "Color": "#ffffff", + "Enabled": false, + "Font": { + "Color": "#000000", + "Family": "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif", + "Size": 12, + "Weight": 400 + }, + "Format": null, + "Location": "center", + "PaddingLeftRight": 18, + "PaddingTopBottom": 15, + "Shared": false + }, + "ValueAxisDto": [], + "ZoomAndPanDto": { + "AllowMouseWheel": true, + "AllowTouchGestures": true, + "ArgumentAxis": "none", + "DragToZoom": false, + "PanKey": "shift", + "ValueAxis": "none", + "DragBoxStyle": { + "Color": null, + "Opacity": 0 + } + }, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + "Fields": [ + { + "EditType": null, + "ListFormCode": "App.Hr.Shift", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "Id", + "CaptionName": "App.Listform.ListformField.Id", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": false, + "IsActive": true, + "Width": 0, + "ListOrderNo": 1, + "SourceDbType": 9, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.Shift.Create", + "R": "App.Hr.Shift", + "U": "App.Hr.Shift.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": null, + "Format": null, + "EditOrderNo": null, + "EditGroupOrderNo": null, + "EditorType2": "dxTextBox", + "ColSpan": 1, + "EditorOptions": null, + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Hr.Shift", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "Name", + "CaptionName": "App.Listform.ListformField.ShiftName", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 2, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.Shift.Create", + "R": "App.Hr.Shift", + "U": "App.Hr.Shift.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": null, + "Format": null, + "EditOrderNo": 1, + "EditGroupOrderNo": 1, + "EditorType2": "dxTextBox", + "ColSpan": 2, + "EditorOptions": "{\"showClearButton\":true,\"maxLength\":64}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Hr.Shift", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "StartTime", + "CaptionName": "App.Listform.ListformField.StartTime", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 3, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.Shift.Create", + "R": "App.Hr.Shift", + "U": "App.Hr.Shift.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": null, + "Format": null, + "EditOrderNo": 2, + "EditGroupOrderNo": 1, + "EditorType2": "dxTextBox", + "ColSpan": 1, + "EditorOptions": "{\"mask\":\"00:00\",\"useMaskedValue\":true,\"maxLength\":5}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Hr.Shift", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "EndTime", + "CaptionName": "App.Listform.ListformField.EndTime", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 4, + "SourceDbType": 16, + "CultureName": "en", + "DataType": "string", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.Shift.Create", + "R": "App.Hr.Shift", + "U": "App.Hr.Shift.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": null, + "Format": null, + "EditOrderNo": 3, + "EditGroupOrderNo": 1, + "EditorType2": "dxTextBox", + "ColSpan": 1, + "EditorOptions": "{\"mask\":\"00:00\",\"useMaskedValue\":true,\"maxLength\":5}", + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + }, + { + "EditType": null, + "ListFormCode": "App.Hr.Shift", + "RoleId": null, + "UserId": null, + "ColumnJoinTableDto": { + "JoinType": null, + "TableName": null, + "JoinFieldName": null, + "BaseTableJoinFieldName": null, + "SelectFieldName": null, + "FieldNameAlias": null, + "JoinCondition2": "AND", + "JoinFieldName2": null, + "BaseTableJoinFieldName2_OrValue": null + }, + "FieldName": "IsActive", + "CaptionName": "App.Listform.ListformField.IsActive", + "PlaceHolder": null, + "ReadOnly": false, + "Visible": true, + "IsActive": true, + "Width": 0, + "ListOrderNo": 5, + "SourceDbType": 3, + "CultureName": "en", + "DataType": "boolean", + "SortIndex": 0, + "SortDirection": null, + "AllowSearch": true, + "AllowEditing": true, + "AllowAdding": true, + "ColumnCssClass": null, + "ColumnCssValue": null, + "BandName": null, + "ColumnFilterDto": { + "AllowFiltering": true, + "FilterOperations": null, + "SelectedFilterOperation": null, + "FilterValue": null + }, + "ColumnHeaderDto": { + "AllowHeaderFiltering": true, + "AllowSearch": false, + "DataSource": null, + "DataSourceString": "" + }, + "ColumnGroupingDto": { + "AllowGrouping": true, + "GroupIndex": null, + "AutoExpandGroup": false + }, + "ColumnCustomizationDto": { + "Fixed": false, + "FixedPosition": "left", + "AllowReordering": true + }, + "ColumnTotalSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "ColumnGroupSummaryDto": { + "SummaryType": null, + "ValueFormat": null, + "ShowInGroupFooter": false, + "AlignByColumn": false, + "DisplayFormat": null, + "ShowInColumn": null + }, + "LookupDto": { + "DataSourceType": 0, + "ValueExpr": "Key", + "DisplayExpr": "Name", + "CascadeRelationField": null, + "CascadeFilterOperator": "=", + "CascadeParentFields": null, + "CascadeEmptyFields": null, + "LookupQuery": null + }, + "ValidationRuleDto": [ + { + "Type": "required", + "Message": null, + "IgnoreEmptyValue": false, + "Reevaluate": true, + "ComparisonType": "", + "Pattern": "", + "Max": null, + "Min": null, + "Trim": true + } + ], + "ColumnStylingDto": [], + "PermissionDto": { + "Deny": false, + "C": "App.Hr.Shift.Create", + "R": "App.Hr.Shift", + "U": "App.Hr.Shift.Update", + "E": true, + "I": true + }, + "CanRead": false, + "CanCreate": false, + "CanUpdate": false, + "CanExport": false, + "DefaultValue": null, + "DefaultValueType": 0, + "PivotSettingsDto": { + "IsPivot": true, + "Expanded": false, + "SortOrder": "asc", + "Area": "filter", + "Format": null, + "SummaryType": null, + "GroupInterval": "", + "WordWrapEnabled": false + }, + "Alignment": null, + "Format": null, + "EditOrderNo": 4, + "EditGroupOrderNo": 1, + "EditorType2": "dxCheckBox", + "ColSpan": 1, + "EditorOptions": null, + "GridBoxOptions": null, + "TagBoxOptions": null, + "ImageUploadOptions": null, + "EditorScript": null, + "LastModificationTime": null, + "LastModifierId": null, + "CreationTime": "0001-01-01T00:00:00", + "CreatorId": null, + "Id": "00000000-0000-0000-0000-000000000000" + } + ], + "IsDeletedField": true, + "IsCreatedField": true, + "InsertedRecords": { + "LanguageKeys": [ + "App.Hr.Shift", + "App.Hr.Shift.Title", + "App.Hr.Shift.Desc", + "App.Listform.ListformField.ShiftName" + ], + "PermissionGroupNames": [], + "PermissionNames": [ + "App.Hr.Shift", + "App.Hr.Shift.Create", + "App.Hr.Shift.Update", + "App.Hr.Shift.Delete", + "App.Hr.Shift.Export", + "App.Hr.Shift.Import", + "App.Hr.Shift.Note" + ], + "MenuCodes": [ + "App.Hr.Shift" + ], + "DataSourceCodes": [], + "ModuleIds": [] + }, + "DevRequest": { + "Id": "5853d035-ecd7-41a3-878d-e3756b3110ee", + "Title": "Human Resources -> Olay Günlüğü" + } +} \ No newline at end of file diff --git a/ui/src/views/admin/listForm/wizard/WizardFileManager.tsx b/ui/src/views/admin/listForm/wizard/WizardFileManager.tsx index 71def42b..588f6f94 100644 --- a/ui/src/views/admin/listForm/wizard/WizardFileManager.tsx +++ b/ui/src/views/admin/listForm/wizard/WizardFileManager.tsx @@ -211,6 +211,15 @@ const flattenWizardTree = ( : [row, ...flattenWizardTree(node.children, collapsed, depth + 1, `${key}/`, childGuides)] }) +/** Alt ekranı olan her düğümün aç/kapa anahtarı; anahtar biçimi `flattenWizardTree` ile aynıdır. */ +const collectWizardTreeKeys = (nodes: WizardTreeNode[], prefix = ''): string[] => + nodes.flatMap((node) => { + const key = `${prefix}${node.file.fileName}` + return node.children.length > 0 + ? [key, ...collectWizardTreeKeys(node.children, `${key}/`)] + : [] + }) + /** Bir ağaç seviyesinin genişliği: aç/kapa düğmesi (14px) + satırdaki boşluk (8px). */ const TREE_INDENT = 22 /** Dikey çizginin seviye içindeki yeri; aç/kapa düğmesinin ortasına denk gelir. */ @@ -304,6 +313,11 @@ const WizardFileManager = () => { return [...groups.values()].sort((a, b) => Number(!a.file) - Number(!b.file)) }, [tree]) + // Talep grupları yalnızca liste görünümünde vardır; kart görünümünde fazladan anahtar etkisizdir. + const collapseAll = () => + setCollapsed(new Set([...devRequestGroups.map((g) => g.key), ...collectWizardTreeKeys(tree)])) + const expandAll = () => setCollapsed(new Set()) + const loadFiles = useCallback(async () => { setLoading(true) try { @@ -881,6 +895,25 @@ const WizardFileManager = () => { > + {/* Arama sırasında gruplar zaten açık gösterilir; butonlar o an etkisizdir. */} +