PYBS (Personel Yönetim Bilgi Sistemi) / modules/maas-hesapla.php
maas-hesapla.php 597 satır • 27.38 KB
<?php
// modules/maas-hesapla.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';

// Yetki kontrolü: Muhasebe, İK ve Yöneticiler bu paneli görebilir.
yetkiKontrol(['root', 'yonetici', 'muhasebe', 'insan_kaynaklari']);

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

$yil = $_GET['yil'] ?? date('Y');
$ay = $_GET['ay'] ?? date('m');
$personel_filtre_id = $_GET['personel_id'] ?? 'tumu'; // ID, Rol adı veya 'tumu'

$gun_sayisi = cal_days_in_month(CAL_GREGORIAN, $ay, $yil);

$tarih_bas = date('Y-m-01', strtotime("$yil-$ay-01"));
$tarih_bit = date('Y-m-t', strtotime("$yil-$ay-01"));

// --- YARDIMCI FORMAT FONKSİYONU ---
function formatSaatListeleme($saat) {
    if ($saat === null || $saat === 0.0 || $saat === 0) return 0;
    // Eğer saat tam sayı ise ondalık kısmı gösterme (örn: 2.0 -> 2)
    if ($saat == floor($saat)) {
        return (int)$saat;
    }
    // Değilse, bir ondalık basamak göster (örn: 2.5)
    return number_format($saat, 1, '.', '');
}
// -------------------------------------

// --- KATSAYILAR ---
$carpan_15 = 1.5; // Haftaiçi Fazla Mesai ve Cumartesi Mesaisi için Çarpan
$carpan_20 = 2.0; // Pazar, Resmi Tatil ve Bayram Günleri için Çarpan
// --------------------

// Resmi Tatilleri Çek
$tatiller = $pdo->query("SELECT tarih FROM resmi_tatiller")->fetchAll(PDO::FETCH_COLUMN);
$resmi_tatiller_arr = $tatiller; // JS için kullanılacak

// Rol Bazlı Toplu Filtreleme Seçenekleri
$rol_filtreleri = [
    'yonetici' => 'Tüm Yöneticiler',
    'mudur' => 'Tüm Müdürler',
    'vardiya_amiri' => 'Tüm Vardiya Amirleri',
    'muhasebe' => 'Tüm Muhasebe',
    'insan_kaynaklari' => 'Tüm İK',
    'calisan' => 'Tüm Çalışanlar',
    'stajyer' => 'Tüm Stajyerler',
];

// Personel Listesi SQL'i
$sql_per = "SELECT id, ad, soyad, aylik_net_maas, rol FROM kullanicilar WHERE durum=1 AND rol != 'root'"; 

if ($personel_filtre_id != 'tumu') {
    if (is_numeric($personel_filtre_id)) {
        $sql_per .= " AND id = " . (int)$personel_filtre_id;
    } elseif (isset($rol_filtreleri[$personel_filtre_id])) {
        $sql_per .= " AND rol = " . $pdo->quote($personel_filtre_id);
    }
}
$sql_per .= " ORDER BY ad ASC";
$personeller = $pdo->query($sql_per)->fetchAll();

// Tüm personeller (Filtre kutusu için)
$tum_personeller_query = $pdo->query("SELECT id, ad, soyad, rol FROM kullanicilar WHERE durum=1 AND rol != 'root' ORDER BY rol, ad ASC")->fetchAll();

$tum_personeller_gruplu = [];
foreach ($tum_personeller_query as $p) {
    if (!isset($tum_personeller_gruplu[$p['rol']])) {
        $tum_personeller_gruplu[$p['rol']] = [];
    }
    $tum_personeller_gruplu[$p['rol']][] = $p;
}

// Rol adlarını Türkçeleştirme
$rol_adlari = [
    'yonetici' => 'Yöneticiler',
    'mudur' => 'Müdürler',
    'vardiya_amiri' => 'Vardiya Amirleri',
    'muhasebe' => 'Muhasebe',
    'insan_kaynaklari' => 'İnsan Kaynakları',
    'calisan' => 'Çalışanlar',
    'stajyer' => 'Stajyerler',
];

// --- DETAY MODALI İÇİN VERİ ÇEKİMİ ---
$detay_data = [];
$personel_ids = array_column($personeller, 'id');

