PYBS (Personel Yönetim Bilgi Sistemi) / Ramsa/modules/tum-izinler-rapor.php
tum-izinler-rapor.php 176 satır • 7.01 KB
<?php
// modules/tum-izinler-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
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
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 İZİN RAPORU" . $donem_ek;

// --- SQL SORGUSU ---
$sql = "SELECT i.*, 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 izin_talepleri i 
        JOIN kullanicilar k ON i.calisan_id = k.id 
        LEFT JOIN kullanicilar o ON i.onaylayan_id = o.id 
        LEFT JOIN kullanicilar y ON i.hedef_yonetici_id = y.id 
        WHERE 1=1 ";

$params = [];

// 1. Yetki
if (!$yuksek_yetki) {
    $sql .= " AND i.hedef_yonetici_id = :hid ";
    $params[':hid'] = $kullanici_id;
}

// 2. Personel Filtresi
if ($filtre_personel_id > 0) {
    $sql .= " AND i.calisan_id = :pid ";
    $params[':pid'] = $filtre_personel_id;
}

// 3. Tarih Filtresi
if ($filtre_durum == 'aktif') {
    $sql .= " AND YEAR(i.baslangic_tarihi) = YEAR(CURDATE()) AND MONTH(i.baslangic_tarihi) = MONTH(CURDATE())";
} elseif ($filtre_durum == 'tarih') {
    $sql .= " AND YEAR(i.baslangic_tarihi) = :yil AND MONTH(i.baslangic_tarihi) = :ay";
    $params[':yil'] = $secilen_yil;
    $params[':ay'] = $secilen_ay;
}

$sql .= " ORDER BY i.baslangic_tarihi DESC";

$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$izinler = $stmt->fetchAll();

// --- EXCEL ---
if ($format == 'excel') {
    $dosya_adi = "Izin_" . ($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>TC No</th><th>İzin Türü</th><th>Başlangıç</th><th>Bitiş</th><th>Süre</th><th>Açıklama</th><th>Durum</th><th>İşlem Yapan / Yönetici</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($izinler as $row): 
                 $sure = ($row['izin_turu'] == 'saatlik' || $row['izin_turu'] == 'sut_izni' || $row['izin_turu'] == 'mesaiye_gelmedi') ? $row['saatlik_sure'] . ' Saat' : floatval($row['toplam_gun']) . ' Gün';
                 $islem_yapan = ($row['durum']=='beklemede') ? $row['y_ad'].' '.$row['y_soyad'].' (Bekliyor)' : $row['o_ad'].' '.$row['o_soyad'];
            ?>
            <tr>
                <td><?php echo $row['ad'] . ' ' . $row['soyad']; ?></td>
                <td><?php echo $row['tc_no']; ?></td>
                <td><?php echo strtoupper($row['izin_turu']); ?></td>
                <td><?php echo date('d.m.Y H:i', strtotime($row['baslangic_tarihi'])); ?></td>
                <td><?php echo date('d.m.Y H:i', strtotime($row['bitis_tarihi'])); ?></td>
                <td><?php echo $sure; ?></td>
                <td><?php echo $row['aciklama']; ?></td>
                <td><?php echo strtoupper($row['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>İzin 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>Tür</th><th>Başlangıç</th><th>Bitiş</th><th>Süre</th><th>Açıklama</th><th>Durum</th><th>İşlem Yapan</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($izinler as $row): 
                 $sure = ($row['izin_turu'] == 'saatlik' || $row['izin_turu'] == 'sut_izni') ? $row['saatlik_sure'] . ' Saat' : floatval($row['toplam_gun']) . ' Gün';
                 $islem_yapan = ($row['durum']=='beklemede') ? $row['y_ad'].' '.$row['y_soyad'] : $row['o_ad'].' '.$row['o_soyad'];
            ?>
            <tr>
                <td><?php echo $row['ad'] . ' ' . $row['soyad']; ?></td>
                <td><?php echo strtoupper($row['izin_turu']); ?></td>
                <td><?php echo date('d.m.Y H:i', strtotime($row['baslangic_tarihi'])); ?></td>
                <td><?php echo date('d.m.Y H:i', strtotime($row['bitis_tarihi'])); ?></td>
                <td><?php echo $sure; ?></td>
                <td><?php echo $row['aciklama']; ?></td>
                <td><?php echo strtoupper($row['durum']); ?></td>
                <td style="font-size:10px;"><?php echo $islem_yapan; ?></td>
            </tr>
            <?php endforeach; ?>
            <?php if(empty($izinler)): ?>
                <tr><td colspan="8" style="text-align:center; padding:20px;">Kayıt bulunamadı.</td></tr>
            <?php endif; ?>
        </tbody>
    </table>
</body>
</html>