<?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>