<?php
// modules/bordro-goruntule.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';
// Yetki: Tüm roller girebilir (Kendi verisi)
yetkiKontrol(['root', 'yonetici', 'mudur', 'vardiya_amiri', 'calisan', 'stajyer', 'muhasebe', 'insan_kaynaklari']);
include '../includes/header.php';
include '../includes/menu.php';
// --- FİLTRELER ---
$yil = $_GET['yil'] ?? date('Y');
$ay = $_GET['ay'] ?? date('m');
$kullanici_id = $_SESSION['kullanici_id']; // Sadece oturum açan kişi
// --- HESAPLAMA PARAMETRELERİ ---
$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"));
// Tatilleri Çek
$stmt_tatil = $pdo->query("SELECT tarih FROM resmi_tatiller");
$tatiller = $stmt_tatil->fetchAll(PDO::FETCH_COLUMN);
// Kullanıcı Bilgileri
$stmt_u = $pdo->prepare("SELECT * FROM kullanicilar WHERE id = ?");
$stmt_u->execute([$kullanici_id]);
$u = $stmt_u->fetch();
if(!$u) die("Kullanıcı bulunamadı.");
// --- MAAŞ HESAPLAMA MOTORU (Yönetici Ekranıyla Birebir Aynı) ---
$maas_db = maasGetir($pdo, $kullanici_id, $yil, $ay);
$hakedis_tablosu = [];
if($maas_db > 0) {
$gunluk_ucret = $maas_db / 30;
$saatlik = $maas_db / 225;
$k15 = 0; $k20 = 0;
$toplam_kesinti_saat = 0;
$calisilmayan_gun_giris_cikis = 0;
// 1. Avanslar
$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([$kullanici_id, $tarih_bas, $tarih_bit]);
$avans = $stmt_avans->fetchColumn() ?: 0;
// 2. İkramiyeler
$stmt_ikr = $pdo->prepare("SELECT SUM(miktar) FROM ikramiyeler WHERE calisan_id = ? AND donem_tarihi BETWEEN ? AND ?");
$stmt_ikr->execute([$kullanici_id, $tarih_bas, $tarih_bit]);
$ikramiye = $stmt_ikr->fetchColumn() ?: 0;
$ise_giris = $u['ise_giris_tarihi'];
$isten_cikis = $u['isten_cikis_tarihi'];
// GÜNLÜK DÖNGÜ
for($d=1; $d<=$gun_sayisi; $d++) {
$tarih = "$yil-$ay-" . sprintf('%02d', $d);
$gun_no = date('N', strtotime($tarih)); // 1:Pzt ... 6:Cmt, 7:Pzr
// A. AKTİFLİK KONTROLÜ (Kıst Gün)
$aktif_mi = true;
if ($tarih < $ise_giris) $aktif_mi = false;
elseif (!empty($isten_cikis) && $tarih > $isten_cikis) $aktif_mi = false;
if (!$aktif_mi) {
$calisilmayan_gun_giris_cikis++;
continue;
}
$is_tatil = in_array($tarih, $tatiller);
$is_calisma_gunu = ($gun_no < 6 && !$is_tatil);
// B. İZİN KONTROLÜ (Çoklu İzin Desteği - fetchAll)
$gunluk_ham_kesinti = 0;
$stmt_izin = $pdo->prepare("SELECT * FROM izin_talepleri WHERE calisan_id=? AND durum='onaylandi' AND ? BETWEEN DATE(baslangic_tarihi) AND DATE(bitis_tarihi)");
$stmt_izin->execute([$kullanici_id, $tarih]);
$izinler = $stmt_izin->fetchAll(); // <-- ÖNEMLİ: fetchAll yapıldı.
foreach ($izinler as $izin) {
// Sadece ücretsiz/kesintili türler ve çalışma günleri
$ucretsiz_turler = ['hastalik', 'saatlik', 'ucretsiz', 'mazeret', 'mesaiye_gelmedi'];
if ($is_calisma_gunu && in_array($izin['izin_turu'], $ucretsiz_turler)) {
if ($izin['izin_turu'] == 'saatlik' || $izin['izin_turu'] == 'mesaiye_gelmedi') {
// Saatlik kesintileri topla
$gunluk_ham_kesinti += (float)$izin['saatlik_sure'];
} else {
// Tam gün kesintiler (Hastalık vb.) -> 9 saat
$gunluk_ham_kesinti = 9;
}
}
// Süt izni (sut_izni) buraya girmez, dolayısıyla kesinti yapmaz.
}
// Günlük maksimum kesinti kontrolü (9 saati geçemez)
if ($gunluk_ham_kesinti > 9) $gunluk_ham_kesinti = 9;
// C. MESAİ KONTROLÜ (Kazanç)
$gunluk_ham_mesai = 0;
$stmt_mesai = $pdo->prepare("SELECT SUM(toplam_saat) as toplam, mesai_turu FROM mesai_hareketleri WHERE calisan_id=? AND durum='onaylandi' AND tarih=? AND mesai_turu IN ('fazla_mesai', 'hafta_tatili', 'resmi_tatil_mesaisi', 'vardiya_gece')");
$stmt_mesai->execute([$kullanici_id, $tarih]);
$mesai_kaydi = $stmt_mesai->fetch();
if ($mesai_kaydi && $mesai_kaydi['toplam'] > 0) {
$gunluk_ham_mesai = (float)$mesai_kaydi['toplam'];
}
// D. MAHSUPLAŞMA (Fazla mesai - Eksik saat)
$net_kesinti = $gunluk_ham_kesinti;
$net_mesai = $gunluk_ham_mesai;
if ($gunluk_ham_kesinti > 0 && $gunluk_ham_mesai > 0) {
if ($gunluk_ham_mesai >= $gunluk_ham_kesinti) {
$net_mesai = $gunluk_ham_mesai - $gunluk_ham_kesinti;
$net_kesinti = 0;
} else {
$net_kesinti = $gunluk_ham_kesinti - $gunluk_ham_mesai;
$net_mesai = 0;
}
}
if ($net_kesinti > 0) $toplam_kesinti_saat += $net_kesinti;
if ($net_mesai > 0) {
$mesai_tur = $mesai_kaydi['mesai_turu'] ?? '';
// KURAL: Pazar (7) veya Resmi Tatil -> 2.0x
// KURAL: Cumartesi (6) veya Hafta içi -> 1.5x
if ($is_tatil || $gun_no == 7 || $mesai_tur == 'resmi_tatil_mesaisi') {
$k20 += $net_mesai;
} else {
$k15 += $net_mesai;
}
}
}
// SONUÇLAR
$kist_kesinti_tutar = $calisilmayan_gun_giris_cikis * $gunluk_ucret;
$ek_kazanc = ($k15 * $saatlik * 1.5) + ($k20 * $saatlik * 2.0);
$izin_kesinti_tutar = ($toplam_kesinti_saat * $saatlik);
// YENİ: Toplam Aylık Gelir (Maaş + Mesai + İkramiye)
$toplam_gelir = $maas_db + $ek_kazanc + $ikramiye;
$toplam_kesinti = $izin_kesinti_tutar + $avans + $kist_kesinti_tutar;
// NET HAKEDİŞ FORMÜLÜ: Toplam Gelir - Kesintiler
$toplam_hakedis = $toplam_gelir - $toplam_kesinti;
if ($toplam_hakedis < 0) $toplam_hakedis = 0;
$hakedis_tablosu = [
'net_maas' => $maas_db,
'k15' => $k15,
'k20' => $k20,
'ek_kazanc' => $ek_kazanc,
'ikramiye' => $ikramiye,
'toplam_gelir' => $toplam_gelir,
'kesinti_saat' => $toplam_kesinti_saat,
'kist_gun' => $calisilmayan_gun_giris_cikis,
'kist_tutar' => $kist_kesinti_tutar,
'izin_tutar' => $izin_kesinti_tutar,
'avans' => $avans,
'toplam_hakedis' => $toplam_hakedis
];
}
?>
<div class="container-fluid pb-5">
<div class="d-flex justify-content-between align-items-center mb-4 no-print">
<h3><i class="fas fa-file-invoice-dollar text-primary"></i> Maaş Bordrom</h3>
</div>
<div class="card bg-light border mb-4 no-print">
<div class="card-body p-3">
<form method="GET" class="row g-2 align-items-end">
<div class="col-md-3">
<label class="fw-bold small">Dönem Seçiniz</label>
<div class="input-group">
<select name="ay" class="form-select">
<?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>
<select name="yil" class="form-select">
<?php for($y=2024; $y<=2030; $y++) echo "<option value='$y' ".($y==$yil?'selected':'').">$y</option>"; ?>
</select>
<button type="submit" class="btn btn-primary">Getir</button>
</div>
</div>
</form>
</div>
</div>
<?php if(empty($hakedis_tablosu)): ?>
<div class="alert alert-warning text-center p-5">
<h4><i class="fas fa-exclamation-circle"></i> Maaş Bilgisi Bulunamadı</h4>
<p>Seçilen dönem için maaş veriniz tanımlanmamış olabilir.</p>
</div>
<?php else: ?>
<div class="card shadow-lg border-0" id="printableArea">
<div class="card-header bg-white border-bottom-0 pt-4 pb-0">
<div class="d-flex justify-content-between align-items-center border-bottom pb-3">
<div class="d-flex align-items-center">
<img src="../assets/img/logo.png" alt="Logo" style="height: 50px;" class="me-3">
<div>
<h4 class="mb-0 fw-bold text-uppercase">Personel Maaş Bordrosu</h4>
<span class="text-muted small"><?php echo $aylar[$ay] . ' ' . $yil; ?> Dönemi</span>
</div>
</div>
<div class="text-end">
<h5 class="fw-bold mb-0"><?php echo htmlspecialchars($u['ad'] . ' ' . $u['soyad']); ?></h5>
<span class="badge bg-light text-dark border"><?php echo htmlspecialchars($u['rol']); ?></span>
</div>
</div>
</div>
<div class="card-body p-4">
<div class="row mb-4">
<div class="col-md-6">
<div class="card h-100 border-success">
<div class="card-header bg-success text-white fw-bold">KAZANÇLAR (+)</div>
<ul class="list-group list-group-flush">
<li class="list-group-item d-flex justify-content-between">
<span><i class="fas fa-wallet text-secondary me-2"></i> Net Maaş</span>
<span class="fw-bold"><?php echo number_format($hakedis_tablosu['net_maas'], 2); ?> ₺</span>
</li>
<li class="list-group-item d-flex justify-content-between">
<span><i class="fas fa-clock text-secondary me-2"></i> Fazla Mesai (1.5x) <small class="text-muted">(<?php echo $hakedis_tablosu['k15']; ?> Saat)</small></span>
<span>Dahil</span>
</li>
<li class="list-group-item d-flex justify-content-between">
<span><i class="fas fa-calendar-check text-secondary me-2"></i> Tatil Mesaisi (2.0x) <small class="text-muted">(<?php echo $hakedis_tablosu['k20']; ?> Saat)</small></span>
<span>Dahil</span>
</li>
<li class="list-group-item d-flex justify-content-between" style="background-color: #fffde7;">
<span><i class="fas fa-gift text-warning me-2"></i> İkramiye / Prim</span>
<span class="fw-bold text-success">+<?php echo number_format($hakedis_tablosu['ikramiye'], 2); ?> ₺</span>
</li>
<li class="list-group-item d-flex justify-content-between bg-success bg-opacity-10">
<span class="fw-bold text-success">Toplam Mesai Kazancı</span>
<span class="fw-bold text-success">+<?php echo number_format($hakedis_tablosu['ek_kazanc'], 2); ?> ₺</span>
</li>
<li class="list-group-item d-flex justify-content-between bg-primary bg-opacity-25">
<span class="fw-bold text-primary">TOPLAM AYLIK GELİR</span>
<span class="fw-bold text-primary"><?php echo number_format($hakedis_tablosu['toplam_gelir'], 2); ?> ₺</span>
</li>
</ul>
</div>
</div>
<div class="col-md-6">
<div class="card h-100 border-danger">
<div class="card-header bg-danger text-white fw-bold">KESİNTİLER (-)</div>
<ul class="list-group list-group-flush">
<li class="list-group-item d-flex justify-content-between">
<span><i class="fas fa-user-clock text-secondary me-2"></i> Eksik Gün / Kıst <small class="text-muted">(<?php echo $hakedis_tablosu['kist_gun']; ?> Gün)</small></span>
<span class="text-danger">-<?php echo number_format($hakedis_tablosu['kist_tutar'], 2); ?> ₺</span>
</li>
<li class="list-group-item d-flex justify-content-between">
<span><i class="fas fa-door-open text-secondary me-2"></i> Ücretsiz İzin / Devamsızlık <small class="text-muted">(<?php echo $hakedis_tablosu['kesinti_saat']; ?> Saat)</small></span>
<span class="text-danger">-<?php echo number_format($hakedis_tablosu['izin_tutar'], 2); ?> ₺</span>
</li>
<li class="list-group-item d-flex justify-content-between">
<span><i class="fas fa-hand-holding-dollar text-secondary me-2"></i> Avans</span>
<span class="text-danger">-<?php echo number_format($hakedis_tablosu['avans'], 2); ?> ₺</span>
</li>
<li class="list-group-item d-flex justify-content-between bg-danger bg-opacity-10">
<span class="fw-bold text-danger">Toplam Kesinti</span>
<span class="fw-bold text-danger">-<?php echo number_format($hakedis_tablosu['kist_tutar'] + $hakedis_tablosu['izin_tutar'] + $hakedis_tablosu['avans'], 2); ?> ₺</span>
</li>
</ul>
</div>
</div>
</div>
<div class="alert alert-secondary border-dark border-2 p-4">
<div class="d-flex justify-content-between align-items-center">
<div>
<h5 class="mb-0 text-uppercase fw-bold text-dark">Net Ödenecek Tutar</h5>
<small class="text-muted">Banka hesabınıza yatırılacak tutardır.</small>
</div>
<div class="display-6 fw-bold text-dark">
<?php echo number_format($hakedis_tablosu['toplam_hakedis'], 2); ?> <span class="fs-4">₺</span>
</div>
</div>
</div>
</div>
</div>
<?php endif; ?>
</div>
<?php include '../includes/footer.php'; ?>