9.4 KiB
İK › Çalışma Takvimi ve Vardiyalar (App.Hr.WorkCalendar, App.Hr.Shift)
Çalışma zamanının iki temel tanımı: resmi tatil / yarım gün takvimi (yıllık tekrarlı ya da tek seferlik) ve vardiya tanımları (saat aralığı, mola, gece vardiyası). Diğer modüller bu tanımları lookup olarak kullanır. Tamamı konfigürasyondur (Wizard + seed); vardiya ayrıca kullanıcı kaydına bağlanır.
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 | Yılın tatil ve yarım günlerini girer, takvim görünümünden kontrol eder | Çalışma Takvimi |
| İK / üretim planlama | Vardiya tanımlarını yönetir, çalışanı vardiyaya bağlar | Vardiyalar · Kimlik › Kullanıcılar |
Kapsam: kiracı (IsTenant). Şube kırılımı yoktur — takvim kiracının tamamı için geçerlidir.
2. Analiz ve kararlar
Modüller §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Kararlar artefaktlardan (wizard, seed, commit
130e23bc"Disiplin Dosyaları, Çalışma Takvimi") okunmuştur.
| Konu | Karar |
|---|---|
| Tatil tekrarı | Sabit tarihli resmi tatiller RecurrenceRule = FREQ=YEARLY ile bir kez girilir, her yıl tekrarlar; dini bayramlar ay takvimine bağlı olduğu için her yıl ayrı satırdır (tekrar kuralı boş) |
| Gün türü | Holiday (tam gün tatil) / HalfDay (arife, yarım gün) |
| Görünüm | Liste görünümlerine ek olarak Scheduler (takvim) görünümü; AllDay her zaman true |
| Vardiya saatleri | StartTime / EndTime SS:dd metin; çalışma süresi elle girilir (otomatik hesap yok) |
| Gece vardiyası | Bayrak (IsNightShift) — sağlık kartındaki "gece çalışabilir" sonucuyla birlikte değerlendirilir, otomatik kontrol yoktur |
| Vardiya bağı | Kullanıcı kaydında ShiftId alanı (LookupQueryValues.TenantShiftValues: "Ad (başlangıç-bitiş)") |
| Menü yeri | Çalışma Takvimi ve Vardiyalar İnsan Kaynakları kökündedir. Vardiyalar wizard dosyasında üst menü App.Hr.Definitions yazılıdır, menü satırı kökte durur (bkz. §9) |
3. Menü ve ekranlar
| Menü (TR / EN) | ListFormCode |
Yer | Görünümler | Widget'lar |
|---|---|---|---|---|
| Çalışma Takvimi / Work Calendar | App.Hr.WorkCalendar |
İnsan Kaynakları (sıra 2, FcCalendar) |
Grid, Card, Pivot, Chart, Scheduler | Toplam · Tatil · Yarım Gün |
| Vardiyalar / Shifts | App.Hr.Shift |
İnsan Kaynakları (sıra 3, FcClock) |
Grid, Card, Pivot, Chart | Toplam · Aktif · Pasif |
Scheduler eşlemesi: metin Name, başlangıç StartDate, bitiş EndDate, tüm gün AllDay,
tekrar RecurrenceRule.
Seed verisi:
- Çalışma takvimi, 16 satır (
data/App.Hr.WorkCalendar.json):- Yıllık tekrarlı tatiller: Yılbaşı, 23 Nisan, 1 Mayıs, 19 Mayıs, 15 Temmuz, 30 Ağustos, 29 Ekim.
- Yıllık tekrarlı yarım gün: 28 Ekim arifesi.
- Yıla özel satırlar: 2026 ve 2027 Ramazan/Kurban bayramları ve arifeleri.
- Vardiyalar, 3 satır (
data/App.Hr.Shift.json): Sabah 08:00–16:00, Akşam 16:00–00:00, Gece 00:00–08:00 (gece vardiyası).
4. Veri modeli
| Tablo | Kolonlar |
|---|---|
Hr_T_WorkCalendar |
Name, StartDate, EndDate, DayType (Holiday/HalfDay), RecurrenceRule (boş / FREQ=YEARLY), AllDay, IsActive |
Hr_T_Shift |
Name, StartTime, EndTime, BreakMinutes, WorkingHours, IsNightShift, IsActive |
AbpUsers.ShiftId |
Çalışanın vardiyası (genişletme kolonu) |
Entity yoktur (wizard tabloları); sql/object/Hr_T_{WorkCalendar,Shift}.sql.
5. İş kuralları
| Yer | Kural |
|---|---|
| Takvim — yeni kayıt | Gün türü Holiday, tekrar FREQ=YEARLY, tüm gün, aktif |
| Takvim — çok günlü tatil | Başlangıç–bitiş aralığı olarak tek satırda girilebilir |
| Vardiya — yeni kayıt | Gece vardiyası hayır, aktif |
Takvim ve vardiya başka bir hesaba (izin günü, mesai, puantaj) bağlı değildir; platformda puantaj/izin hesaplayan modül yoktur.
6. Yetki ve görünürlük
İzin grubu App.Hr, modül Sas|Hr. Her ekranın kökü + .Create/.Update/.Delete/.Export/.Import/.Note.
Hiçbir yetki role otomatik atanmaz. Takvimin okunması tüm çalışanlara açılabilir; düzenleme İK'da kalmalıdır.
7. Entegrasyonlar
| Kullanan | Nasıl |
|---|---|
| Kimlik › Kullanıcılar | ShiftId alanı vardiya lookup'ı |
Olay Günlüğü (App.Hr.EventLog) |
Olay kaydında vardiya seçimi |
| Sağlık Kartları | Vardiyalı / gece çalışabilir sonucu (bilgi; vardiya tanımıyla otomatik eşleşmez) |
8. Akış örneği
- Yıl başında İK Çalışma Takvimi'nde o yılın dini bayram satırlarını ekler (sabit tatiller zaten yıllık tekrarlıdır) ve Scheduler görünümünde yılı kontrol eder.
- Üretim için Vardiyalar'a "Hafta Sonu 08:00–20:00, mola 60 dk, çalışma 11 saat" eklenir.
- Kullanıcı ekranında çalışanların Vardiya alanı güncellenir; Olay Günlüğü kayıtlarında da bu vardiyalar seçilir.
9. Sık sorulanlar ve bilinen sınırlar
Ramazan Bayramı gelecek yıl görünmüyor. Dini bayramlar yıla özeldir; her yıl yeni satır girilir.
Çalışma süresi neden hesaplanmıyor? Vardiya saatleri metindir, süre elle girilir.
Takvim izin/puantaj hesabını etkiliyor mu? Hayır; bu hesapları yapan bir modül yoktur.
Vardiyalar menüde Tanımlamalar altında değil. Menü satırı İnsan Kaynakları kökündedir; wizard
dosyasındaki üst menü (App.Hr.Definitions) eski değerdir. Wizard yeniden deploy edilirse menü
Tanımlamalar altına taşınabilir — yeniden deploy etmeden önce wizard'daki üst menü kökle eşitlenmelidir.
10. Dosyalar ve geri alma
| Dosya | İçerik |
|---|---|
configs/seeds/host/sql/object/Hr_T_{WorkCalendar,Shift}.sql |
Tablolar |
configs/seeds/host/wizard/{WorkCalendar,Shift}.json |
2 wizard |
configs/seeds/host/data/App.Hr.{WorkCalendar,Shift}.json |
Takvim ve vardiya verisi (ekran kayıtları dosyaya aynalanır) |
api/src/Sozsoft.Platform.Application.Contracts/LookUpQueryValues.cs (TenantShiftValues) |
Kullanıcı ekranındaki vardiya lookup'ı |
Geri alma: Wizard Manager'dan silinir; vardiya tablosu kullanıcı ekranının lookup'ı tarafından okunduğu için düşürülmemelidir.
Ek — Ekran envanteri (otomatik)
Wizard dosyalarından üretilir; deploy, silme, tasarımcı kaydı ve import'ta yenilenir. Elle düzenleme bir sonraki yenilemede kaybolur.
Çalışma Takvimi — App.Hr.WorkCalendar
| Özellik | Değer |
|---|---|
| Wizard | wizard/WorkCalendar.json |
| Yol | Liste (Wizard) |
| Menü | App.Hr › App.Hr.WorkCalendar (sıra 2) |
| Yetki | App.Hr.WorkCalendar + .Create, .Update, .Delete, .Export, .Import, .Note |
| Açıklama | Çalışma Takvimi — resmi tatiller, arife (yarım gün) ve çalışılmayan günler. |
| Kaynak | Hr_T_WorkCalendar · filtre "IsDeleted" = 'false' |
| Görünümler | Grid, Card, Pivot, Chart, Scheduler (açılış grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | App.Widget.Total, App.Hr.WorkCalendar.DayType.Holiday, App.Hr.WorkCalendar.DayType.HalfDay |
| Form varsayılanları | DayType=Holiday, RecurrenceRule=FREQ=YEARLY, AllDay=true, IsActive=true |
| Veri aynası | data/App.Hr.WorkCalendar.json |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|---|---|---|---|---|---|
Name |
Adı | dxTextBox | ✓ | ✓ | |
StartDate |
Başlangıç Tarihi | dxDateBox | ✓ | ✓ | |
EndDate |
Bitiş Tarihi | dxDateBox | ✓ | ✓ | |
DayType |
Gün Türü | dxSelectBox | ✓ | ✓ | liste: Holiday, HalfDay |
RecurrenceRule |
Tekrarlama Kuralı | dxSelectBox | ✓ | liste: FREQ=YEARLY | |
AllDay |
Tüm Gün | dxCheckBox | |||
IsActive |
Aktif | dxCheckBox | ✓ | ✓ |
Vardiyalar — App.Hr.Shift
| Özellik | Değer |
|---|---|
| Wizard | wizard/Shift.json |
| Yol | Liste (Wizard) |
| Menü | App.Hr.Definitions › App.Hr.Shift (sıra 9) |
| Yetki | App.Hr.Shift + .Create, .Update, .Delete, .Export, .Import, .Note |
| Açıklama | Vardiyalar — çalışma vardiyalarının tanımı (sabah, akşam, gece…). |
| Geliştirme talebi | Human Resources -> Olay Günlüğü |
| Kaynak | Hr_T_Shift · 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 |
| Form varsayılanları | IsNightShift=false, IsActive=true |
| Veri aynası | data/App.Hr.Shift.json |
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|---|---|---|---|---|---|
Name |
Vardiya Adı | dxTextBox | ✓ | ✓ | |
StartTime |
Başlangıç Saati | dxTextBox | ✓ | ||
EndTime |
Bitiş Saati | dxTextBox | ✓ | ||
BreakMinutes |
Mola (dk) | dxNumberBox | ✓ | ||
WorkingHours |
Çalışma Süresi (Saat) | dxNumberBox | ✓ | ||
IsNightShift |
Gece Vardiyası | dxCheckBox | ✓ | ✓ | |
IsActive |
Aktif | dxCheckBox | ✓ | ✓ |