PYBS (Personel Yönetim Bilgi Sistemi) / modules/personel-ekle.php
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'; 
?>