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