Files
manjapro_v6/controller/voucher_auto.php
T
YanDrs 0f32cf00ad Update Voucher , Tiket , Dashboard
membuat perubahan dan update
2025-07-15 00:30:19 +07:00

111 lines
3.4 KiB
PHP

<?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()
]);
}