sys/veri_detay/#008

PYBS (Personel Yönetim Bilgi Sistemi)

Son Senkronizasyon: 16.12.2025
personel-kart.php 298 satır • 14.73 KB
<?php
// modules/personel-kart.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';

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

$id = (int)$_GET['id'];

// Güvenlik: Çalışan sadece kendi kartını görebilir
if ($_SESSION['rol'] == 'calisan' && $_SESSION['kullanici_id'] != $id) {
    die("Bu personel kartını görüntüleme yetkiniz yok.");
}

// 1. PERSONEL BİLGİLERİ (SELECT * kullanılır, yeni sütunların DB'de olduğu varsayılır)
$stmt = $pdo->prepare("SELECT * FROM kullanicilar WHERE id = ?");
$stmt->execute([$id]);
$p = $stmt->fetch();

if (!$p) die("Personel bulunamadı.");

// 2. İZİN VE MESAİ VERİLERİ (ÖZET)
$yil = date('Y');

// Kıdem
$ise_giris = new DateTime($p['ise_giris_tarihi']);
$bugun = new DateTime();
$kidem_yil = $ise_giris->diff($bugun)->y;

// İzin Hakkı
$hakedilen = ($kidem_yil >= 15) ? 26 : (($kidem_yil >= 5) ? 20 : 14);
if ($p['rol'] == 'stajyer') $hakedilen = 0;
$toplam_hak = $hakedilen + (float)$p['devreden_izin'];

// Kullanılan
$kullanilan_stmt = $pdo->prepare("SELECT SUM(toplam_gun) FROM izin_talepleri WHERE calisan_id = ? AND durum = 'onaylandi' AND izin_turu IN ('yillik', 'mazeret') AND YEAR(baslangic_tarihi) = ?");
$kullanilan_stmt->execute([$id, $yil]);
$kullanilan = $kullanilan_stmt->fetchColumn() ?: 0;
$kalan = $toplam_hak - $kullanilan;

// Toplam Mesai
$mesai_stmt = $pdo->prepare("SELECT SUM(toplam_saat) FROM mesai_hareketleri WHERE calisan_id = ? AND durum = 'onaylandi'");
$mesai_stmt->execute([$id]);
$toplam_mesai = $mesai_stmt->fetchColumn() ?: 0;

// MAAŞ HESAPLAMA BİLGİLERİ
$net_maas = (float)$p['aylik_net_maas'];
$saatlik_ucret = $net_maas > 0 ? $net_maas / 225 : 0;
$maas_gorme_yetkisi = in_array($_SESSION['rol'], ['root', 'yonetici', 'muhasebe', 'insan_kaynaklari']);

// --- DETAYLI LİSTELER (SON 5 KAYIT) ---
// GÜVENLİK RİSKİ: Sorgular parametreli olmalı. Buradaki $id zaten int'e cast edildiği için minimal risk taşır.
$son_izinler = $pdo->query("SELECT * FROM izin_talepleri WHERE calisan_id = $id ORDER BY baslangic_tarihi DESC LIMIT 5")->fetchAll();
$son_mesailer = $pdo->query("SELECT * FROM mesai_hareketleri WHERE calisan_id = $id ORDER BY tarih DESC LIMIT 5")->fetchAll();

