<?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';
?>