PYBS (Personel Yönetim Bilgi Sistemi)
<?php
// modules/tum-mesailer.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';
yetkiKontrol(['root', 'yonetici', 'mudur', 'vardiya_amiri', 'muhasebe', 'insan_kaynaklari']);
include '../includes/header.php';
include '../includes/menu.php';
$mesaj = '';
$kullanici_id = $_SESSION['kullanici_id'];
$rol = $_SESSION['rol'];
// --- İŞLEM ---
if (isset($_GET['islem']) && isset($_GET['id'])) {
$id = (int)$_GET['id'];
$aksiyon = $_GET['islem'];
$sql_yetki = "SELECT m.*, k.ad, k.soyad, m.calisan_id FROM mesai_hareketleri m JOIN kullanicilar k ON m.calisan_id = k.id WHERE m.id = ?";
$yetki_params = [$id];
if(!in_array($rol, ['root', 'muhasebe', 'insan_kaynaklari'])) {
// GÜVENLİK GÜNCELLEMESİ: $kullanici_id parametre olarak eklendi
$sql_yetki .= " AND m.hedef_yonetici_id = ?";
$yetki_params[] = $kullanici_id;
}
$stmt = $pdo->prepare($sql_yetki);
$stmt->execute($yetki_params);
$kayit = $stmt->fetch();
if ($kayit) {
$yeni_durum = '';
if($aksiyon == 'onayla') $yeni_durum = 'onaylandi';
elseif($aksiyon == 'reddet') $yeni_durum = 'reddedildi';
elseif($aksiyon == 'beklemede') $yeni_durum = 'beklemede';
if ($kayit['durum'] != 'beklemede' && !in_array($rol, ['root', 'muhasebe', 'insan_kaynaklari'])) {
$mesaj = "<div class='alert alert-warning'>Yetkiniz yok.</div>";
} else {
$pdo->prepare("UPDATE mesai_hareketleri SET durum = ?, onaylayan_id = ?, onaylanma_tarihi = NOW() WHERE id = ?")->execute([$yeni_durum, $kullanici_id, $id]);
// LOG
logKaydet($pdo, $kullanici_id, 'onay', "Mesai $yeni_durum (ID: $id)", 'mesai_hareketleri', $id);
bildirimGonder($pdo, $kayit['calisan_id'], "Mesai Durumu", "Mesai talebiniz $yeni_durum.", "../modules/mesai-giris.php");
$mesaj = "<div class='alert alert-success'>Mesai durumu güncellendi: <strong>".strtoupper($yeni_durum)."</strong></div>";
}
}
}
// Helper Fonksiyon (Burada inline tanımlı kalabilir)
if (!function_exists('haftalikAnalizGetir')) {
function haftalikAnalizGetir($pdo, $calisan_id, $tarih) {
$date = new DateTime($tarih);
$gun = $date->format('N');
$pzt = clone $date; $pzt->modify('-' . ($gun - 1) . ' days');
$paz = clone $pzt; $paz->modify('+6 days');
$sql = "SELECT SUM(toplam_saat) FROM mesai_hareketleri WHERE calisan_id = ? AND durum = 'onaylandi' AND tarih BETWEEN ? AND ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$calisan_id, $pzt->format('Y-m-d'), $paz->format('Y-m-d')]);
return (float)$stmt->fetchColumn();
}
}
// LISTELEME
$sql_list = "SELECT m.*, k.ad as c_ad, k.soyad as c_soyad, k.rol as c_rol, o.ad as o_ad, o.soyad as o_soyad
FROM mesai_hareketleri m
JOIN kullanicilar k ON m.calisan_id = k.id
LEFT JOIN kullanicilar o ON m.onaylayan_id = o.id ";
$list_params = [];
if (!in_array($rol, ['root', 'muhasebe', 'insan_kaynaklari'])) {
// GÜVENLİK GÜNCELLEMESİ: $kullanici_id parametre olarak eklendi
$sql_list .= " WHERE m.hedef_yonetici_id = ?";
$list_params[] = $kullanici_id;
}
$sql_list .= " ORDER BY m.tarih DESC";
$stmt_list = $pdo->prepare($sql_list);
$stmt_list->execute($list_params);
$mesailer = $stmt_list->fetchAll();
?>
<div class="container-fluid">
<h3 class="mb-4"><i class="fas fa-business-time text-primary"></i> Mesai Yönetim Paneli</h3>
<?php echo $mesaj; ?>
<div class="card border-0 shadow-sm">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-dark">
<tr>
<th>Personel</th>
<th>Tarih / Süre</th>
<th>Haftalık Durum</th>
<th>Durum / Onaylayan</th>
<th class="text-end">İşlem</th>
</tr>
</thead>
<tbody>
<?php foreach ($mesailer as $m):
$haftalik = haftalikAnalizGetir($pdo, $m['calisan_id'], $m['tarih']);
$renk = ($haftalik >= 45) ? 'text-danger fw-bold' : 'text-success';
?>
<tr>
<td>
<strong><?php echo $m['c_ad'].' '.$m['c_soyad']; ?></strong><br>
<small class="text-muted"><?php echo strtoupper($m['c_rol']); ?></small>
</td>
<td>
<?php echo tarihTurkce($m['tarih']); ?><br>
<span class="badge bg-primary"><?php echo $m['toplam_saat']; ?> Saat</span>
</td>
<td>
<span class="<?php echo $renk; ?>"><?php echo $haftalik; ?> / 45 Saat</span>
</td>
<td>
<?php if($m['durum']=='onaylandi'): ?>
<span class="text-success fw-bold"><i class="fas fa-check"></i> Onaylı</span>
<?php if($m['o_ad']): ?>
<br><small class="text-muted"><?php echo $m['o_ad'].' '.$m['o_soyad']; ?></small>
<?php endif; ?>
<?php elseif($m['durum']=='reddedildi'): ?>
<span class="badge bg-danger">Red</span>
<?php else: ?>
<span class="badge bg-warning text-dark">Bekliyor</span>
<?php endif; ?>
</td>
<td class="text-end pe-3">
<div class="btn-group">
<?php if($m['durum'] == 'beklemede'): ?>
<a href="?islem=onayla&id=<?php echo $m['id']; ?>" class="btn btn-sm btn-success"><i class="fas fa-check"></i></a>
<a href="?islem=reddet&id=<?php echo $m['id']; ?>" class="btn btn-sm btn-danger"><i class="fas fa-times"></i></a>
<?php elseif(in_array($rol, ['root', 'muhasebe', 'insan_kaynaklari'])): ?>
<button type="button" class="btn btn-sm btn-secondary dropdown-toggle" data-bs-toggle="dropdown"><i class="fas fa-cog"></i></button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="?islem=beklemede&id=<?php echo $m['id']; ?>">Beklemeye Al</a></li>
<li><a class="dropdown-item text-danger" href="?islem=reddet&id=<?php echo $m['id']; ?>">İptal Et</a></li>
</ul>
<?php endif; ?>
</div>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<?php include '../includes/footer.php'; ?>
DEMO SÜRÜMÜDÜR TAM SÜRÜM İÇİN İLETİŞİM KURUN
📖 PYBS (Personel Yönetim Bilgi Sistemi) Kullanım Kılavuzu
🚀 Proje Tanımı
PYBS, personel bilgilerini, izinleri, maaş bordrolarını ve performans değerlendirmelerini merkezi ve dijital bir platformda yönetmek için tasarlanmış kapsamlı bir Personel Yönetim Bilgi Sistemi'dir. Amacımız, İnsan Kaynakları (İK) süreçlerini otomatikleştirerek verimliliği artırmak ve veri tutarlılığını sağlamaktır.
✨ Temel Özellikler
Personel Yönetimi: Çalışanların kişisel, iletişim ve görev bilgilerini kaydetme/güncelleme.
İzin Yönetimi: Çalışanların izin taleplerini oluşturma, onaylama/reddetme ve kalan izin haklarını takip etme.
Performans Değerlendirme: Yöneticilerin ve çalışanların performans hedeflerini belirlemesi ve değerlendirmeleri kaydetmesi.
Bordro Entegrasyonu: Maaş ve avans bilgilerini kaydetme ve bordro çıktılarını oluşturma (Harici sistemlerle entegrasyon potansiyeli).
Raporlama: İK yöneticileri için özet ve detaylı personel, izin ve bordro raporları oluşturma.
💻 Son Kullanıcı Kullanımı🔑 Giriş Yapma
Demo için kullanıcı adı : test.test
Demo için şifre : 123456
Demo hesabında root / yonetici vb yetki yoktur.
Tam sürüm için iletişime geçin.
Sistem "Ramsa Makine" tarafından aktif olarak kullanılmaktadır
Meta Veri (Özet)
İşyeri çalışanlarının maaş, fazla mesai ve puantaj ile bordro takip, kontrol ve raporlama sistemi