PYBS (Personel Yönetim Bilgi Sistemi) / Ramsa/modules/tum-izinler.php
tum-izinler.php 535 satır • 27.12 KB
<?php
// modules/tum-izinler.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';

// Yetki Kontrolü
yetkiKontrol(['root', 'yonetici', 'mudur', 'vardiya_amiri', 'muhasebe', 'insan_kaynaklari']);

// Türkçe Tarih Formatı Fonksiyonu
function tarihFormatTr($tarih) {
    $aylar = [
        '01' => 'Ocak', '02' => 'Şubat', '03' => 'Mart', '04' => 'Nisan', 
        '05' => 'Mayıs', '06' => 'Haziran', '07' => 'Temmuz', '08' => 'Ağustos', 
        '09' => 'Eylül', '10' => 'Ekim', '11' => 'Kasım', '12' => 'Aralık'
    ];
    $d = date('d', strtotime($tarih));
    $m = date('m', strtotime($tarih));
    $y = date('Y', strtotime($tarih));
    return $d . ' ' . $aylar[$m] . ' ' . $y;
}

// İzin Türleri Konfigürasyonu
$izin_turleri_config = [
    'yillik' => 1, 'hastalik' => 0, 'evlilik' => 0, 'babalik' => 0, 
    'olum' => 0, 'saatlik' => 0, 'sut_izni' => 0, 'diger' => 0, 'mesaiye_gelmedi' => 0
];

// Resmi Tatiller
$tatiller = $pdo->query("SELECT tarih FROM resmi_tatiller")->fetchAll(PDO::FETCH_COLUMN);
$tatiller_json = json_encode($tatiller);

// Personel Listesi (Filtre için)
$personel_listesi = $pdo->query("SELECT id, ad, soyad FROM kullanicilar ORDER BY ad ASC")->fetchAll();

// Saat Seçenekleri
$zaman_secenekleri = "";
for ($saat = 0; $saat < 24; $saat++) {
    foreach (['00', '30'] as $dakika) {
        $deger = sprintf('%02d:%s', $saat, $dakika); 
        $zaman_secenekleri .= "<option value='$deger'>$deger</option>";
    }
}

// --- AJAX: Kayıt Getir (Düzenleme İçin) ---
if (isset($_GET['ajax']) && $_GET['ajax'] == 'kayit_getir' && isset($_GET['id'])) {
    $id = (int)$_GET['id'];
    $stmt = $pdo->prepare("SELECT * FROM izin_talepleri WHERE id = ?");
    $stmt->execute([$id]);
    $veri = $stmt->fetch(PDO::FETCH_ASSOC);
    
    // Frontend için ayrıştırılmış veriler
    $veri['bas_tarih_raw'] = date('Y-m-d', strtotime($veri['baslangic_tarihi']));
    $veri['bas_saat_raw'] = date('H:i', strtotime($veri['baslangic_tarihi'])); 
    $veri['bit_tarih_raw'] = date('Y-m-d', strtotime($veri['bitis_tarihi']));
    $veri['bit_saat_raw'] = date('H:i', strtotime($veri['bitis_tarihi']));
    
    echo json_encode($veri);
    exit;
}

include '../includes/header.php';
include '../includes/menu.php';

$mesaj = '';
$kullanici_id = $_SESSION['kullanici_id'];
$rol = $_SESSION['rol'];
$yuksek_yetki = in_array($rol, ['root', 'muhasebe', 'insan_kaynaklari']);

// --- FİLTRELEME PARAMETRELERİ ---
$filtre_durum = $_GET['filtre'] ?? 'aktif'; // Varsayılan: Aktif Dönem
$filtre_personel = $_GET['personel_id'] ?? ''; // Personel ID
$secilen_ay = $_GET['ay'] ?? date('m');
$secilen_yil = $_GET['yil'] ?? date('Y');

