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