18 KiB
İK › Eğitimler (App.Hr.Trainings)
Şirket içi ve dışı eğitimlerin kaydı: eğitim tipi → konu tanımları, eğitim oturumu (tarih/saat, süre, yer, eğitmen, maliyet, kazandırdığı yetkinlikler), katılımcılar (katılım durumu, puan, katılım belgesi) ve eğitim dosyaları. Tamamı konfigürasyondur (Wizard + rapor şablonu); entity, migration ya da React kodu yoktur.
Bu doküman modülün tek "nasıl çalışır" kaynağıdır. Modülde yapılan her değişiklik aynı commit'te buraya yansır (
lowcode.instructions.md§0.13).
1. Amaç ve kapsam
| Persona | Ne yapar | Ekran |
|---|---|---|
| İK / eğitim sorumlusu | Tip ve konu tanımlar, eğitim açar, katılımcı ekler, katılım/puan girer, dosya yükler, katılım belgesi basar | Eğitim Tipleri · Eğitim Konuları · Eğitimler |
| Yönetim | Eğitim adedi, açık/kapalı durum ve toplam maliyeti izler (widget, Pivot, Chart) | Eğitimler |
Kapsam: kiracı (IsTenant). Eğitim bir şubeye bağlıdır (BranchId zorunlu); satır süzmesi yoktur.
2. Analiz ve kararlar
Modül §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Kararlar artefaktlardan (wizard, SQL, seed, commit
36546d0c"Human Resources -> Eğitim bilgileri") okunmuştur.
| Konu | Karar |
|---|---|
| Yol | Wizard ekranları; eğitim kaydının altında Katılımcılar ve Dosyalar sekmeleri (menüsüz alt formlar) |
| Tanımlar | Tip ve konu tanımları İK › Tanımlar'da değil Eğitimler dalının içindedir; konu bir tipe bağlıdır ve tip seçimine göre süzülür |
| Süre | Toplam Süre (saat) = gün sayısı (bitiş dahil) × günlük saat (bitiş – başlangıç saati) — formda hesaplanır |
| Maliyet | Altı kalem (yer, eğitmen, konaklama, ulaşım, ikram, diğer) toplanarak CostTotal formda hesaplanır |
| Yetkinlik | Eğitimin kazandırdığı yetkinlikler SkillIds (çok değerli, Hr_T_Skill) olarak saklanır; çalışan profiline (Adm_T_UserSkill) yazılmaz |
| Katılımcı | Personel seçilince işe giriş tarihi, departman ve pozisyon kullanıcı kaydından kopyalanır (eğitim anındaki hâli saklanır) |
| Katılım durumu | Attended / NotAttended / Excused; varsayılan Attended |
| Katılım belgesi | Yalnızca Attended satırda görünen satır butonu → Katılım Belgesi raporu (DynamicReport) |
| Dosyalar | Belge türü Hr_T_DocumentType (ortak İK tanımı); dosya içeriği base64 (dxImageUpload) |
3. Menü ve ekranlar
İnsan Kaynakları › Eğitimler (App.Hr.Trainings, ikon FcGraduationCap)
| Sıra | Menü (TR / EN) | ListFormCode |
Alt formlar | Görünümler | Widget'lar |
|---|---|---|---|---|---|
| 1 | Eğitim Tipleri / Training Types | App.Hr.TrainingType |
— | Grid, Card, Pivot, Chart | Toplam · Aktif · Pasif |
| 2 | Eğitim Konuları / Training Subjects | App.Hr.TrainingSubject |
— | Grid, Card, Pivot, Chart | Toplam · Aktif · Pasif |
| 3 | Eğitimler / Trainings | App.Hr.Training |
TrainingParticipant, TrainingFile (Id → TrainingId, menüsüz) |
Grid, Card, Pivot, Chart | Toplam · Açık · Kapalı · Toplam Maliyet |
Seed verisi: 8 eğitim tipi (Oryantasyon, İş Başı, Teknik Oryantasyon, Grup, Firma Dışı, Eğitim
İçerikli Sosyal Faaliyet, Akademi, Rotasyon) ve 18 eğitim konusu (data/App.Hr.{TrainingType,TrainingSubject}.json).
Satır butonu: Katılımcılar › Katılım Belgesi — rapor 3840a20d-3233-4d17-bc06-ccfd8d87b32a,
görünürlük AttendanceStatus === 'Attended'.
4. Veri modeli
Hr_T_TrainingType ──< Hr_T_TrainingSubject
│ │
└──────< Hr_T_Training >──── Sas_T_Branch
├──< Hr_T_TrainingParticipant >── AbpUsers (+ Department, JobPosition)
└──< Hr_T_TrainingFile >── Hr_T_DocumentType
| Tablo | Önemli kolonlar | Kural |
|---|---|---|
Hr_T_TrainingType |
Name, IsActive |
— |
Hr_T_TrainingSubject |
TrainingTypeId, Name, IsEvaluated (değerlendirilsin mi), IsActive |
— |
Hr_T_Training |
TrainingTypeId, TrainingSubjectId (tipe göre cascade), EntryDate, BranchId, StartDate, EndDate, StartTime, EndTime, TotalHours, Status (Open/Closed), TrainerName, TrainingPlace, TrainingInstitution, Description, SkillIds, CostPlace, CostTrainer, CostAccommodation, CostTransport, CostCatering, CostOther, CostTotal |
Bitiş başlangıçtan önce olamaz (form) |
Hr_T_TrainingParticipant |
TrainingId, UserId, HireDate, DepartmentId, JobPositionId, AttendanceStatus, EvaluationScore, ExamScore, LeaveDate, Note |
— |
Hr_T_TrainingFile |
TrainingId, DocumentTypeId, FileDate, FileName, FileContent |
Dosya zorunlu |
Tablo düzeyinde CHECK ya da tekil indeks yoktur; kurallar formdadır.
5. İş kuralları ve hesaplar
Hesapların tamamı EditorScript'tir (sunucu tarafında after-command yoktur):
| Alan | Kural |
|---|---|
EntryDate |
Yeni kayıtta bugün |
Status |
Yeni kayıtta Open |
TotalHours |
Başlangıç/bitiş tarihi ya da saatlerinden biri değişince round(days(StartDate, EndDate) × hours(StartTime, EndTime), 2); dört alan dolu olmalı |
EndDate |
Başlangıçtan önceyse uyarı + değişiklik geri alınır |
CostTotal |
Altı maliyet kaleminden biri değişince toplam |
Katılımcı UserId |
Seçilince HireDate, DepartmentId, JobPositionId kopyalanır |
AttendanceStatus |
Yeni satırda Attended |
Dosya FileDate |
Yeni satırda bugün |
Tip/Konu IsActive, IsEvaluated |
Yeni kayıtta true |
Saat hesabı aynı günlük saat aralığının her gün tekrarlandığını varsayar; gün sayısına bitiş günü dahildir.
6. Yetki ve görünürlük
İzin grubu App.Hr, modül Sas|Hr. Yetki ağacı menüyü izler: App.Hr.Trainings ara yetkisinin
altında üç ekranın kökü + .Create/.Update/.Delete/.Export/.Import/.Note; TrainingParticipant ve
TrainingFile App.Hr.Training altındadır. Satır süzmesi yoktur. Hiçbir yetki role otomatik atanmaz.
| Rol | Yetkiler |
|---|---|
| Eğitim sorumlusu | App.Hr.Trainings dalının tamamı |
| Bölüm yöneticisi (izleme) | App.Hr.Training + App.Hr.TrainingParticipant (salt okuma) |
7. Entegrasyonlar
| Kaynak | Kullanım |
|---|---|
Sas_T_Branch |
Eğitimin şubesi |
AbpUsers |
Katılımcı; işe giriş tarihi, departman, pozisyon kopyası |
| Kullanıcı detayı › Eğitimler | Katılımcılar ekranı çalışana süzülmüş açılır; satır eklemek çalışanı eğitime katılımcı yapar (HrPersonnel.md) |
Hr_T_Department, Hr_T_JobPosition |
Katılımcının o anki birimi (Pivot kırılımı) |
Hr_T_Skill / Hr_T_SkillType |
Eğitimin kazandırdığı yetkinlikler |
Hr_T_DocumentType |
Eğitim dosyası türü |
| Raporlar | Katılım Belgesi (DynamicReport, Raporlar kategorisi) |
| Performans Yönetimi | Gelişim planı aksiyonu bir eğitime bağlanabilir (Hr_T_DevelopmentPlan.TrainingId); çalışan o eğitimde Attended ise aksiyon kendiliğinden tamamlanır: plan kaydında ve katılımcı kaydında (Hr_S_DevelopmentPlanSync, Hr_S_TrainingSync; bkz. HrPerformance.md) |
| Puantaj ve Devam Takibi | Katıldı işaretli katılımcının başlangıç–bitiş arasındaki iş günleri puantajda Eğitimde (vardiya saatleriyle) yazılır, okutması olmadığı için devamsız sayılmaz. Eğitim ya da katılımcı eklenince, değişince, silinince Hr_S_TrainingSync günleri hemen yeniden hesaplar (HrAttendance.md §7.1) |
8. Akış örneği
- İK Eğitimler'de "İş Sağlığı ve Güvenliği" kaydını açar: tip Grup Eğitimi, konu İSG, şube Merkez, 3–4 Kasım 09:00–17:00 → toplam süre 16 saat; eğitmen ve yer maliyetini girer → toplam maliyet hesaplanır; kazandırdığı yetkinliği (İSG) seçer.
- Katılımcılar sekmesine personeli ekler; departman/pozisyon kopyalanır, durum Katıldı.
- Gelmeyen personeli Katılmadı, raporlu olanı Mazeretli yapar; sınav/değerlendirme puanlarını girer.
- Katılanların satırından Katılım Belgesi basılır; imzalı liste Dosyalar sekmesine yüklenir.
- Eğitim Kapalı yapılır; widget'taki toplam maliyete eklenir.
9. Sık sorulanlar
Toplam süre hesaplanmıyor. Başlangıç/bitiş tarihi ve başlangıç/bitiş saatinin dördü de dolu olmalı.
Katılım belgesi butonu görünmüyor. Yalnızca katılım durumu "Katıldı" olan satırda çıkar.
Eğitim konusu listesi boş. Konu, seçilen eğitim tipine göre süzülür; önce tip seçin.
Eğitimdeki yetkinlik çalışan profiline yazılıyor mu? Hayır; SkillIds eğitimin bilgisidir. Profil, Performans Yönetimi'nde tamamlanan değerlendirmeden güncellenir.
Katılımcının departmanı sonradan değişti, eğitimde eski görünüyor. Bilinçli: eğitim anındaki birim saklanır.
10. Dosyalar ve geri alma
| Dosya | İçerik |
|---|---|
configs/seeds/host/sql/object/Hr_T_{TrainingType,TrainingSubject,Training,TrainingParticipant,TrainingFile}.sql |
Tablolar |
configs/seeds/host/wizard/{TrainingType,TrainingSubject,Training,TrainingParticipant,TrainingFile}.json |
5 wizard |
configs/seeds/host/data/App.Hr.{TrainingType,TrainingSubject}.json |
Tanım verisi |
configs/seeds/host/data/App.Reports.ReportTemplates.json |
Katılım Belgesi şablonu |
configs/seeds/host/data/App.Menus.Menu.json, Abp.Identity.Permissions.json, App.Languages.LanguageText.json |
Menü, yetki, dil satırları |
Kurulum: DB Migrate. Geri alma: Wizard Manager'dan alt formlar (TrainingParticipant, TrainingFile)
önce, sonra Training, TrainingSubject, TrainingType silinir; tablolar yalnızca onayda seçilirse
düşer. Gelişim planlarındaki TrainingId bağları silinmez, boşa düşer.
Ek — Ekran envanteri (otomatik)
Wizard dosyalarından üretilir; deploy, silme, tasarımcı kaydı ve import'ta yenilenir. Elle düzenleme bir sonraki yenilemede kaybolur.
Eğitim Tipleri — App.Hr.TrainingType
| Özellik | Değer |
|---|---|
| Wizard | wizard/TrainingType.json |
| Yol | Liste (Wizard) |
| Menü | App.Hr.Trainings › App.Hr.TrainingType (sıra 1) |
| Yetki | App.Hr.TrainingType + .Create, .Update, .Delete, .Export, .Import, .Note |
| Açıklama | Eğitim Tipleri — eğitimlerin türü (oryantasyon, iş başı, grup, firma dışı, akademi, rotasyon…). |
| Geliştirme talebi | Human Resources -> Eğitim |
| Kaynak | Hr_T_TrainingType · filtre "IsDeleted" = 'false' |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | App.Widget.Total, App.Widget.Active, App.Widget.Passive |
| Veri aynası | data/App.Hr.TrainingType.json |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|---|---|---|---|---|---|
Name |
Adı | dxTextBox | ✓ | ✓ | |
IsActive |
Aktif | dxCheckBox | ✓ | ✓ | script |
Eğitim Konuları — App.Hr.TrainingSubject
| Özellik | Değer |
|---|---|
| Wizard | wizard/TrainingSubject.json |
| Yol | Liste (Wizard) |
| Menü | App.Hr.Trainings › App.Hr.TrainingSubject (sıra 2) |
| Yetki | App.Hr.TrainingSubject + .Create, .Update, .Delete, .Export, .Import, .Note |
| Açıklama | Eğitim Konuları — bir eğitim tipine bağlı konu başlıkları (İSG, siber güvenlik, iş başı eğitimi…). |
| Geliştirme talebi | Human Resources -> Eğitim |
| Kaynak | Hr_T_TrainingSubject · filtre "IsDeleted" = 'false' |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | App.Widget.Total, App.Widget.Active, App.Widget.Passive |
| Veri aynası | data/App.Hr.TrainingSubject.json |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|---|---|---|---|---|---|
TrainingTypeId |
Eğitim Tipi | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_TrainingType |
Name |
Eğitim Konusu | dxTextBox | ✓ | ✓ | |
IsEvaluated |
Değerlendirilsin mi? | dxCheckBox | ✓ | ✓ | script |
IsActive |
Aktif | dxCheckBox | ✓ | ✓ | script |
Eğitimler — App.Hr.Training
| Özellik | Değer |
|---|---|
| Wizard | wizard/Training.json |
| Yol | Liste (Wizard) |
| Menü | App.Hr.Trainings › App.Hr.Training (sıra 3) |
| Yetki | App.Hr.Training + .Create, .Update, .Delete, .Export, .Import, .Note |
| Açıklama | Eğitimler — düzenlenen her eğitim oturumu: tarih/saat, süre, yer, eğitmen, maliyet, kazandırdığı yetkinlikler, katılımcılar ve dosyalar. |
| Geliştirme talebi | Human Resources -> Eğitim |
| Kaynak | Hr_T_Training · filtre "IsDeleted" = 'false' |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Alt formlar | App.Hr.TrainingParticipant (Id → TrainingId), App.Hr.TrainingFile (Id → TrainingId) |
| Widget'lar | App.Widget.Total, App.Hr.Training.Widget.Open, App.Hr.Training.Widget.Closed, App.Hr.Training.Widget.Cost |
| Komutlar | UpdateAfter: Hr_S_TrainingSync · DeleteAfter: Hr_S_TrainingSync |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|---|---|---|---|---|---|
TrainingTypeId |
Eğitim Tipi | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_TrainingType |
TrainingSubjectId |
Eğitim Konusu | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_TrainingSubject (← TrainingTypeId) |
EntryDate |
Giriş Tarihi | dxDateBox | ✓ | ✓ | script |
BranchId |
Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
StartDate |
Eğitim Baş. Tarihi | dxDateBox | ✓ | ✓ | script |
EndDate |
Bit. Tarihi | dxDateBox | ✓ | ✓ | script |
StartTime |
Eğitim Baş. Saati | dxDateBox | ✓ | script | |
EndTime |
Bit. Saati | dxDateBox | ✓ | script | |
TotalHours |
Top. Eğitim Süresi (Saat) | dxNumberBox | ✓ | ||
Status |
Durum | dxRadioGroup | ✓ | ✓ | liste: Open, Closed · script |
TrainerName |
Eğitim Veren Kişi | dxTextBox | ✓ | ||
TrainingPlace |
Eğitim Yeri | dxTextBox | ✓ | ||
TrainingInstitution |
Eğitim Veren Kurum | dxTextBox | ✓ | ||
Description |
Açıklama | dxTextArea | ✓ | ||
SkillIds |
Yetkinlikler | dxTagBox | ✓ | sorgu: Hr_T_Skill | |
CostPlace |
Eğitim Yeri Maliyeti | dxNumberBox | ✓ | script | |
CostTrainer |
Eğitmen Maliyeti | dxNumberBox | ✓ | script | |
CostAccommodation |
Konaklama | dxNumberBox | ✓ | script | |
CostTransport |
Ulaşım | dxNumberBox | ✓ | script | |
CostCatering |
İkram | dxNumberBox | ✓ | script | |
CostOther |
Diğer | dxNumberBox | ✓ | script | |
CostTotal |
Toplam Maliyet | dxNumberBox | ✓ |
Katılımcılar — App.Hr.TrainingParticipant
| Özellik | Değer |
|---|---|
| Wizard | wizard/TrainingParticipant.json |
| Yol | Liste (Wizard) |
| Menü | Menüsüz (alt form) |
| Yetki | App.Hr.TrainingParticipant + .Create, .Update, .Delete, .Export, .Import, .Note |
| Açıklama | Katılımcılar — eğitime katılan personel ve katılım sonucu. |
| Geliştirme talebi | Human Resources -> Eğitim |
| Kaynak | Hr_T_TrainingParticipant · filtre "IsDeleted" = 'false' |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Komutlar | InsertAfter: Hr_S_TrainingSync · UpdateAfter: Hr_S_TrainingSync · DeleteAfter: Hr_S_TrainingSync |
| Butonlar | App.Hr.TrainingParticipant.Certificate |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|---|---|---|---|---|---|
TrainingId |
Eğitim | dxSelectBox | sorgu: Hr_T_Training | ||
UserId |
Adı Soyadı | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers · script |
HireDate |
İşe Giriş Tarihi | dxDateBox | ✓ | ||
DepartmentId |
Bölüm | dxSelectBox | ✓ | sorgu: Hr_T_Department | |
JobPositionId |
Görevi | dxSelectBox | ✓ | sorgu: Hr_T_JobPosition | |
AttendanceStatus |
Katılım Durumu | dxSelectBox | ✓ | ✓ | liste: Attended, NotAttended, Excused · script |
EvaluationScore |
Değerlendirme Puanı | dxNumberBox | ✓ | ||
ExamScore |
Sınav Notu | dxNumberBox | ✓ | ||
LeaveDate |
Ayrılma Tarihi | dxDateBox | ✓ | ||
Note |
Not | dxTextArea | ✓ |
Dosyalar — App.Hr.TrainingFile
| Özellik | Değer |
|---|---|
| Wizard | wizard/TrainingFile.json |
| Yol | Liste (Wizard) |
| Menü | Menüsüz (alt form) |
| Yetki | App.Hr.TrainingFile + .Create, .Update, .Delete, .Export, .Import, .Note |
| Açıklama | Eğitim Dosyaları — eğitime ait doküman ve dijital kaynaklar (sunum, imzalı katılım listesi, sertifika örneği…). |
| Geliştirme talebi | Human Resources -> Eğitim |
| Kaynak | Hr_T_TrainingFile · filtre "IsDeleted" = 'false' |
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|---|---|---|---|---|---|
TrainingId |
Eğitim | dxTextBox | |||
DocumentTypeId |
Dosya Türü | dxSelectBox | ✓ | sorgu: Hr_T_DocumentType | |
FileDate |
Tarih | dxDateBox | ✓ | ✓ | script |
FileName |
Dosya Adı | dxTextBox | ✓ | ✓ | |
FileContent |
Dosya | dxImageUpload | ✓ | ✓ |