// --- POST: GÜNCELLEME İŞLEMİ ---
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['islem_turu']) && $_POST['islem_turu'] == 'guncelle') {
    csrfKontrol($_POST['csrf_token']);
    if (!$yuksek_yetki) die("Yetkisiz işlem.");

    $kayit_id = (int)$_POST['kayit_id'];
    $izin_turu = $_POST['izin_turu'];
    $aciklama = guvenlik($_POST['aciklama']);
    
    // Değerleri Hazırla
    if ($izin_turu == 'saatlik' || $izin_turu == 'sut_izni' || $izin_turu == 'mesaiye_gelmedi') {
        $tarih_gun = $_POST['saatlik_tarih'];
        $bas_saat = $_POST['baslangic_saat_saatlik'];
        $bit_saat = $_POST['bitis_saat_saatlik'];
        
        $db_bas = $tarih_gun . ' ' . $bas_saat . ':00';
        $db_bit = $tarih_gun . ' ' . $bit_saat . ':00';
        
        $t1 = strtotime($bas_saat);
        $t2 = strtotime($bit_saat);
        $saatlik_sure = round(($t2 - $t1) / 3600, 2);
        if ($saatlik_sure < 0) $saatlik_sure = 0;
        
        $toplam_gun = 0; 
    } else {
        $baslangic = $_POST['gunluk_baslangic'];
        $baslangic_saat = $_POST['gunluk_baslangic_saat'];
        $gun_sayisi = (float)$_POST['toplam_gun'];
        
        $is_gunu_bazli = $izin_turleri_config[$izin_turu] ?? 0;
        $current = new DateTime($baslangic);
        $sayilan = 0;
        
        while ($sayilan < $gun_sayisi) {
            $ymd = $current->format('Y-m-d');
            $day = $current->format('N');
            $sayilsin_mi = true;
            if ($is_gunu_bazli == 1) {
                if ($day == 7 || in_array($ymd, $tatiller)) $sayilsin_mi = false;
            }
            if ($sayilsin_mi) $sayilan++;
            if ($sayilan >= $gun_sayisi) break;
            $current->modify('+1 day');
        }
        
        $db_bitis_gun = $current->format('Y-m-d');
        $db_bas = $baslangic . ' ' . $baslangic_saat . ':00';
        $db_bit = $db_bitis_gun . ' 18:00:00'; 
        
        $saatlik_sure = 0;
        $toplam_gun = $gun_sayisi;
    }

    $sql = "UPDATE izin_talepleri SET izin_turu=?, baslangic_tarihi=?, bitis_tarihi=?, toplam_gun=?, saatlik_sure=?, aciklama=? WHERE id=?";
    $stmt = $pdo->prepare($sql);
    if ($stmt->execute([$izin_turu, $db_bas, $db_bit, $toplam_gun, $saatlik_sure, $aciklama, $kayit_id])) {
        logKaydet($pdo, $kullanici_id, 'guncelleme', "İzin güncellendi (ID: $kayit_id)", 'izin_talepleri', $kayit_id);
        $mesaj = '<div class="alert alert-success">Kayıt başarıyla güncellendi.</div>';
    } else {
        $mesaj = '<div class="alert alert-danger">Güncelleme hatası.</div>';
    }
}

// --- GET: İŞLEMLER (ONAY, RED, BEKLEME) ---
if (isset($_GET['islem']) && isset($_GET['id'])) {
    $id = (int)$_GET['id'];
    $aksiyon = $_GET['islem'];
    
    $sql_k = "SELECT * FROM izin_talepleri WHERE id = ?";
    $params_k = [$id];
    if(!$yuksek_yetki) {
        $sql_k .= " AND hedef_yonetici_id = ?";
        $params_k[] = $kullanici_id;
    }
    
    $stmt = $pdo->prepare($sql_k);
    $stmt->execute($params_k);
    $kayit = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($kayit) {
        $yeni_durum = ($aksiyon == 'onayla') ? 'onaylandi' : 'reddedildi';
        if ($aksiyon == 'beklemede') $yeni_durum = 'beklemede';
        
        if ($kayit['durum'] != 'beklemede' && !$yuksek_yetki) {
            $mesaj = "<div class='alert alert-warning'>Sadece beklemedeki kayıtları yönetebilirsiniz.</div>";
        } else {
            $upd = $pdo->prepare("UPDATE izin_talepleri SET durum = ?, onaylayan_id = ?, onaylanma_tarihi = NOW() WHERE id = ?");
            if ($upd->execute([$yeni_durum, $kullanici_id, $id])) {
                logKaydet($pdo, $kullanici_id, 'guncelleme', "İzin durumu: $yeni_durum", 'izin_talepleri', $id);
                try { bildirimGonder($pdo, $kayit['calisan_id'], "İzin İşlemi", "İzin talebiniz: $yeni_durum", "izin-talep.php"); } catch(Exception $e) { }
                $mesaj = "<div class='alert alert-success'>Durum güncellendi: <strong>".strtoupper($yeni_durum)."</strong></div>";
            }
        }
    } else {
        $mesaj = "<div class='alert alert-danger'>Kayıt bulunamadı.</div>";
    }
}

