PDKS · Personel Devam Kontrolü

Giriş/çıkış, mola, izin ve çalışma süreleri. Süreler kayıtlardan hesaplanır.

@if (store.error(); as e) { } @if (store.notice(); as n) { } @if (tab() === 'daily') {
{{ totals().present }}Geldi
{{ totals().absent }}Gelmedi
{{ totals().leave }}İzinli
{{ totals().open }}Kayıt açık
{{ fmt(totals().work) }}Toplam çalışma
Kayıt tut

Tarihi boş bırakırsan kayıt "şu an" alınır. Yanlış kaydı aşağıdaki gün detayından silebilirsin.

@for (r of rows(); track r.empId) { } @empty { }
PersonelBölümGirişÇıkışÇalışmaMolaGeçMesaiDurum
{{ r.name }} {{ r.dept ?? '—' }} {{ r.day.firstIn ?? '—' }} {{ r.day.lastOut ?? '—' }} {{ fmt(r.day.workMin) }} {{ fmt(r.day.breakMin) }} {{ r.day.lateMin ? fmt(r.day.lateMin) : '—' }} {{ r.day.overtimeMin ? fmt(r.day.overtimeMin) : '—' }} {{ statusText(r.day.status) }}
Bu gün için kayıt yok.
@if (store.detail(); as d) { } } @if (tab() === 'employees') {

Personel ({{ store.employees().length }})

@if (empForm(); as f) {
} @for (e of store.employees(); track e.id) { } @empty { }
AdBolumGorevE-posta
{{ e.name }}{{ deptOf(e.departmentId) }}{{ e.title ?? "--" }}{{ e.email ?? "--" }}
Henuz personel yok.
} @if (tab() === 'departments') {

Bolumler ({{ store.departments().length }})

@if (deptForm(); as f) {

Alt bolum ust bolume baglanabilir. Dongusel yapi engellenir.

} @for (d of store.departments(); track d.id) { } @empty { }
AdUst bolumPersonel
{{ d.name }}{{ deptOf(d.parentId) }} {{ store.employees().filter(e => e.departmentId === d.id).length }}
Henuz bolum yok.
} @if (tab() === 'shifts') {

Vardiyalar ({{ store.shifts().length }})

@if (shiftForm(); as f) {

Planli mola, mesai ve gec kalma hesabina girer. Bitis baslangictan kucukse gece vardiyasi sayilir.

} @for (s of store.shifts(); track s.id) { } @empty { }
AdBaslangicBitisMolaHaftalik
{{ s.name }}{{ s.start }}{{ s.end }}{{ s.breakMin ?? 0 }} dk{{ s.weeklyHours ?? "--" }}
Henuz vardiya yok.
} @if (tab() === 'leaves') {

Izinler

@if (leaveForm(); as f) {

Yalniz ONAYLI izin gunu raporda "izinli" sayilir; calisma olarak yazilmaz.

} @for (l of store.leaves(); track l.id) { } @empty { }
PersonelTurBaslangicBitisGunDurum
{{ empOf(l.empId) }}{{ leaveLabel[l.kind] ?? l.kind }}{{ l.from }}{{ l.to }}{{ l.days }} {{ l.approved ? 'Onayli' : 'Bekliyor' }}
Kayitli izin yok.
} @if (tab() === 'report') {
@if (store.summary(); as r) {
{{ fmt(r.workMin) }}Calisma
{{ fmt(r.breakMin) }}Mola
{{ fmt(r.overtimeMin) }}Mesai
{{ r.present }}Gelen gun
{{ r.absent }}Gelmedi
{{ r.leave }}Izinli

{{ r.from }} → {{ r.to }} ({{ r.days }} gun)

@for (row of r.rows; track row.empId) { } @empty { }
PersonelBolumCalismaMolaGecMesaiGelenGelmediIzinli
{{ row.name }}{{ row.dept ?? "--" }}{{ fmt(row.workMin) }}{{ fmt(row.breakMin) }}{{ fmt(row.lateMin) }}{{ fmt(row.overtimeMin) }}{{ row.present }}{{ row.absent }}{{ row.leave }}
Bu aralikta veri yok.
} } @if (confirmDelete(); as t) { }