// QR Kod
$qr_data = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$qr_src = "https://api.qrserver.com/v1/create-qr-code/?size=100x100&data=" . urlencode($qr_data);
?>

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <title>Personel Sicil Kartı - <?php echo $p['ad'] . ' ' . $p['soyad']; ?></title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    
    <style>
        body { background: #f0f2f5; font-family: 'Segoe UI', Arial, sans-serif; font-size: 13px; }
        
        .page-container {
            max-width: 210mm;
            margin: 20px auto;
            background: white;
            padding: 30px;
            box-shadow: 0 0 15px rgba(0,0,0,0.1);
            position: relative;
        }

        /* HEADER & LOGO */
        .header { border-bottom: 2px solid #2A7BB8; padding-bottom: 15px; margin-bottom: 20px; display: flex; justify-content: space-between; align-items: center; }
        .logo { max-height: 55px; }
        .title-box h2 { margin: 0; color: #2A7BB8; font-weight: 700; text-transform: uppercase; font-size: 22px; }
        .title-box p { margin: 0; color: #666; font-size: 12px; }
        .qr-code { border: 1px solid #ddd; padding: 4px; width: 70px; height: 70px; }

        /* PROFILE */
        .profile-header { display: flex; gap: 20px; margin-bottom: 15px; }
        .photo-box { width: 130px; height: 150px; border: 1px solid #ddd; padding: 4px; background: #fff; }
        .photo-box img { width: 100%; height: 100%; object-fit: cover; }
        
        .main-info { flex-grow: 1; }
        .name { font-size: 24px; font-weight: bold; color: #333; border-bottom: 1px solid #eee; padding-bottom: 5px; margin-bottom: 10px; }
        
        .info-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
        .info-item { display: flex; border-bottom: 1px dashed #eee; padding-bottom: 3px; }
        .label { font-weight: bold; width: 130px; color: #555; }
        .value { color: #000; }

        /* SECTIONS & TABLES */
        .section-title { background: #eee; padding: 6px 12px; font-weight: bold; color: #333; border-left: 5px solid #2A7BB8; margin: 15px 0 10px 0; text-transform: uppercase; font-size: 13px; }

        .stat-table { width: 100%; border-collapse: collapse; margin-bottom: 15px; }
        .stat-table th, .stat-table td { border: 1px solid #ddd; padding: 6px; text-align: center; font-size: 12px; }
        .stat-table th { background: #f9f9f9; font-weight: bold; color: #333; }
        .text-start { text-align: left !important; }

        /* YAZDIRMA BUTONLARINI GİZLEME KURALI */
        .no-print { position: fixed; top: 20px; right: 20px; z-index: 9999; }
        @media print {
            .no-print { display: none !important; }
            body { background: white; margin: 0; }
            .page-container { box-shadow: none; margin: 0; padding: 10px; width: 100%; max-width: 100%; }
            .section-title { background: #f0f0f0 !important; -webkit-print-color-adjust: exact; }
            .header { border-bottom-color: #000 !important; }
            .stat-table th { background-color: #f0f0f0 !important; -webkit-print-color-adjust: exact; }
        }
    </style>
</head>
<body>

    <div class="no-print d-flex gap-2">
        <button onclick="window.print()" class="btn btn-primary shadow"><i class="fas fa-print"></i> Yazdır</button>
        <button onclick="window.close()" class="btn btn-secondary shadow"><i class="fas fa-times"></i> Kapat</button>
    </div>

    <div class="page-container">
        
        <div class="header">
            <img src="../assets/img/logo.png" alt="Ramsa Logo" class="logo">
            <div class="title-box text-center">
                <h2>Personel Sicil Kartı</h2>
                <p>İnsan Kaynakları Yönetim Sistemi</p>
            </div>
            <img src="<?php echo $qr_src; ?>" alt="QR" class="qr-code">
        </div>

        <div class="profile-header">
            <div class="photo-box">
                <img src="../<?php echo !empty($p['fotograf_yolu']) ? $p['fotograf_yolu'] : 'assets/img/default-user.png'; ?>">
            </div>
            <div class="main-info">
                <div class="name"><?php echo $p['ad'] . ' ' . $p['soyad']; ?></div>
                <div class="info-grid">
                    <div class="info-item"><span class="label">TC Kimlik No:</span> <span class="value"><?php echo $p['tc_no']; ?></span></div>
                    <div class="info-item"><span class="label">SGK Sicil No:</span> <span class="value"><?php echo $p['sgk_no'] ?: '-'; ?></span></div>
                    <div class="info-item"><span class="label">Doğum Tarihi:</span> <span class="value"><?php echo $p['dogum_tarihi'] ? date('d.m.Y', strtotime($p['dogum_tarihi'])) : '-'; ?></span></div>
                    <div class="info-item"><span class="label">Sistem Rolü:</span> <span class="value"><?php echo strtoupper($p['rol']); ?></span></div>
                    <div class="info-item"><span class="label">İşe Giriş Tarihi:</span> <span class="value"><?php echo date('d.m.Y', strtotime($p['ise_giris_tarihi'])); ?></span></div>
                    <div class="info-item"><span class="label">Kıdem Yılı:</span> <span class="value"><?php echo $kidem_yil; ?> Yıl</span></div>
                </div>
            </div>
        </div>

        <div class="section-title">AİLE VE KİŞİSEL BİLGİLER</div>
        <div class="info-grid">
            <div class="info-item"><span class="label">Medeni Hali:</span> <span class="value"><?php echo $p['medeni_durum'] ?: '-'; ?></span></div>
            <div class="info-item"><span class="label">Çocuk Sayısı:</span> <span class="value"><?php echo $p['cocuk_sayisi'] ?: '0'; ?></span></div>
            <div class="info-item"><span class="label">Kan Grubu:</span> <span class="value"><?php echo $p['kan_grubu'] ?: '-'; ?></span></div>
            <div class="info-item"><span class="label">Durum:</span> <span class="value"><?php echo ($p['durum']==1) ? 'AKTİF' : 'PASİF'; ?></span></div>
        </div>
        

        <div class="section-title">Finansal Bilgiler</div>
        <div class="info-grid">
            <?php if ($maas_gorme_yetkisi): ?>
                <div class="info-item"><span class="label">Aylık Net Maaş:</span> <span class="value fw-bold text-success"><?php echo number_format($net_maas, 2); ?> ₺</span></div>
                <div class="info-item"><span class="label">Saatlik Birim Ücret:</span> <span class="value fw-bold text-primary"><?php echo number_format($saatlik_ucret, 2); ?> ₺</span></div>
            <?php else: ?>
                <div class="alert alert-secondary w-100 p-2" style="grid-column: span 2;">Maaş bilgileri görüntüleme yetkiniz yoktur.</div>
            <?php endif; ?>
        </div>

        <div class="section-title">İletişim Bilgileri</div>
        <div class="info-grid">
            <div class="info-item"><span class="label">Telefon:</span> <span class="value"><?php echo $p['telefon']; ?></span></div>
            <div class="info-item"><span class="label">E-Posta:</span> <span class="value"><?php echo !empty($p['email']) ? $p['email'] : '-'; ?></span></div>
            <div class="info-item" style="grid-column: span 2; border-bottom: none;">
                <span class="label">Adres:</span> <span class="value"><?php echo !empty($p['adres']) ? $p['adres'] : '-'; ?></span>
            </div>
        </div>

        <div class="section-title">İzin ve Bakiye Durumu (<?php echo $yil; ?> Yılı)</div>
        <table class="stat-table">
            <thead>
                <tr>
                    <th>Hakedilen Yıllık İzin</th>
                    <th>Kullanılan (Yıllık+Mazeret)</th>
                    <th>Kalan Bakiye</th>
                    <th>Toplam Onaylı Mesai</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><?php echo $toplam_hak; ?> Gün</td>
                    <td><?php echo $kullanilan; ?> Gün</td>
                    <td style="font-weight: bold; color: #2A7BB8; font-size: 14px;"><?php echo $kalan; ?> Gün</td>
                    <td style="font-weight: bold;"><?php echo number_format($toplam_mesai, 1); ?> Saat</td>
                </tr>
            </tbody>
        </table>

        <div class="section-title">Son İzin Hareketleri</div>
        <table class="stat-table">
            <thead>
                <tr>
                    <th class="text-start">İzin Türü</th>
                    <th>Başlangıç Tarihi</th>
                    <th>Bitiş / İş Başı</th>
                    <th>Süre</th>
                    <th>Durum</th>
                </tr>
            </thead>
            <tbody>
                <?php foreach($son_izinler as $iz): ?>
                <tr>
                    <td class="text-start">
                        <?php echo ($iz['izin_turu'] == 'saatlik') ? 'SAATLİK İZİN' : strtoupper($iz['izin_turu']); ?>
                    </td>
                    <td>
                        <?php echo tarihTurkce(date('Y-m-d', strtotime($iz['baslangic_tarihi']))); ?>
                        <?php if($iz['izin_turu'] == 'saatlik') echo '<br><small>'.date('H:i', strtotime($iz['baslangic_tarihi'])).'</small>'; ?>
                    </td>
                    <td>
                        <?php echo tarihTurkce(date('Y-m-d', strtotime($iz['bitis_tarihi']))); ?>
                        <?php if($iz['izin_turu'] == 'saatlik') echo '<br><small>'.date('H:i', strtotime($iz['bitis_tarihi'])).'</small>'; ?>
                    </td>
                    <td style="font-weight: bold;">
                        <?php echo ($iz['izin_turu'] == 'saatlik') ? $iz['saatlik_sure'].' Saat' : floatval($iz['toplam_gun']).' Gün'; ?>
                    </td>
                    <td>
                        <?php 
                        if($iz['durum']=='onaylandi') echo '<span style="color:green">ONAYLI</span>';
                        elseif($iz['durum']=='reddedildi') echo '<span style="color:red">RED</span>';
                        else echo 'BEKLİYOR';
                        ?>
                    </td>
                </tr>
                <?php endforeach; ?>
                <?php if(empty($son_izinler)) echo "<tr><td colspan='5'>Kayıt bulunamadı.</td></tr>"; ?>
            </tbody>
        </table>

        <div class="section-title">Son Fazla Mesai Hareketleri</div>
        <table class="stat-table">
            <thead>
                <tr>
                    <th class="text-start">Tarih</th>
                    <th>Mesai Türü</th>
                    <th>Saat Aralığı</th>
                    <th>Süre</th>
                    <th>Durum</th>
                </tr>
            </thead>
            <tbody>
                <?php foreach($son_mesailer as $m): ?>
                <tr>
                    <td class="text-start fw-bold">
                        <?php echo tarihTurkce($m['tarih']); ?>
                    </td>
                    <td>
                        <?php 
                        if($m['mesai_turu']=='fazla_mesai') echo 'Fazla Mesai';
                        elseif($m['mesai_turu']=='resmi_tatil_mesaisi') echo 'Resmi Tatil';
                        else echo 'Normal';
                        ?>
                    </td>
                    <td>
                        <?php echo substr($m['baslangic_saati'],0,5) . ' - ' . substr($m['bitis_saati'],0,5); ?>
                    </td>
                    <td style="font-weight: bold; color: #2A7BB8;">
                        <?php echo $m['toplam_saat']; ?> Saat
                    </td>
                    <td>
                        <?php 
                        if($m['durum']=='onaylandi') echo '<span style="color:green">ONAYLI</span>';
                        elseif($m['durum']=='reddedildi') echo '<span style="color:red">RED</span>';
                        else echo 'BEKLİYOR';
                        ?>
                    </td>
                </tr>
                <?php endforeach; ?>
                <?php if(empty($son_mesailer)) echo "<tr><td colspan='5'>Kayıt bulunamadı.</td></tr>"; ?>
            </tbody>
        </table>

        <div style="margin-top: 20px; font-size: 11px; color: #999; text-align: center; border-top: 1px solid #eee; padding-top: 10px;">
            Ramsa Makina Portal Sistemi - Oluşturulma Tarihi: <?php echo date('d.m.Y H:i'); ?> <br>
            Bu belge bilgilendirme amaçlıdır.
        </div>

    </div>

</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,487
Sinyal (Ağ Hiti)
1.54 MB
Kapasite

Ağda Paylaş