PYBS (Personel Yönetim Bilgi Sistemi) / modules/tum-mesailer.php
tum-mesailer.php 154 satır • 7.11 KB
<?php
// modules/tum-mesailer.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';

yetkiKontrol(['root', 'yonetici', 'mudur', 'vardiya_amiri', 'muhasebe', 'insan_kaynaklari']);

include '../includes/header.php';
include '../includes/menu.php';

$mesaj = '';
$kullanici_id = $_SESSION['kullanici_id'];
$rol = $_SESSION['rol'];

// --- İŞLEM ---
if (isset($_GET['islem']) && isset($_GET['id'])) {
    $id = (int)$_GET['id'];
    $aksiyon = $_GET['islem'];
    
    $sql_yetki = "SELECT m.*, k.ad, k.soyad, m.calisan_id FROM mesai_hareketleri m JOIN kullanicilar k ON m.calisan_id = k.id WHERE m.id = ?";
    $yetki_params = [$id];
    
    if(!in_array($rol, ['root', 'muhasebe', 'insan_kaynaklari'])) {
        // GÜVENLİK GÜNCELLEMESİ: $kullanici_id parametre olarak eklendi
        $sql_yetki .= " AND m.hedef_yonetici_id = ?"; 
        $yetki_params[] = $kullanici_id;
    }
    
    $stmt = $pdo->prepare($sql_yetki);
    $stmt->execute($yetki_params);
    $kayit = $stmt->fetch();

    if ($kayit) {
        $yeni_durum = '';
        if($aksiyon == 'onayla') $yeni_durum = 'onaylandi';
        elseif($aksiyon == 'reddet') $yeni_durum = 'reddedildi';
        elseif($aksiyon == 'beklemede') $yeni_durum = 'beklemede';

        if ($kayit['durum'] != 'beklemede' && !in_array($rol, ['root', 'muhasebe', 'insan_kaynaklari'])) {
             $mesaj = "<div class='alert alert-warning'>Yetkiniz yok.</div>";
        } else {
            $pdo->prepare("UPDATE mesai_hareketleri SET durum = ?, onaylayan_id = ?, onaylanma_tarihi = NOW() WHERE id = ?")->execute([$yeni_durum, $kullanici_id, $id]);
            
            // LOG
            logKaydet($pdo, $kullanici_id, 'onay', "Mesai $yeni_durum (ID: $id)", 'mesai_hareketleri', $id);
            bildirimGonder($pdo, $kayit['calisan_id'], "Mesai Durumu", "Mesai talebiniz $yeni_durum.", "../modules/mesai-giris.php");

            $mesaj = "<div class='alert alert-success'>Mesai durumu güncellendi: <strong>".strtoupper($yeni_durum)."</strong></div>";
        }
    }
}

// Helper Fonksiyon (Burada inline tanımlı kalabilir)
if (!function_exists('haftalikAnalizGetir')) {
    function haftalikAnalizGetir($pdo, $calisan_id, $tarih) {
        $date = new DateTime($tarih);
        $gun = $date->format('N');
        $pzt = clone $date; $pzt->modify('-' . ($gun - 1) . ' days');
        $paz = clone $pzt; $paz->modify('+6 days');
        $sql = "SELECT SUM(toplam_saat) FROM mesai_hareketleri WHERE calisan_id = ? AND durum = 'onaylandi' AND tarih BETWEEN ? AND ?";
        $stmt = $pdo->prepare($sql);
        $stmt->execute([$calisan_id, $pzt->format('Y-m-d'), $paz->format('Y-m-d')]);
        return (float)$stmt->fetchColumn();
    }
}

// LISTELEME
$sql_list = "SELECT m.*, k.ad as c_ad, k.soyad as c_soyad, k.rol as c_rol, o.ad as o_ad, o.soyad as o_soyad
        FROM mesai_hareketleri m 
        JOIN kullanicilar k ON m.calisan_id = k.id 
        LEFT JOIN kullanicilar o ON m.onaylayan_id = o.id ";