if (!empty($personel_ids)) {
    $ids_string = implode(',', $personel_ids);

    // 1. Mesai Hareketleri (Netleşmiş Kazanç)
    $stmt_mesai = $pdo->prepare("
        SELECT calisan_id, tarih, baslangic_saati, bitis_saati, toplam_saat, mesai_turu, aciklama 
        FROM mesai_hareketleri 
        WHERE calisan_id IN ($ids_string) AND durum = 'onaylandi' 
        AND tarih BETWEEN ? AND ? 
        AND toplam_saat > 0 
        ORDER BY tarih ASC
    ");
    $stmt_mesai->execute([$tarih_bas, $tarih_bit]);
    
    while ($m = $stmt_mesai->fetch()) {
        $gun_no = date('N', strtotime($m['tarih'])); 
        $is_tatil = in_array($m['tarih'], $resmi_tatiller_arr);
        $is_pazar = ($gun_no == 7);

        // Mesai Çarpanını belirle
        $carpan = ($is_pazar || $is_tatil) ? '2.0' : '1.5';
        
        // Brüt Süre Hesaplama (Mola Düşülmüş Ham Süre)
        $t1 = strtotime($m['baslangic_saati']);
        $t2 = strtotime($m['bitis_saati']);
        if ($t2 < $t1) $t2 += 24 * 60 * 60;
        
        $fark = ($t2 - $t1) / 3600;
        
        // Mola Düş (admin-mesai-ekle.php mantığı)
        $mola = 0;
        if ($fark > 7.5) $mola = 1; elseif ($fark > 4) $mola = 0.5;
        
        $brut_saat = $fark - $mola;
        if($brut_saat < 0) $brut_saat = 0;

        if (!isset($detay_data[$m['calisan_id']]['mesai'])) {
             $detay_data[$m['calisan_id']]['mesai'] = [];
        }
        
        if (!isset($detay_data[$m['calisan_id']]['mesai'][$carpan])) {
             $detay_data[$m['calisan_id']]['mesai'][$carpan] = [];
        }
        
        $detay_data[$m['calisan_id']]['mesai'][$carpan][] = [
            'tarih' => $m['tarih'],
            'bas_saat' => date('H:i', strtotime($m['baslangic_saati'])),
            'bit_saat' => date('H:i', strtotime($m['bitis_saati'])),
            'brut_saat' => (float)number_format($brut_saat, 1), // Mola düşülmüş ham süre
            'net_saat' => (float)$m['toplam_saat'], // Mahsuplaşmış net süre
            'aciklama' => $m['aciklama']
        ];
    }

    // 2. İzin Kesintileri (Sadece Ücretsiz Tam Gün İzin)
    $stmt_izin_kesinti = $pdo->prepare("
        SELECT calisan_id, izin_turu, baslangic_tarihi, bitis_tarihi, saatlik_sure, aciklama
        FROM izin_talepleri 
        WHERE calisan_id IN ($ids_string) AND durum = 'onaylandi' 
        AND izin_turu = 'diger' 
        AND DATE(baslangic_tarihi) <= ? AND DATE(bitis_tarihi) >= ?
    ");
    $stmt_izin_kesinti->execute([$tarih_bit, $tarih_bas]);
    
    while ($i = $stmt_izin_kesinti->fetch()) {
        $izin_turu_etiket = 'ÜCRETSİZ TAM GÜN İZİN';
        $gunluk_kesinti_saati = 9;
        
        $start_date = new DateTime(date('Y-m-d', strtotime($i['baslangic_tarihi'])));
        $end_date = new DateTime(date('Y-m-d', strtotime($i['bitis_tarihi'])));

        for ($date = $start_date; $date <= $end_date; $date->modify('+1 day')) {
            $g_tarih = $date->format('Y-m-d');
            
            if ($g_tarih >= $tarih_bas && $g_tarih <= $tarih_bit) {
                if (!isset($detay_data[$i['calisan_id']]['izin_kesinti'])) {
                    $detay_data[$i['calisan_id']]['izin_kesinti'] = [];
                }
                
                $net_kesinti = $gunluk_kesinti_saati; 

                $detay_data[$i['calisan_id']]['izin_kesinti'][] = [
                    'tarih' => $g_tarih,
                    'turu' => $izin_turu_etiket,
                    'saat' => $net_kesinti,
                    'aciklama' => $i['aciklama']
                ];
            }
        }
    }
}
// --------------------------------------------------------------------------
?>

<div class="container-fluid">
    <div class="d-flex justify-content-between align-items-center mb-3">
        <h3><i class="fas fa-money-bill-wave text-success"></i> Maaş Hesaplama Modülü</h3>
        
        <div class="btn-group">
             <button type="button" onclick="submitReport('excel')" class="btn btn-sm btn-success" title="Excel İndir"><i class="fas fa-file-excel"></i> Excel</button>
             <button type="button" onclick="submitReport('pdf')" class="btn btn-sm btn-danger" title="Antetli PDF/Yazdır"><i class="fas fa-file-pdf"></i> PDF</button>
        </div>
    </div>

    <div class="card-box p-3 mb-3 border-top border-success border-3">
        <form method="GET" id="maasForm" class="row g-2 align-items-end">
            <div class="col-md-2">
                <label>Yıl</label>
                <select name="yil" class="form-select form-select-sm">
                    <?php for($y=2024; $y<=2030; $y++) echo "<option value='$y' ".($y==$yil?'selected':'').">$y</option>"; ?>
                </select>
            </div>
            <div class="col-md-2">
                <label>Ay</label>
                <select name="ay" class="form-select form-select-sm">
                    <?php 
                    $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'];
                    foreach($aylar as $k=>$v) echo "<option value='$k' ".($k==$ay?'selected':'').">$v</option>"; 
                    ?>
                </select>
            </div>
            <div class="col-md-4">
                <label>Personel / Grup Filtresi</label>
                 <select name="personel_id" class="form-select form-select-sm">
                    <option value="tumu" <?php if($personel_filtre_id == 'tumu') echo 'selected'; ?>>--- TÜM PERSONELLER (Bordro) ---</option>
                    
                    <option disabled>────── ROL GRUPLARI ──────</option>
                    <?php foreach($rol_filtreleri as $rol_key => $rol_ad): ?>
                        <option value="<?php echo $rol_key; ?>" <?php if($personel_filtre_id == $rol_key) echo 'selected'; ?>>
                            <?php echo $rol_ad; ?>
                        </option>
                    <?php endforeach; ?>
                    
                    <option disabled>────── TEKİL PERSONEL ──────</option>
                    <?php 
                    foreach($tum_personeller_gruplu as $rol => $personel_listesi): 
                        $rol_baslik = $rol_adlari[$rol] ?? strtoupper($rol);
                    ?>
                        <optgroup label="<?php echo $rol_baslik; ?>">
                            <?php foreach($personel_listesi as $p): ?>
                                <option value="<?php echo $p['id']; ?>" <?php if($personel_filtre_id == $p['id']) echo 'selected'; ?>>
                                    <?php echo $p['ad'] . ' ' . $p['soyad']; ?>
                                </option>
                            <?php endforeach; ?>
                        </optgroup>
                    <?php endforeach; ?>
                </select>
            </div>
            <div class="col-md-2">
                <button type="submit" class="btn btn-success btn-sm w-100">Hesapla</button>
            </div>
             <input type="hidden" name="format" id="reportFormat" value="">
             <input type="hidden" name="rapor_tur" value="puantaj_detay"> </form>
    </div>

    <div class="card border-0 shadow-sm overflow-auto">
        <table class="table table-bordered table-hover text-center align-middle mb-0" style="font-size: 0.85rem;">
            <thead class="table-dark">
                <tr>
                    <th rowspan="2" class="align-middle">Personel</th>
                    <th rowspan="2" class="align-middle">Net Maaş</th>
                    <th colspan="3" class="bg-primary border-start">Ek Kazançlar</th>
                    <th colspan="3" class="bg-danger border-start">Kesintiler</th>
                    <th rowspan="2" class="align-middle bg-success">TOPLAM HAKEDİŞ</th>
                </tr>
                <tr>
                    <th>Hafta İçi/Cts (1.5x)</th>
                    <th>Pzr/Tatil (2.0x)</th>
                    <th>Tutar</th>
                    <th>İzin Kesinti Saati</th>
                    <th>Avans</th>
                    <th>Toplam Tutar</th>
                </tr>
            </thead>
            <tbody>
                <?php foreach($personeller as $per): 
                    $aylik_net_maas = (float)$per['aylik_net_maas'];
                    
                    if ($aylik_net_maas <= 0) {
                        echo "<tr><td class='text-start fw-bold'>{$per['ad']} {$per['soyad']}</td><td>-</td><td colspan='8' class='bg-light text-danger'>Maaş bilgisi tanımlanmamış.</td></tr>";
                        continue;
                    }
                    
                    // Saatlik Ücret Hesaplama
                    $saatlik_ucret = $aylik_net_maas / 225;
                    
                    $kazanc_15_saat = 0; 
                    $kazanc_20_saat = 0; 
                    $kesinti_saat = 0;

                    // --- AVANS ÇEKİMİ ---
                    $stmt_avans = $pdo->prepare("SELECT SUM(avans_miktari) FROM avans_hareketleri WHERE calisan_id = ? AND islem_tarihi BETWEEN ? AND ? AND durum = 'onaylandi'");
                    $stmt_avans->execute([$per['id'], $tarih_bas, $tarih_bit]);
                    $aylik_avans_tutar = $stmt_avans->fetchColumn() ?: 0.00;
                    // ---------------------

                    // --- FAZLA MESAİ (Netleşmiş Borç Düşülmüş) ---
                    $stmt_mesai_toplam = $pdo->prepare("
                        SELECT tarih, SUM(toplam_saat) as toplam_mesai 
                        FROM mesai_hareketleri 
                        WHERE calisan_id = ? AND durum = 'onaylandi' 
                        AND tarih BETWEEN ? AND ? 
                        AND mesai_turu IN ('fazla_mesai', 'hafta_tatili', 'resmi_tatil_mesaisi')
                        GROUP BY tarih
                    ");
                    $stmt_mesai_toplam->execute([$per['id'], $tarih_bas, $tarih_bit]);
                    $mesai_gunluk_liste = $stmt_mesai_toplam->fetchAll(PDO::FETCH_KEY_PAIR);

                    foreach ($mesai_gunluk_liste as $tarih => $mesai_sure) {
                        if ($mesai_sure > 0) {
                            $gun_no = date('N', strtotime($tarih)); 
                            $is_tatil = in_array($tarih, $tatiller);
                            $is_pazar = ($gun_no == 7);
                            
                            if ($is_pazar || $is_tatil) {
                                $kazanc_20_saat += $mesai_sure;
                            } else {
                                $kazanc_15_saat += $mesai_sure;
                            }
                        }
                    }

                    // 2. İZİN KESİNTİSİ SAATLERİNİ TOPLA (Sadece tam gün ücretsiz izin)
                    
                    $stmt_izin_kesinti_toplam = $pdo->prepare("
                        SELECT SUM(DATEDIFF(bitis_tarihi, baslangic_tarihi) + 1) AS toplam_gun 
                        FROM izin_talepleri 
                        WHERE calisan_id = ? AND durum = 'onaylandi' 
                        AND izin_turu = 'diger'
                        AND DATE(baslangic_tarihi) <= ? AND DATE(bitis_tarihi) >= ?
                    ");
                    $stmt_izin_kesinti_toplam->execute([$per['id'], $tarih_bit, $tarih_bas]);
                    $toplam_ucretsiz_gun = $stmt_izin_kesinti_toplam->fetchColumn() ?: 0;
                    
                    $kesinti_saat = $toplam_ucretsiz_gun * 9; // 9 saat günlük standart çalışma süresi

                    // Hesaplamalar
                    $tutar_15 = $kazanc_15_saat * ($saatlik_ucret * $carpan_15);
                    $tutar_20 = $kazanc_20_saat * ($saatlik_ucret * $carpan_20);
                    $toplam_ek = $tutar_15 + $tutar_20;
                    $tutar_izin_kesinti = $kesinti_saat * $saatlik_ucret;
                    
                    // Toplam Kesinti = İzin Kesintisi (Sadece Ücretsiz Tam Gün) + Avans
                    $toplam_kesinti_tutar = $tutar_izin_kesinti + $aylik_avans_tutar;
                    
                    $toplam_hakedis = $aylik_net_maas + $toplam_ek - $toplam_kesinti_tutar;
                ?>
                <tr>
                    <td class="text-start fw-bold">
                        <a href="maas-rapor.php?yil=<?php echo $yil; ?>&ay=<?php echo $ay; ?>&personel_id=<?php echo $per['id']; ?>&format=pdf" 
                           target="_blank" 
                           class="text-decoration-none text-dark"
                           title="<?php echo $per['ad'].' '.$per['soyad']; ?> için PDF Bordro Oluştur">
                            <?php echo $per['ad'].' '.$per['soyad']; ?>
                        </a>
                    </td>
                    <td><?php echo number_format($aylik_net_maas, 2); ?> ₺</td>
                    
                    <td style="cursor: pointer;" onclick="openDetailModal(<?php echo $per['id']; ?>, 'mesai', '1.5')" data-bs-toggle="modal" data-bs-target="#detailModal" class="fw-bold">
                        <?php echo formatSaatListeleme($kazanc_15_saat); ?> s
                    </td>
                    <td style="cursor: pointer;" onclick="openDetailModal(<?php echo $per['id']; ?>, 'mesai', '2.0')" data-bs-toggle="modal" data-bs-target="#detailModal" class="fw-bold">
                        <?php echo formatSaatListeleme($kazanc_20_saat); ?> s
                    </td>
                    <td class="text-success fw-bold">+<?php echo number_format($toplam_ek, 2); ?> ₺</td>
                    
                    <td style="cursor: pointer;" onclick="openDetailModal(<?php echo $per['id']; ?>, 'izin_kesinti', '9')" data-bs-toggle="modal" data-bs-target="#detailModal" class="fw-bold">
                        <?php echo ($kesinti_saat > 0) ? formatSaatListeleme($kesinti_saat)." Saat" : "-"; ?>
                    </td>
                    <td class="text-danger fw-bold">-<?php echo number_format($aylik_avans_tutar, 2); ?> ₺</td>
                    <td class="text-danger fw-bold">-<?php echo number_format($toplam_kesinti_tutar, 2); ?> ₺</td>

                    <td class="bg-success text-white fw-bold h5 mb-0">
                        <?php echo number_format($toplam_hakedis, 2); ?> ₺
                    </td>
                </tr>
                <?php endforeach; ?>
            </tbody>
        </table>
    </div>
    
    <div class="mt-3 small text-muted">
        * Hesaplamalar her personelin **tanımlı net maaşı** üzerinden ve **225 saatlik aylık çalışma** baz alınarak yapılmıştır. <br>
        * Fazla Mesai Çarpanları: Hafta İçi/Cts **<?php echo $carpan_15; ?> katı**, Pazar/Tatil **<?php echo $carpan_20; ?> katı**. <br>
        * **Fazla Mesai:** Girilen mesai süreleri, **varsa saatlik izin borçları düşüldükten sonra** kalan net süre üzerinden hesaplanmıştır (Mahsuplaşma Uyumlu). <br>
        * **İzin Kesintisi:** Sadece **tam gün ücretsiz izinler** kesinti yaratır. Saatlik izinler, fazla mesai ile mahsuplaştığı için burada kesinti olarak görünmez. <br>
        * **Avans:** Bu ay ödenen onaylı avans tutarı, hakedişten düşülmüştür.
    </div>
</div>

<div class="modal fade" id="detailModal" tabindex="-1" aria-labelledby="detailModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered modal-lg">
        <div class="modal-content">
            <div class="modal-header bg-primary text-white" id="detailModalHeader">
                <h5 class="modal-title" id="detailModalLabel"><i class="fas fa-search me-2"></i> Detaylı Döküm</h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Kapat"></button>
            </div>
            <div class="modal-body" id="modalPrintArea">
                <h6 id="modalPersonelAdi" class="fw-bold mb-3 border-bottom pb-2"></h6>
                <p id="modalToplamSure" class="alert alert-info py-2 small fw-bold mb-3 d-none"></p>

                <div class="table-responsive">
                    <table class="table table-striped table-bordered table-sm small mb-0">
                        <thead class="table-light">
                            <tr>
                                <th>Tarih</th>
                                <th>Başlangıç - Bitiş Aralığı</th>
                                <th id="modalIkinciSutunBaslik">Net Süre (Brüt)</th>
                                <th>Hak Edilen Süre (Net)</th>
                                <th>Açıklama</th>
                            </tr>
                        </thead>
                        <tbody id="modalDetayBody">
                            </tbody>
                    </table>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Kapat</button>
                <button type="button" class="btn btn-info" onclick="printModalContent()"><i class="fas fa-print me-1"></i> Yazdır</button>
            </div>
        </div>
    </div>
</div>

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

<script>
// PHP verisini JavaScript'e aktar
const DETAY_DATA = <?php echo json_encode($detay_data); ?>;
const AY_YIL_ETIKET_PHP = "<?php echo date('Y-m-d', strtotime("$yil-$ay-01")); ?>";

function getGunAdi(tarihStr) {
    const date = new Date(tarihStr + 'T00:00:00'); 
    const gunler = ['Pazar', 'Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi'];
    const aylar = ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık'];
    
    // Ay adını Türkçeleştirme
    const ayAdi = aylar[date.getMonth()];
    const gunAdi = gunler[date.getDay()];
    
    return `${date.getDate()} ${ayAdi} ${date.getFullYear()} (${gunAdi})`;
}

function openDetailModal(personelId, tip, carpan_saat) {
    const data = DETAY_DATA[personelId];
    const adSoyad = document.querySelector(`a[href*="personel_id=${personelId}"]`).textContent.trim();
    const modalTitle = document.getElementById('detailModalLabel');
    const modalPersonelAdi = document.getElementById('modalPersonelAdi');
    const modalDetayBody = document.getElementById('modalDetayBody');
    const modalIkinciSutunBaslik = document.getElementById('modalIkinciSutunBaslik');
    const modalToplamSure = document.getElementById('modalToplamSure');
    
    // Ay yıl etiketini Türkçe formatla
    const modalAyYil = getGunAdi(AY_YIL_ETIKET_PHP).split(' ')[1] + ' ' + new Date(AY_YIL_ETIKET_PHP + 'T00:00:00').getFullYear();

    let detayListesi = [];
    let baslik = "";
    let toplamSure = 0;

    modalDetayBody.innerHTML = '';
    
    if (tip === 'mesai') {
        const carpan = carpan_saat;
        detayListesi = data?.mesai?.[carpan] || [];
        
        // Tablo başlıklarını Fazla Mesai'ye göre ayarla
        document.querySelector('#modalPrintArea thead tr:first-child th:nth-child(3)').textContent = 'Net Süre (Brüt)';
        document.querySelector('#modalPrintArea thead tr:first-child th:nth-child(4)').textContent = 'Hak Edilen Süre (Net)';

        if (carpan === '1.5') {
            baslik = "Fazla Mesai (Hafta İçi / Cumartesi - 1.5x)";
        } else {
            baslik = "Fazla Mesai (Pazar / Resmi Tatil - 2.0x)";
        }
    } else if (tip === 'izin_kesinti') {
        detayListesi = data?.izin_kesinti || [];
        baslik = "Maaş Kesintisi (Ücretsiz Tam Gün İzin)";
        
        // Tablo başlıklarını İzin Kesintisi'ne göre ayarla
        document.querySelector('#modalPrintArea thead tr:first-child th:nth-child(3)').textContent = 'Kesinti Saati';
        document.querySelector('#modalPrintArea thead tr:first-child th:nth-child(4)').textContent = 'Açıklama';
        
        // Fazla mesaiye ait olan 5. sütunu gizle/kullanma
        document.querySelector('#modalPrintArea thead tr:first-child th:nth-child(5)').style.display = 'none';
        document.querySelector('#modalPrintArea tbody tr td:nth-child(5)').style.display = 'none';
        
        // İzin kesintisi için ikinci sütun başlığını düzelt
        document.querySelector('#modalPrintArea thead tr:first-child th:nth-child(2)').textContent = 'İzin Türü';
    }

    modalTitle.textContent = baslik;
    modalPersonelAdi.textContent = `${adSoyad} | ${modalAyYil} Detayları`;

    if (detayListesi.length === 0) {
        modalDetayBody.innerHTML = '<tr><td colspan="5" class="text-center text-muted">Bu ay için detaylı kayıt bulunmamaktadır.</td></tr>';
        modalToplamSure.classList.add('d-none');
        return;
    }
    
    // Listeyi tarihe göre sırala
    detayListesi.sort((a, b) => new Date(a.tarih) - new Date(b.tarih));

    detayListesi.forEach(item => {
        let sureVeyaAralik = '';
        let birinciDeger = '';
        let ikinciDeger = '';
        let aciklama = item.aciklama || '-';
        
        const netSaat = parseFloat(item.saat || item.net_saat);
        toplamSure += netSaat;

        if (tip === 'mesai') {
            sureVeyaAralik = `${item.bas_saat} - ${item.bit_saat}`;
            birinciDeger = (item.brut_saat).toFixed(1);
            ikinciDeger = (item.net_saat).toFixed(1);
        } else if (tip === 'izin_kesinti') {
            sureVeyaAralik = item.turu;
            birinciDeger = (item.saat).toFixed(1); // Kesinti saati (9 saat)
            ikinciDeger = aciklama; // İkinci değeri açıklama olarak kullan
            aciklama = ''; // Boş bırak
            
            // İzin kesintisi için 5. sütunu boş bırak
            document.querySelector('#modalPrintArea thead tr:first-child th:nth-child(5)').style.display = 'none';
        }

        const row = document.createElement('tr');
        if (tip === 'mesai') {
             row.innerHTML = `
                <td>${getGunAdi(item.tarih)}</td>
                <td>${sureVeyaAralik}</td>
                <td class="fw-bold text-end text-primary">${birinciDeger}</td>
                <td class="fw-bold text-end text-success">${ikinciDeger}</td>
                <td>${aciklama}</td>
            `;
        } else {
             row.innerHTML = `
                <td>${getGunAdi(item.tarih)}</td>
                <td>${sureVeyaAralik}</td>
                <td class="fw-bold text-end text-danger">${birinciDeger}</td>
                <td>${ikinciDeger}</td>
                <td style="display:none;"></td> 
            `;
        }
       
        modalDetayBody.appendChild(row);
    });
    
    // Total süreyi göster
    modalToplamSure.textContent = `${baslik} Toplam Süre: ${toplamSure.toFixed(1)} Saat`;
    modalToplamSure.classList.remove('d-none');
    
    // Mesai ise 5. sütunu tekrar görünür yap
     if (tip === 'mesai') {
         document.querySelector('#modalPrintArea thead tr:first-child th:nth-child(5)').style.display = 'table-cell';
     }

}

function printModalContent() {
    const content = document.getElementById('modalPrintArea').innerHTML;
    const printWindow = window.open('', '', 'height=600,width=800');
    
    printWindow.document.write('<html><head><title>Bordro Detay Raporu</title>');
    printWindow.document.write('<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">');
    printWindow.document.write('<style>');
    printWindow.document.write('@media print {');
    printWindow.document.write('h6, h5 { color: #000 !important; }');
    printWindow.document.write('.table { font-size: 10pt; }');
    printWindow.document.write('.container { width: 100%; }'); // Tam genişlik kullan
    printWindow.document.write('}');
    printWindow.document.write('</style>');
    printWindow.document.write('</head><body>');
    printWindow.document.write('<div class="container py-4">');
    
    // Yazdırma sırasında tablo başlığını düzelt
    printWindow.document.write('<h4 class="mb-4 text-center">' + document.getElementById('detailModalLabel').textContent + '</h4>');
    printWindow.document.write(content);
    
    printWindow.document.write('</div></body></html>');
    
    printWindow.document.close();
    printWindow.focus();
    setTimeout(() => {
        printWindow.print();
        printWindow.close();
    }, 500);
}

function submitReport(type) {
    const form = document.getElementById('maasForm');
    const hiddenInput = document.getElementById('reportFormat');
    
    hiddenInput.value = type;
    
    form.action = 'maas-rapor.php'; 
    form.target = '_blank';
    form.submit();
    
    form.action = '';
    form.target = '_self';
}
</script>

<?php include '../includes/footer.php'; ?>