PYBS (Personel Yönetim Bilgi Sistemi)
<?php
// modules/personel-duzenle.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';
// Yetki: Root, Yönetici, Muhasebe, İnsan Kaynakları
yetkiKontrol(['root', 'yonetici', 'muhasebe', 'insan_kaynaklari']);
include '../includes/header.php';
include '../includes/menu.php';
$id = (int)$_GET['id'];
$mesaj = '';
// --- İŞLEM: YENİ DÖNEM BAŞLAT (TEKRAR İŞE ALIM) ---
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['islem']) && $_POST['islem'] == 'donem_ekle') {
csrfKontrol($_POST['csrf_token']);
$giris = $_POST['yeni_giris_tarihi'];
// Önceki açık dönemleri kapat
$pdo->prepare("UPDATE calisma_donemleri SET aktif_donem = 0 WHERE calisan_id = ?")->execute([$id]);
// Yeni dönem ekle
$stmt = $pdo->prepare("INSERT INTO calisma_donemleri (calisan_id, ise_giris, aktif_donem) VALUES (?, ?, 1)");
if ($stmt->execute([$id, $giris])) {
// Ana tabloyu güncelle
$pdo->prepare("UPDATE kullanicilar SET durum = 1, ise_giris_tarihi = ?, isten_cikis_tarihi = NULL WHERE id = ?")->execute([$giris, $id]);
$mesaj = '<div class="alert alert-success">Personel tekrar işe alındı (Yeni dönem başlatıldı).</div>';
}
}
// --- İŞLEM: DÖNEM SONLANDIR (İŞTEN ÇIKIŞ) ---
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['islem']) && $_POST['islem'] == 'donem_bitir') {
csrfKontrol($_POST['csrf_token']);
$donem_id = (int)$_POST['donem_id'];
$cikis = $_POST['cikis_tarihi'];
$neden = guvenlik($_POST['ayrilma_nedeni']);
$stmt = $pdo->prepare("UPDATE calisma_donemleri SET isten_cikis = ?, ayrilma_nedeni = ?, aktif_donem = 0 WHERE id = ? AND calisan_id = ?");
if ($stmt->execute([$cikis, $neden, $donem_id, $id])) {
$pdo->prepare("UPDATE kullanicilar SET durum = 0, isten_cikis_tarihi = ? WHERE id = ?")->execute([$cikis, $id]);
$mesaj = '<div class="alert alert-warning">Dönem sonlandırıldı ve personel pasife alındı.</div>';
}
}
// --- YENİ İŞLEM: DÖNEM DÜZENLEME (TARİHLERİ GÜNCELLEME) ---
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['islem']) && $_POST['islem'] == 'donem_guncelle') {
csrfKontrol($_POST['csrf_token']);
$edit_donem_id = (int)$_POST['edit_donem_id'];
$yeni_giris = $_POST['edit_giris_tarihi'];
$yeni_cikis = !empty($_POST['edit_cikis_tarihi']) ? $_POST['edit_cikis_tarihi'] : NULL;
$yeni_neden = guvenlik($_POST['edit_ayrilma_nedeni']);
// Dönem aktif mi kontrol et
$donem_kontrol = $pdo->query("SELECT aktif_donem FROM calisma_donemleri WHERE id = $edit_donem_id")->fetch();
$sql = "UPDATE calisma_donemleri SET ise_giris = ?, isten_cikis = ?, ayrilma_nedeni = ? WHERE id = ? AND calisan_id = ?";
$stmt = $pdo->prepare($sql);
if($stmt->execute([$yeni_giris, $yeni_cikis, $yeni_neden, $edit_donem_id, $id])){
// Eğer güncellenen dönem AKTİF dönem ise, ana kullanıcı tablosunu da güncelle
if($donem_kontrol['aktif_donem'] == 1) {
$pdo->prepare("UPDATE kullanicilar SET ise_giris_tarihi = ? WHERE id = ?")->execute([$yeni_giris, $id]);
}
$mesaj = '<div class="alert alert-info">Çalışma dönemi tarihleri güncellendi.</div>';
}
}
// --- MAAŞ EKLEME İŞLEMİ ---
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['islem']) && $_POST['islem'] == 'maas_ekle') {
csrfKontrol($_POST['csrf_token']);
$yeni_maas = (float)$_POST['yeni_maas'];
$baslangic_tarihi = $_POST['gecerlilik_baslangic'];
$aciklama = guvenlik($_POST['aciklama']);
if ($yeni_maas >= 0 && !empty($baslangic_tarihi)) {
$stmt = $pdo->prepare("INSERT INTO maas_gecmisi (calisan_id, maas_miktari, gecerlilik_baslangic, aciklama, olusturan_id) VALUES (?, ?, ?, ?, ?)");
if ($stmt->execute([$id, $yeni_maas, $baslangic_tarihi, $aciklama, $_SESSION['kullanici_id']])) {
$son_maas = $pdo->query("SELECT maas_miktari FROM maas_gecmisi WHERE calisan_id = $id ORDER BY gecerlilik_baslangic DESC LIMIT 1")->fetchColumn();
$pdo->prepare("UPDATE kullanicilar SET aylik_net_maas = ? WHERE id = ?")->execute([$son_maas, $id]);
$mesaj = '<div class="alert alert-success">Yeni maaş bilgisi eklendi.</div>';
}
} else {
$mesaj = '<div class="alert alert-danger">Lütfen geçerli bir tarih giriniz.</div>';
}
}
// --- MAAŞ GÜNCELLEME ---
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['islem']) && $_POST['islem'] == 'maas_guncelle') {
csrfKontrol($_POST['csrf_token']);
$maas_kayit_id = (int)$_POST['maas_kayit_id'];
$guncel_tutar = (float)$_POST['edit_maas'];
$guncel_tarih = $_POST['edit_tarih'];
$guncel_aciklama = guvenlik($_POST['edit_aciklama']);
if ($guncel_tutar >= 0 && !empty($guncel_tarih)) {
$stmt = $pdo->prepare("UPDATE maas_gecmisi SET maas_miktari = ?, gecerlilik_baslangic = ?, aciklama = ? WHERE id = ? AND calisan_id = ?");
if ($stmt->execute([$guncel_tutar, $guncel_tarih, $guncel_aciklama, $maas_kayit_id, $id])) {
$son_maas = $pdo->query("SELECT maas_miktari FROM maas_gecmisi WHERE calisan_id = $id ORDER BY gecerlilik_baslangic DESC LIMIT 1")->fetchColumn();
$pdo->prepare("UPDATE kullanicilar SET aylik_net_maas = ? WHERE id = ?")->execute([$son_maas, $id]);
$mesaj = '<div class="alert alert-info">Maaş kaydı güncellendi.</div>';
}
} else {
$mesaj = '<div class="alert alert-danger">Güncelleme başarısız. Geçerli değerler giriniz.</div>';
}
}
// --- MAAŞ SİLME ---
if (isset($_GET['maas_sil'])) {
$maas_id = (int)$_GET['maas_sil'];
$count = $pdo->query("SELECT COUNT(*) FROM maas_gecmisi WHERE calisan_id = $id")->fetchColumn();
if ($count > 0) {
$pdo->prepare("DELETE FROM maas_gecmisi WHERE id = ?")->execute([$maas_id]);
$son_maas_sor = $pdo->query("SELECT maas_miktari FROM maas_gecmisi WHERE calisan_id = $id ORDER BY gecerlilik_baslangic DESC LIMIT 1");
$son_maas = $son_maas_sor->fetchColumn();
if ($son_maas === false) $son_maas = 0;
$pdo->prepare("UPDATE kullanicilar SET aylik_net_maas = ? WHERE id = ?")->execute([$son_maas, $id]);
$mesaj = '<div class="alert alert-warning">Maaş kaydı silindi.</div>';
}
}
// PERSONEL VERİLERİ
$stmt = $pdo->prepare("SELECT * FROM kullanicilar WHERE id = ?");
$stmt->execute([$id]);
$k = $stmt->fetch();
if (!$k) die("Kullanıcı bulunamadı.");
// --- İLK İŞE GİRİŞ TARİHİNİ BUL ---
// Çalışma dönemleri tablosundaki EN ESKİ tarihi bulur.
$ilk_giris_query = $pdo->query("SELECT MIN(ise_giris) FROM calisma_donemleri WHERE calisan_id = $id")->fetchColumn();
// Eğer dönem tablosu boşsa veya null ise, kullanici tablosundakini al
$ilk_ise_giris_tarihi = $ilk_giris_query ? $ilk_giris_query : $k['ise_giris_tarihi'];
$donemler = $pdo->query("SELECT * FROM calisma_donemleri WHERE calisan_id = $id ORDER BY ise_giris DESC")->fetchAll();
$maaslar = $pdo->query("SELECT * FROM maas_gecmisi WHERE calisan_id = $id ORDER BY gecerlilik_baslangic DESC")->fetchAll();
// --- PROFİL GÜNCELLEME ---
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['islem']) && $_POST['islem'] == 'profil_guncelle') {
csrfKontrol($_POST['csrf_token']);
$ad = guvenlik($_POST['ad']);
$soyad = guvenlik($_POST['soyad']);
$email = guvenlik($_POST['email']);
$kan_grubu = $_POST['kan_grubu'];
$adres = guvenlik($_POST['adres']);
$ham_tel = !empty($_POST['telefon']) ? $_POST['telefon'] : '';
$telefon = telefonFormatla($ham_tel);
$rol = $_POST['rol'];
$sgk_no = !empty($_POST['sgk_no']) ? guvenlik($_POST['sgk_no']) : NULL;
$tc_no = guvenlik($_POST['tc_no']);
$dogum_tarihi = $_POST['dogum_tarihi'];
$medeni_durum = $_POST['medeni_durum'];
$cinsiyet = $_POST['cinsiyet'];
$sut_izni_bitis = (!empty($_POST['sut_izni_bitis']) && $cinsiyet == 'Kadın') ? $_POST['sut_izni_bitis'] : NULL;
$cocuk_sayisi = (int)$_POST['cocuk_sayisi'];
$foto_yolu = $k['fotograf_yolu'];
$yeni_sifre = !empty($_POST['yeni_sifre']) ? password_hash($_POST['yeni_sifre'], PASSWORD_DEFAULT) : NULL;
if (isset($_FILES['fotograf']) && $_FILES['fotograf']['error'] === UPLOAD_ERR_OK) {
$izin_verilenler = ['jpg', 'jpeg', 'png'];
$dosya_uzantisi = strtolower(pathinfo($_FILES['fotograf']['name'], PATHINFO_EXTENSION));
if (in_array($dosya_uzantisi, $izin_verilenler)) {
$on_ek = $tc_no ? $tc_no : $k['kullanici_adi'];
$yeni_ad = $on_ek . '_' . time() . '.' . $dosya_uzantisi;
$hedef = '../assets/uploads/' . $yeni_ad;
if (move_uploaded_file($_FILES['fotograf']['tmp_name'], $hedef)) {
$foto_yolu = 'assets/uploads/' . $yeni_ad;
}
}
}
try {
$sql = "UPDATE kullanicilar SET ad = ?, soyad = ?, email = ?, kan_grubu = ?, adres = ?,
rol = ?, sgk_no = ?, tc_no = ?, telefon = ?,
dogum_tarihi = ?, cinsiyet = ?, sut_izni_bitis = ?, medeni_durum = ?, cocuk_sayisi = ?";
$params = [
$ad, $soyad, $email, $kan_grubu, $adres,
$rol, $sgk_no, $tc_no, $telefon,
$dogum_tarihi, $cinsiyet, $sut_izni_bitis, $medeni_durum, $cocuk_sayisi
];
if (!empty($yeni_sifre)) { $sql .= ", sifre_hash = ?"; $params[] = $yeni_sifre; }
if ($foto_yolu !== $k['fotograf_yolu']) { $sql .= ", fotograf_yolu = ?"; $params[] = $foto_yolu; }
$sql .= " WHERE id = ?";
$params[] = $id;
$stmt_up = $pdo->prepare($sql);
$stmt_up->execute($params);
logKaydet($pdo, $_SESSION['kullanici_id'], 'guncelleme', "Personel {$k['ad']} {$k['soyad']} bilgileri güncellendi.", 'kullanicilar', $id);
$mesaj = '<div class="alert alert-success">Personel bilgileri güncellendi.</div>';
$stmt->execute([$id]);
$k = $stmt->fetch();
} catch (PDOException $e) {
$mesaj = '<div class="alert alert-danger">Hata: ' . $e->getMessage() . '</div>';
}
}
?>
<div class="container-fluid">
<div class="row justify-content-center">
<div class="col-md-10">
<div class="card-box p-4">
<div class="d-flex justify-content-between align-items-center mb-3 border-bottom pb-2">
<h4 class="mb-0">Personel Düzenle: <?php echo htmlspecialchars($k['ad'].' '.$k['soyad']); ?></h4>
<span class="badge <?php echo $k['durum']==1?'bg-success':'bg-secondary'; ?> fs-6"><?php echo $k['durum']==1?'Aktif':'Pasif'; ?></span>
</div>
<?php echo $mesaj; ?>
<ul class="nav nav-tabs mb-4" id="myTab" role="tablist">
<li class="nav-item"><button class="nav-link active" data-bs-toggle="tab" data-bs-target="#genel">Genel Bilgiler</button></li>
<li class="nav-item"><button class="nav-link" data-bs-toggle="tab" data-bs-target="#donemler">Çalışma Dönemleri (Giriş/Çıkış)</button></li>
<li class="nav-item"><button class="nav-link" data-bs-toggle="tab" data-bs-target="#maas">Maaş Yönetimi</button></li>
</ul>
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="genel">
<form method="POST" enctype="multipart/form-data">
<input type="hidden" name="csrf_token" value="<?php echo csrfTokenOlustur(); ?>">
<input type="hidden" name="islem" value="profil_guncelle">
<div class="row mb-3">
<div class="col-md-4"><label class="form-label small">Kullanıcı Adı</label><input type="text" class="form-control" value="<?php echo htmlspecialchars($k['kullanici_adi']); ?>" disabled></div>
<div class="col-md-4"><label class="form-label small">Yeni Şifre</label><input type="text" name="yeni_sifre" class="form-control"></div>
<div class="col-md-4">
<label class="form-label small">Rol</label>
<select name="rol" class="form-select" required>
<?php
$roller = ['calisan'=>'Çalışan', 'stajyer'=>'Stajyer', 'vardiya_amiri'=>'Vardiya Amiri', 'yonetici'=>'Yönetici', 'mudur'=>'Müdür', 'muhasebe'=>'Muhasebe', 'insan_kaynaklari'=>'İnsan Kaynakları', 'root'=>'Sistem Yöneticisi'];
foreach($roller as $val => $text):
?>
<option value="<?php echo $val; ?>" <?php echo $k['rol'] == $val ? 'selected' : ''; ?>><?php echo $text; ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<h6 class="text-primary mt-4">Kişisel Bilgiler</h6>
<div class="row mb-3">
<div class="col-md-4"><label class="form-label small">Ad</label><input type="text" name="ad" class="form-control" value="<?php echo htmlspecialchars($k['ad']); ?>" required></div>
<div class="col-md-4"><label class="form-label small">Soyad</label><input type="text" name="soyad" class="form-control" value="<?php echo htmlspecialchars($k['soyad']); ?>" required></div>
<div class="col-md-4"><label class="form-label small">TC No</label><input type="text" name="tc_no" class="form-control" value="<?php echo htmlspecialchars($k['tc_no']); ?>" required></div>
</div>
<div class="row mb-3">
<div class="col-md-3"><label class="form-label small">Doğum Tarihi</label><input type="date" name="dogum_tarihi" class="form-control" value="<?php echo $k['dogum_tarihi']; ?>" required></div>
<div class="col-md-3">
<label class="form-label small">Cinsiyet</label>
<select name="cinsiyet" id="cinsiyetSelect" class="form-select" onchange="toggleSutIzni()">
<option value="Erkek" <?php echo $k['cinsiyet'] == 'Erkek' ? 'selected' : ''; ?>>Erkek</option>
<option value="Kadın" <?php echo $k['cinsiyet'] == 'Kadın' ? 'selected' : ''; ?>>Kadın</option>
</select>
</div>
<div class="col-md-3" id="sutIzniDiv" style="display: none;">
<label class="form-label small text-warning fw-bold">Süt İzni Bitiş</label>
<input type="date" name="sut_izni_bitis" class="form-control" value="<?php echo $k['sut_izni_bitis']; ?>">
</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>
<?php foreach(['A+','A-','B+','B-','AB+','AB-','0+','0-'] as $grup): ?>
<option value="<?php echo $grup; ?>" <?php echo $k['kan_grubu'] == $grup ? 'selected' : ''; ?>><?php echo $grup; ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="row mb-3">
<div class="col-md-3"><label class="form-label small">Telefon</label><input type="text" name="telefon" class="form-control" value="<?php echo htmlspecialchars($k['telefon']); ?>"></div>
<div class="col-md-3">
<label class="form-label small fw-bold text-primary">İlk İşe Giriş Tarihi</label>
<input type="date" class="form-control fw-bold border-primary" value="<?php echo $ilk_ise_giris_tarihi; ?>" disabled>
<div class="form-text" style="font-size:0.7rem;">Sisteme ilk kayıt tarihi (Otomatik hesaplanır)</div>
</div>
<div class="col-md-3"><label class="form-label small text-danger">İşten Çıkış</label><input type="date" class="form-control" value="<?php echo $k['isten_cikis_tarihi']; ?>" disabled></div>
<div class="col-md-3">
<label class="form-label small text-success fw-bold">Mevcut Net Maaş</label>
<div class="input-group">
<input type="text" class="form-control fw-bold" value="<?php echo number_format($k['aylik_net_maas'], 2); ?>" disabled>
<span class="input-group-text small">₺</span>
</div>
<div class="form-text" style="font-size:0.7rem;">Değişim için "Maaş Yönetimi"ne gidiniz.</div>
</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="Bekar" <?php echo $k['medeni_durum'] == 'Bekar' ? 'selected' : ''; ?>>Bekar</option>
<option value="Evli" <?php echo $k['medeni_durum'] == 'Evli' ? 'selected' : ''; ?>>Evli</option>
<option value="Dul" <?php echo $k['medeni_durum'] == 'Dul' ? 'selected' : ''; ?>>Dul</option>
<option value="Boşanmış" <?php echo $k['medeni_durum'] == 'Boşanmış' ? 'selected' : ''; ?>>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" value="<?php echo $k['cocuk_sayisi']; ?>"></div>
<div class="col-md-4"><label class="form-label small">Email</label><input type="email" name="email" class="form-control" value="<?php echo htmlspecialchars($k['email']); ?>"></div>
</div>
<div class="mb-3"><label class="form-label small">Adres</label><input type="text" name="adres" class="form-control" value="<?php echo htmlspecialchars($k['adres']); ?>"></div>
<div class="row mb-3">
<div class="col-md-8"><label class="form-label small">Fotoğraf</label><input type="file" name="fotograf" class="form-control"></div>
<?php if(!empty($k['fotograf_yolu'])): ?>
<div class="col-md-4 text-center"><img src="../<?php echo $k['fotograf_yolu']; ?>" style="max-height:80px;" class="rounded"></div>
<?php endif; ?>
</div>
<div class="d-grid mt-4"><button type="submit" class="btn btn-primary">Bilgileri Güncelle</button></div>
</form>
</div>
<div class="tab-pane fade" id="donemler">
<div class="row">
<div class="col-md-4 border-end">
<?php if($k['durum'] == 0): ?>
<div class="card border-success mb-3">
<div class="card-header bg-success text-white fw-bold">Personeli Tekrar İşe Al</div>
<div class="card-body">
<form method="POST">
<input type="hidden" name="csrf_token" value="<?php echo csrfTokenOlustur(); ?>">
<input type="hidden" name="islem" value="donem_ekle">
<div class="mb-3">
<label>Yeni İşe Giriş Tarihi</label>
<input type="date" name="yeni_giris_tarihi" class="form-control" value="<?php echo date('Y-m-d'); ?>" required>
</div>
<button type="submit" class="btn btn-success w-100">Dönemi Başlat (Aktif Yap)</button>
</form>
</div>
</div>
<?php else: ?>
<div class="alert alert-info">Personel şu an aktif çalışıyor. Yeni dönem başlatmak için önce mevcut dönemi sonlandırın.</div>
<?php endif; ?>
</div>
<div class="col-md-8">
<div class="d-flex justify-content-between align-items-center mb-2">
<h6>Çalışma Geçmişi</h6>
</div>
<table class="table table-bordered table-hover">
<thead class="table-light">
<tr>
<th>Giriş</th>
<th>Çıkış</th>
<th>Süre</th>
<th>Durum</th>
<th>İşlem</th>
</tr>
</thead>
<tbody>
<?php foreach($donemler as $d):
$giris = new DateTime($d['ise_giris']);
$cikis = $d['isten_cikis'] ? new DateTime($d['isten_cikis']) : new DateTime();
$diff = $giris->diff($cikis);
$sure = $diff->y . " Yıl, " . $diff->m . " Ay";
?>
<tr class="<?php echo $d['aktif_donem']?'table-success':''; ?>">
<td><?php echo date('d.m.Y', strtotime($d['ise_giris'])); ?></td>
<td><?php echo $d['isten_cikis'] ? date('d.m.Y', strtotime($d['isten_cikis'])) : '-'; ?></td>
<td><?php echo $sure; ?></td>
<td><?php echo $d['aktif_donem'] ? '<span class="badge bg-success">Aktif</span>' : '<span class="badge bg-secondary">Kapandı</span>'; ?></td>
<td>
<button type="button" class="btn btn-sm btn-outline-primary"
onclick="donemDuzenle(<?php echo $d['id']; ?>, '<?php echo $d['ise_giris']; ?>', '<?php echo $d['isten_cikis'] ? $d['isten_cikis'] : ''; ?>', '<?php echo htmlspecialchars($d['ayrilma_nedeni'] ?? '', ENT_QUOTES); ?>', <?php echo $d['aktif_donem']; ?>)">
<i class="fas fa-edit"></i>
</button>
<?php if($d['aktif_donem']): ?>
<button type="button" class="btn btn-sm btn-danger ms-1" data-bs-toggle="modal" data-bs-target="#cikisModal<?php echo $d['id']; ?>">Çıkış</button>
<div class="modal fade" id="cikisModal<?php echo $d['id']; ?>" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<form method="POST">
<div class="modal-header bg-danger text-white"><h5 class="modal-title">İşten Çıkış İşlemi</h5></div>
<div class="modal-body">
<input type="hidden" name="csrf_token" value="<?php echo csrfTokenOlustur(); ?>">
<input type="hidden" name="islem" value="donem_bitir">
<input type="hidden" name="donem_id" value="<?php echo $d['id']; ?>">
<div class="mb-3">
<label>Çıkış Tarihi</label>
<input type="date" name="cikis_tarihi" class="form-control" value="<?php echo date('Y-m-d'); ?>" required>
</div>
<div class="mb-3">
<label>Ayrılma Nedeni</label>
<input type="text" name="ayrilma_nedeni" class="form-control" placeholder="İstifa, Çıkarılma vb.">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">İptal</button>
<button type="submit" class="btn btn-danger">Çıkışı Onayla</button>
</div>
</form>
</div>
</div>
</div>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<div class="tab-pane fade" id="maas">
<div class="row">
<div class="col-md-4 border-end">
<h6 class="text-success"><i class="fas fa-plus-circle me-2"></i> Yeni Maaş / Zam Ekle</h6>
<form method="POST" class="mt-3">
<input type="hidden" name="csrf_token" value="<?php echo csrfTokenOlustur(); ?>">
<input type="hidden" name="islem" value="maas_ekle">
<div class="mb-3">
<label class="form-label small fw-bold">Yeni Net Maaş (TL)</label>
<input type="number" step="0.01" min="0" name="yeni_maas" class="form-control form-control-lg fw-bold border-success" placeholder="Örn: 40000" required>
<div class="form-text">0 TL ve üzeri giriş yapılabilir.</div>
</div>
<div class="mb-3">
<label class="form-label small fw-bold">Geçerlilik Tarihi</label>
<input type="date" name="gecerlilik_baslangic" class="form-control" value="<?php echo date('Y-m-d'); ?>" required>
</div>
<div class="mb-3">
<label class="form-label small">Açıklama</label>
<input type="text" name="aciklama" class="form-control" placeholder="Örn: Yıllık Zam veya Başlangıç Maaşı">
</div>
<div class="d-grid"><button type="submit" class="btn btn-success">Maaşı Ekle</button></div>
</form>
</div>
<div class="col-md-8">
<h6 class="text-secondary"><i class="fas fa-history me-2"></i> Maaş Geçmişi (Başlangıç ve Zamlar)</h6>
<div class="table-responsive mt-3">
<table class="table table-sm table-hover table-bordered align-middle">
<thead class="table-light"><tr><th>Maaş</th><th>Geçerlilik Başlangıcı</th><th>Açıklama</th><th class="text-center">İşlem</th></tr></thead>
<tbody>
<?php foreach($maaslar as $m): ?>
<tr>
<td class="fw-bold"><?php echo number_format($m['maas_miktari'], 2); ?> ₺</td>
<td><?php echo date('d.m.Y', strtotime($m['gecerlilik_baslangic'])); ?></td>
<td><?php echo htmlspecialchars($m['aciklama']); ?></td>
<td class="text-center">
<button type="button" class="btn btn-xs btn-outline-primary"
onclick="maasDuzenle(<?php echo $m['id']; ?>, '<?php echo $m['maas_miktari']; ?>', '<?php echo $m['gecerlilik_baslangic']; ?>', '<?php echo htmlspecialchars($m['aciklama'], ENT_QUOTES); ?>')">
<i class="fas fa-edit"></i>
</button>
<a href="?id=<?php echo $id; ?>&maas_sil=<?php echo $m['id']; ?>" class="btn btn-xs btn-outline-danger" onclick="return confirm('Silmek istediğinize emin misiniz?');"><i class="fas fa-trash"></i></a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="maasDuzenleModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<form method="POST">
<input type="hidden" name="csrf_token" value="<?php echo csrfTokenOlustur(); ?>">
<input type="hidden" name="islem" value="maas_guncelle">
<input type="hidden" name="maas_kayit_id" id="editMaasId">
<div class="modal-header bg-primary text-white">
<h5 class="modal-title">Maaş Bilgisini Düzenle</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<div class="mb-3">
<label class="form-label fw-bold">Tutar (TL)</label>
<input type="number" step="0.01" min="0" name="edit_maas" id="editTutar" class="form-control fw-bold" required>
</div>
<div class="mb-3">
<label class="form-label fw-bold">Geçerlilik Başlangıcı</label>
<input type="date" name="edit_tarih" id="editTarih" class="form-control" required>
</div>
<div class="mb-3">
<label class="form-label">Açıklama</label>
<input type="text" name="edit_aciklama" id="editAciklama" class="form-control">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">İptal</button>
<button type="submit" class="btn btn-primary">Değişiklikleri Kaydet</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="donemDuzenleModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<form method="POST">
<input type="hidden" name="csrf_token" value="<?php echo csrfTokenOlustur(); ?>">
<input type="hidden" name="islem" value="donem_guncelle">
<input type="hidden" name="edit_donem_id" id="editDonemId">
<div class="modal-header bg-warning text-dark">
<h5 class="modal-title">Çalışma Dönemi Tarihlerini Düzenle</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<div class="alert alert-warning small">
<i class="fas fa-exclamation-triangle"></i>
Bu alandaki değişiklikler kıdem yılı hesaplamalarını etkiler.
</div>
<div class="mb-3">
<label class="form-label fw-bold">İşe Giriş Tarihi</label>
<input type="date" name="edit_giris_tarihi" id="editDonemGiris" class="form-control" required>
</div>
<div class="mb-3">
<label class="form-label fw-bold">Çıkış Tarihi</label>
<input type="date" name="edit_cikis_tarihi" id="editDonemCikis" class="form-control">
<div class="form-text text-muted" id="aktifDonemUyari" style="display:none;">Aktif dönem olduğu için çıkış tarihi boş bırakılabilir veya düzenlenebilir.</div>
</div>
<div class="mb-3">
<label class="form-label">Ayrılma Nedeni</label>
<input type="text" name="edit_ayrilma_nedeni" id="editDonemNeden" class="form-control">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">İptal</button>
<button type="submit" class="btn btn-warning">Tarihleri Güncelle</button>
</div>
</form>
</div>
</div>
</div>
<script>
function toggleSutIzni() {
var cinsiyet = document.getElementById('cinsiyetSelect').value;
var div = document.getElementById('sutIzniDiv');
if(cinsiyet === 'Kadın') { div.style.display = 'block'; }
else { div.style.display = 'none'; div.querySelector('input').value = ''; }
}
function maasDuzenle(id, tutar, tarih, aciklama) {
document.getElementById('editMaasId').value = id;
document.getElementById('editTutar').value = tutar;
document.getElementById('editTarih').value = tarih;
document.getElementById('editAciklama').value = aciklama;
new bootstrap.Modal(document.getElementById('maasDuzenleModal')).show();
}
function donemDuzenle(id, giris, cikis, neden, aktif) {
document.getElementById('editDonemId').value = id;
document.getElementById('editDonemGiris').value = giris;
document.getElementById('editDonemCikis').value = cikis;
document.getElementById('editDonemNeden').value = neden;
// Eğer aktif dönemse uyarı göster
if(aktif == 1) {
document.getElementById('aktifDonemUyari').style.display = 'block';
} else {
document.getElementById('aktifDonemUyari').style.display = 'none';
}
new bootstrap.Modal(document.getElementById('donemDuzenleModal')).show();
}
document.addEventListener('DOMContentLoaded', toggleSutIzni);
</script>
<?php include '../includes/footer.php'; ?>
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