Update Voucher , Tiket , Dashboard
membuat perubahan dan update
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
ini_set('display_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
include __DIR__ . "/../config/connect.php"; // koneksi DB
|
||||
|
||||
try {
|
||||
$potonganPersen = 10; // Potongan 10%
|
||||
$potongan = $potonganPersen / 100; // Konversi ke desimal (0.1)
|
||||
|
||||
// Ambil parameter DataTables
|
||||
$draw = intval($_GET['draw'] ?? 1);
|
||||
$start = intval($_GET['start'] ?? 0);
|
||||
$length = intval($_GET['length'] ?? 10);
|
||||
$searchValue = $_GET['search']['value'] ?? '';
|
||||
|
||||
// Kolom yang bisa diurutkan
|
||||
$columns = ['create_time', 'voucher', 'harga', 'status_cek', 'active_time', 'expaired_time'];
|
||||
$orderColumnIndex = $_GET['order'][0]['column'] ?? 0;
|
||||
$orderColumnDir = $_GET['order'][0]['dir'] ?? 'desc';
|
||||
$orderColumn = $columns[$orderColumnIndex] ?? 'create_time';
|
||||
|
||||
// Kondisi dasar (statis)
|
||||
$baseCondition = "id_agen_voucher IS NULL AND jenis IN ('sv-radius','sv-mikrotik','api-pw')";
|
||||
|
||||
// Hitung total data
|
||||
$totalQuery = $pdo->query("SELECT COUNT(*) FROM ganerate_voucher WHERE $baseCondition");
|
||||
$totalRecords = $totalQuery->fetchColumn();
|
||||
|
||||
// Query data + search
|
||||
$sql = "SELECT create_time, voucher, harga, status_cek, active_time, expaired_time, jenis
|
||||
FROM ganerate_voucher
|
||||
WHERE $baseCondition";
|
||||
$params = [];
|
||||
|
||||
if (!empty($searchValue)) {
|
||||
$sql .= " AND (
|
||||
create_time LIKE :search OR
|
||||
voucher LIKE :search OR
|
||||
status_cek LIKE :search OR
|
||||
active_time LIKE :search OR
|
||||
expaired_time LIKE :search
|
||||
)";
|
||||
$params[':search'] = "%$searchValue%";
|
||||
}
|
||||
|
||||
// Hitung total setelah filter
|
||||
$filteredSql = str_replace(
|
||||
"SELECT create_time, voucher, harga, status_cek, active_time, expaired_time, jenis",
|
||||
"SELECT COUNT(*)",
|
||||
$sql
|
||||
);
|
||||
$stmtFiltered = $pdo->prepare($filteredSql);
|
||||
$stmtFiltered->execute($params);
|
||||
$filteredRecords = $stmtFiltered->fetchColumn();
|
||||
|
||||
// Tambahkan ORDER BY dan LIMIT
|
||||
$sql .= " ORDER BY $orderColumn $orderColumnDir LIMIT :start, :length";
|
||||
$stmt = $pdo->prepare($sql);
|
||||
|
||||
// Binding parameter
|
||||
foreach ($params as $key => $value) {
|
||||
$stmt->bindValue($key, $value);
|
||||
}
|
||||
$stmt->bindValue(':start', $start, PDO::PARAM_INT);
|
||||
$stmt->bindValue(':length', $length, PDO::PARAM_INT);
|
||||
|
||||
$stmt->execute();
|
||||
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
// Hitung biaya & saldo, lalu format angka
|
||||
$data = [];
|
||||
foreach ($rows as $row) {
|
||||
$harga = floatval($row['harga']);
|
||||
if ($row['jenis'] === 'api-pw') {
|
||||
$biaya = $harga * $potongan;
|
||||
} else {
|
||||
$biaya = 0; // Tidak ada biaya jika bukan sv-radius
|
||||
}
|
||||
$saldo = $harga - $biaya;
|
||||
|
||||
$data[] = [
|
||||
$row['create_time'],
|
||||
$row['voucher'],
|
||||
number_format($harga), // harga
|
||||
number_format($biaya), // biaya
|
||||
number_format($saldo), // saldo
|
||||
$row['status_cek'],
|
||||
$row['active_time'],
|
||||
$row['expaired_time'],
|
||||
];
|
||||
}
|
||||
|
||||
// Kirim response JSON ke DataTables
|
||||
$response = [
|
||||
"draw" => $draw,
|
||||
"recordsTotal" => $totalRecords,
|
||||
"recordsFiltered" => $filteredRecords,
|
||||
"data" => $data,
|
||||
];
|
||||
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode($response);
|
||||
} catch (Exception $e) {
|
||||
// Tangani error
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode([
|
||||
"error" => $e->getMessage()
|
||||
]);
|
||||
}
|
||||
Reference in New Issue
Block a user