v2.5.2
Giriş yap

Yıllık izin

okan
179 defa görüntülendi

Arkadaşlar kalan izin günü ve kullanılan izin günü buçuklu olsun istiyorum . ama bir türlü yapamadım... izinlerim 2.5 , 1.5 gibi olabiliyor.. onları ayrı ayrı yazıyor ama toplamlarda sıkıntı yaşıyorum 67.5 değilde 67 azıyor 3,5 değilde 4 yazıyor
yardımcı olursanız sevinirim..

<?php

session_start();

if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
    header("Location: index.php");
    exit();
}

include 'veritabani.php';
include 'templates/header.php';

$id = $_GET['id'];
$sql = "SELECT * FROM personeller WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$id]);
$personel = $stmt->fetch();

if (!$personel) {
    die("Personel bulunamadı. <br /><a href='home.php'>Anasayfaya dön</a>");
}

$ise_giris_tarihi = new DateTime($personel['ise_giris_tarihi']);
$bugun = new DateTime();

$dogum_tarihi = new DateTime($personel['dogum_tarihi']);
$yas = $bugun->diff($dogum_tarihi)->y;

// Hak edilen yıllık izin günlerini hesapla
$toplam_hak_ettigi_gun = 0;
$calisma_suresi = $bugun->diff($ise_giris_tarihi);
$calisma_suresi_yillar = $calisma_suresi->y;
$calisma_suresi_aylar = $calisma_suresi->m;

// Tam yıllar için izin günlerini ekle
// 50 yaş üstü personel için izin günlerini hesapla
if ($yas >= 50) {
    for ($yil = 0; $yil < $calisma_suresi_yillar; $yil++) {
        $toplam_hak_ettigi_gun += 20;
    }
} else {
    // Tam yıllar için izin günlerini ekle (14 gün veya 20 gün)
    for ($yil = 0; $yil < $calisma_suresi_yillar; $yil++) {
        if ($yil < 5) {
            $toplam_hak_ettigi_gun += 14;
        } else {
            $toplam_hak_ettigi_gun += 20;
        }
    }
}

// Tam yıl olmayan kısım için izin günleri ekle
if ($calisma_suresi_aylar > 0) {
    if ($calisma_suresi_yillar < 5) {
        $toplam_hak_ettigi_gun += (14 / 12) * $calisma_suresi_aylar;
    } else {
        $toplam_hak_ettigi_gun += (20 / 12) * $calisma_suresi_aylar;
    }
}

// İzin bilgilerini çek
$izin_sql = "SELECT id, baslangic_tarihi, bitis_tarihi, aciklama, baslangic_yarim_gun, bitis_yarim_gun FROM izinler WHERE personel_id = ?";
$izin_stmt = $pdo->prepare($izin_sql);
$izin_stmt->execute([$personel['id']]);
$izinler = $izin_stmt->fetchAll(PDO::FETCH_ASSOC);

$resmi_tatiller_sql = "SELECT tarih FROM resmi_tatiller";
$resmi_tatiller_stmt = $pdo->query($resmi_tatiller_sql);
$resmi_tatiller = $resmi_tatiller_stmt->fetchAll(PDO::FETCH_COLUMN);

$arefe_gunleri_sql = "SELECT tarih FROM arefe_gunleri";
$arefe_gunleri_stmt = $pdo->query($arefe_gunleri_sql);
$arefe_gunleri = $arefe_gunleri_stmt->fetchAll(PDO::FETCH_COLUMN);

function izinGunHesapla($baslangic, $bitis, $resmi_tatiller, $arefe_gunleri) {
    $baslangic = new DateTime($baslangic);
    $bitis = new DateTime($bitis);
    $gun_sayisi = 0;

    while ($baslangic <= $bitis) {
        $gun = $baslangic->format('Y-m-d');
        $hafta_gunu = $baslangic->format('N');

        if ($hafta_gunu != 7 && !in_array($gun, $resmi_tatiller)) {
            if (in_array($gun, $arefe_gunleri)) {
                $gun_sayisi += 0.5;
            } else {
                $gun_sayisi++;
            }
        }

        $baslangic->modify('+1 day');
    }

    return $gun_sayisi;
}

$toplam_kullanilan_izin = 0;
foreach ($izinler as $izin) {
    $gun_sayisi = izinGunHesapla($izin['baslangic_tarihi'], $izin['bitis_tarihi'], $resmi_tatiller, $arefe_gunleri);
    if ($izin['baslangic_yarim_gun'] == 1) {
        $gun_sayisi -= 0.5;
    }
    if ($izin['bitis_yarim_gun'] == 1) {
        $gun_sayisi -= 0.5;
    }
    $toplam_kullanilan_izin += $gun_sayisi;
}

$kalan_izin_gunu = $toplam_hak_ettigi_gun - $toplam_kullanilan_izin;
?>