// --- LİSTELEME SORGUSU ---
$sql = "SELECT i.*, k.ad, k.soyad, k.rol as k_rol, 
        o.ad as o_ad, o.soyad as o_soyad, 
        y.ad as y_ad, y.soyad as y_soyad,
        (SELECT COUNT(*) FROM sistem_loglari WHERE tablo_adi='izin_talepleri' AND kayit_id=i.id AND islem_tipi='guncelleme') as degisiklik
        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 ";

// 1. Yetki Filtresi
if (!$yuksek_yetki) {
    $sql .= " AND i.hedef_yonetici_id = $kullanici_id ";
}

// 2. Personel Filtresi (YENİ)
if (!empty($filtre_personel)) {
    $sql .= " AND i.calisan_id = " . intval($filtre_personel);
}

// 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) = $secilen_yil AND MONTH(i.baslangic_tarihi) = $secilen_ay";
}

$sql .= " ORDER BY i.baslangic_tarihi DESC";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$izinler = $stmt->fetchAll();
?>

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">

<style>
    .flatpickr-day.resmi-tatil { background: #ffebee !important; border-color: #ffcdd2; color: #c62828; font-weight: bold; }
    .flatpickr-day.pazar-gunu { background: #fff3e0 !important; border-color: #ffe0b2; color: #ef6c00; font-weight: bold; }
    .table-responsive { overflow-x: visible !important; } 
    .saat-kutu { display: none; background: #f8f9fa; padding: 15px; border-radius: 5px; border: 1px solid #dee2e6; }
    .gun-kutu { display: block; background: #fff; padding: 15px; border-radius: 5px; border: 1px solid #dee2e6; }
</style>

<div class="container-fluid">
    <div class="d-flex justify-content-between align-items-center mb-3">
        <h3><i class="fas fa-calendar-check text-primary"></i> İzin Yönetimi</h3>
        <div class="btn-group">
            <button type="button" onclick="exportRapor('excel')" class="btn btn-success"><i class="fas fa-file-excel"></i> Excel</button>
            <button type="button" onclick="exportRapor('pdf')" class="btn btn-danger"><i class="fas fa-file-pdf"></i> PDF Yazdır</button>
        </div>
    </div>
    
    <?php echo $mesaj; ?>

    <div class="card bg-light border mb-4">
        <div class="card-body p-3">
            <form method="GET" class="row g-2 align-items-end">
                <div class="col-md-3">
                    <label class="small fw-bold">Personel</label>
                    <select name="personel_id" class="form-select form-select-sm">
                        <option value="">Tümü</option>
                        <?php foreach($personel_listesi as $p): ?>
                            <option value="<?php echo $p['id']; ?>" <?php echo ($filtre_personel == $p['id']) ? 'selected' : ''; ?>>
                                <?php echo htmlspecialchars($p['ad'] . ' ' . $p['soyad']); ?>
                            </option>
                        <?php endforeach; ?>
                    </select>
                </div>

                <div class="col-md-3">
                    <label class="small fw-bold">Dönem Tipi</label>
                    <select name="filtre" id="filtreSecim" class="form-select form-select-sm" onchange="filtreDegisti()">
                        <option value="aktif" <?php echo $filtre_durum=='aktif'?'selected':''; ?>>Bu Ay (Aktif)</option>
                        <option value="tarih" <?php echo $filtre_durum=='tarih'?'selected':''; ?>>Belirli Ay Seç</option>
                        <option value="tum" <?php echo $filtre_durum=='tum'?'selected':''; ?>>Tüm Geçmiş</option>
                    </select>
                </div>

                <div class="col-md-4 tarih-secimi" style="<?php echo $filtre_durum=='tarih'?'':'display:none;'; ?>">
                    <label class="small fw-bold">Ay / Yıl Seçiniz</label>
                    <div class="input-group input-group-sm">
                        <select name="ay" class="form-select">
                            <?php 
                            $aylar_tr = ['01'=>'Ocak','02'=>'Şubat','03'=>'Mart','04'=>'Nisan','05'=>'Mayıs','06'=>'Haziran','07'=>'Temmuz','08'=>'Ağustos','09'=>'Eylül','10'=>'Ekim','11'=>'Kasım','12'=>'Aralık'];
                            foreach($aylar_tr as $k => $v) echo "<option value='$k' ".($k==$secilen_ay?'selected':'').">$v</option>"; 
                            ?>
                        </select>
                        <select name="yil" class="form-select">
                            <?php for($y=2024; $y<=date('Y')+1; $y++) echo "<option value='$y' ".($y==$secilen_yil?'selected':'').">$y</option>"; ?>
                        </select>
                    </div>
                </div>

                <div class="col-md-2">
                    <button type="submit" class="btn btn-primary btn-sm w-100"><i class="fas fa-filter"></i> Uygula</button>
                </div>
            </form>
        </div>
    </div>
    
    <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>Tür</th>
                        <th>Tarih / Süre</th>
                        <th width="20%">Açıklama</th> 
                        <th>Durum / İşlem Yapan</th>
                        <th class="text-end" style="min-width: 150px;">İşlemler</th>
                    </tr>
                </thead>
                <tbody>
                    <?php if(empty($izinler)): ?>
                        <tr><td colspan="6" class="text-center py-4 text-muted">Kayıt bulunamadı.</td></tr>
                    <?php endif; ?>
                    <?php foreach($izinler as $row): 
                        // İşlem Yapan Bilgisi
                        $islem_yapan = "";
                        if ($row['durum'] == 'beklemede') {
                            $islem_yapan = '<span class="text-muted small"><i class="fas fa-hourglass-half"></i> Bekleniyor: </span>' . $row['y_ad'] . ' ' . $row['y_soyad'];
                        } else {
                            $islem_yapan = '<span class="text-success small"><i class="fas fa-user-check"></i> </span>' . $row['o_ad'] . ' ' . $row['o_soyad'];
                        }
                    ?>
                    <tr class="<?php echo ($row['degisiklik']>0)?'table-warning bg-opacity-10':''; ?>">
                        <td>
                            <strong><?php echo htmlspecialchars($row['ad'].' '.$row['soyad']); ?></strong><br>
                            <span class="badge bg-light text-dark border"><?php echo htmlspecialchars($row['k_rol']); ?></span>
                        </td>
                        <td>
                            <?php echo strtoupper(str_replace('_',' ',$row['izin_turu'])); ?>
                        </td>
                        <td>
                            <?php echo tarihFormatTr($row['baslangic_tarihi']); ?><br>
                            <small class="fw-bold text-muted">
                                <?php echo ($row['izin_turu']=='saatlik'||$row['izin_turu']=='sut_izni'||$row['izin_turu']=='mesaiye_gelmedi') ? $row['saatlik_sure'].' Saat' : floatval($row['toplam_gun']).' Gün'; ?>
                            </small>
                        </td>
                        
                        <td>
                            <div style="max-width: 250px; overflow-wrap: break-word; font-size: 0.9em;">
                                <?php echo !empty($row['aciklama']) ? htmlspecialchars($row['aciklama']) : '<em class="text-muted">-</em>'; ?>
                            </div>
                        </td>

                        <td>
                            <?php if($row['durum']=='onaylandi'): ?>
                                <span class="badge bg-success mb-1">Onaylı</span>
                            <?php elseif($row['durum']=='reddedildi'): ?>
                                <span class="badge bg-danger mb-1">Red</span>
                            <?php else: ?>
                                <span class="badge bg-warning text-dark mb-1">Bekliyor</span>
                            <?php endif; ?>
                            <div class="small"><?php echo $islem_yapan; ?></div>
                        </td>
                        <td class="text-end">
                            <div class="btn-group position-static">
                                <a href="izin-yazdir.php?id=<?php echo $row['id']; ?>" target="_blank" class="btn btn-sm btn-info text-white" title="Yazdır"><i class="fas fa-print"></i></a>
                                <?php if($yuksek_yetki): ?>
                                    <button class="btn btn-sm btn-outline-primary" onclick="duzenle(<?php echo $row['id']; ?>)" title="Düzenle"><i class="fas fa-edit"></i></button>
                                <?php endif; ?>
                                <?php if($row['durum']=='beklemede'): ?>
                                    <a href="?islem=onayla&id=<?php echo $row['id']; ?>" class="btn btn-sm btn-success" title="Onayla"><i class="fas fa-check"></i></a>
                                    <a href="?islem=reddet&id=<?php echo $row['id']; ?>" class="btn btn-sm btn-danger" title="Reddet"><i class="fas fa-times"></i></a>
                                <?php elseif($yuksek_yetki): ?>
                                    <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 dropdown-menu-end">
                                        <li><a class="dropdown-item text-danger" href="?islem=reddet&id=<?php echo $row['id']; ?>">İptal Et / Reddet</a></li>
                                        <li><a class="dropdown-item" href="?islem=beklemede&id=<?php echo $row['id']; ?>">Beklemeye Al</a></li>
                                    </ul>
                                <?php endif; ?>
                            </div>
                        </td>
                    </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
        </div>
    </div>
</div>

<div class="modal fade" id="editModal" tabindex="-1">
    <div class="modal-dialog modal-lg">
        <form method="POST" class="modal-content">
            <div class="modal-header bg-primary text-white">
                <h5 class="modal-title">İzin Düzenle</h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body">
                <input type="hidden" name="csrf_token" value="<?php echo csrfTokenOlustur(); ?>">
                <input type="hidden" name="islem_turu" value="guncelle">
                <input type="hidden" name="kayit_id" id="editId">
                
                <div class="mb-3">
                    <label class="fw-bold">İzin Türü</label>
                    <select name="izin_turu" id="editTur" class="form-select" onchange="formTipiDegistir()">
                        <option value="yillik" data-is-gunu="1">Yıllık İzin (Ücretli)</option>
                        <option value="hastalik" data-is-gunu="0">Hastalık / Rapor (Ücretsiz)</option>
                        <option value="evlilik" data-is-gunu="0" data-gun="3">Evlilik İzni (Ücretli - 3 Gün)</option>
                        <option value="babalik" data-is-gunu="0" data-gun="5">Babalık İzni (Ücretli - 5 Gün)</option>
                        <option value="olum" data-is-gunu="0" data-gun="3">Ölüm İzni (Ücretli - 3 Gün)</option>
                        <option value="saatlik" data-is-gunu="0">Saatlik İzin (Ücretsiz)</option>
                        <option value="mesaiye_gelmedi" data-is-gunu="0">Mesaiye Gelmedi</option>
                        <option value="sut_izni" data-is-gunu="0">Süt İzni (Ücretli)</option>
                        <option value="diger" data-is-gunu="0">Diğer İzin (Ücretli)</option>
                    </select>
                </div>

                <div id="gunlukAlan" class="gun-kutu">
                    <div class="row g-3">
                        <div class="col-md-3">
                            <label class="small fw-bold">Başlangıç Tarihi</label>
                            <input type="text" name="gunluk_baslangic" id="gunlukBas" class="form-control">
                        </div>
                        <div class="col-md-3">
                            <label class="small fw-bold">Başlangıç Saati</label>
                            <select name="gunluk_baslangic_saat" id="gunlukBasSaat" class="form-select" onchange="tarihHesapla()">
                                <?php echo $zaman_secenekleri; ?>
                            </select>
                        </div>
                        <div class="col-md-2">
                            <label class="small fw-bold">Gün Sayısı</label>
                            <input type="number" step="0.5" name="toplam_gun" id="editGun" class="form-control" onkeyup="tarihHesapla()" onchange="tarihHesapla()">
                        </div>
                        <div class="col-md-4">
                            <label class="small fw-bold">Bitiş Tarihi</label>
                            <input type="text" name="gunluk_bitis" id="gunlukBit" class="form-control" readonly>
                        </div>
                        <div class="col-12">
                            <label class="text-success small fw-bold">İşe Başlama Tarihi</label>
                            <input type="text" id="iseBaslama" class="form-control text-success fw-bold" readonly>
                        </div>
                    </div>
                    <small id="hesapAciklama" class="text-muted d-block mt-2"></small>
                </div>

                <div id="saatlikAlan" class="saat-kutu">
                    <div class="row g-3">
                        <div class="col-md-4">
                            <label>Tarih</label>
                            <input type="text" name="saatlik_tarih" id="saatlikTarih" class="form-control">
                        </div>
                        <div class="col-md-3">
                            <label>Başlangıç</label>
                            <select name="baslangic_saat_saatlik" id="saatBas" class="form-select"><?php echo $zaman_secenekleri; ?></select>
                        </div>
                        <div class="col-md-3">
                            <label>Bitiş</label>
                            <select name="bitis_saat_saatlik" id="saatBit" class="form-select"><?php echo $zaman_secenekleri; ?></select>
                        </div>
                        <div class="col-md-2"><label>Süre</label><input type="text" name="saatlik_sure" id="editSaat" class="form-control" readonly></div>
                    </div>
                </div>

                <div class="mt-3"><label>Açıklama</label><textarea name="aciklama" id="editAciklama" class="form-control" rows="2"></textarea></div>
            </div>
            <div class="modal-footer"><button type="submit" class="btn btn-primary">Kaydet</button></div>
        </form>
    </div>
</div>

<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
<script src="https://cdn.jsdelivr.net/npm/flatpickr/dist/l10n/tr.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>

<script>
const tatiller = <?php echo $tatiller_json; ?>;
const fpConfig = { locale: "tr", dateFormat: "Y-m-d", altInput: true, altFormat: "d F Y", onDayCreate: function(dObj, dStr, fp, dayElem){ let date = dayElem.dateObj.toISOString().split('T')[0]; if(tatiller.includes(date)) { dayElem.className += " resmi-tatil"; } else if(dayElem.dateObj.getDay()===0) { dayElem.className += " pazar-gunu"; } } };
let fpGunlukBas = flatpickr("#gunlukBas", { ...fpConfig, onChange: tarihHesapla });
let fpGunlukBit = flatpickr("#gunlukBit", { ...fpConfig, clickOpens: false });
let fpSaatlik = flatpickr("#saatlikTarih", fpConfig);

function filtreDegisti() { document.querySelector('.tarih-secimi').style.display = (document.getElementById('filtreSecim').value === 'tarih') ? 'block' : 'none'; }

// Rapor Çıktısı İçin Yeni Fonksiyon
function exportRapor(format) {
    const pid = document.querySelector('select[name="personel_id"]').value;
    const filtre = document.getElementById('filtreSecim').value;
    const ay = document.querySelector('select[name="ay"]').value;
    const yil = document.querySelector('select[name="yil"]').value;
    
    let url = `tum-izinler-rapor.php?format=${format}&personel_id=${pid}&filtre=${filtre}&ay=${ay}&yil=${yil}`;
    window.open(url, '_blank');
}

function formTipiDegistir() {
    const sel = document.getElementById('editTur');
    const tur = sel.value;
    const opt = sel.options[sel.selectedIndex];
    if (opt.getAttribute('data-gun')) { document.getElementById('editGun').value = opt.getAttribute('data-gun'); tarihHesapla(); }
    const isSaatlik = (tur === 'saatlik' || tur === 'sut_izni' || tur === 'mesaiye_gelmedi');
    document.getElementById('gunlukAlan').style.display = isSaatlik ? 'none' : 'block';
    document.getElementById('saatlikAlan').style.display = isSaatlik ? 'block' : 'none';
    if(!isSaatlik) tarihHesapla();
}

function tarihHesapla() {
    let basTarihStr = document.getElementById('gunlukBas').value;
    let gun = parseFloat(document.getElementById('editGun').value) || 0;
    const isGunuBazli = document.getElementById('editTur').options[document.getElementById('editTur').selectedIndex].getAttribute('data-is-gunu') == '1';
    
    if (!basTarihStr || gun <= 0) return;
    let loopDate = new Date(basTarihStr);
    let sonTarih = new Date(basTarihStr);
    let sayilan = 0;

    while(sayilan < gun) {
        let ymd = loopDate.toISOString().split('T')[0];
        let day = loopDate.getDay();
        let sayilsin = true;
        if(isGunuBazli && (day === 0 || day === 6 || tatiller.includes(ymd))) sayilsin = false;
        if(sayilsin) sayilan++;
        if(sayilan >= gun) { sonTarih = new Date(loopDate); break; }
        loopDate.setDate(loopDate.getDate() + 1);
    }
    fpGunlukBit.setDate(sonTarih);
    
    let isBasi = new Date(sonTarih);
    isBasi.setDate(isBasi.getDate() + 1);
    while (true) {
        let ymd = isBasi.toISOString().split('T')[0];
        if (isBasi.getDay() === 0 || isBasi.getDay() === 6 || tatiller.includes(ymd)) isBasi.setDate(isBasi.getDate() + 1);
        else break; 
    }
    document.getElementById('iseBaslama').value = isBasi.toLocaleDateString('tr-TR', { day: 'numeric', month: 'long', year: 'numeric', weekday: 'long' });
    document.getElementById('hesapAciklama').innerText = isGunuBazli ? "Cmt, Pzr ve Tatiller süreyi uzatır." : "Tüm günler sayılır.";
}

function duzenle(id) {
    const modal = new bootstrap.Modal(document.getElementById('editModal'));
    fetch(`tum-izinler.php?ajax=kayit_getir&id=${id}`).then(r=>r.json()).then(d=>{
        document.getElementById('editId').value = d.id;
        document.getElementById('editTur').value = d.izin_turu;
        document.getElementById('editAciklama').value = d.aciklama;
        document.getElementById('editGun').value = d.toplam_gun;
        formTipiDegistir();
        if (d.izin_turu === 'saatlik' || d.izin_turu === 'sut_izni' || d.izin_turu === 'mesaiye_gelmedi') {
            fpSaatlik.setDate(d.bas_tarih_raw);
            document.getElementById('saatBas').value = d.bas_saat_raw;
            document.getElementById('saatBit').value = d.bit_saat_raw;
            document.getElementById('editSaat').value = d.saatlik_sure;
        } else {
            fpGunlukBas.setDate(d.bas_tarih_raw);
            document.getElementById('gunlukBasSaat').value = d.bas_saat_raw;
            tarihHesapla(); 
        }
        modal.show();
    });
}
[document.getElementById('saatBas'), document.getElementById('saatBit')].forEach(el => el.addEventListener('change', function() {
    let s1 = document.getElementById('saatBas').value, s2 = document.getElementById('saatBit').value;
    if(s1 && s2) {
        let diff = (new Date("2000-01-01 " + s2) - new Date("2000-01-01 " + s1)) / 36e5;
        document.getElementById('editSaat').value = (diff < 0 ? 0 : diff).toFixed(1);
    }
}));
</script>
<?php include '../includes/footer.php'; ?>