sys/veri_detay/#008

PYBS (Personel Yönetim Bilgi Sistemi)

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

// Yetki Kontrolü: Root, Yönetici VE Muhasebe
yetkiKontrol(['root', 'yonetici', 'muhasebe', 'insan_kaynaklari']);

include '../includes/header.php';
include '../includes/menu.php';

$mesaj = '';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    csrfKontrol($_POST['csrf_token']);

    $kadi = guvenlik($_POST['kullanici_adi']);
    $ad = guvenlik($_POST['ad']);
    $soyad = guvenlik($_POST['soyad']);
    
    // Maaş Girişi Kontrolü
    $aylik_net_maas = (float)$_POST['aylik_net_maas'];
    if ($aylik_net_maas <= 0) {
        $mesaj = '<div class="alert alert-danger">Geçerli bir maaş tutarı giriniz!</div>';
        goto end_of_post_logic;
    }

    $tc = guvenlik($_POST['tc_no']);
    if (empty($tc)) {
        $mesaj = '<div class="alert alert-danger">TC Kimlik No zorunludur!</div>';
        goto end_of_post_logic;
    }

    $sgk_no = !empty($_POST['sgk_no']) ? guvenlik($_POST['sgk_no']) : NULL;
    $dogum_tarihi = $_POST['dogum_tarihi'];
    
    if (empty($dogum_tarihi)) {
        $mesaj = '<div class="alert alert-danger">Doğum Tarihi zorunludur!</div>';
        goto end_of_post_logic;
    }
    
    $medeni_durum = $_POST['medeni_durum'] ?? NULL;
    $cinsiyet = $_POST['cinsiyet']; 
    $cocuk_sayisi = (int)$_POST['cocuk_sayisi'];
    $email = !empty($_POST['email']) ? guvenlik($_POST['email']) : NULL;
    $ham_tel = !empty($_POST['telefon']) ? $_POST['telefon'] : '';
    $tel = telefonFormatla($ham_tel); 
    $rol = $_POST['rol'];
    $sifre = $_POST['sifre'];
    $kan = $_POST['kan_grubu'];
    $adres = guvenlik($_POST['adres']);
    $tarih = $_POST['ise_giris_tarihi'];
    
    if (empty($tarih)) {
        $mesaj = '<div class="alert alert-danger">İşe Giriş Tarihi zorunludur!</div>';
        goto end_of_post_logic;
    }

    $sql_kontrol = "SELECT id FROM kullanicilar WHERE kullanici_adi = ? OR tc_no = ?";
    $kontrol = $pdo->prepare($sql_kontrol);
    $kontrol->execute([$kadi, $tc]);
    
    if ($kontrol->rowCount() > 0) {
        $mesaj = '<div class="alert alert-danger">Bu Kullanıcı Adı veya TC Kimlik No zaten sistemde kayıtlı!</div>';
    } else {
        $foto_yolu = 'assets/img/default-user.png'; 
        if (isset($_FILES['fotograf']) && $_FILES['fotograf']['error'] == 0) {
            $izin_verilenler = ['jpg', 'jpeg', 'png'];
            $dosya_uzantisi = strtolower(pathinfo($_FILES['fotograf']['name'], PATHINFO_EXTENSION));
            if (in_array($dosya_uzantisi, $izin_verilenler)) {
                $on_ek = $tc ? $tc : $kadi;
                $yeni_ad = $on_ek . '_' . time() . '.' . $dosya_uzantisi;
                $hedef = '../assets/uploads/' . $yeni_ad;
                if (!is_dir('../assets/uploads')) mkdir('../assets/uploads', 0777, true);
                if (move_uploaded_file($_FILES['fotograf']['tmp_name'], $hedef)) {
                    $foto_yolu = 'assets/uploads/' . $yeni_ad;
                }
            }
        }

        $hash = password_hash($sifre, PASSWORD_DEFAULT);

        try {
            $pdo->beginTransaction(); 

            // 1. Kullanıcıyı Ekle (kullanicilar tablosu)
            $sql = "INSERT INTO kullanicilar (kullanici_adi, sifre_hash, ad, soyad, tc_no, sgk_no, dogum_tarihi, cinsiyet, medeni_durum, cocuk_sayisi, telefon, email, aylik_net_maas, kan_grubu, adres, ise_giris_tarihi, rol, fotograf_yolu, durum) 
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)";
            $stmt = $pdo->prepare($sql);
            $stmt->execute([
                $kadi, $hash, $ad, $soyad, $tc, $sgk_no, $dogum_tarihi, $cinsiyet, $medeni_durum, $cocuk_sayisi, $tel, $email, $aylik_net_maas, $kan, $adres, $tarih, $rol, $foto_yolu
            ]);
            
            $yeni_personel_id = $pdo->lastInsertId();

            // 2. Çalışma Dönemi Ekle (calisma_donemleri tablosu - YENİ)
            $sql_donem = "INSERT INTO calisma_donemleri (calisan_id, ise_giris, aktif_donem) VALUES (?, ?, 1)";
            $stmt_donem = $pdo->prepare($sql_donem);
            $stmt_donem->execute([$yeni_personel_id, $tarih]);

            // 3. Maaş Geçmişi Ekle
            $sql_maas = "INSERT INTO maas_gecmisi (calisan_id, maas_miktari, gecerlilik_baslangic, aciklama, olusturan_id) 
                         VALUES (?, ?, ?, ?, ?)";
            $stmt_maas = $pdo->prepare($sql_maas);
            $stmt_maas->execute([
                $yeni_personel_id, 
                $aylik_net_maas, 
                $tarih, 
                'İşe Başlangıç Maaşı', 
                $_SESSION['kullanici_id']
            ]);

            $pdo->commit(); 

            logKaydet($pdo, $_SESSION['kullanici_id'], 'ekleme', "$ad $soyad ($rol) sisteme eklendi, dönem ve maaş tanımlandı.", 'kullanicilar', $yeni_personel_id);
            $mesaj = '<div class="alert alert-success">Personel başarıyla kaydedildi!</div>';
        } catch (PDOException $e) {
            $pdo->rollBack(); 
            $mesaj = '<div class="alert alert-danger">Veritabanı Hatası: ' . $e->getMessage() . '</div>';
        }
    }
}
end_of_post_logic:
?>

