<?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'; ?>