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