PYBS (Personel Yönetim Bilgi Sistemi)
<?php
// modules/tum-mesailer-rapor.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';
yetkiKontrol(['root', 'yonetici', 'mudur', 'vardiya_amiri', 'muhasebe', 'insan_kaynaklari']);
// --- PARAMETRELER ---
$format = $_GET['format'] ?? 'print';
$kullanici_id = $_SESSION['kullanici_id'];
$rol = $_SESSION['rol'];
$yuksek_yetki = in_array($rol, ['root', 'muhasebe', 'insan_kaynaklari']);
// Filtre Değerleri
$filtre_durum = $_GET['filtre'] ?? 'aktif';
$filtre_personel_id = isset($_GET['personel_id']) ? (int)$_GET['personel_id'] : 0;
$secilen_yil = $_GET['yil'] ?? date('Y');
$secilen_ay = $_GET['ay'] ?? date('m');
date_default_timezone_set('Europe/Istanbul');
$rapor_tarihi_saati = date('d.m.Y H:i');
$ay_isimleri = ['01'=>'OCAK','02'=>'ŞUBAT','03'=>'MART','04'=>'NİSAN','05'=>'MAYIS','06'=>'HAZİRAN','07'=>'TEMMUZ','08'=>'AĞUSTOS','09'=>'EYLÜL','10'=>'EKİM','11'=>'KASIM','12'=>'ARALIK'];
// --- BAŞLIK OLUŞTURMA ---
$baslik_ek = "";
$donem_ek = "";
// Personel İsmi Başlıkta
if ($filtre_personel_id > 0) {
$stmt_p = $pdo->prepare("SELECT ad, soyad FROM kullanicilar WHERE id = ?");
$stmt_p->execute([$filtre_personel_id]);
$p_bilgi = $stmt_p->fetch();
if($p_bilgi) $baslik_ek = $p_bilgi['ad'] . " " . $p_bilgi['soyad'] . " - ";
}
// Dönem Bilgisi Başlıkta
if ($filtre_durum == 'aktif') {
$donem_ek = " (" . $ay_isimleri[date('m')] . " " . date('Y') . ")";
} elseif ($filtre_durum == 'tarih') {
$donem_ek = " (" . $ay_isimleri[sprintf('%02d', $secilen_ay)] . " " . $secilen_yil . ")";
} else {
$donem_ek = " (TÜM GEÇMİŞ)";
}
$rapor_basligi = $baslik_ek . "PERSONEL MESAİ RAPORU" . $donem_ek;
// --- SQL SORGUSU HAZIRLAMA ---
$sql = "SELECT m.*, k.ad, k.soyad, k.rol as k_rol, k.tc_no,
o.ad as o_ad, o.soyad as o_soyad,
y.ad as y_ad, y.soyad as y_soyad
FROM mesai_hareketleri m
JOIN kullanicilar k ON m.calisan_id = k.id
LEFT JOIN kullanicilar o ON m.onaylayan_id = o.id
LEFT JOIN kullanicilar y ON m.hedef_yonetici_id = y.id
WHERE 1=1 ";
$params = [];
// 1. Yetki Filtresi
if (!$yuksek_yetki) {
$sql .= " AND m.hedef_yonetici_id = :hid ";
$params[':hid'] = $kullanici_id;
}
// 2. Personel Filtresi
if ($filtre_personel_id > 0) {
$sql .= " AND m.calisan_id = :pid ";
$params[':pid'] = $filtre_personel_id;
}
// 3. Tarih Filtresi
if ($filtre_durum == 'aktif') {
$sql .= " AND YEAR(m.tarih) = YEAR(CURDATE()) AND MONTH(m.tarih) = MONTH(CURDATE())";
} elseif ($filtre_durum == 'tarih') {
$sql .= " AND YEAR(m.tarih) = :yil AND MONTH(m.tarih) = :ay";
$params[':yil'] = $secilen_yil;
$params[':ay'] = $secilen_ay;
}
$sql .= " ORDER BY m.tarih DESC";
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$mesailer = $stmt->fetchAll();
// --- EXCEL ÇIKTISI ---
if ($format == 'excel') {
$dosya_adi = "Mesai_" . ($filtre_personel_id > 0 ? "Personel_" : "") . date('Y-m-d') . ".xls";
header("Content-Type: application/vnd.ms-excel; charset=utf-8");
header("Content-Disposition: attachment; filename=$dosya_adi");
echo "\xEF\xBB\xBF";
?>
<table border="1">
<thead>
<tr style="background:#eee;">
<th>Personel</th><th>Tarih</th><th>Saat Aralığı</th><th>Brüt Süre</th><th>Net (Çalışılan)</th><th>Katsayı</th><th>Hakediş (Ödenecek)</th><th>Tür</th><th>Durum</th><th>İşlem Yapan / Yönetici</th>
</tr>
</thead>
<tbody>
<?php foreach($mesailer as $m):
$brut = (float)$m['toplam_saat'];
// Kesinti Sorgusu
$kesinti = 0;
$sql_izin = "SELECT izin_turu, saatlik_sure FROM izin_talepleri WHERE calisan_id = ? AND durum = 'onaylandi' AND ? BETWEEN DATE(baslangic_tarihi) AND DATE(bitis_tarihi)";
$stmt_i = $pdo->prepare($sql_izin);
$stmt_i->execute([$m['calisan_id'], $m['tarih']]);
$izin = $stmt_i->fetch();
if ($izin && in_array($izin['izin_turu'], ['saatlik', 'hastalik', 'ucretsiz', 'mazeret', 'diger', 'mesaiye_gelmedi'])) {
$kesinti = ($izin['izin_turu'] == 'saatlik') ? $izin['saatlik_sure'] : 9;
}
$net = $brut - $kesinti;
if($net < 0) $net = 0;
$katsayi = ($m['mesai_turu'] == 'fazla_mesai' || $m['mesai_turu'] == 'vardiya_gece') ? 1.5 : 2.0;
$hakedis = $net * $katsayi;
// Yönetici
$islem_yapan = ($m['durum']=='beklemede') ? $m['y_ad'].' '.$m['y_soyad'].' (Bekliyor)' : $m['o_ad'].' '.$m['o_soyad'];
?>
<tr>
<td><?php echo $m['ad'].' '.$m['soyad']; ?></td>
<td><?php echo date('d.m.Y', strtotime($m['tarih'])); ?></td>
<td><?php echo substr($m['baslangic_saati'],0,5).'-'.substr($m['bitis_saati'],0,5); ?></td>
<td><?php echo str_replace('.',',',$brut); ?></td>
<td><?php echo str_replace('.',',',$net); ?></td>
<td>x<?php echo $katsayi; ?></td>
<td style="font-weight:bold;"><?php echo str_replace('.',',',$hakedis) . " (x$katsayi)"; ?></td>
<td><?php echo $m['mesai_turu']; ?></td>
<td><?php echo strtoupper($m['durum']); ?></td>
<td><?php echo $islem_yapan; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php exit;
}
?>
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<title>Mesai Raporu</title>
<style>
body { font-family: sans-serif; font-size: 11px; padding: 20px; }
.antet { border-bottom: 2px solid #333; margin-bottom: 20px; display: flex; justify-content: space-between; align-items: center; }
table { width: 100%; border-collapse: collapse; margin-top: 10px; }
th, td { border: 1px solid #ccc; padding: 6px; text-align: left; }
th { background: #f2f2f2; }
@media print { .no-print { display: none; } }
</style>
</head>
<body>
<div class="no-print" style="text-align: right; margin-bottom: 10px;">
<button onclick="window.print()" style="padding: 5px 15px; font-weight:bold;">Yazdır / PDF</button>
</div>
<div class="antet">
<img src="../assets/img/logo.png" height="50" alt="Logo">
<div style="text-align:right;">
<h3 style="margin:0;"><?php echo $rapor_basligi; ?></h3>
<small>Oluşturulma: <?php echo $rapor_tarihi_saati; ?></small>
</div>
</div>
<table>
<thead>
<tr>
<th>Personel</th><th>Tarih</th><th>Saat Aralığı</th><th>Brüt</th><th>Net</th><th>Hakediş (Ödenecek)</th><th>Durum</th><th>İşlem Yapan</th>
</tr>
</thead>
<tbody>
<?php foreach($mesailer as $m):
$renk = ($m['durum']=='onaylandi') ? 'color:green; font-weight:bold;' : ($m['durum']=='reddedildi' ? 'color:red;' : '');
$brut = (float)$m['toplam_saat'];
$kesinti = 0;
$sql_izin = "SELECT izin_turu, saatlik_sure FROM izin_talepleri WHERE calisan_id = ? AND durum = 'onaylandi' AND ? BETWEEN DATE(baslangic_tarihi) AND DATE(bitis_tarihi)";
$stmt_i = $pdo->prepare($sql_izin);
$stmt_i->execute([$m['calisan_id'], $m['tarih']]);
$izin = $stmt_i->fetch();
if ($izin && in_array($izin['izin_turu'], ['saatlik', 'hastalik', 'ucretsiz', 'mazeret', 'diger', 'mesaiye_gelmedi'])) {
$kesinti = ($izin['izin_turu'] == 'saatlik') ? $izin['saatlik_sure'] : 9;
}
$net = $brut - $kesinti;
if($net < 0) $net = 0;
$katsayi = ($m['mesai_turu'] == 'fazla_mesai' || $m['mesai_turu'] == 'vardiya_gece') ? 1.5 : 2.0;
$hakedis = $net * $katsayi;
$islem_yapan = ($m['durum']=='beklemede') ? $m['y_ad'].' '.$m['y_soyad'] : $m['o_ad'].' '.$m['o_soyad'];
?>
<tr>
<td><?php echo $m['ad'].' '.$m['soyad']; ?></td>
<td><?php echo date('d.m.Y', strtotime($m['tarih'])); ?></td>
<td><?php echo substr($m['baslangic_saati'],0,5).'-'.substr($m['bitis_saati'],0,5); ?></td>
<td><?php echo $brut; ?> s</td>
<td><?php echo $net; ?> s</td>
<td style="font-weight:bold; background:#e8f5e9;"><?php echo $hakedis; ?> s (x<?php echo $katsayi; ?>)</td>
<td style="<?php echo $renk; ?>"><?php echo strtoupper($m['durum']); ?></td>
<td style="font-size:10px;"><?php echo $islem_yapan; ?></td>
</tr>
<?php endforeach; ?>
<?php if(empty($mesailer)): ?>
<tr><td colspan="8" style="text-align:center; padding:20px;">Kayıt bulunamadı.</td></tr>
<?php endif; ?>
</tbody>
</table>
</body>
</html>
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