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