sys/veri_detay/#008

PYBS (Personel Yönetim Bilgi Sistemi)

Son Senkronizasyon: 16.12.2025
rapor-olustur.php 334 satır • 14.03 KB
<?php
// modules/rapor-olustur.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';

// Yetki Kontrolü
yetkiKontrol(['root', 'yonetici', 'muhasebe', 'insan_kaynaklari']);

// Parametreleri Al
$tur = $_GET['tur'] ?? 'mesai';
$format = $_GET['format'] ?? 'yazdir'; // yazdir veya excel
$personel_id = $_GET['personel_id'] ?? 'tumu'; // Mesai/İzin için
$rol_filtre = $_GET['rol_filtre'] ?? 'tumu'; // Personel Bilgi için
$durum_filtre = $_GET['durum_filtre'] ?? '1'; // Personel Bilgi için

// TC No görünümünü TC Kimlik formatına çevirir.
function formatTC($tc) {
    // DÜZELTME: TC kimlik numarasının tamamını gösterir.
    if (strlen($tc) == 11 && is_numeric($tc)) {
        return $tc; 
    }
    return $tc;
}
// Rolleri Türkçeleştirir
function turkceRol($rol) {
    $roller = [
        'calisan' => 'Çalışan', 'stajyer' => 'Stajyer', 'vardiya_amiri' => 'V. Amiri', 
        'mudur' => 'Müdür', 'muhasebe' => 'Muhasebe', 'insan_kaynaklari' => 'İK',
        'yonetici' => 'Yönetici', 'root' => 'Sistem Yöneticisi'
    ];
    return $roller[$rol] ?? $rol;
}

$dosya_adi_kisa = ''; // Dosya adına eklenecek kısa isim

// Dosya Adı için Türkçe Karakter Temizleme (Varsayım: functions.php'de var)
if (!function_exists('temizDosyaAdi')) {
    function temizDosyaAdi($str) {
        $str = str_replace(array('ç', 'Ç', 'ğ', 'Ğ', 'ı', 'İ', 'ö', 'Ö', 'ş', 'Ş', 'ü', 'Ü', ' '), array('c', 'C', 'g', 'G', 'i', 'I', 'o', 'O', 's', 'S', 'u', 'U', '_'), $str);
        $str = preg_replace('/[^a-zA-Z0-9_-]/', '', $str);
        return $str;
    }
}
// --------------------------------------------------------------------------------
// 1. MESAİ RAPORU SORGUSU
// --------------------------------------------------------------------------------
if ($tur == 'mesai') {
    $baslangic = $_GET['baslangic'];
    $bitis = $_GET['bitis'];
    
    $sql = "SELECT m.*, k.ad, k.soyad, k.tc_no 
            FROM mesai_hareketleri m 
            JOIN kullanicilar k ON m.calisan_id = k.id 
            WHERE m.durum = 'onaylandi' 
            AND m.tarih BETWEEN '$baslangic' AND '$bitis'";
            
    if ($personel_id != 'tumu') {
        $sql .= " AND m.calisan_id = $personel_id";
        $p_info = $pdo->query("SELECT ad, soyad FROM kullanicilar WHERE id = $personel_id")->fetch();
        if ($p_info) $dosya_adi_kisa = "_" . temizDosyaAdi($p_info['ad'] . '_' . $p_info['soyad']);
    }
    
    $sql .= " ORDER BY m.tarih ASC, k.ad ASC";
    $veriler = $pdo->query($sql)->fetchAll();
    $baslik = "MESAİ VE PUANTAJ DÖKÜMÜ (" . date('d.m.Y', strtotime($baslangic)) . " - " . date('d.m.Y', strtotime($bitis)) . ")";
    $dosya_adi_kisa = "Mesai_Dokumu" . $dosya_adi_kisa . "_" . date('Ymd', strtotime($baslangic));
} 

// --------------------------------------------------------------------------------
// 2. İZİN RAPORU SORGUSU
// --------------------------------------------------------------------------------
elseif ($tur == 'izin') {
    $yil = $_GET['yil'];
    
    $sql = "SELECT i.*, k.ad, k.soyad, k.tc_no 
            FROM izin_talepleri i 
            JOIN kullanicilar k ON i.calisan_id = k.id 
            WHERE i.durum = 'onaylandi' 
            AND YEAR(i.baslangic_tarihi) = '$yil'";
            
    if ($personel_id != 'tumu') {
        $sql .= " AND i.calisan_id = $personel_id";
        $p_info = $pdo->query("SELECT ad, soyad FROM kullanicilar WHERE id = $personel_id")->fetch();
        if ($p_info) $dosya_adi_kisa = "_" . temizDosyaAdi($p_info['ad'] . '_' . $p_info['soyad']);
    }
    
    $sql .= " ORDER BY i.baslangic_tarihi ASC";
    $veriler = $pdo->query($sql)->fetchAll();
    $baslik = "$yil YILI İZİN KULLANIM RAPORU";
    $dosya_adi_kisa = "Izin_Kullanim" . $dosya_adi_kisa . "_" . $yil;
}

