summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-09-06 21:09:05 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-09-06 21:09:05 +0700
commit800b527bc0661255d1f9ec07d4bb365b23dab610 (patch)
tree335f8b343808c57957da4bf600b589cfbde1c866
parent306122977320b7ec7c8516a3cda1978ed2de7060 (diff)
<Miqdad> Fix detail transaction and no open new tab
-rw-r--r--src/lib/transaction/components/Transaction.jsx25
-rw-r--r--src/lib/transaction/components/Transactions.jsx88
2 files changed, 27 insertions, 86 deletions
diff --git a/src/lib/transaction/components/Transaction.jsx b/src/lib/transaction/components/Transaction.jsx
index 30ba74d2..cbe725c7 100644
--- a/src/lib/transaction/components/Transaction.jsx
+++ b/src/lib/transaction/components/Transaction.jsx
@@ -221,7 +221,7 @@ const Transaction = ({ id }) => {
const token = auth?.token;
const partnerId = auth?.partnerId;
- // 1) Minta Odoo ensure (hanya generate jika kosong / expire / cancel)
+ // 1) Minta Odoo ensure payment link
const { data: resp } = await axios.get(
`${base}/api/v1/partner/${partnerId}/sale_order/${transaction.data.id}`,
{
@@ -230,37 +230,40 @@ const Transaction = ({ id }) => {
}
);
- const payload = resp?.data || resp;
+ console.log('API Response:', resp); // Debug
- // 2) Ambil URL dari berbagai kemungkinan field (snake_case dan camelCase)
+ // 2) Akses semua kemungkinan path
let url =
- payload?.payment_summary?.redirect_url ||
- payload?.paymentSummary?.redirectUrl ||
- payload?.paymentLinkMidtrans ||
- payload?.payment_link_midtrans ||
+ resp?.result?.payment_summary?.redirect_url ||
+ resp?.data?.result?.payment_summary?.redirect_url ||
+ resp?.payment_summary?.redirect_url ||
+ resp?.paymentSummary?.redirectUrl ||
'';
+ console.log('Extracted URL:', url); // Debug
+
if (url) {
window.location.href = url;
return;
}
- // 3) Fallback: refetch detail dari hook lalu cek lagi
+ // 3) Fallback
await transaction.refetch();
+ console.log('Transaction data:', transaction.data); // Debug
url =
+ transaction?.data?.result?.payment_summary?.redirect_url ||
transaction?.data?.paymentSummary?.redirectUrl ||
transaction?.data?.payment_summary?.redirect_url ||
- transaction?.data?.paymentLinkMidtrans ||
- transaction?.data?.payment_link_midtrans ||
'';
+ console.log('Fallback URL:', url); // Debug
+
if (url) {
window.location.href = url;
return;
}
- // 4) Masih kosong → error
throw new Error('Link pembayaran belum tersedia.');
} catch (e) {
toast.error(
diff --git a/src/lib/transaction/components/Transactions.jsx b/src/lib/transaction/components/Transactions.jsx
index cdac4036..2e3eaaa2 100644
--- a/src/lib/transaction/components/Transactions.jsx
+++ b/src/lib/transaction/components/Transactions.jsx
@@ -388,7 +388,6 @@ const Transactions = ({ context = '' }) => {
const handleContinuePayment = async (saleOrder) => {
try {
setContLoadingId(saleOrder.id);
- console.log('🚀 START PAYMENT PROCESS');
const base = (process.env.NEXT_PUBLIC_ODOO_API_HOST || '').replace(
/\/$/,
@@ -397,88 +396,33 @@ const Transactions = ({ context = '' }) => {
const token = auth?.token;
const partnerId = auth?.partnerId;
- // 1. TRIGGER GENERATE + GET URL SEKALIGUS
- console.log('🔹 Step 1: Trigger generate + get URL');
+ // 1. TRIGGER GENERATE + GET URL
const { data: response } = await axios.get(
`${base}/api/v1/partner/${partnerId}/sale_order/${saleOrder.id}`,
{
- params: {
- ensure_payment_link: 1,
- ts: Date.now(),
- },
- headers: {
- Token: token,
- 'Cache-Control': 'no-cache',
- },
- timeout: 10000, // 10 second timeout
+ params: { ensure_payment_link: 1, ts: Date.now() },
+ headers: { Token: token, 'Cache-Control': 'no-cache' },
+ timeout: 10000,
}
);
- console.log('📦 Full API Response:', response);
-
- // 2. EKSTRAK URL DENGAN CARA YANG BENAR
- let paymentUrl = '';
-
- // Cara 1: Langsung dari response.result
- if (response?.result?.payment_summary?.redirect_url) {
- paymentUrl = response.result.payment_summary.redirect_url;
- console.log('✅ URL found in response.result');
- }
- // Cara 2: Mungkin nested di data.result
- else if (response?.data?.result?.payment_summary?.redirect_url) {
- paymentUrl = response.data.result.payment_summary.redirect_url;
- console.log('✅ URL found in response.data.result');
- }
- // Cara 3: Coba variasi lain
- else {
- console.log(
- '❌ URL not found in usual places, checking all possibilities...'
- );
-
- // Debug: Log semua keys yang ada
- console.log('🔍 Response keys:', Object.keys(response));
- if (response.result)
- console.log('🔍 Result keys:', Object.keys(response.result));
-
- // Manual search untuk redirect_url
- const searchForUrl = (obj) => {
- for (const key in obj) {
- if (
- key.toLowerCase().includes('redirect') &&
- typeof obj[key] === 'string' &&
- obj[key].includes('http')
- ) {
- return obj[key];
- }
- if (typeof obj[key] === 'object' && obj[key] !== null) {
- const found = searchForUrl(obj[key]);
- if (found) return found;
- }
- }
- return null;
- };
-
- paymentUrl = searchForUrl(response);
- console.log('🔍 Manual search result:', paymentUrl);
- }
+ // 2. EKSTRAK URL
+ let paymentUrl =
+ response?.result?.payment_summary?.redirect_url ||
+ response?.data?.result?.payment_summary?.redirect_url;
// 3. JIKA DAPAT URL, BUKA
if (paymentUrl) {
- console.log('🎯 Opening URL:', paymentUrl);
- window.open(paymentUrl, '_blank', 'noopener,noreferrer');
+ window.location.href = paymentUrl;
toast.success('Membuka halaman pembayaran…');
return;
}
- // 4. FALLBACK: COBA LAGI TANPA ensure_payment_link
- console.log('🔹 Step 2: Fallback - try without ensure');
+ // 4. FALLBACK: COBA TANPA ensure_payment_link
try {
const { data: fallbackResponse } = await axios.get(
`${base}/api/v1/partner/${partnerId}/sale_order/${saleOrder.id}`,
- {
- headers: { Token: token },
- timeout: 5000,
- }
+ { headers: { Token: token }, timeout: 5000 }
);
const fallbackUrl =
@@ -486,36 +430,30 @@ const Transactions = ({ context = '' }) => {
fallbackResponse?.data?.result?.payment_summary?.redirect_url;
if (fallbackUrl) {
- console.log('✅ Fallback URL found:', fallbackUrl);
- window.open(fallbackUrl, '_blank', 'noopener,noreferrer');
+ window.location.href = fallbackUrl;
toast.success('Membuka halaman pembayaran…');
return;
}
} catch (fallbackError) {
- console.error('Fallback error:', fallbackError);
+ // Continue to next fallback
}
// 5. ULTIMATE FALLBACK: PAKAI URL DARI DATA LAMA
- console.log('🔹 Step 3: Ultimate fallback - use existing data');
const existingUrl =
saleOrder?.paymentSummary?.redirectUrl ||
saleOrder?.payment_summary?.redirect_url;
if (existingUrl) {
- console.log('✅ Using existing URL:', existingUrl);
window.open(existingUrl, '_blank', 'noopener,noreferrer');
toast.success('Membuka halaman pembayaran…');
} else {
- console.error('❌ No URL found in any method');
toast.error('Link pembayaran tidak ditemukan. Silakan coba lagi.');
}
} catch (error) {
- console.error('💥 Payment error:', error);
toast.error(
error.response?.data?.description || 'Gagal memproses pembayaran'
);
} finally {
- console.log('🏁 END PAYMENT PROCESS');
setContLoadingId(null);
}
};