diff --git a/.github/instructions/lowcode.instructions.md b/.github/instructions/lowcode.instructions.md index 1d769258..c356acb1 100644 --- a/.github/instructions/lowcode.instructions.md +++ b/.github/instructions/lowcode.instructions.md @@ -1766,7 +1766,8 @@ aday olur ve iki koşulla seçilebilir — kapsamdaki `{sql|postgres}/object/{Ta `CREATE TABLE` scriptidir (platform tabloları bu klasörde durmaz; scriptsiz tablo `NotManaged`) ve tabloyu başka bir ekran (sorgu/C/U/D komutu ya da bu ekranı alt form olarak kullanan üst ekran), Custom Endpoint SQL'i ya da custom component veri kaynağı kullanmaz (`InUse`). Kullanıcı onay -diyaloğunda tabloyu seçerse (`WizardDeleteInput.DropTables`) kayıt temizliğinden **sonra** +diyaloğunda tabloyu seçerse (`WizardDeleteInput.DropTables`; birden çok seçilebilir tablo varsa +başlıktaki **Tümünü seç** hepsini işaretler) kayıt temizliğinden **sonra** `DROP TABLE` çalışır, ardından tablonun CRUD endpoint'leri ve seed dosyaları (`{sql|postgres}/object/{Tablo}.sql`, `crud/{Tablo}.json`) silinir. Düşürme hatası (ör. yabancı anahtar) silmeyi durdurmaz: tablo ve scripti yerinde kalır, rapor `Failed` + mesaj gösterir. 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 dfb63b80..24cb5224 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 @@ -18,7 +18,7 @@ "Priority": null, "Completed": true, "SortOrder": 0, - "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}]", + "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

Çö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

Görünümler ve davranış

Kararlar

Ü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

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

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

" } diff --git a/configs/seeds/host/data/App.DevRequests/ce4269ad-8d08-487a-9e36-c002dd482a3c.json b/configs/seeds/host/data/App.DevRequests/ce4269ad-8d08-487a-9e36-c002dd482a3c.json index e0407c4b..ac3b3250 100644 --- a/configs/seeds/host/data/App.DevRequests/ce4269ad-8d08-487a-9e36-c002dd482a3c.json +++ b/configs/seeds/host/data/App.DevRequests/ce4269ad-8d08-487a-9e36-c002dd482a3c.json @@ -11,16 +11,16 @@ "RequestDate": null, "Status": "Backlog", "Title": "Human Resources -> Sağlık", - "Description": "

Bu eklenecekler Human Resources -> Sağlık alt menüsünün içerisine eklenecektir. Çalışan (Kullanıcı) ile ilgili tüm bilgileri AbpUsers tablosundan alınabilir. Örneğin Idendity Number, Gender, EducationStatus, BirthDate vs. tüm bilgiler bu tablodan alınabilir. Branch bilgisi eğer kullanıcı birden fazla Branch yetkisi varsa seçmeli, eğer bir branch yetkisi varsa o branch kullanıcı seçildikten sonra otomatik gelmeli.


İstirahat Listesi : Çalışanların istirahat listesi ekranıdır. İstirahat Tipi: Hastalık, İş Kazası, Analık, Meslek Hastalığı gibi seçilebilmelidir.


Muayene Listesi : Çalışanların Muayene Listesidir. Her kullanıcının periyodik veya plansız şekilde yapılan muayene sonuçlarının listesidir.Kullanıcı seçilince Eğitim Durumu, Tc Kimlik No, Doğum Tarihi, Departman gibi bilgiler otomatik gelir.



Hasta Kayıt Defteri: Kullanıcıların hasta olduklarında doldurdukları listedir. Tip sütununda Hastalık, İş Kazası Dönüş, İstirahat Dönüş, Sonuç kısmında Tedavi (Taburcu), Sevk ve İstirahat seçenekleri olmalı. Sevk olaunca Sevk Yeri açılıyor. Kullanıcı seçilince Adres, yaş, cinsiyet gibi bilgiler otomatik gelir. Sıra No sütunu eklenmeyecek.

", + "Description": "

Bu eklenecekler Human Resources -> Sağlık alt menüsünün içerisine eklenecektir. Çalışan (Kullanıcı) ile ilgili tüm bilgileri AbpUsers tablosundan alınabilir. Örneğin Idendity Number, Gender, EducationStatus, BirthDate vs. tüm bilgiler bu tablodan alınabilir. Branch bilgisi eğer kullanıcı birden fazla Branch yetkisi varsa seçmeli, eğer bir branch yetkisi varsa o branch kullanıcı seçildikten sonra otomatik gelmeli. Lİstelerde Avatar (Kullanıcı Resmi) olmasına gerek yok, eklenmeyecek.


İstirahat Listesi : Çalışanların istirahat listesi ekranıdır. İstirahat Tipi: Hastalık, İş Kazası, Analık, Meslek Hastalığı gibi seçilebilmelidir.


Muayene Listesi : Çalışanların Muayene Listesidir. Her kullanıcının periyodik veya plansız şekilde yapılan muayene sonuçlarının listesidir.Kullanıcı seçilince Eğitim Durumu, Tc Kimlik No, Doğum Tarihi, Departman gibi bilgiler otomatik gelir.



Hasta Kayıt Defteri: Kullanıcıların hasta olduklarında doldurdukları listedir. Tip sütununda Hastalık, İş Kazası Dönüş, İstirahat Dönüş, Sonuç kısmında Tedavi (Taburcu), Sevk ve İstirahat seçenekleri olmalı. Sevk olaunca Sevk Yeri açılıyor. Kullanıcı seçilince Adres, yaş, cinsiyet gibi bilgiler otomatik gelir. Sıra No sütunu eklenmeyecek.

", "DueDate": "2026-09-30T13:58:00", "Tags": "HR", "Assignees": "system@sozsoft.com", "Priority": "5", "Completed": false, "SortOrder": 0, - "Timesheets": null, - "SubTasks": null, - "Analysis": "" + "Timesheets": "[{\"id\":\"513d552f-dd7b-087b-cecf-3a2406c146e2\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_SickLeave tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"a256b7df-8987-46e4-940d-3a2406c1ebed\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"SickLeave.json wizard\\u0027\\u0131 deploy edildi (1 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"82bf0002-cb61-3f1a-68cd-3a2406c2038c\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_MedicalExamination tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"b300744f-c937-5077-1163-3a2406c2b2c7\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"MedicalExamination.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"a9948d0b-f295-2b53-03cb-3a2406c2cf79\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Hr_T_PatientRegister tablosu olu\\u015Fturuldu\",\"duration\":0.0167},{\"id\":\"39277b02-bfea-5956-e53f-3a2406c37cb7\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"PatientRegister.json wizard\\u0027\\u0131 deploy edildi (0 demo sat\\u0131r)\",\"duration\":0.0167},{\"id\":\"9dd7b848-72b6-69ee-7605-3a2406c38b22\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"6 tamamlanm\\u0131\\u015F alt g\\u00F6rev eklendi\",\"duration\":0.0167},{\"id\":\"49f9f61d-15f0-1d2b-3740-3a2406c3b8e5\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"Analize \\u00FCretim notu eklendi\",\"duration\":0.0167},{\"id\":\"341e6a23-9f14-cb0c-aa1e-3a2406c3c46c\",\"date\":\"2026-10-01\",\"userName\":\"system@sozsoft.com\",\"description\":\"App.DevRequests ekran\\u0131nda sat\\u0131r g\\u00FCncellendi (Status)\",\"duration\":0.0167}]", + "SubTasks": "[{\"id\":\"8464be6d-1c5c-d05d-fca4-3a2406c38b07\",\"title\":\"create_table: Hr_T_SickLeave\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"19173842-47c0-628a-7d6d-3a2406c38b07\",\"title\":\"deploy_wizard: SickLeave.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"b3b782f7-48bc-19b4-28ef-3a2406c38b07\",\"title\":\"create_table: Hr_T_MedicalExamination\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"16aa3400-b553-c836-ef94-3a2406c38b07\",\"title\":\"deploy_wizard: MedicalExamination.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"b0b4d1e7-cfb2-c2ae-2058-3a2406c38b07\",\"title\":\"create_table: Hr_T_PatientRegister\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true},{\"id\":\"d4be70d9-98b3-38c6-a8da-3a2406c38b07\",\"title\":\"deploy_wizard: PatientRegister.json\",\"assignee\":\"system@sozsoft.com\",\"dueDate\":\"2026-10-01\",\"completed\":true}]", + "Analysis": "

Amaç

\n

İK / işyeri hekimliği ekibinin çalışanların sağlık süreçlerini tek menüde takip etmesi: istirahat raporları, periyodik/plansız muayene sonuçları ve revire başvuran çalışanların hasta kayıt defteri. Çalışan bilgileri (TC, cinsiyet, doğum tarihi, eğitim, adres, departman, görev) kullanıcı seçilince AbpUsers'tan, şube ise kullanıcının şube yetkilerinden (Sas_T_BranchUsers) otomatik gelir.

\n\n

Görsel analizi

\n\n

Görsellerdeki fotoğraf alanı talep metni gereği (\"Listelerde Avatar olmasına gerek yok, eklenmeyecek\") üretilmez.

\n\n

Çözüm yolu

\n

Üç ekran da Wizard List (ComponentKind 0) ile, her biri kendi yeni tablosu üzerinde üretilir: kayıt listesi + popup ekle/düzenle/sil, filtre ve arama. Otomatik dolan çalışan/şube/doktor bilgileri lookup'ların seçili kaydından EditorScript (copy, selected) ile taşınır; hesaplar (Gün, Yaş), şube doğrulaması ve koşullu kilitler de EditorScript ile yapılır.

\n\n

Menü yeri

\n

İnsan Kaynakları › Sağlık › {Ekran}

\n\n\n\n\n\n\n\n
SeviyeKodAd (TR / EN)İkonDurum
KökApp.Hrİnsan Kaynakları / Human ResourcesFcConferenceCallVar
AraApp.Hr.HealthSağlık / HealthFcLikeYeni
EkranApp.Hr.SickLeaveİstirahat Listesi / Sick LeavesFcPlannerYeni
EkranApp.Hr.MedicalExaminationMuayene Listesi / Medical ExaminationsFcInspectionYeni
EkranApp.Hr.PatientRegisterHasta Kayıt Defteri / Patient RegisterFcViewDetailsYeni
\n

ModuleId: Hr · İzin grubu: App.Hr (var) · MenuParentCode: App.Hr.Health · MenuParentPath: App.Hr · Route: /admin/list/{ListFormCode}.

\n

Yetki: App.Hr › App.Hr.Health (Yeni) › App.Hr.SickLeave / App.Hr.MedicalExamination / App.Hr.PatientRegister.

\n

Ekranlar arasında lookup bağımlılığı yok (hepsi var olan tanım ekranlarını kullanır); menüde talepteki sırayla yer alırlar.

\n\n

Veri modeli

\n

Üç tablo da yenidir (önceki üretimin tabloları, wizard'ları ve menüleri kaldırılmış; veritabanında yoklar). Her tabloda Multi-Tenant + Full Audited kolon seti. Kapsam IsTenant = true, IsBranch = false. Kullanıcıdan kopyalanan kolonlar AbpUsers ile aynı ad/tip/boyla açılır: IdentityNumber nvarchar(15), Gender nvarchar(16) (Male/Female), EducationLevel nvarchar(128), HomeAddress nvarchar(512), BirthDate datetime2, DepartmentId/JobPositionId uniqueidentifier. Avatar kolonu hiçbir tabloda açılmaz.

\n\n

Şube kuralı (üç ekranda ortak): BranchId kullanıcının şube yetkilerinden (Sas_T_BranchUsers, yalnızca aktif ve silinmemiş Sas_T_Branch) belirlenir.

\n\n\n

Gösterim lookup'ları: DepartmentId → Hr_T_Department, JobPositionId → Hr_T_JobPosition, DoctorId → Hr_T_Doctor (IsActive), HospitalId/ReferralHospitalId → Hr_T_Hospital (IsActive), HospitalDepartmentId → Hr_T_HospitalDepartment (IsActive); hepsinde IsDeleted = 'false' ve TenantId = '@TENANTID'.

\n\n

Hr_T_SickLeave — Tanım tablosu: Hayır (çalışan bazlı hareket kaydı).

\n\n\n\n\n\n\n\n\n\n\n\n\n\n
KolonTipZorunluBaşlıkNot
UserIduniqueidentifierEvetAdı Soyadıkullanıcı lookup'ı
BranchIduniqueidentifier NULLEvet (form)Şube Adışube kuralı
IdentityNumbernvarchar(15)HayırTC Kimlik Nokopya, salt okunur
DepartmentIduniqueidentifierHayırDepartmankopya, salt okunur
StartDatedateEvetBaşlangıç Tarihi
EndDatedateEvetBitiş Tarihi
DayCountintHayırGünhesap, salt okunur
LeaveTypenvarchar(32)Evetİstirahat Tipisabit liste: Hastalık · İş Kazası · Analık · Meslek Hastalığı; varsayılan Hastalık
HospitalIduniqueidentifierHayırKurumHr_T_Hospital
HospitalDepartmentIduniqueidentifierHayırBölümHr_T_HospitalDepartment
Reasonnvarchar(MAX)Hayırİstirahat SebebidxTextArea
\n\n

Hr_T_MedicalExamination — Tanım tablosu: Hayır (çalışan bazlı muayene kaydı).

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
KolonTipZorunluBaşlıkNot
UserIduniqueidentifierEvetAdı Soyadıkullanıcı lookup'ı
IdentityNumbernvarchar(15)HayırTC Kimlik Nokopya, salt okunur
ExaminationDatedateEvetMuayene Tarihiaçılışta bugün
ExaminationTypenvarchar(32)EvetMuayene Tipisabit liste: Periyodik · Plansız; varsayılan Periyodik
EducationLevelnvarchar(128)HayırEğitim Durumukopya, salt okunur
BirthDatedatetime2HayırDoğum Tarihikopya, salt okunur
JobPositionIduniqueidentifierHayırGörevikopya, salt okunur
DepartmentIduniqueidentifierHayırDepartmankopya, salt okunur
BranchIduniqueidentifier NULLEvet (form)Şube Adışube kuralı
Examinationnvarchar(MAX)HayırMuayenedxTextArea
Resultnvarchar(MAX)HayırSonuçdxTextArea
DoctorIduniqueidentifierEvetDoktorHr_T_Doctor
DiplomaNonvarchar(50)HayırDiploma Nodoktordan kopya, salt okunur
DiplomaDatedateHayırDiploma Tarihidoktordan kopya, salt okunur
OhsCertificateNonvarchar(50)Hayırİşyeri Hekimi Belge Nodoktordan kopya, salt okunur
OhsCertificateDatedateHayırİşyeri Hekimi Belge Tarihidoktordan kopya, salt okunur
\n\n

Hr_T_PatientRegister — Tanım tablosu: Hayır (revir başvuru kaydı).

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
KolonTipZorunluBaşlıkNot
UserIduniqueidentifierEvetAdı Soyadıkullanıcı lookup'ı
RegisterDatedateEvetTarihaçılışta bugün
HomeAddressnvarchar(512)HayırAdreskopya, salt okunur
BirthDatedatetime2HayırDoğum Tarihikopya, salt okunur (Yaş hesabının kaynağı)
AgeintHayırYaşhesap, salt okunur
Gendernvarchar(16)HayırCinsiyetkopya, salt okunur; Male/Female, App.StaticLookup.Male/Female
BranchIduniqueidentifier NULLEvet (form)Şube Adışube kuralı
DoctorIduniqueidentifierHayırDoktorHr_T_Doctor
RegisterTypenvarchar(32)EvetTipsabit liste: Hastalık · İş Kazası Dönüş · İstirahat Dönüş; varsayılan Hastalık
Resultnvarchar(32)EvetSonuçsabit liste: Tedavi (Taburcu) · Sevk · İstirahat; varsayılan Tedavi (Taburcu)
LeaveDayCountintHayırİstirahat Günüyalnızca Sonuç = İstirahat iken açık
ReferralHospitalIduniqueidentifierHayırSevk YeriHr_T_Hospital; yalnızca Sonuç = Sevk iken açık
Descriptionnvarchar(MAX)HayırAçıklamadxTextArea
\n\n

Etkilenen kısımlar

\n\n\n

Görünümler ve davranış

\n\n\n

Kararlar

\n\n\n

Üretim planı

\n
    \n
  1. create_table: Hr_T_SickLeave
  2. \n
  3. deploy_wizard: SickLeave.json
  4. \n
  5. create_table: Hr_T_MedicalExamination
  6. \n
  7. deploy_wizard: MedicalExamination.json
  8. \n
  9. create_table: Hr_T_PatientRegister
  10. \n
  11. deploy_wizard: PatientRegister.json
  12. \n
\n\n

Üretime hazır

\n

Evet

MCP

\n

Üretilenler (menü: İnsan Kaynakları › Sağlık — App.Hr.Health yeni ara menü/ara yetki, ikon FcLike; izin grubu App.Hr; IsTenant = true, IsBranch = false; görünümler Grid/Card/Pivot/Chart, açılış Grid; form popup, tek grup 2 kolon):

\n\n

Avatar talep gereği hiçbir ekrana ve tabloya eklenmedi. Şube kuralı üç ekranda da uygulandı (tek şubede otomatik dolup kilitlenir, birden fazla ya da hiç şube yoksa seçime açılır, çalışana tanımlı olmayan şube uyarıyla reddedilir; BranchId formda zorunlu).

\n

Yetkiler her ekranda {ListFormCode} + .Create/.Update/.Delete/.Export/.Import/.Note; hiçbir role atanmadı. Yeni dil anahtarları: ara menü, üç ekran başlığı/açıklaması, dokuz widget başlığı ve yeni alan başlıkları.

\n

Varsayılanlar: script'ler kod olarak yazıldı (Script Builder kod görünümünde açılır); kopya alanlar EditorOptions.readOnly ile kilitli; departman ve görev gösterim lookup'larında IsActive filtresi yok (eski satırlarda adları görünsün diye); menü sırası deploy sırasıyla (İstirahat · Muayene · Hasta Kayıt).

\n

DB Migrate bekleyen wizard'lar: SickLeave.json, MedicalExamination.json, PatientRegister.json.

" } ] } diff --git a/configs/seeds/host/data/App.Languages.LanguageText.json b/configs/seeds/host/data/App.Languages.LanguageText.json index 025c56b4..9327b1f2 100644 --- a/configs/seeds/host/data/App.Languages.LanguageText.json +++ b/configs/seeds/host/data/App.Languages.LanguageText.json @@ -38728,20 +38728,6 @@ "Key": "App.ListForm.WizardDeleteTableMissing", "Value": "veritabanında yok" }, - { - "Id": "7cf4a636-1aa4-5c40-b76d-6a56b2cab594", - "CultureName": "en", - "ResourceName": "Platform", - "Key": "App.ListForm.WizardDeleteTableWarning", - "Value": "The table and all of its data will be permanently deleted. This cannot be undone. Files to be deleted:" - }, - { - "Id": "de41b71a-ba27-5faa-a4b7-2875e11aaef0", - "CultureName": "tr", - "ResourceName": "Platform", - "Key": "App.ListForm.WizardDeleteTableWarning", - "Value": "Tablo ve içindeki tüm veriler kalıcı olarak silinecek. Bu işlem geri alınamaz. Silinecek dosyalar:" - }, { "Id": "13caacb0-eb0b-5a43-b5ce-0442057dbf26", "CultureName": "en", diff --git a/ui/src/views/admin/listForm/wizard/WizardFileManager.tsx b/ui/src/views/admin/listForm/wizard/WizardFileManager.tsx index 72d57896..71def42b 100644 --- a/ui/src/views/admin/listForm/wizard/WizardFileManager.tsx +++ b/ui/src/views/admin/listForm/wizard/WizardFileManager.tsx @@ -477,6 +477,18 @@ const WizardFileManager = () => { : prev, ) + /** Silinebilen tablolar; toplu seçim yalnızca bunları işaretler. */ + const droppableTables = (confirm?.tables ?? []) + .filter((t) => t.canDrop && canDropTable) + .map((t) => t.tableName) + const allTablesSelected = + droppableTables.length > 0 && droppableTables.every((t) => confirm?.dropTables.includes(t)) + + const toggleAllDropTables = () => + setConfirm((prev) => + prev ? { ...prev, dropTables: allTablesSelected ? [] : droppableTables } : prev, + ) + const handleDeleteConfirm = async () => { if (!confirm) return setDeletingFile(confirm.fileName) @@ -570,16 +582,6 @@ const WizardFileManager = () => { {translate('::App.ListForm.WizardDeleteTableNoPermission')} )} - {checked && ( -
- {translate('::App.ListForm.WizardDeleteTableWarning')} - {table.files.map((file) => ( -
- {file} -
- ))} -
- )} ) } @@ -1235,9 +1237,20 @@ const WizardFileManager = () => { )} {!!confirm?.tables?.length && (
-

- {translate('::App.ListForm.WizardDeleteTables')} -

+
+

+ {translate('::App.ListForm.WizardDeleteTables')} +

+ {droppableTables.length > 1 && ( + + )} +

{translate('::App.ListForm.WizardDeleteTablesHint')}