// --------------------------------------------------------------------------------
// 4. PERSONEL BİLGİLERİ DÖKÜMÜ (YENİ ALANLAR EKLENDİ)
// --------------------------------------------------------------------------------
elseif ($tur == 'personel_bilgi') {
    $sql = "SELECT id, ad, soyad, tc_no, sgk_no, dogum_tarihi, medeni_durum, cocuk_sayisi, telefon, email, kan_grubu, adres, rol, durum, ise_giris_tarihi, isten_cikis_tarihi 
            FROM kullanicilar 
            WHERE rol != 'root'"; 
            
    if ($rol_filtre != 'tumu') {
        $sql .= " AND rol = " . $pdo->quote($rol_filtre);
        $dosya_adi_kisa .= "_" . temizDosyaAdi($rol_filtre);
    }
    
    if ($durum_filtre != 'tumu') {
        $sql .= " AND durum = " . (int)$durum_filtre; 
        $dosya_adi_kisa .= ($durum_filtre == 1) ? "_Aktif" : "_Pasif";
    } else {
         $dosya_adi_kisa .= "_Tumu";
    }
    
    $sql .= " ORDER BY ad ASC, soyad ASC";
    $veriler = $pdo->query($sql)->fetchAll();
    $baslik = "DETAYLI PERSONEL BİLGİLERİ DÖKÜMÜ";
    $dosya_adi_kisa = "Personel_Bilgi" . $dosya_adi_kisa;
}
// --------------------------------------------------------------------------------