$list_params = [];

if (!in_array($rol, ['root', 'muhasebe', 'insan_kaynaklari'])) {
    // GÜVENLİK GÜNCELLEMESİ: $kullanici_id parametre olarak eklendi
    $sql_list .= " WHERE m.hedef_yonetici_id = ?";
    $list_params[] = $kullanici_id;
}
$sql_list .= " ORDER BY m.tarih DESC";

$stmt_list = $pdo->prepare($sql_list);
$stmt_list->execute($list_params);
$mesailer = $stmt_list->fetchAll();
?>

<div class="container-fluid">
    <h3 class="mb-4"><i class="fas fa-business-time text-primary"></i> Mesai Yönetim Paneli</h3>
    <?php echo $mesaj; ?>
    
    <div class="card border-0 shadow-sm">
        <div class="table-responsive">
            <table class="table table-hover align-middle mb-0">
                <thead class="table-dark">
                    <tr>
                        <th>Personel</th>
                        <th>Tarih / Süre</th>
                        <th>Haftalık Durum</th>
                        <th>Durum / Onaylayan</th>
                        <th class="text-end">İşlem</th>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach ($mesailer as $m): 
                        $haftalik = haftalikAnalizGetir($pdo, $m['calisan_id'], $m['tarih']);
                        $renk = ($haftalik >= 45) ? 'text-danger fw-bold' : 'text-success';
                    ?>
                    <tr>
                        <td>
                            <strong><?php echo $m['c_ad'].' '.$m['c_soyad']; ?></strong><br>
                            <small class="text-muted"><?php echo strtoupper($m['c_rol']); ?></small>
                        </td>
                        <td>
                            <?php echo tarihTurkce($m['tarih']); ?><br>
                            <span class="badge bg-primary"><?php echo $m['toplam_saat']; ?> Saat</span>
                        </td>
                        <td>
                            <span class="<?php echo $renk; ?>"><?php echo $haftalik; ?> / 45 Saat</span>
                        </td>
                        <td>
                            <?php if($m['durum']=='onaylandi'): ?>
                                <span class="text-success fw-bold"><i class="fas fa-check"></i> Onaylı</span>
                                <?php if($m['o_ad']): ?>
                                    <br><small class="text-muted"><?php echo $m['o_ad'].' '.$m['o_soyad']; ?></small>
                                <?php endif; ?>
                            <?php elseif($m['durum']=='reddedildi'): ?>
                                <span class="badge bg-danger">Red</span>
                            <?php else: ?>
                                <span class="badge bg-warning text-dark">Bekliyor</span>
                            <?php endif; ?>
                        </td>
                        <td class="text-end pe-3">
                            <div class="btn-group">
                                <?php if($m['durum'] == 'beklemede'): ?>
                                    <a href="?islem=onayla&id=<?php echo $m['id']; ?>" class="btn btn-sm btn-success"><i class="fas fa-check"></i></a>
                                    <a href="?islem=reddet&id=<?php echo $m['id']; ?>" class="btn btn-sm btn-danger"><i class="fas fa-times"></i></a>
                                <?php elseif(in_array($rol, ['root', 'muhasebe', 'insan_kaynaklari'])): ?>
                                    <button type="button" class="btn btn-sm btn-secondary dropdown-toggle" data-bs-toggle="dropdown"><i class="fas fa-cog"></i></button>
                                    <ul class="dropdown-menu">
                                        <li><a class="dropdown-item" href="?islem=beklemede&id=<?php echo $m['id']; ?>">Beklemeye Al</a></li>
                                        <li><a class="dropdown-item text-danger" href="?islem=reddet&id=<?php echo $m['id']; ?>">İptal Et</a></li>
                                    </ul>
                                <?php endif; ?>
                            </div>
                        </td>
                    </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
        </div>
    </div>
</div>
<?php include '../includes/footer.php'; ?>