<div class="container-fluid">
    <div class="row justify-content-center">
        <div class="col-md-10">
            <div class="card-box p-4">
                <h4 class="mb-3 border-bottom pb-2">Yeni Personel Kayıt Formu</h4>
                <?php echo $mesaj; ?>
                <form method="POST" action="" enctype="multipart/form-data">
                    <input type="hidden" name="csrf_token" value="<?php echo csrfTokenOlustur(); ?>">

                    <h5 class="mt-4 mb-3 text-primary"><i class="fas fa-lock me-2"></i> Giriş Bilgileri</h5>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">Kullanıcı Adı <span class="text-danger">*</span></label>
                            <input type="text" name="kullanici_adi" class="form-control" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Şifre <span class="text-danger">*</span></label>
                            <input type="text" name="sifre" class="form-control" value="123456" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Sistem Rolü <span class="text-danger">*</span></label>
                            <select name="rol" class="form-select" required>
                                <option value="calisan" selected>Çalışan (Personel)</option>
                                <option value="stajyer">Stajyer</option>
                                <option value="vardiya_amiri">Vardiya Amiri</option>
                                <option value="mudur">Müdür</option>
                                <option value="muhasebe">Muhasebe</option>
                                <option value="insan_kaynaklari">İnsan Kaynakları</option>
                                <?php if($_SESSION['rol'] == 'root'): ?>
                                    <option value="yonetici">Yönetici</option>
                                <?php endif; ?>
                            </select>
                        </div>
                    </div>
                    <hr>

                    <h5 class="mt-4 mb-3 text-primary"><i class="fas fa-user me-2"></i> Kişisel & Kimlik Bilgileri</h5>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">Ad <span class="text-danger">*</span></label>
                            <input type="text" name="ad" class="form-control" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Soyad <span class="text-danger">*</span></label>
                            <input type="text" name="soyad" class="form-control" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">TC Kimlik No <span class="text-danger">*</span></label>
                            <input type="text" name="tc_no" class="form-control" maxlength="11" required>
                        </div>
                    </div>
                    
                    <div class="row mb-3">
                        <div class="col-md-3">
                            <label class="form-label small">Doğum Tarihi <span class="text-danger">*</span></label>
                            <input type="date" name="dogum_tarihi" class="form-control" required>
                        </div>
                        <div class="col-md-3">
                            <label class="form-label small">Cinsiyet <span class="text-danger">*</span></label>
                            <select name="cinsiyet" class="form-select" required>
                                <option value="Erkek" selected>Erkek</option>
                                <option value="Kadın">Kadın</option>
                            </select>
                        </div>
                        <div class="col-md-3">
                            <label class="form-label small">SGK Sicil No</label>
                            <input type="text" name="sgk_no" class="form-control">
                        </div>
                        <div class="col-md-3">
                            <label class="form-label small">Kan Grubu</label>
                            <select name="kan_grubu" class="form-select">
                                <option value="">Seçiniz</option>
                                <option value="A+">A RH (+)</option>
                                <option value="A-">A RH (-)</option>
                                <option value="B+">B RH (+)</option>
                                <option value="B-">B RH (-)</option>
                                <option value="AB+">AB RH (+)</option>
                                <option value="AB-">AB RH (-)</option>
                                <option value="0+">0 RH (+)</option>
                                <option value="0-">0 RH (-)</option>
                            </select>
                        </div>
                    </div>
                    <hr>

                    <h5 class="mt-4 mb-3 text-primary"><i class="fas fa-dollar-sign me-2"></i> Finansal & Aile Bilgileri</h5>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small fw-bold text-success">Aylık Net Maaş (TL) <span class="text-danger">*</span></label>
                            <div class="input-group">
                                <span class="input-group-text">₺</span>
                                <input type="number" name="aylik_net_maas" class="form-control fw-bold" step="0.01" placeholder="0.00" required>
                            </div>
                            <div class="form-text text-muted">Başlangıç maaşı olarak işlenecektir.</div>
                        </div>
                        <div class="col-md-4">
                             <label class="form-label small">İşe Giriş Tarihi <span class="text-danger">*</span></label>
                            <input type="date" name="ise_giris_tarihi" class="form-control" required value="<?php echo date('Y-m-d'); ?>">
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Telefon <span class="text-danger">*</span></label>
                            <input type="text" name="telefon" class="form-control" required>
                        </div>
                    </div>
                     <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">Medeni Hali</label>
                            <select name="medeni_durum" class="form-select">
                                <option value="">Seçiniz</option>
                                <option value="Bekar">Bekar</option>
                                <option value="Evli">Evli</option>
                                <option value="Dul">Dul</option>
                                <option value="Boşanmış">Boşanmış</option>
                            </select>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Çocuk Sayısı</label>
                            <input type="number" name="cocuk_sayisi" class="form-control" min="0" value="0">
                        </div>
                         <div class="col-md-4">
                             <label class="form-label small">Email</label>
                             <input type="email" name="email" class="form-control">
                         </div>
                    </div>
                    
                    <div class="mb-3">
                        <label class="form-label small">Adres</label>
                        <textarea name="adres" class="form-control" rows="2"></textarea>
                    </div>

                    <div class="mb-3">
                        <label class="form-label small">Profil Fotoğrafı</label>
                        <input type="file" name="fotograf" class="form-control">
                    </div>

                    <div class="d-grid gap-2 mt-4">
                        <button type="submit" class="btn btn-primary btn-lg"><i class="fas fa-save me-2"></i> Personeli ve Maaşı Kaydet</button>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>
<?php include '../includes/footer.php'; ?>
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,336
Sinyal (Ağ Hiti)
1.54 MB
Kapasite

Ağda Paylaş