sys/veri_detay/#008

PYBS (Personel Yönetim Bilgi Sistemi)

Son Senkronizasyon: 16.12.2025
personel-ekle.php 265 satır • 12.86 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']);

    // Verileri Al
    $kadi = guvenlik($_POST['kullanici_adi']);
    $ad = guvenlik($_POST['ad']);
    $soyad = guvenlik($_POST['soyad']);
    
    // Yeni Maaş Alanı (ZORUNLU)
    $aylik_net_maas = (float)$_POST['aylik_net_maas'];
    
    // --- YENİ ALANLAR ---
    // TC (ZORUNLU)
    $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;
    
    // Doğum Tarihi (ZORUNLU)
    $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;
    $cocuk_sayisi = (int)$_POST['cocuk_sayisi'];
    $email = !empty($_POST['email']) ? guvenlik($_POST['email']) : NULL;
    
    // Telefonu formatla
    $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']);
    
    // İşe Giriş Tarihi (ZORUNLU)
    $tarih = $_POST['ise_giris_tarihi'];
    if (empty($tarih)) {
        $mesaj = '<div class="alert alert-danger">İşe Giriş Tarihi zorunludur!</div>';
        goto end_of_post_logic;
    }
    
    // DÜZELTME: bolum_id manuel olarak NULL atandı (DB'de varsa ve NULL alabiliyorsa)
    $bolum_id = NULL;

    // TC veya Kullanıcı Adı Kontrolü
    $sql_kontrol = "SELECT id FROM kullanicilar WHERE kullanici_adi = ? OR tc_no = ?";
    $params_kontrol = [$kadi, $tc];
    
    $kontrol = $pdo->prepare($sql_kontrol);
    $kontrol->execute($params_kontrol);
    
    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ĞRAF YÜKLEME İŞLEMİ
        $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;
                }
            }
        }

        // Şifre Hashle
        $hash = password_hash($sifre, PASSWORD_DEFAULT);

        // Veritabanına Kayıt
        // DÜZELTME: bolum_id, unvan alanları eklendi ve sifre yerine sifre_hash kullanıldı.
        // Unvan formda yok, bu yüzden boş bırakıldı.
        $sql = "INSERT INTO kullanicilar (kullanici_adi, sifre_hash, ad, soyad, tc_no, sgk_no, dogum_tarihi, medeni_durum, cocuk_sayisi, telefon, email, aylik_net_maas, kan_grubu, adres, ise_giris_tarihi, rol, fotograf_yolu, durum, bolum_id, unvan) 
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, '')";
        $stmt = $pdo->prepare($sql);
        
        try {
            $stmt->execute([
                $kadi, $hash, $ad, $soyad, $tc, $sgk_no, $dogum_tarihi, $medeni_durum, $cocuk_sayisi, $tel, $email, $aylik_net_maas, $kan, $adres, $tarih, $rol, $foto_yolu, $bolum_id
            ]);
            
            // Log Kaydı
            logKaydet($pdo, $_SESSION['kullanici_id'], 'ekleme', "$ad $soyad ($rol) sisteme eklendi.", 'kullanicilar', $pdo->lastInsertId());

            $mesaj = '<div class="alert alert-success">Personel başarıyla kaydedildi!</div>';
        } catch (PDOException $e) {
            $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ı (Giriş İçin) <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>
                            <small class="text-muted">Varsayılan: 123456</small>
                        </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 placeholder="Zorunlu">
                        </div>
                    </div>
                    
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">SGK Sicil No</label>
                            <input type="text" name="sgk_no" class="form-control" placeholder="Opsiyonel">
                        </div>
                        <div class="col-md-4">
                            <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-4">
                            <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-phone me-2"></i> İletişim & Durum</h5>
                    <div class="row mb-3">
                        <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" placeholder="05XX... (Zorunlu)" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">E-Posta Adresi</label>
                            <input type="email" name="email" class="form-control" placeholder="Opsiyonel">
                        </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>
                        </div>
                    </div>
                    
                    <div class="mb-3">
                        <label class="form-label small">Adres</label>
                        <textarea name="adres" class="form-control" rows="2" placeholder="Opsiyonel"></textarea>
                    </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">Aylık Net Maaş (TL) <span class="text-danger">*</span></label>
                            <input type="number" name="aylik_net_maas" class="form-control" step="1" value="35000" required>
                        </div>
                         <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>
                    
                    <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 Kaydet</button>
                        <a href="personel-yonetimi.php" class="btn btn-secondary">İptal / Geri Dön</a>
                    </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,481
Sinyal (Ağ Hiti)
1.54 MB
Kapasite

Ağda Paylaş