149 lines
7.7 KiB
PHP
149 lines
7.7 KiB
PHP
<?php
|
|
session_start();
|
|
require_once 'db/config.php';
|
|
|
|
// Simple login check
|
|
if (!isset($_SESSION['user'])) {
|
|
header('Location: login.php');
|
|
exit;
|
|
}
|
|
|
|
$db = db();
|
|
$msg = '';
|
|
$today = date('Y-m-d');
|
|
|
|
// Attendance toggle logic
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$emp_id = $_POST['employee_id'] ?? 0;
|
|
$action = $_POST['action'] ?? '';
|
|
|
|
if ($action === 'check_in') {
|
|
$stmt = $db->prepare("INSERT INTO attendance (employee_id, date, check_in) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE check_in = ?");
|
|
if ($stmt->execute([$emp_id, $today, date('H:i:s'), date('H:i:s')])) {
|
|
$msg = 'تم تسجيل الحضور بنجاح!';
|
|
}
|
|
} elseif ($action === 'check_out') {
|
|
$stmt = $db->prepare("UPDATE attendance SET check_out = ? WHERE employee_id = ? AND date = ?");
|
|
if ($stmt->execute([date('H:i:s'), $emp_id, $today])) {
|
|
$msg = 'تم تسجيل الانصراف بنجاح!';
|
|
}
|
|
}
|
|
}
|
|
|
|
// Fetch all employees and their today's attendance
|
|
$employees = $db->query("SELECT e.*, a.check_in, a.check_out FROM employees e LEFT JOIN attendance a ON e.id = a.employee_id AND a.date = '$today' ORDER BY e.id DESC")->fetchAll();
|
|
$project_name = $_SERVER['PROJECT_NAME'] ?? 'نظام الموارد البشرية';
|
|
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="ar" dir="rtl">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>تسجيل الحضور - <?php echo htmlspecialchars($project_name); ?></title>
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.rtl.min.css">
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
|
<link rel="stylesheet" href="assets/css/custom.css?v=<?php echo time(); ?>">
|
|
</head>
|
|
<body>
|
|
|
|
<nav class="navbar navbar-expand-lg navbar-light">
|
|
<div class="container">
|
|
<a class="navbar-brand fw-bold" href="index.php"><?php echo htmlspecialchars($project_name); ?></a>
|
|
<div class="collapse navbar-collapse" id="navbarNav">
|
|
<ul class="navbar-nav ms-auto">
|
|
<li class="nav-item"><a class="nav-link" href="index.php">لوحة التحكم</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="employees.php">الموظفين</a></li>
|
|
<li class="nav-item"><a class="nav-link active" href="attendance.php">الحضور</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="payroll.php">الرواتب</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<main class="container py-5 fade-in">
|
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
<div>
|
|
<h1 class="h2 fw-bold mb-0">سجل الحضور والغياب</h1>
|
|
<p class="text-muted mb-0">تاريخ اليوم: <?php echo date('Y-m-d'); ?></p>
|
|
</div>
|
|
</div>
|
|
|
|
<?php if ($msg): ?>
|
|
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
|
<?php echo $msg; ?>
|
|
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<div class="card border-0 shadow-sm">
|
|
<div class="table-responsive">
|
|
<table class="table table-hover mb-0 align-middle">
|
|
<thead class="bg-light">
|
|
<tr>
|
|
<th class="ps-4">الموظف</th>
|
|
<th>وقت الحضور</th>
|
|
<th>وقت الانصراف</th>
|
|
<th class="pe-4 text-center">إجراءات</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php if (empty($employees)): ?>
|
|
<tr><td colspan="4" class="text-center py-5 text-muted">لا يوجد موظفين مسجلين حالياً</td></tr>
|
|
<?php else: ?>
|
|
<?php foreach ($employees as $emp): ?>
|
|
<tr>
|
|
<td class="ps-4 fw-bold">
|
|
<div class="d-flex align-items-center">
|
|
<div class="rounded-circle bg-success text-white p-2 me-3 text-center" style="width: 40px; height: 40px; line-height: 24px;">
|
|
<?php echo mb_substr($emp['name'], 0, 1, 'UTF-8'); ?>
|
|
</div>
|
|
<?php echo htmlspecialchars($emp['name']); ?>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<?php if ($emp['check_in']): ?>
|
|
<span class="badge bg-success py-2 px-3"><?php echo date('H:i', strtotime($emp['check_in'])); ?></span>
|
|
<?php else: ?>
|
|
<span class="text-muted small">--:--</span>
|
|
<?php endif; ?>
|
|
</td>
|
|
<td>
|
|
<?php if ($emp['check_out']): ?>
|
|
<span class="badge bg-primary py-2 px-3"><?php echo date('H:i', strtotime($emp['check_out'])); ?></span>
|
|
<?php else: ?>
|
|
<span class="text-muted small">--:--</span>
|
|
<?php endif; ?>
|
|
</td>
|
|
<td class="pe-4 text-center">
|
|
<form action="attendance.php" method="POST" style="display:inline-block;">
|
|
<input type="hidden" name="employee_id" value="<?php echo $emp['id']; ?>">
|
|
<?php if (!$emp['check_in']): ?>
|
|
<button type="submit" name="action" value="check_in" class="btn btn-sm btn-success">
|
|
<i class="fas fa-sign-in-alt"></i> تسجيل حضور
|
|
</button>
|
|
<?php elseif (!$emp['check_out']): ?>
|
|
<button type="submit" name="action" value="check_out" class="btn btn-sm btn-primary">
|
|
<i class="fas fa-sign-out-alt"></i> تسجيل انصراف
|
|
</button>
|
|
<?php else: ?>
|
|
<button type="button" class="btn btn-sm btn-secondary" disabled>
|
|
<i class="fas fa-check-double"></i> تم الانتهاء
|
|
</button>
|
|
<?php endif; ?>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
|
<script src="assets/js/main.js?v=<?php echo time(); ?>"></script>
|
|
</body>
|
|
</html>
|