<h1><?php echo htmlspecialchars($personel['ad_soyad']); ?></h1>
<div class="mb-3">
    <div class="row">
        <div class="col-md-4">
            <strong>Doğum Tarihi:</strong> <?php echo (new DateTime($personel['dogum_tarihi']))->format('j-m-Y'); ?><?php if ($yas > 50) echo " [50 yaş üzeri]"; ?><br>
        </div>
        <div class="col-md-4">
            <strong>İşe Giriş Tarihi:</strong> <?php echo (new DateTime($personel['ise_giris_tarihi']))->format('j-m-Y'); ?><br>
        </div>
        <div class="col-md-4">
            <strong>Departman:</strong> <?php echo htmlspecialchars($personel['departman']); ?><br>
        </div>
    </div>
    <div class="row">
        <div class="col-md-4">
            <strong>Hak Ettiği Gün:</strong> <?php echo round($toplam_hak_ettigi_gun, 1); ?><br>
        </div>
        <div class="col-md-4">
            <strong>Kullanılan İzin Günü:</strong> <?php echo round($toplam_kullanilan_izin, 1); ?><br>
        </div>
        <div class="col-md-4">
            <strong>Kalan İzin Günü:</strong> <?php echo round($kalan_izin_gunu, 1); ?><br>
        </div>
    </div>
</div>

<a href="personel_duzenle.php?id=<?php echo $personel['id']; ?>" class="btn btn-primary mb-3">Personeli Düzenle</a>
<a href="izin_ekle.php?id=<?php echo $personel['id']; ?>" class="btn btn-primary mb-3">İzin Ekle</a>
<a href="sil.php?id=<?php echo $personel['id']; ?>&type=personel" class="btn btn-danger mb-3" onclick="return confirm('Bu personeli silmek istediğinize emin misiniz?');">Personeli Sil</a>

<h2>İzinler</h2>
<ul class="nav nav-tabs mt-4" id="izinTabs" role="tablist">
    <?php
    // Her bir yıl için bir tab oluştur
    for ($year = $ise_giris_tarihi->format('Y'); $year <= $bugun->format('Y'); $year++) {
        $active_class = ($year == $bugun->format('Y')) ? 'show active' : '';
        echo "<li class='nav-item'>
                <a class='nav-link $active_class' id='year-tab-$year' data-toggle='tab' href='#year-$year' role='tab' aria-controls='year-$year' aria-selected='true'>$year</a>
              </li>";
    }
    ?>
</ul>
<div class="tab-content mt-3" id="izinTabContent">
    <?php
    // Her bir yıl için tab içeriğini oluştur
    for ($year = $ise_giris_tarihi->format('Y'); $year <= $bugun->format('Y'); $year++) {
        $active_class = ($year == $bugun->format('Y')) ? 'show active' : '';
        echo "<div class='tab-pane fade $active_class' id='year-$year' role='tabpanel' aria-labelledby='year-tab-$year'>";
        
        // İzinler listesini yıllara göre filtrele
        $izinler_yil = array_filter($izinler, function($izin) use ($year) {
            return strpos($izin['baslangic_tarihi'], "$year") === 0;
        });

        if (count($izinler_yil) > 0) {
            echo "<div class='table-responsive'>
                    <table class='table'>
                        <thead>
                            <tr>
                                <th>Başlangıç Tarihi</th>
                                <th>Bitiş Tarihi</th>
                                <th>Gün Sayısı</th>
                                <th>İzin Açıklaması</th>
                                <th>İşe Dönüş Tarihi</th>
                                <th>İşlemler</th>
                            </tr>
                        </thead>
                        <tbody>";
            foreach ($izinler_yil as $izin) {
                $gun_sayisi = izinGunHesapla($izin['baslangic_tarihi'], $izin['bitis_tarihi'], $resmi_tatiller, $arefe_gunleri);
                if ($izin['baslangic_yarim_gun'] == 1) {
                    $gun_sayisi -= 0.5;
                }
                if ($izin['bitis_yarim_gun'] == 1) {
                    $gun_sayisi -= 0.5;
                }
                echo "<tr>
                        <td>{$izin['baslangic_tarihi']}</td>
                        <td>{$izin['bitis_tarihi']}</td>
                        <td>" . round($gun_sayisi, 1) . "</td>
                        <td>{$izin['aciklama']}</td>
                        <td>" . (new DateTime($izin['bitis_tarihi']))->modify('+1 day')->format('j-m-Y') . "</td>
                        <td>
                            <a href='izin_duzenle.php?id={$izin['id']}' class='btn btn-primary btn-sm'>Düzenle</a>
                            <a href='sil.php?id={$izin['id']}&type=izin' class='btn btn-danger btn-sm' onclick='return confirm(\"Bu izni silmek istediğinize emin misiniz?\");'>Sil</a>
                        </td>
                    </tr>";
            }
            echo "</tbody>
                </table>
            </div>";
        } else {
            echo "<p>Bu yıl için izin kaydı bulunmamaktadır.</p>";
        }
        echo "</div>";
    }
    ?>
</div>

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

Cevap yaz
Cevaplar (1)
emmir2
91 gün önce
function izinGunHesapla($baslangic, $bitis, $resmi_tatiller, $arefe_gunleri) {
    $baslangic = new DateTime($baslangic);
    $bitis = new DateTime($bitis);
    $gun_sayisi = 0;

    while ($baslangic <= $bitis) {
        $gun = $baslangic->format('Y-m-d');
        $hafta_gunu = $baslangic->format('N');

        if ($hafta_gunu != 7 && !in_array($gun, $resmi_tatiller)) {
            if (in_array($gun, $arefe_gunleri)) {
                // Eğer işe giriş ya da çıkış günü ise yarım günü say
                if ($baslangic->format('Y-m-d') == $baslangic->format('Y-m-d') && $baslangic->format('Y-m-d') == $bitis->format('Y-m-d')) {
                    $gun_sayisi += 0.5;
                } else {
                    $gun_sayisi++;
                }
            }
        }

        $baslangic->modify('+1 day');
    }

    return $gun_sayisi;
}