Yıllık izin
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'; ?>
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;
}