query("SELECT COUNT(*) FROM v_generate_voucher_manual WHERE $baseCondition");
$totalRecords = $totalQuery->fetchColumn();
// Query data + search
$sql = "SELECT *
FROM v_generate_voucher_manual
WHERE $baseCondition";
$params = [];
if (!empty($searchValue)) {
$sql .= " AND (
nama_server LIKE :search OR
nama_mikrotik LIKE :search OR
create_time LIKE :search OR
voucher LIKE :search OR
jenis LIKE :search OR
active_time LIKE :search OR
expaired_time LIKE :search
)";
$params[':search'] = "%$searchValue%";
}
// Hitung total setelah filter
$filteredSql = str_replace(
"SELECT *",
"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' || $row['jenis'] === 'rad-api-pw') && $row['status'] == 'LUNAS') {
$biaya = $harga * $potongan;
$active = $row['active_time'];
$expired = $row['expaired_time'];
$saldo = $harga - $biaya;
} else {
if (($row['jenis'] != 'api-pw' || $row['jenis'] != 'rad-api-pw') && $row['status'] == NULL) {
$biaya = 0; // Tidak ada biaya jika bukan sv-radius
$active = $row['active_time'];
$expired = $row['expaired_time'];
$saldo = 0;
} else {
$biaya = 0; // Tidak ada biaya jika bukan sv-radius
$active = "";
$expired = "";
$saldo = 0;
}
}
$data[] = [
$row['nama_server'] . '
' . $row['nama_mikrotik'],
$row['voucher'],
number_format((float)$harga, 0, ',', '.'),
number_format((float)$biaya, 0, ',', '.'),
number_format((float)$saldo, 0, ',', '.'),
// number_format($harga), // harga
// number_format($biaya), // biaya
// number_format($saldo), // saldo
$row['jenis'] . '
' . $row['status'],
$row['create_time'],
$active,
$expired,
];
}
// 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()
]);
}