MINI
C:
/
xampp
/
htdocs
/
cek
/
Upload File:
files >> C:/xampp/htdocs/cek/index.php
<?php session_start(); include 'db.php'; // Cek login if (!isset($_SESSION['user_id'])) { header("Location: login.php"); exit(); } // Get current user info $current_user_id = $_SESSION['user_id']; $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$current_user_id]); $current_user = $stmt->fetch(); // Check if admin $is_admin = ($current_user['role'] ?? '') == 'admin'; // Handle form submission if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (isset($_POST['submit_transaction'])) { $user_id = $is_admin ? $_POST['user_id'] : $current_user_id; $voucher_code = $_POST['voucher_code']; $amount = $_POST['amount']; $type = $_POST['type']; $stmt = $pdo->prepare("INSERT INTO transactions (user_id, voucher_code, amount, type) VALUES (?, ?, ?, ?)"); $stmt->execute([$user_id, $voucher_code, $amount, $type]); $_SESSION['message'] = ['type' => 'success', 'text' => 'Transaksi berhasil ditambahkan!']; header("Location: ".$_SERVER['PHP_SELF']); exit(); } elseif (isset($_POST['update_transaction'])) { $id = $_POST['id']; $voucher_code = $_POST['voucher_code']; $amount = $_POST['amount']; $type = $_POST['type']; $stmt = $pdo->prepare("UPDATE transactions SET voucher_code = ?, amount = ?, type = ? WHERE id = ?"); $stmt->execute([$voucher_code, $amount, $type, $id]); $_SESSION['message'] = ['type' => 'success', 'text' => 'Transaksi berhasil diperbarui!']; header("Location: ".$_SERVER['PHP_SELF']); exit(); } } // Handle delete action if (isset($_GET['delete'])) { $id = $_GET['delete']; $stmt = $pdo->prepare("DELETE FROM transactions WHERE id = ?"); $stmt->execute([$id]); $_SESSION['message'] = ['type' => 'success', 'text' => 'Transaksi berhasil dihapus!']; header("Location: ".$_SERVER['PHP_SELF']); exit(); } // Get filter values $filter_user_id = $is_admin ? ($_GET['user_id'] ?? '') : $current_user_id; $type_filter = $_GET['type'] ?? ''; $date_from = $_GET['date_from'] ?? ''; $date_to = $_GET['date_to'] ?? ''; // Build the query $query = "SELECT t.*, u.username FROM transactions t LEFT JOIN users u ON t.user_id = u.id WHERE 1=1"; $params = []; if (!empty($filter_user_id)) { $query .= " AND t.user_id = ?"; $params[] = $filter_user_id; } if (!empty($type_filter)) { $query .= " AND t.type = ?"; $params[] = $type_filter; } if (!empty($date_from)) { $query .= " AND DATE(t.created_at) >= ?"; $params[] = $date_from; } if (!empty($date_to)) { $query .= " AND DATE(t.created_at) <= ?"; $params[] = $date_to; } $query .= " ORDER BY t.created_at DESC"; // Get transactions $stmt = $pdo->prepare($query); $stmt->execute($params); $transactions = $stmt->fetchAll(); // Calculate totals $total_in = 0; $total_out = 0; foreach ($transactions as $transaction) { if ($transaction['type'] == 'in') { $total_in += $transaction['amount']; } else { $total_out += $transaction['amount']; } } $balance = $total_in - $total_out; // Get all users (for admin only) $users = []; if ($is_admin) { $users = $pdo->query("SELECT * FROM users")->fetchAll(); } // Get transaction to edit (if edit action) $edit_transaction = null; if (isset($_GET['edit'])) { $id = $_GET['edit']; $stmt = $pdo->prepare("SELECT * FROM transactions WHERE id = ?"); $stmt->execute([$id]); $edit_transaction = $stmt->fetch(); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Voucher Saldo - <?= $current_user['username'] ?></title> <script src="https://cdn.tailwindcss.com"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <style> .card-shadow { box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); } .transaction-in { background-color: rgba(52, 211, 153, 0.1); } .transaction-out { background-color: rgba(248, 113, 113, 0.1); } </style> </head> <body class="bg-gray-50"> <!-- Notification message --> <?php if (isset($_SESSION['message'])): ?> <div class="fixed top-4 right-4 z-50"> <div class="bg-<?= $_SESSION['message']['type'] == 'success' ? 'green' : 'red' ?>-500 text-white px-4 py-2 rounded-lg shadow-lg flex items-center"> <span class="mr-2"> <?php if ($_SESSION['message']['type'] == 'success'): ?> <i class="fas fa-check-circle"></i> <?php else: ?> <i class="fas fa-exclamation-circle"></i> <?php endif; ?> </span> <span><?= $_SESSION['message']['text'] ?></span> </div> </div> <?php unset($_SESSION['message']); ?> <?php endif; ?> <!-- Header --> <header class="bg-white shadow"> <div class="container mx-auto px-4 py-4 flex justify-between items-center"> <h1 class="text-xl font-bold"> <i class="fas fa-wallet mr-2 text-purple-600"></i> <?= $is_admin ? 'Admin Dashboard' : 'Voucher Management' ?> </h1> <div class="flex items-center space-x-4"> <div class="text-right"> <p class="font-medium"><?= $current_user['username'] ?></p> <p class="text-sm text-gray-500"><?= ucfirst($current_user['role'] ?? 'user') ?></p> </div> <div class="w-10 h-10 rounded-full bg-purple-100 flex items-center justify-center text-purple-600"> <i class="fas fa-user"></i> </div> <a href="logout.php" class="text-red-600 hover:text-red-800" title="Logout"> <i class="fas fa-sign-out-alt"></i> </a> </div> </div> </header> <div class="container mx-auto px-4 py-8"> <?php if ($is_admin): ?> <!-- Admin Navigation --> <div class="bg-white rounded-lg card-shadow p-4 mb-6"> <div class="flex flex-wrap gap-2"> <a href="?user_id=<?= $current_user_id ?>" class="px-4 py-2 bg-purple-600 text-white rounded-md hover:bg-purple-700"> Transaksi Saya </a> <a href="?" class="px-4 py-2 bg-gray-200 rounded-md hover:bg-gray-300"> Semua Transaksi </a> <?php foreach ($users as $user): ?> <?php if ($user['id'] != $current_user_id): ?> <a href="?user_id=<?= $user['id'] ?>" class="px-4 py-2 bg-gray-200 rounded-md hover:bg-gray-300"> <?= $user['username'] ?> </a> <?php endif; ?> <?php endforeach; ?> <a href="users.php" class="ml-auto px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700"> <i class="fas fa-users mr-1"></i> Kelola User </a> <a href="print_report.php?user_id=<?= $filter_user_id ?>&type=<?= $type_filter ?>&date_from=<?= $date_from ?>&date_to=<?= $date_to ?>" class="ml-2 px-4 py-2 bg-green-600 text-white rounded-md hover:bg-green-700"> <i class="fas fa-print mr-1"></i> Print Report </a> </div> </div> <?php endif; ?> <!-- Summary Cards --> <div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-6"> <div class="bg-green-50 rounded-lg p-4 border border-green-100"> <div class="flex items-center justify-between"> <div> <p class="text-sm text-green-600"> Pemasukan</p> <h3 class="text-2xl font-bold text-green-700"> <?= number_format($total_in, 2) ?></h3> </div> <div class="bg-green-100 p-3 rounded-full"> <i class="fas fa-arrow-down text-green-600"></i> </div> </div> </div> <div class="bg-red-50 rounded-lg p-4 border border-red-100"> <div class="flex items-center justify-between"> <div> <p class="text-sm text-red-600"> Pengeluaran</p> <h3 class="text-2xl font-bold text-red-700"> <?= number_format($total_out, 2) ?></h3> </div> <div class="bg-red-100 p-3 rounded-full"> <i class="fas fa-arrow-up text-red-600"></i> </div> </div> </div> <div class="bg-blue-50 rounded-lg p-4 border border-blue-100"> <div class="flex items-center justify-between"> <div> <p class="text-sm text-blue-600">Saldo Akhir</p> <h3 class="text-2xl font-bold text-blue-700"> <?= number_format($balance, 2) ?></h3> </div> <div class="bg-blue-100 p-3 rounded-full"> <i class="fas fa-wallet text-blue-600"></i> </div> </div> </div> </div> <!-- Transaction Form --> <div class="bg-white rounded-lg card-shadow p-6 mb-8"> <h2 class="text-xl font-semibold mb-4"> <?= isset($_GET['edit']) ? '<i class="fas fa-pen mr-2"></i> Edit Transaksi' : '<i class="fas fa-plus-circle mr-2"></i> Tambah Transaksi' ?> </h2> <form method="POST" class="space-y-4"> <?php if (isset($_GET['edit'])): ?> <input type="hidden" name="id" value="<?= $edit_transaction['id'] ?>"> <input type="hidden" name="update_transaction" value="1"> <?php else: ?> <input type="hidden" name="submit_transaction" value="1"> <?php endif; ?> <?php if ($is_admin): ?> <div> <label for="user_id" class="block text-sm font-medium text-gray-700">User:</label> <select name="user_id" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-purple-500 focus:border-purple-500" required> <?php foreach ($users as $user): ?> <option value="<?= $user['id'] ?>" <?= (isset($_GET['edit']) && $edit_transaction['user_id'] == $user['id']) || (!isset($_GET['edit']) && $filter_user_id == $user['id']) ? 'selected' : '' ?>> <?= $user['username'] ?> </option> <?php endforeach; ?> </select> </div> <?php endif; ?> <div class="grid grid-cols-1 md:grid-cols-2 gap-4"> <div> <label for="voucher_code" class="block text-sm font-medium text-gray-700">Kode Voucher:</label> <input type="text" name="voucher_code" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-purple-500 focus:border-purple-500" value="<?= isset($_GET['edit']) ? $edit_transaction['voucher_code'] : '' ?>" required> </div> <div> <label for="amount" class="block text-sm font-medium text-gray-700">Jumlah :</label> <input type="number" name="amount" step="0.01" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-purple-500 focus:border-purple-500" value="<?= isset($_GET['edit']) ? $edit_transaction['amount'] : '' ?>" required> </div> </div> <div class="grid grid-cols-1 md:grid-cols-2 gap-4"> <div> <label for="type" class="block text-sm font-medium text-gray-700">Tipe:</label> <select name="type" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-purple-500 focus:border-purple-500" required> <option value="in" <?= (isset($_GET['edit']) && $edit_transaction['type'] == 'in') ? 'selected' : '' ?>>Masuk</option> <option value="out" <?= (isset($_GET['edit']) && $edit_transaction['type'] == 'out') ? 'selected' : '' ?>>Keluar</option> </select> </div> </div> <div class="flex justify-end space-x-4"> <?php if (isset($_GET['edit'])): ?> <a href="?" class="bg-gray-200 hover:bg-gray-300 text-gray-800 font-medium py-2 px-4 rounded-md transition duration-300"> <i class="fas fa-times mr-2"></i>Batal </a> <?php endif; ?> <button type="submit" class="bg-purple-600 hover:bg-purple-700 text-white font-medium py-2 px-4 rounded-md transition duration-300"> <i class="fas fa-save mr-2"></i>Simpan </button> </div> </form> </div> <!-- Transaction List --> <h2 class="text-xl font-bold mb-4"> <i class="fas fa-list-alt mr-2"></i> <?= $is_admin && $filter_user_id ? 'Transaksi User: '.($users[array_search($filter_user_id, array_column($users, 'id'))]['username'] ?? '') : 'Daftar Transaksi' ?> </h2> <!-- Filter Form --> <div class="bg-white rounded-lg card-shadow p-6 mb-4"> <form method="GET" class="space-y-4"> <div class="grid grid-cols-1 md:grid-cols-4 gap-4"> <?php if ($is_admin && !$filter_user_id): ?> <div> <label for="user_id" class="block text-sm font-medium text-gray-700">Filter User:</label> <select name="user_id" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-purple-500 focus:border-purple-500"> <option value="">All Users</option> <?php foreach ($users as $user): ?> <option value="<?= $user['id'] ?>" <?= $filter_user_id == $user['id'] ? 'selected' : '' ?>> <?= $user['username'] ?> </option> <?php endforeach; ?> </select> </div> <?php else: ?> <input type="hidden" name="user_id" value="<?= $filter_user_id ?>"> <?php endif; ?> <div> <label for="type" class="block text-sm font-medium text-gray-700">Filter Tipe:</label> <select name="type" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-purple-500 focus:border-purple-500"> <option value="">All Types</option> <option value="in" <?= $type_filter == 'in' ? 'selected' : '' ?>>Masuk</option> <option value="out" <?= $type_filter == 'out' ? 'selected' : '' ?>>Keluar</option> </select> </div> <div> <label for="date_from" class="block text-sm font-medium text-gray-700">Dari Tanggal:</label> <input type="date" name="date_from" value="<?= $date_from ?>" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-purple-500 focus:border-purple-500"> </div> <div> <label for="date_to" class="block text-sm font-medium text-gray-700">Sampai Tanggal:</label> <input type="date" name="date_to" value="<?= $date_to ?>" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-purple-500 focus:border-purple-500"> </div> </div> <div class="grid grid-cols-2 gap-4"> <button type="submit" class="bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-4 rounded-md transition duration-300"> <i class="fas fa-filter mr-2"></i>Filter </button> <a href="?" class="bg-gray-200 hover:bg-gray-300 text-gray-800 font-medium py-2 px-4 rounded-md transition duration-300 text-center"> <i class="fas fa-times mr-2"></i>Reset Filter </a> </div> </form> </div> <div class="bg-white rounded-lg card-shadow overflow-hidden"> <div class="overflow-x-auto"> <table class="min-w-full divide-y divide-gray-200"> <thead class="bg-gray-50"> <tr> <?php if ($is_admin && !$filter_user_id): ?> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">User</th> <?php endif; ?> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Tanggal</th> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Kode Voucher</th> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Jumlah</th> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Tipe</th> <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Aksi</th> </tr> </thead> <tbody class="bg-white divide-y divide-gray-200"> <?php if (empty($transactions)): ?> <tr> <td colspan="<?= $is_admin && !$filter_user_id ? 6 : 5 ?>" class="px-6 py-4 text-center text-sm text-gray-500">Tidak ada data transaksi</td> </tr> <?php else: ?> <?php foreach ($transactions as $transaction): ?> <tr class="<?= $transaction['type'] == 'in' ? 'transaction-in' : 'transaction-out' ?>"> <?php if ($is_admin && !$filter_user_id): ?> <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500"> <?= $transaction['username'] ?> </td> <?php endif; ?> <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500"><?= date('d M Y H:i', strtotime($transaction['created_at'])) ?></td> <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500"><?= $transaction['voucher_code'] ?></td> <td class="px-6 py-4 whitespace-nowrap text-sm font-medium <?= $transaction['type'] == 'in' ? 'text-green-600' : 'text-red-600' ?>"> <?= number_format($transaction['amount'], 2) ?> </td> <td class="px-6 py-4 whitespace-nowrap"> <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full <?= $transaction['type'] == 'in' ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800' ?>"> <?= $transaction['type'] == 'in' ? 'Masuk' : 'Keluar' ?> </span> </td> <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500"> <div class="flex space-x-2"> <a href="?edit=<?= $transaction['id'] ?><?= $filter_user_id ? '&user_id='.$filter_user_id : '' ?>" class="text-blue-600 hover:text-blue-800" title="Edit"> <i class="fas fa-edit"></i> </a> <a href="?delete=<?= $transaction['id'] ?><?= $filter_user_id ? '&user_id='.$filter_user_id : '' ?>" class="text-red-600 hover:text-red-800" title="Hapus" onclick="return confirm('Apakah Anda yakin ingin menghapus transaksi ini?')"> <i class="fas fa-trash-alt"></i> </a> </div> </td> </tr> <?php endforeach; ?> <?php endif; ?> </tbody> </table> </div> </div> </div> <script> // Auto hide notification after 3 seconds setTimeout(() => { const notification = document.querySelector('.fixed'); if (notification) { notification.style.display = 'none'; } }, 3000); </script> </body> </html>
Copyright ©2021 || Defacer Indonesia