// --- DİKKAT: EXCEL ÇIKTISI İÇİN DOSYA ADI BURADA BELİRLENİYOR ---
if ($format == 'excel') {
    $dosya_adi = temizDosyaAdi($dosya_adi_kisa) . "_" . date("Ymd_His") . ".xls";
    
    header("Content-Type: application/vnd.ms-excel; charset=utf-8");
    header("Content-Disposition: attachment; filename=$dosya_adi");
    header("Pragma: no-cache");
    header("Expires: 0");
    // Excel için BOM
    echo "\xEF\xBB\xBF"; 
}
?>

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <title><?php echo $baslik; ?></title>
    <style>
        body { font-family: 'Segoe UI', Arial, sans-serif; font-size: 12px; }
        
        /* TABLO STİLLERİ */
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #333; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; font-weight: bold; }
        
        /* EXCEL MODUNDA LOGO GİZLE, YAZDIR MODUNDA GÖSTER */
        .header-print { text-align: center; margin-bottom: 30px; }
        .logo { max-width: 200px; max-height: 80px; margin-bottom: 10px; }
        .rapor-baslik { font-size: 18px; font-weight: bold; text-decoration: underline; }
        .meta-bilgi { font-size: 11px; margin-top: 5px; }

        /* İMZA BÖLÜMÜ */
        .imza-blogu { margin-top: 50px; display: flex; justify-content: space-between; page-break-inside: avoid; }
        .imza-kutu { width: 30%; text-align: center; }
        .imza-cizgi { border-top: 1px solid #000; margin-top: 30px; width: 80%; margin-left: 10%; }

        /* YAZDIRMA BUTONU (Çıktıda Gizlenir) */
        .no-print { text-align: center; padding: 20px; background: #eee; border-bottom: 1px solid #ccc; }
        
        @media print {
            .no-print { display: none; }
            body { margin: 0; padding: 20px; }
            th { background-color: #f2f2f2 !important; }
        }
    </style>
</head>
<body>

    <?php if($format == 'yazdir'): ?>
    <div class="no-print">
        <button onclick="window.print()" style="padding: 10px 20px; font-weight: bold; cursor: pointer;">🖨️ Yazdır / PDF Olarak Kaydet</button>
        <button onclick="window.close()" style="padding: 10px 20px; cursor: pointer;">Pencereyi Kapat</button>
    </div>
    <?php endif; ?>

    <div class="header-print">
        <?php if($format == 'yazdir'): ?>
            <img src="../assets/img/logo.png" alt="Ramsa Makina" class="logo"><br>
        <?php endif; ?>
        
        <div class="rapor-baslik">RAMSA MAKİNA - <?php echo $baslik; ?></div>
        <div class="meta-bilgi">Rapor Tarihi: <?php echo date("d.m.Y H:i"); ?> | Düzenleyen: <?php echo $_SESSION['ad_soyad']; ?></div>
    </div>

    <table style="font-size: 11px;">
        <thead>
            <?php if($tur == 'mesai'): ?>
            <tr>
                <th>TC No</th>
                <th>Ad Soyad</th>
                <th>Tarih</th>
                <th>Saat Aralığı</th>
                <th>Süre</th>
                <th>Mesai Türü</th>
                <th>Açıklama</th>
            </tr>
            <?php elseif($tur == 'izin'): ?>
            <tr>
                <th>TC No</th>
                <th>Ad Soyad</th>
                <th>İzin Türü</th>
                <th>Başlangıç</th>
                <th>Bitiş / İş Başı</th>
                <th>Süre</th>
                <th>Açıklama</th>
            </tr>
            <?php elseif($tur == 'personel_bilgi'): ?>
            <tr style="background-color: #d1ecf1;">
                <th>ID</th>
                <th>Ad Soyad</th>
                <th>Rol</th>
                <th>Durum</th>
                <th>TC No</th>
                <th>SGK No</th>
                <th>Doğum Tarihi</th>
                <th>Medeni Hal</th>
                <th>Çocuk Sayısı</th>
                <th>İşe Giriş</th>
                <th>Telefon</th>
                <th>E-Posta</th>
                <th>Kan Grubu</th>
                <th>Adres</th>
            </tr>
            <?php endif; ?>
        </thead>
        <tbody>
            <?php 
            $toplam_saat = 0;
            $toplam_gun = 0;
            
            foreach($veriler as $v): 
            ?>
                <tr>
                    <?php if($tur == 'mesai'): 
                        $toplam_saat += $v['toplam_saat'];
                    ?>
                        <td><?php echo formatTC($v['tc_no']); ?></td>
                        <td><?php echo $v['ad'] . ' ' . $v['soyad']; ?></td>
                        <td><?php echo date('d.m.Y', strtotime($v['tarih'])); ?></td>
                        <td><?php echo substr($v['baslangic_saati'], 0, 5) . ' - ' . substr($v['bitis_saati'], 0, 5); ?></td>
                        <td style="text-align: center; font-weight: bold;"><?php echo $v['toplam_saat']; ?></td>
                        <td>
                            <?php 
                            if($v['mesai_turu'] == 'fazla_mesai') echo 'Fazla Mesai';
                            elseif($v['mesai_turu'] == 'hafta_tatili') echo 'Hafta Tatili';
                            elseif($v['mesai_turu'] == 'resmi_tatil_mesaisi') echo 'Resmi Tatil';
                            else echo 'Normal';
                            ?>
                        </td>
                        <td><?php echo $v['aciklama']; ?></td>

                    <?php elseif($tur == 'izin'): // İzin
                        $toplam_gun += $v['toplam_gun'];
                    ?>
                        <td><?php echo formatTC($v['tc_no']); ?></td>
                        <td><?php echo $v['ad'] . ' ' . $v['soyad']; ?></td>
                        <td><?php echo strtoupper($v['izin_turu']); ?></td>
                        <td><?php echo date('d.m.Y H:i', strtotime($v['baslangic_tarihi'])); ?></td>
                        <td><?php echo date('d.m.Y H:i', strtotime($v['bitis_tarihi'])); ?></td>
                        <td style="text-align: center; font-weight: bold;">
                            <?php echo ($v['izin_turu']=='saatlik') ? $v['saatlik_sure'].' Saat' : floatval($v['toplam_gun']).' Gün'; ?>
                        </td>
                        <td><?php echo $v['aciklama']; ?></td>

                    <?php elseif($tur == 'personel_bilgi'): // Personel Bilgileri (YENİ ALANLAR) ?>
                        <td style="text-align: center;"><?php echo $v['id']; ?></td>
                        <td style="font-weight: bold;"><?php echo $v['ad'] . ' ' . $v['soyad']; ?></td>
                        <td><?php echo turkceRol($v['rol']); ?></td>
                         <td style="text-align: center; color: <?php echo ($v['durum'] == 1) ? 'green' : 'red'; ?>;">
                            <?php echo ($v['durum'] == 1) ? 'Aktif' : 'Pasif'; ?>
                        </td>
                        <td><?php echo formatTC($v['tc_no']); ?></td>
                        <td><?php echo $v['sgk_no'] ?: '-'; ?></td>
                        <td><?php echo $v['dogum_tarihi'] ? date('d.m.Y', strtotime($v['dogum_tarihi'])) : '-'; ?></td>
                        <td><?php echo $v['medeni_durum'] ?: '-'; ?></td>
                        <td style="text-align: center;"><?php echo $v['cocuk_sayisi'] ?: '0'; ?></td>
                        <td><?php echo date('d.m.Y', strtotime($v['ise_giris_tarihi'])); ?></td>
                        <td><?php echo $v['telefon']; ?></td>
                        <td><?php echo $v['email']; ?></td>
                        <td><?php echo $v['kan_grubu']; ?></td>
                        <td><?php echo $v['adres']; ?></td>
                    <?php endif; ?>
                </tr>
            <?php endforeach; ?>
            
            <?php if($tur == 'mesai'): ?>
            <tr style="background-color: #f2f2f2; font-weight: bold;">
                <td colspan="4" style="text-align: right;">GENEL TOPLAM:</td>
                <td style="text-align: center;">
                    <?php echo number_format($toplam_saat, 1) . " Saat"; ?>
                </td>
                <td colspan="2"></td>
            </tr>
            <?php elseif($tur == 'izin'): ?>
            <tr style="background-color: #f2f2f2; font-weight: bold;">
                <td colspan="5" style="text-align: right;">GENEL TOPLAM GÜN:</td>
                <td style="text-align: center;">
                    <?php echo $toplam_gun . " Gün (Sadece Günlük İzin)"; ?>
                </td>
                <td colspan="1"></td>
            </tr>
            <?php endif; ?>
        </tbody>
    </table>

    <?php if($format == 'yazdir'): ?>
    <div class="imza-blogu">
        <div class="imza-kutu">
            <div>Düzenleyen</div>
            <div style="margin-top:20px;">&nbsp;</div>
            <div class="imza-cizgi"></div>
        </div>
        <div class="imza-kutu">
            <div>Kontrol Eden (İK/Muhasebe)</div>
            <div style="margin-top:20px;">&nbsp;</div>
            <div class="imza-cizgi"></div>
        </div>
        <div class="imza-kutu">
            <div>Onaylayan</div>
            <div style="margin-top:20px;">&nbsp;</div>
            <div class="imza-cizgi"></div>
        </div>
    </div>
    
    <script>
        window.onload = function() {
            setTimeout(function() { window.print(); }, 500);
        }
    </script>
    <?php endif; ?>

</body>
</html>
DATA_PAYLOAD (Açıklama)
Kapak

DEMO SÜRÜMÜDÜR TAM SÜRÜM İÇİN İLETİŞİM KURUN

📖 PYBS (Personel Yönetim Bilgi Sistemi) Kullanım Kılavuzu

🚀 Proje Tanımı

PYBS, personel bilgilerini, izinleri, maaş bordrolarını ve performans değerlendirmelerini merkezi ve dijital bir platformda yönetmek için tasarlanmış kapsamlı bir Personel Yönetim Bilgi Sistemi'dir. Amacımız, İnsan Kaynakları (İK) süreçlerini otomatikleştirerek verimliliği artırmak ve veri tutarlılığını sağlamaktır.

✨ Temel Özellikler

Personel Yönetimi: Çalışanların kişisel, iletişim ve görev bilgilerini kaydetme/güncelleme.

İzin Yönetimi: Çalışanların izin taleplerini oluşturma, onaylama/reddetme ve kalan izin haklarını takip etme.

Performans Değerlendirme: Yöneticilerin ve çalışanların performans hedeflerini belirlemesi ve değerlendirmeleri kaydetmesi.

Bordro Entegrasyonu: Maaş ve avans bilgilerini kaydetme ve bordro çıktılarını oluşturma (Harici sistemlerle entegrasyon potansiyeli).

Raporlama: İK yöneticileri için özet ve detaylı personel, izin ve bordro raporları oluşturma.

💻 Son Kullanıcı Kullanımı🔑 Giriş Yapma

Demo için kullanıcı adı : test.test

Demo için şifre : 123456

Demo hesabında root / yonetici vb yetki yoktur.

Tam sürüm için iletişime geçin.

Sistem "Ramsa Makine" tarafından aktif olarak kullanılmaktadır

Meta Veri (Özet)

İşyeri çalışanlarının maaş, fazla mesai ve puantaj ile bordro takip, kontrol ve raporlama sistemi

9,499
Sinyal (Ağ Hiti)
1.54 MB
Kapasite

Ağda Paylaş